Task 3/3a of the harness-optimization spec. Mike confirmed normal billing uses add_line_item; timers stay available only for explicit outlier requests, never the normal loop. Rewrote time-entry-protocol.md to defer to the /syncro command (SSOT for billing mechanics) and state timers are outlier-only; aligned the command's two absolute "no timers" lines. Contradiction removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
45 lines
2.0 KiB
Markdown
45 lines
2.0 KiB
Markdown
---
|
|
name: time-entry-protocol
|
|
description: Normal Syncro billing uses add_line_item per the /syncro command; timers are an outlier path used only when Mike explicitly requests one; always confirm minutes + labor type before logging.
|
|
applies-to: syncro
|
|
---
|
|
|
|
# Syncro Time Entry Protocol
|
|
|
|
## Source of truth
|
|
|
|
The `/syncro` command (`.claude/commands/syncro.md`) is the SINGLE source of truth for
|
|
the billing mechanics — product IDs, rates, emergency and prepaid handling, the
|
|
line-item + invoice flow. Do not duplicate or contradict it here. This standard states
|
|
only the cross-cutting discipline.
|
|
|
|
## Normal billing = add_line_item
|
|
|
|
Routine labor bills directly via `POST /tickets/{id}/add_line_item` (see the /syncro
|
|
command for the exact payload, product IDs, and `price_retail` rules). This is the
|
|
standard, expected path for all normal billing. (Confirmed by Mike, 2026-06-08.)
|
|
|
|
## Timers are an OUTLIER — not the billing loop
|
|
|
|
`timer_entry → charge_timer_entry` is NOT part of normal billing. Use it ONLY when Mike
|
|
explicitly asks for a timer on a specific job. The capability stays available, but it is
|
|
never the default and routine labor is never routed through it.
|
|
|
|
When a timer IS explicitly requested:
|
|
1. `POST /tickets/{id}/timer_entry` → 2. `POST /tickets/{id}/charge_timer_entry` →
|
|
verify the generated line item's `price_retail` (patch via `update_line_item` if wrong).
|
|
- `billable: false` is silently ignored by the API on `timer_entry` — for warranty/free,
|
|
verify in the GUI that the charged line landed at $0 and patch if not.
|
|
|
|
## Always confirm before logging (either path)
|
|
|
|
Before logging any time, confirm: (1) how many minutes, (2) what labor type — onsite /
|
|
remote / emergency / warranty / project. Never assume a default or round up. Billing
|
|
errors are client-facing, hard to reverse, and affect prepaid block balances (Winter has
|
|
to reverse them manually).
|
|
|
|
## Prepaid
|
|
|
|
Check `prepay_hours` on the customer before billing — the /syncro command holds the
|
|
authoritative prepaid + emergency rules.
|