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>
4.6 KiB
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_availabilitytable (coupled with pg_trgm fuzzy matching against RQA databases). - Identifies the specific
fibre_idand checks port availability in real time.
Step 2: Plan & Price Selection
- Prices dynamically populate based on the
zone_tarifairetied 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:
Customer(Jane Doe)Service Location(Address, linked to OLT Port)Service Subscription(Internet Plan, TV Package)Service Equipment(Empty templates waiting for tech to scan serials)Dispatch Job(Triggered for Installation, waiting for tech assignment)
Step 5: Hardware Auto-Provisioning
- When the order is generated, custom fields on
Service Equipment(likecustom_wifi_ssidandcustom_sip_username) are prefilled in ERPNext. - The technician arrives, installs the TP-Link ONT, and scans its serial/MAC.
- The ONT boots up and hits the TR-369 server (Oktopus).
targo-hubacts 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-hubproviding real-time data on the linkedService Equipment. - The historical thread of
IssueandDispatch Jobevents. - Inline Odoo-style editing for rapid support.