gigafibre-fsm/services/targo-hub
louispaulb 777794cd28 fix(booking): garde anti-clobber F sur les confirmations de RDV + hold exclusif 5 min
Découverte du mapping : la confirmation de RDV (confirmWindow + POST /roster/book/confirm) écrivait assigned_tech
SANS la garde « déjà assigné dans F » que /roster/assign-job applique → une confirmation client (ou staff) pouvait
écraser une assignation faite manuellement dans F. Même classe que le bug double-assignation.

- fConflict(legacyId, techId) : garde PARTAGÉE extraite (ticketAssignState), réutilisée par les 3 chemins d'écriture
  (assign-job refactorisé pour l'utiliser → plus de dérive).
- confirmWindow (chemin CLIENT, pas de force) : si conflit F, N'ÉCRASE PAS — enregistre le créneau choisi
  (booking_status Proposé) et laisse le répartiteur confirmer le bon tech. Message client « nous confirmerons sous peu ».
- POST /roster/book/confirm (chemin STAFF) : 409 conflict sauf force=true → l'OPS réaffiche « déjà assigné dans F à X ».
- hold_minutes défaut 10 → 5 (décision Louis) : réservation exclusive 5 min → retour au pool → indicatif (revalidé
  à la confirmation via la garde ci-dessus).

Déployé (hub redémarré, sain, SSE clients se reconnectent via 187115c/89f7efc).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 14:30:40 -04:00
..
data refactor: reduce token count, DRY code, consolidate docs 2026-04-13 08:39:58 -04:00
docs feat(fsm): platform build — comms UI, F→ERPNext sync/billing, roster, campaigns, network, reports 2026-06-15 06:12:12 -04:00
lib fix(booking): garde anti-clobber F sur les confirmations de RDV + hold exclusif 5 min 2026-07-19 14:30:40 -04:00
preview feat: flow editor, Gemini QR scanner with offline queue, dispatch planning v2 2026-04-22 10:44:17 -04:00
public feat(field-app): refonte accessibilité terrain (gros texte/contraste/cibles + flux guidé) 2026-07-19 10:23:19 -04:00
scripts feat(ops+hub): sender picker, per-user notifs, editable rating emails, planif & tickets UX 2026-06-16 22:41:51 -04:00
templates feat(ops+hub): sender picker, per-user notifs, editable rating emails, planif & tickets UX 2026-06-16 22:41:51 -04:00
test Phase 1 (hygiène) : utils partagés + logique pure testable + observabilité erp + 1ers tests 2026-06-07 10:36:41 -04:00
.env.example feat(hub+ops): user invite flow sends temp password via Mailjet + dev .env.example 2026-05-05 19:50:06 -04:00
docker-compose.yml fix(hub): templates volume mount must be RW for editor saves 2026-05-22 06:49:48 -04:00
package-lock.json feat(campaigns/editor): MJML mode — proper email-focused visual builder 2026-05-21 22:29:42 -04:00
package.json Phase 1 (hygiène) : utils partagés + logique pure testable + observabilité erp + 1ers tests 2026-06-07 10:36:41 -04:00
server.js feat(ops): unified staff identity (label + email aliases + tech link + departed flag) 2026-07-10 12:22:48 -04:00