Symptôme : un job de camping (« Lac des pins | Anton Rimerov ») pointait sur la RÉSIDENCE du client (428 Rue George, Lasalle = 45.58,-73.73) au lieu du camping. Le pont géocodait l'adresse de compte. - buildJob : détection camping en PRIORITÉ MAX via le registre camping_registry — signal = sujet (label explicite, prioritaire) puis ville/adresse de delivery. Garde-fou : le texte doit contenir « camping » OU un mot-clé de LIEU spécifique (évite les faux positifs de patronyme, ex. « Daniel Dauphinais »). coord_src='camping'. La branche update fait écraser les coords existantes par le camping (comme delivery). 20 jobs ouverts re-coordonnés. - camping_dispatch_backfill.sql : corrige les jobs DÉJÀ dispatchés (que le sync ne re-traite plus car le ticket legacy a quitté le pool ouvert-3301) → 4 Lac des Pins + 2 SandySun. Anton Rimerov/Germaine Thibert → 45.0624,-73.9113 ✓. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
20 lines
1.2 KiB
PL/PgSQL
20 lines
1.2 KiB
PL/PgSQL
-- camping_dispatch_backfill.sql — applique la géoloc FIXE du camping aux Dispatch Jobs DÉJÀ dispatchés.
|
|
-- Le pont (legacy-dispatch-sync) ne re-traite que les tickets encore « ouverts + assign_to=3301 » ; les jobs
|
|
-- déjà assignés/fermés gardent leurs vieilles coords (résidence). Ce backfill corrige tous les jobs issus du
|
|
-- pont dont le SUJET désigne un camping (mots-clés de LIEU sûrs ; pour 'dauphinais', exige aussi « camping »).
|
|
-- Idempotent (ne touche que ceux dont la coord diffère). Match via camping_registry.
|
|
\timing on
|
|
BEGIN;
|
|
WITH applied AS (
|
|
UPDATE "tabDispatch Job" dj SET latitude = c.latitude, longitude = c.longitude, modified = NOW()
|
|
FROM camping_registry c
|
|
WHERE dj.legacy_ticket_id <> '' AND c.active
|
|
AND lower(unaccent(coalesce(dj.subject, ''))) LIKE '%' || c.keyword || '%'
|
|
AND ( c.keyword IN ('lac des pins','lac de pins','sandysun','sandy sun','frontiere','ensoleill')
|
|
OR lower(unaccent(coalesce(dj.subject, ''))) LIKE '%camping%' )
|
|
AND (dj.latitude IS NULL OR abs(coalesce(dj.latitude,0) - c.latitude) > 1e-4 OR abs(coalesce(dj.longitude,0) - c.longitude) > 1e-4)
|
|
RETURNING c.name AS camping
|
|
)
|
|
SELECT camping, count(*) AS jobs FROM applied GROUP BY camping ORDER BY 2 DESC;
|
|
COMMIT;
|