Files
claudetools/.claude/memory/feedback_syncro_prepay_full_get_only.md
Mike Swanson 7b252335cc sync: auto-sync from GURU-5070 at 2026-06-23 21:14:42
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-23 21:14:42
2026-06-23 21:15:42 -07:00

1.3 KiB

name, description, metadata
name description metadata
feedback-syncro-prepay-full-get-only Syncro prepay_hours is only reliable from GET /customers/{id}; never read it from the customer search/list endpoint
type
feedback

When billing in Syncro, read prepay_hours ONLY from the full GET /customers/{id} response (.customer.prepay_hours). The customer search/list endpoint (GET /customers?query=...) returns prepay_hours: null (or stale) even when the customer HAS a prepaid block. Never read prepay from a search result, and never assert "no prepaid block" / "real charge $N" in a billing preview built from search data.

Why: Repeated misfires — previews said "$300, no block," then the block surfaced during the invoice POST and the invoice netted $0 (block debited). Mike flagged this 2026-06-23 as a reliability problem that keeps recurring (Dataforth, Grabb & Durando #32455). The wrong figure in a preview the user confirms is the failure mode.

How to apply: In the billing gather step, ALWAYS GET /customers/{id} and pull prepay_hours from there BEFORE composing the preview — not just before the invoice. If you only have search/list data, fetch the full customer record first; do not guess. The /syncro skill hard rules now encode this. See feedback_syncro_labor_type.md.