Files
claudetools/.claude/memory/feedback_syncro_emergency_billing.md
Mike Swanson a42d657c55 docs(session)+rules: 2026-05-27 — Quantum M365 onboarding, IX autodiscover fix, Syncro emergency/labor/attribution rules
Session logs: root (Michael #32329 hosting offer + IX simplehost.email autodiscover DNS fix + Cascades #32332 emergency correction) + Quantum client log (M365 tenant 2fd0092b onboarding, break-glass GA, CA report-only).

Syncro rule overhaul:
- Emergency billing: prepaid -> 26184 @ hours x1.5 (was 26118); non-prepaid -> 26184 with channel rate (onsite $262.50 / remote+inshop $225)
- Never make up labor items (existing product + real name; QuickBooks sync)
- Corrections preserve original tech's user_id (commission); adding notes/labor never changes ticket owner

/remediation-tool: Conditional Access may be managed programmatically (report-only first + exclude break-glass + confirm before enforce); fabb3421 deprecated for customer tenants; Quantum tenant onboarded (gotchas table).

Memory: 4 new (no-madeup-labor, corrections-preserve-tech, ca-programmatic, quantum-godaddy-tenant) + updates.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:57:55 -07:00

2.7 KiB
Raw Blame History

name, description, metadata
name description metadata
Syncro emergency/after-hours billing — check prepay_hours first Emergency labor is time-and-a-half (×1.5), applied once, never additive. Branch by customer.prepay_hours. Prepaid → emergency item 26184 at hours×1.5 (premium in quantity); non-prepaid → 26184 at actual hours (rate has 1.5×).
type
feedback

Rule: Before adding any Emergency/after-hours labor line on a Syncro ticket, GET /customers/<id> and read prepay_hours. Emergency = time-and-a-half (×1.5), applied ONCE — never bill a separate regular line + emergency line for the same hours.

  • No prepaid block (prepay_hours == 0): product 26184 (Labor - Emergency or After Hours) at quantity = actual hours, and set price_retail by the work's delivery channel (the 1.5× lives in the dollars — do NOT also ×1.5 the quantity): Onsite emergency = $262.50 (175 × 1.5; this is 26184's default rate); Remote / In-Shop emergency = $225 (150 × 1.5) → override price_retail to 225. Fetch the base rate live and ×1.5 if unsure.
  • Prepaid block (prepay_hours > 0): product 26184 at quantity = actual hours × 1.5 (hours + 50%). Prepaid blocks debit by QUANTITY not dollars, so the 1.5× premium goes in the quantity; the invoice nets to $0 and the block debits hours×1.5. e.g. 1.5 emergency hrs → 26184 @ 2.25. (Delivery channel / dollar rate is irrelevant for prepaid — only the quantity hrs×1.5 matters.)

(Updated 2026-05-27 — Mike): prepaid emergency now uses the emergency item 26184 at ×1.5 quantity — this REPLACES the old "prepaid → onsite 26118 at ×1.5." Using 26184 labels the line correctly as emergency and maps right in QuickBooks; the dollar double-1.5 worry doesn't apply to prepaid since the invoice is $0. Reaffirmed on #32332 (Cascades, prepaid 27h): total 1.5 emergency hrs → 26184 @ 2.25 (Howard had split it into made-up onsite/emergency lines).

Why ×1.5-not-additive: Learned on #32203 (Desert Auto Tech) 2026-04-23 — billing "1h onsite + 1h emergency" as two additive lines came out $437.50 when 1 actual hour of emergency should bill at time-and-a-half. Emergency IS time-and-a-half; one line.

How to apply:

  • Every emergency/after-hours bill: check prepay_hours BEFORE choosing the quantity. One emergency line on 26184.
  • Always set price_retail explicitly (fetch live via GET /products/26184); the rate doesn't auto-populate and the line posts $0 if omitted.
  • Use the product's REAL name on the line (work detail goes in the description) — see feedback-syncro-no-madeup-labor-items.
  • Verify after invoicing: .invoice.total (non-prepaid) or the prepay-block decrement (prepaid).
  • Full rules: .claude/commands/syncro.md.