Campings : registre + géoloc de remplacement FIXE sur tous les lots (1405 corrigés)
Problème : pour un lot de camping, l'adresse du Service Location = souvent la RÉSIDENCE du client, et la rue interne (ex. « 2 rue Canard, Lac des Pins ») n'est pas dans le RQA → géoloc fausse. Solution data-driven : table `camping_registry` (mot-clé ville → nom + adresse principale + GPS fixe), coords relevées dans le legacy delivery. Application : force lat/long du camping sur tous les lots (match ville normalisée), garde address_line (n° de terrain visible), linked_address = le camping, statut validated. Appliqué : Lac des Pins 1242 · Dauphinais 134 · SandySun 28 · Frontière 1 (+ Ensoleillé en registre). Idempotent + ré-applicable. scripts/migration/camping_registry.sql. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
50d877b49f
commit
d6453757d1
54
scripts/migration/camping_registry.sql
Normal file
54
scripts/migration/camping_registry.sql
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
-- camping_registry.sql — registre des CAMPINGS + géoloc de remplacement FIXE sur tous leurs lots.
|
||||||
|
--
|
||||||
|
-- Problème : pour un lot de camping, l'adresse du Service Location est souvent l'adresse de RÉSIDENCE du
|
||||||
|
-- client (ex. « 428 Rue … ») et la rue interne du camping (ex. « 2 rue Canard, Lac des Pins ») n'existe pas
|
||||||
|
-- dans le RQA → géoloc fausse. Solution : une coordonnée FIXE = l'adresse principale du camping (le tech
|
||||||
|
-- navigue jusqu'au camping, puis trouve le terrain sur place). Data-driven (table) → réutilisable + éditable.
|
||||||
|
--
|
||||||
|
-- Idempotent : CREATE IF NOT EXISTS + seed WHERE NOT EXISTS + apply re-jouable. Match par VILLE normalisée.
|
||||||
|
\timing on
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS camping_registry (
|
||||||
|
id serial PRIMARY KEY,
|
||||||
|
keyword text NOT NULL UNIQUE, -- motif (minuscule, sans accent) cherché dans la ville du Service Location
|
||||||
|
name text NOT NULL, -- nom du camping
|
||||||
|
address text, -- adresse principale (référence affichée)
|
||||||
|
latitude double precision NOT NULL,
|
||||||
|
longitude double precision NOT NULL,
|
||||||
|
active boolean DEFAULT true,
|
||||||
|
created_at timestamp DEFAULT now()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Seed (coords = adresse principale, relevées dans le legacy delivery). Plusieurs motifs → même camping/coords.
|
||||||
|
INSERT INTO camping_registry (keyword, name, address, latitude, longitude)
|
||||||
|
SELECT * FROM (VALUES
|
||||||
|
('lac des pins', 'Camping Lac des Pins', '3625 Route 201, Saint-Antoine-Abbé J0S 1N0', 45.062428, -73.911331),
|
||||||
|
('lac de pins', 'Camping Lac des Pins', '3625 Route 201, Saint-Antoine-Abbé J0S 1N0', 45.062428, -73.911331),
|
||||||
|
('dauphinais', 'Camping Le Domaine Dauphinais', '199 Route 219 Sud, Hemmingford J0L 1H0', 45.023808, -73.608696),
|
||||||
|
('sandysun', 'Camping du Lac SandySun', '1935A Chemin Grimshaw, Franklin J0S 1E0', 45.048569, -73.916870),
|
||||||
|
('sandy sun', 'Camping du Lac SandySun', '1935A Chemin Grimshaw, Franklin J0S 1E0', 45.048569, -73.916870),
|
||||||
|
('frontiere', 'Camping Frontière', '474 Chemin Covey Hill, Havelock J0S 2C0', 45.018734, -73.761551),
|
||||||
|
('ensoleill', 'Camping Domaine Ensoleillé', '524 Rang St-Paul, Saint-Rémi J0L 2L0', 45.267612, -73.600517)
|
||||||
|
) v(keyword,name,address,latitude,longitude)
|
||||||
|
WHERE NOT EXISTS (SELECT 1 FROM camping_registry c WHERE c.keyword = v.keyword);
|
||||||
|
|
||||||
|
-- Application : force la géoloc du camping sur tous les lots (match ville normalisée). Conserve address_line
|
||||||
|
-- (le n° de terrain/rue interne reste visible) ; linked_address = le camping ; statut = validated (coord de service OK).
|
||||||
|
WITH applied AS (
|
||||||
|
UPDATE "tabService Location" sl SET
|
||||||
|
latitude = c.latitude,
|
||||||
|
longitude = c.longitude,
|
||||||
|
linked_address = c.name || ' — ' || COALESCE(c.address, ''),
|
||||||
|
aq_address_id = NULL,
|
||||||
|
address_validation_status = 'validated',
|
||||||
|
address_validated_at = NOW(),
|
||||||
|
modified = NOW()
|
||||||
|
FROM camping_registry c
|
||||||
|
WHERE c.active
|
||||||
|
AND lower(unaccent(coalesce(sl.city, ''))) LIKE '%' || c.keyword || '%'
|
||||||
|
RETURNING c.name AS camping
|
||||||
|
)
|
||||||
|
SELECT camping, count(*) AS lots_corriges FROM applied GROUP BY camping ORDER BY 2 DESC;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Loading…
Reference in New Issue
Block a user