Files
plumbing/PROJECT-PROGRESS.md
T

74 lines
2.4 KiB
Markdown

# ServiceM8 Project Progress
## Current Quote Template → JobMaterials Pipeline
### Live receiver
- `servicem8_webhook_receiver.py`
- receives `form.response_created`
- stores the raw webhook payload in `servicem8_webhooks.db`
- checks incoming form responses for the Quote Template `form_uuid`
- if matched, parses and queues the derived jobMaterials payload to:
- `quote-template-jobmaterials-queue.jsonl`
- does **not** perform live ServiceM8 writes at this stage
### Parser
- `servicem8-quote-template-parser.py`
- parses Quote Template `field_data`
- extracts:
- description of works
- `Item 1..12` include lines
- `Works excluded 1..4` exclude lines
- extra descriptive include rows such as labour/scaffolding/equipment fields
- builds normalized `desired_job_materials`
### Create/apply script
- `servicem8-create-jobmaterials-from-form-response.py`
- standalone script
- consumes a Quote Template form response JSON payload
- builds ServiceM8 Job Material API payloads
- runs in **dry-run by default**
- supports live create later with `--apply`
- records created/generated mappings into local state DB
### Local state tracking
- `servicem8_quote_materials_state.db`
- local SQLite DB for tracking generated jobMaterials
- intended fields include:
- job UUID
- form response UUID
- created job material UUID
- kind/source metadata
### Queue/prepared output
- `quote-template-jobmaterials-queue.jsonl`
- lightweight queue/output file written by webhook stage
- contains parsed/prepared `desired_job_materials` objects
- no live update performed yet
### Inspector
- `servicem8_inspector.py`
- read-only browser for webhook DB
- now also includes visibility of generated-materials state DB
## Current Status
Everything is staged and connected up to the point of:
- webhook receive
- UUID trigger check
- form parsing
- local queueing
- dry-run jobMaterial payload generation
- local state DB support
- inspector visibility
## Not Yet Enabled
- actual live POST creation of Job Materials into ServiceM8 during webhook processing
- any automatic update/delete reconciliation against live ServiceM8 records
## Design Notes
- Heavy lifting is intentionally kept **out of the live webhook handler**.
- The webhook handler is used only for:
- capture
- UUID gate
- parse/prepare/queue
- Live ServiceM8 mutation remains a separate step/script for safety.