Files
claudetools/session-logs/2026-07/2026-07-13-howard-billing-reconcile-june26-july10.md
Howard Enos cda32b53bb sync: auto-sync from HOWARD-HOME at 2026-07-13 11:13:45
Author: Howard Enos
Machine: HOWARD-HOME
Timestamp: 2026-07-13 11:13:45
2026-07-13 11:14:18 -07:00

90 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-07-13 — Billing reconciliation for Howard's work 6/26 7/10
## User
- **User:** Howard Enos (howard)
- **Machine:** Howard-Home
- **Role:** tech
## Session Summary
Reconciled and entered Syncro billing for all of Howard's client work between 2026-06-26 and 2026-07-10. Started by enumerating every session log in the window (~35 sessions), fanned out three Explore agents to extract per-session billing data (client, work, hours hints, ticket refs, already-billed status), and split the result into already-billed / needs-billing / internal-non-billable. The 6/26 June reconciliation had already swept everything through 6/26 (tickets #32474#32480, #32439/#32443, #32343), so the working set was 6/29 onward.
Cascades was the largest pile: eight unbilled sessions wrapped into one new ticket #32538 "Caregiver phone rollout + user admin (6/29 - 7/10)" with 8 line items totaling 16.0h (9.0h remote @ $150 + 7.0h onsite @ $175), invoiced $0.00 against the prepaid block (verified 37.5 → 21.5). Onsite dates confirmed with Howard: 4.0h Thu 7/9 + 3.0h Fri 7/10 (his "7-16" was a typo). The 7/9 remote work (Charity Menle rename, Chris Knight accounting@ delegation) was folded into the 7/9 onsite line. Billing-log entry appended to `clients/cascades-tucson/docs/billing-log.md`.
Then worked the remaining queue item-by-item with live Syncro verification before each entry. Live checks caught three would-be errors: Scileppi's 7/1 0.5h line was ALREADY invoiced (#67979, 7/1, $75 — the session log's "left un-invoiced" note was stale); Sif-Oidak already had ticket #32526 for the printer-740 issue (billed there instead of creating a duplicate); and Goldstein's $99 MAK was already on invoice #67992 ($257.61 total = $150 labor + $99 license + tax — an agent's earlier "$150 flat" read was wrong, invoice number is 67992 not 1650967814-as-number).
New billing entered this session: Sif-Oidak #32526 1.0h remote $150 (invoice #68037) covering the dortega AD account + printer error 740; Valley Wide new ticket #32543 1.0h block $0 (invoice #68038, block 17.75 → 16.75) for the VWP-SERVER year-2051 clock skew + MSP360 error-2525 backup rebuild (Howard verified old plan gone, new plan scheduled and working); Prairie Schooner new ticket #32544 3.0h remote $450 (invoice #68039) for migration phase 1 — ticket deliberately left In Progress since Howard goes onsite 7/13 to swap the SonicWall for UniFi.
Everything else was explicitly decided no-bill by Howard: Scileppi 7/2 Cox WAN RCA and 7/6 SL-SERVER recovery (left for Mike, no notes added), Dataforth MYDATA (covered on Mike's ticket #32501, 2.0h onsite line, Resolved un-invoiced — Mike's to invoice), Goldstein 7/10 OpenVPN (billing fine as-is), Four Paws post-shortcut work (no charge — cleanup on our end), IMC 6/28 + 7/8 (dropped, covered by $1,590/mo recurring), Grabb & Durando 7/4 backup schedule fix (dropped, GPS maintenance). Gary Hartman #32502 deferred — Howard does the disk work this week and will bill diagnostic + replacement together.
## Key Decisions
- One Cascades ticket with 8 dated line items instead of 8 tickets — Howard's call, keeps the block deduction and the narrative in one place.
- Onsite dates pinned via AskUserQuestion (7/9 + 7/10) because "7-16" was in the future; day-name verification matters on billing dates.
- 7/9 remote work (Menle rename, accounting@ delegation) folded into the 7/9 4.0h onsite line rather than itemized separately — same day, avoids double-count.
- Billed Sif-Oidak on the EXISTING #32526 rather than creating a new ticket — live ticket search before create is the duplicate-prevention gate.
- Prairie Schooner billed incrementally (option a): phase 1 invoiced now, ticket stays In Progress for phase-2 lines — real-dollar customer, mid-flight project.
- VWP ticket marked Invoiced (work complete + backups verified); Prairie Schooner NOT marked Invoiced (work continues) — status follows work state, not invoice state.
- Every billing preview was gated on a live full `GET /customers/{id}` prepay read (never search results) and live product rate fetches, per the /syncro hard rules.
- Juan Andrade (Cascades) offboarding deliberately NOT billed/executed — held until Howard verifies whether it happened 7/11.
## Problems Encountered
- Session logs almost never record durations — hours came from Howard per item; log density used only as a suggestion baseline.
- Customer search returned wrong-first-match twice (query=Dataforth → "Haubner, Georg"; query=Valley Wide → "Teresa Carpio"): list all matches and pick the business record, never trust `.customers[0]`.
- A two-statement jq program with `2>/dev/null` swallowed all output on the VWP invoiced-ticket check — split into two jq calls.
- Stale session-log billing claims: Scileppi "un-invoiced" was in fact invoiced same-day. Rule reinforced: always verify against live Syncro before entering anything.
## Configuration Changes
- Created `session-logs/2026-07/` month folder (this log).
- Appended billing entry to `clients/cascades-tucson/docs/billing-log.md` (ticket #32538 / invoice #68035 table, 16.0h, block 37.5 → 21.5).
- No infrastructure or code changes — billing/admin session only.
## Credentials & Secrets
- None created or discovered. All Syncro calls used Howard's vaulted per-user API key via `syncro-env.sh` (attribution user_id 1750).
## Infrastructure & Servers
- Syncro tenant: computerguru.syncromsp.com. Customers touched: Cascades of Tucson 20149445 (block 21.5h remaining), Sif-oidak District 7694718 (no block), Valley Wide Plastering 31694734 (block 16.75h), The Prairie Schooner 3664974 (no block), Dataforth Corp 578095 (block 25.75h, untouched), Scileppi Law 9601863 (no block, untouched), Gary A Hartman LLC 29038261 (no block, untouched).
## Commands & Outputs
- Billing flow per /syncro skill: `POST /tickets``POST /tickets/{id}/comment``POST /tickets/{id}/add_line_item` (name + price_retail explicit, taxable:false) → `POST /invoices` → verify lines + prepay decrement → `PUT /invoices/{id}` note → `PUT /tickets/{id}` status → post-bot-alert.
- Block decrements verified by re-fetch: Cascades 37.5→21.5 (exactly 16.0), VWP 17.75→16.75 (exactly 1.0).
- Invoice-note policy applied: block customers got "Block hours remaining: N."; non-block (Sif-Oidak, Prairie Schooner) got the block-rate upsell line.
- Bot alerts posted to #bot-alerts for all four billing runs (message ids 1526259374249607259, 1526267219623809217, 1526273847102279841, 1526274760323895319).
## Pending / Incomplete Tasks
- **Gary Hartman #32502** (id 113490650): disk replacement this week (Howard) — bill 7/4 diagnostic + replacement together then. No block; real dollars.
- **Prairie Schooner #32544** (id 113778439): Howard onsite 7/13 for SonicWall→UniFi swap; add onsite line + remaining cutover work when done. Ticket In Progress.
- **Cascades — Juan Andrade (`j.andrade`) offboarding**: last day was 7/11; held pending Howard's verification (coord todo 14881da2-8acd-4825-a964-bf9cdd2df876). When confirmed: disable AD + remove from SG-Caregivers + reclaim Business Premium.
- VWP auto-alert tickets #32536/#32537 (Backup Overdue VWP-SERVER/VWP-FILES) are stale per Howard's verification — can be closed/cleared whenever.
- Scileppi SL-SERVER dead-NAS recovery remains with Mike (escalated 7/6).
## Reference Information
- **Tickets/invoices created or billed this session:**
- Cascades #32538 (id 113774801) → invoice #68035 (id 1651028969) $0.00, 16.0h block
- Sif-Oidak #32526 (id 113677735) → invoice #68037 (id 1651029466) $150.00, 1.0h
- VWP #32543 (id 113778113) → invoice #68038 (id 1651029853) $0.00, 1.0h block
- Prairie Schooner #32544 (id 113778439) → invoice #68039 (id 1651029914) $450.00, 3.0h, ticket open
- **Verified already-billed (no action):** Rednour #32368/inv #67912 $669.55; Michael Johnson #32477 $87.50; Goldstein #32490/inv #67992 $257.61 (MAK included); Desert RV #32514 $0 warranty; Four Paws #32508/inv #67993 $75; Bardach #32528 $0 block; Scileppi #32493/inv #67979 $75.
- **Explicit no-bill decisions (Howard, 7/13):** Scileppi 7/2 + 7/6; Dataforth MYDATA (Mike's #32501); Goldstein OpenVPN; Four Paws cleanup; IMC 6/28 + 7/8; Grabb & Durando 7/4 schedule fix.
- Prior reconciliation reference: `session-logs/2026-06/2026-06-26-howard-june-billing-reconciliation.md` (covered 6/136/26).
- Cascades line-item detail: `clients/cascades-tucson/docs/billing-log.md` (2026-07-13 entry).
## Update: 11:05 PT — ACG internal billing 6/277/13
Entered the internal-labor fortnight ticket following the #32480 precedent: **#32546** (id 113781668) "Howard - Internal work 6-27-26 to 7-13-26" on ACG internal (15353550), **17 lines x Labor - Internal Labor (9269124, Exempt Labor, $0) = 28.0h**, invoice **#68040 $0.00**, ticket Invoiced, bot alert posted. Line coverage: radio show (2 sessions, per Howard — not 3), Syncro category fix, GPS coverage-audit marathon (5.0h), MSP360 alert RCA, GuruRMM release train (easy-bugs batches + WS-looper, v0.3.95→0.3.102 + agents 0.6.78/79), backup-verification + msp360 skills, tailscale/ScreenConnect/ask-forum skills, Feature-6 + Stream-C specs, GPS fleet ops + billing reconcile, GuruScan RKill whitelist, Syncro skill expansion, and this billing session itself.
**API quirk discovered (logged to errorlog + test-findings):** `GET /invoices/{id}` immediately after `POST /invoices` returned a PARTIAL line set (10/17 lines, 18.0h) — Syncro populates invoice lines from ticket charges asynchronously. Re-GET showed all 17/28.0h. Rule recorded: wait + re-GET on a short read; never create a second invoice off a partial first read.
## Update: 11:20 PT — session close
Final tally for the day: 5 tickets billed — Cascades #32538 (16.0h block, inv #68035 $0), Sif-Oidak #32526 (1.0h, inv #68037 $150), VWP #32543 (1.0h block, inv #68038 $0), Prairie Schooner #32544 (3.0h, inv #68039 $450, ticket held In Progress), ACG internal #32546 (28.0h, inv #68040 $0). Six explicit no-bill decisions (Scileppi 7/2+7/6, Dataforth MYDATA -> Mike's #32501, Goldstein OpenVPN, Four Paws cleanup, IMC, Grabb & Durando).
Note on the 11:11 sync's vault push: the two vault commits (VWP-ROSE workstation login 7bcff18, Reliant channa-email swept into 95a2630) came from CONCURRENT Claude sessions on this machine — not this session. Both are legit credential adds; my sync's catch-all committed/pushed the pending one. No action needed.