gigafibre-fsm/docs/DATA_AND_FLOWS.md
louispaulb 41d9b5f316 feat: flow editor, Gemini QR scanner with offline queue, dispatch planning v2
Major additions accumulated over 9 days — single commit per request.

Flow editor (new):
- Generic visual editor for step trees, usable by project wizard + agent flows
- PROJECT_KINDS / AGENT_KINDS catalogs decouple UI from domain
- Drag-and-drop reorder via vuedraggable with scope isolation per peer group
- Chain-aware depends_on rewrite on reorder (sequential only — DAGs preserved)
- Variable picker with per-applies_to catalog (Customer / Quotation /
  Service Contract / Issue / Subscription), insert + copy-clipboard modes
- trigger_condition helper with domain-specific JSONLogic examples
- Global FlowEditorDialog mounted once in MainLayout, Odoo inline pattern
- Server: targo-hub flow-runtime.js, flow-api.js, flow-templates.js
- ERPNext: Flow Template/Run doctypes, scheduler, 5 seeded system templates
- depends_on chips resolve to step labels instead of opaque "s4" ids

QR/OCR scanner (field app):
- Camera capture → Gemini Vision via targo-hub with 8s timeout
- IndexedDB offline queue retries photos when signal returns
- Watcher merges late-arriving scan results into the live UI

Dispatch:
- Planning mode (draft → publish) with offer pool for unassigned jobs
- Shared presets, recurrence selector, suggested-slots dialog
- PublishScheduleModal, unassign confirmation

Ops app:
- ClientDetailPage composables extraction (useClientData, useDeviceStatus,
  useWifiDiagnostic, useModemDiagnostic)
- Project wizard: shared detail sections, wizard catalog/publish composables
- Address pricing composable + pricing-mock data
- Settings redesign hosting flow templates

Targo-hub:
- Contract acceptance (JWT residential + DocuSeal commercial tracks)
- Referral system
- Modem-bridge diagnostic normalizer
- Device extractors consolidated

Migration scripts:
- Invoice/quote print format setup, Jinja rendering
- Additional import + fix scripts (reversals, dates, customers, payments)

Docs:
- Consolidated: old scattered MDs → HANDOFF, ARCHITECTURE, DATA_AND_FLOWS,
  FLOW_EDITOR_ARCHITECTURE, BILLING_AND_PAYMENTS, CPE_MANAGEMENT,
  APP_DESIGN_GUIDELINES
- Archived legacy wizard PHP for reference
- STATUS snapshots for 2026-04-18/19

Cleanup:
- Removed ~40 generated PDFs/HTMLs (invoice_preview*, rendered_jinja*)
- .gitignore now covers invoice preview output + nested .DS_Store

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 10:44:17 -04:00

4.6 KiB

Gigafibre FSM — Data Structures & Customer Flows

A unified document defining the ERPNext data structure and the "Lead to Live" customer flow architecture.

1. ERPNext Data Schema

All operational data revolves around the Customer, connected closely to their physical service location and the equipment provided.

┌───────────────────────────────────────────────────────────┐
│                        Customer                           │
│  customer_group (Résidentiel/Comm.), legacy_customer_id   │
└──────────┬─────────────────────────┬──────────────────────┘
           │                         │
           ▼                         ▼
┌─────────────────────┐   ┌─────────────────────────┐
│  Service Location   │   │    Sales Invoice         │
│  (delivery address) │   │    Payment Entry         │
│  connection/olt_port│   └─────────────────────────┘
└──────┬──────────────┘
       │
       ├──────────────────────────────────┐
       ▼                                  ▼
┌──────────────────┐            ┌──────────────────────┐
│ Service          │            │ Service Equipment    │
│ Subscription     │            │  (ONT/Routeur/TV)    │
│  (Internet/TV)   │            │  mac/serial/wifi/sip │
└──────────────────┘            └──────────────────────┘
                  │
                  ▼
┌──────────────────────────────────────────────────┐
│                Dispatch Job                      │
│  (Tech installs equipment at Service Location)   │
│  Status: Scheduled → In Progress → Completed     │
└──────────────────────────────────────────────────┘

2. The Customer Journey (Lead to Live)

This flow replaces the legacy PHP quote builder. It operates atomically to ensure equipment and ports are correctly reserved.

Step 1: Address Qualification

  • Website hits /api/address.
  • Queries the fiber_availability table (coupled with pg_trgm fuzzy matching against RQA databases).
  • Identifies the specific fibre_id and checks port availability in real time.

Step 2: Plan & Price Selection

  • Prices dynamically populate based on the zone_tarifaire tied to the OLT Port.

Step 3: Payment Intent (Stripe)

  • Stripe Elements capture CC info for a SetupIntent.
  • We do not charge the card until the Dispatch Job is confirmed by the technician.

Step 4: Atomic Order Creation

Through targo-hub or n8n, a successful sign-up generates exactly:

  1. Customer (Jane Doe)
  2. Service Location (Address, linked to OLT Port)
  3. Service Subscription (Internet Plan, TV Package)
  4. Service Equipment (Empty templates waiting for tech to scan serials)
  5. Dispatch Job (Triggered for Installation, waiting for tech assignment)

Step 5: Hardware Auto-Provisioning

  1. When the order is generated, custom fields on Service Equipment (like custom_wifi_ssid and custom_sip_username) are prefilled in ERPNext.
  2. The technician arrives, installs the TP-Link ONT, and scans its serial/MAC.
  3. The ONT boots up and hits the TR-369 server (Oktopus).
  4. targo-hub acts as the TR-069 proxy, matching the MAC to ERPNext, reading the custom provisioning profile, and automatically injecting the WiFi and SIP credentials onto the modem.

3. Ops App "Client 360" View

The ClientDetailPage in the Ops App acts as a unified console pulling from these relationships.

It displays:

  • Standard Frappe Customer metadata + Custom Flags (PPA Enabled).
  • A map and grid of the Service Location.
  • Live diagnostic queries to targo-hub providing real-time data on the linked Service Equipment.
  • The historical thread of Issue and Dispatch Job events.
  • Inline Odoo-style editing for rapid support.