SLS Prism Billing — Next-Generation Surfaces

Wireframes & estimated build plan · prepared for Mike, Kara, Angela, Elvira · April 30, 2026

Overview

A redesign of Prism's billing surfaces around five workspaces — built so the operator's mental model matches the UI, not the underlying database tables.

Replaces: Banyan + Prism + 6 spreadsheets + QB Pending tab + 4 special-client batch flows Built on: existing Prism Django app, Stripe, S3, Celery Validated against: 53 SOPs from your team
Friday 5/01 status
6 of 12 open questions resolved at Friday's meeting. Updates throughout the deck show ✓ resolved; see Open Questions for the consolidated view. New cross-cutting concepts added: Force-billing flow and Agentic coaching. Target: low-environment build by end of next week.
1

Audit Workspace

Kara · Angela · Gigi
One screen per shipment-being-audited. Side-by-side bill comparison, inline charge entry with Auto/Add suggestions, lifecycle pill, activity feed. Replaces the click-cycle through Banyan + Prism + Excel.
2

Send Workspace

Kara → Gigi (after Kara's leave)
The 50-80-invoices-a-day queue with bulk send, document-requirement badges, customer name, auto-attach. Failed rows route to Resolution. AR-HOLD invoices pulled out automatically.
3

Resolution Workspace

Angela · Kara · Jennifer · Ashley · Racquel · Melisha
Kanban board replacing the four-tier sheet handoff (CS & Ops → CS → A&C → Processing). Cards carry up to 3 issue categories, three-snapshot financials, Auto/Add suggestions, manager review.
4

Variance & Commission

Elvira (manager) · Mike (clawback approval)
Commission ledger with the +$16 math built-in, Uncollectable AR clawbacks with 1.5% monthly compounding, settlement export to QB AP. Replaces the 2024/2025 Variance sheets.
5

Statements & Collections

Accounting team
Customer-side AR aging, weekly statements, AR HOLD management, special-client invoice reports (Air Global, Achem, Matfer). Replaces the QB Pending tab and current QB-driven statements.
+

Plus three smaller surfaces

Across all roles
Activity Feed (the spine all workspaces ride on), Auto/Add Rule Engine (the four-dimensional rule registry your team already maintains), Client Lifecycle and Vendor mgmt (Phase 7+).

Use the left navigation to drill into each. Yellow flags throughout the deck mark questions where we'd like your input.

How to read this deck

A few visual conventions used throughout.

Wireframe element (dashed border)
Active / focused state
Auto/Add suggestion or success state
Warning / on-hold state
Open question for your team

Sample wireframe

Each workspace page includes a low-fidelity sketch like the one below, plus an enumerated list of supported use cases (with the SOP that drives each), and yellow-flagged questions placed next to the relevant UI element.

Header
Lifecycle pill, status badges, primary actions
Left panel
Bill summary, charges, issues
Center
Active work area (carrier-bill PDF, charge form, etc.)
Right rail
Activity feed
Open question
Like this — flagged inline at the relevant UI element.
If you don't reply, our default: do the obvious thing and surface it for review.

Wireframes are intentionally low-fidelity so you can react to the structure, not the styling. We'll iterate visuals during the build.

Overview Audit Queue

Audit Queue

Entry point for the Audit Workspace. The list of shipments awaiting audit, sorted by 5-day-mark proximity. Replaces the Banyan "Bills to be Processed" Working tab and the Prism `bills_not_invoiced` page.

Primary users: Kara · Angela · Gigi Replaces: Banyan To-Be-Processed sheet · Prism bills_not_invoiced page

List view

3 over 5-day mark 142 awaiting audit
SLS Customer Carrier Delivered Days Variance Stage Assigned Issues
SLS25310071 US Air Conditioning XPO Logistics 11/11 7d −$249.40 In audit Kara W&I
SLS25239028 Stage Depot Inc XPO Logistics 11/13 5d −$84.00 In audit Racquel CBOL
SLS25318049 NLS Lighting T-Force 11/16 2d −$76.77 Needs audit
SLS25254032 Air Global Saia 11/17 1d +$32.10 Needs audit
SLS25304040 Permalite Saia 11/17 1d −$157.69 Needs audit RECON
SLS25300072 Troy Lee Designs Best Overnite 11/06 12d −$657.94 Needs review Ashley RECON
Click a row to open the Per-shipment detail. Rows past the 5-day mark show a yellow warning pill, matching the highlight rule operators apply by hand today (`Daily Reports - To Be Processed Report` SOP).
Resolved · Default sort
Sort priority: Stage first, Days since delivery second. Goal is to work on incoming items in stage order; the 5-day-breach yellow pill still surfaces SLA-breached rows visually within each stage group.
Per Friday meeting: stage-first ordering matches how the team thinks about queue work.

What lands here from upstream

  1. Shipments delivered 2+ business days ago (the daily emailed report) (Daily Reports - To Be Processed Report)
  2. EDI bills that arrived overnight in DISP status (EDI Processing - Banyan)
  3. Shipments where Auto FB Audit flagged variance > tolerance (Wave 4)
  4. Resolution cards that need a re-audit pass (returned from Resolution Workspace)
  5. Unknown-shipment intake (carrier billed for shipment not in either system) (Entering "unknown" Shipments into Banyan)
  6. Special-client cadence batches (Air Global Mon, Matfer 1st of month) (Air Global / Matfer SOPs)

Overview Audit Queue SLS25310071

Audit Detail — Per-shipment

One screen per shipment-being-audited. Eliminates the hop-cycle.

Primary users: Kara · Angela · Gigi Replaces: Banyan + Prism Billing Mgmt + Excel + carrier websites Build: ~1 day

Layout

DRAFT
NEEDS AUDIT
IN AUDIT
NEEDS REVIEW
PROCESSING
MATCHED
QB EXPORTED
PAID
Shipment summary
SLS25310071
US Air Conditioning · XPO Logistics
Pickup 11/06 · Delivery 11/11
Status, dates, parties, primary identifiers
Carrier-bill PDF (rendered)
[ PDF.js viewer or iframe — same width as the FreightBill data on the left for side-by-side comparison ]
The carrier's freight-bill PDF rendered inline. Today this lives buried 5 clicks deep or is uploaded as a "user added file" titled "freight bill" as a workaround.
Activity feed
11/19/25 14:23
Kara reweigh from 100 lbs to 310 lbs. Emailed customer for dispute docs.
11/17/25 09:11
System charge added · LFTGT · $286.81 (suggested via Auto/Add)
11/17/25 08:45
Racquel opened audit · variance > $20 threshold
Right rail. Time-stamped. Replaces "Check Call History" + Banyan notes + sheet comments.
Resolved · Force-push override
Manager override required — auditor cannot self-authorize. Role-based (not name-based), so any user in the Manager access group can approve. Pattern: like an age-restricted purchase at a self-checkout — the line worker calls a manager.
Per Friday meeting: cross-trainable roles, no single-person dependency. Implementation: shipment.force_push() requires the actor's role group to include `billing_manager` or higher.
Bill detail (left panel, expanded view)
Quoted raw:$240.94
Carrier invoice:$490.34
Variance:−$249.40
Auto/Add suggested
Customer: US Air Conditioning · Accessorial: W&I (reweigh)
Rule: Min $10, 15% markup
→ Add charge: Raw $249.40, Profit Markup $37.41 → bills client $286.81

SOP-driven use cases supported

  1. Document retrieval & upload — single widget across docs/imaging (Documental Retrieval & Upload, Auditing documents)
  2. Side-by-side quote-vs-bill comparison with auto-classify on variance (Prism Auditing — closes Banyan #1 gap)
  3. Auto/Add charge entry with one-click apply, override, or "email for approval" (Prism Auditing + Auto Add Bill List)
  4. Charge allocation toggle: current invoice / supplemental / unallocated (meeting feedback)
  5. Issue mark + resolve from inside the workspace; resolution notes flow to bill notes automatically (Working & Resolving Marked Issues — fixes "siloed notes")
  6. 5-day Force-push override with required reason and Activity row (Pushing FB-Invoice into QB when audit not completed)
  7. Inline raw-cost / sell-rate edits with audit trail (Updating Raw Cost, Updating $0.01 sell rates)
  8. EDI bill reconciliation — OPN/DISP/PSND status carried across (EDI Processing - Banyan)
  9. QB transfer status tile with T-Force routing suggestion (Prism QB Billing Transfer, T-Force Payables in QB)
  10. Bill lifecycle stages with explicit transitions and Activity log (across SOPs)
  11. Unknown-shipment intake (carrier billed for shipment not in either system) (Entering "unknown" Shipments into Banyan)

Overview Send Queue

Send Queue

The daily 50–80-invoice queue with bulk operations and intelligent doc handling. Entry point for the Send Workspace.

Primary users: Kara → Gigi (after Kara's leave) Replaces: per-invoice click flow, manual doc attachment Build: ~0.5 day

Layout

112 invoices to send 8 on AR HOLD 3 missing POD
SLS Customer Amount Cadence Doc reqs Send via Status
SLS25310071 US Air Conditioning $720.83 Per shipment POD ✓ BOL ✓ Email Ready
SLS25318049 NLS Lighting $642.53 Per shipment POD ✓ Stripe-hosted Ready
SLS25239028 Stage Depot Inc $842.62 Per shipment POD missing Mail AR HOLD: missing POD
SLS25254032 Air Global $2,145.00 Weekly manifest All ✓ Email + EDI Ready
SLS25258044 Matfer $398.38 Monthly POD ✓ Email Awaits cadence (next: 1st)
SLS25305114 Global Industries via TTD $1,600.00 ($2,000 − $400 split) Per shipment POD ✓ Email · TTD AR Ready
Customers booked under a tenant level (e.g., Global Industries under TTD) route the invoice to the tenant — not the end customer — with an auto-itemized line backing out the tenant's profit-split percentage per TenantCommissionAgreement.
Question · Bulk-send error handling
When a row in a bulk send fails (Stripe error, missing doc found mid-send, mail-merge issue), do we email the operator a summary, surface in-app only, or both?
Default: in-app summary in a "Needs attention" pile. Failed rows automatically become Resend Required issues. Email digest opt-in per user.

SOP-driven use cases supported

  1. Bulk send with per-row checkboxes and Celery-backed progress drawer (meeting feedback)
  2. Document attachment per client requirement (POD/BOL/W&I) (Adding New Clients, Working & Resolving Marked Issues)
  3. Itemization preview surfaced inline before send (Prism QuickBooks Bill-Invoice Process)
  4. Customer name and Send-w-Invoice destination visible per row (Adding New Clients — the Send w Invoice column in QB)
  5. Stripe / Email / Mail / EDI routing per client preference (Banyan Client Invoicing)
  6. AR HOLD detection & auto-segregation out of send queue (AR HOLD Report SOP)
  7. Tenant-routed invoicing — invoice goes to tenant org with auto-itemized profit-split deduction (BILLING SOP FOR GLOBAL INDUSTRIES)
  8. Special-client cadence: weekly (Air Global), monthly (Matfer), per-client custom (Air Global Weekly, Monthly processing Matfer)

Overview Send Queue SLS25310071 — preview

Send Detail — Per-invoice preview

Drill-in view from the Send Queue. Preview the rendered invoice + attachments before send, override routing, or hold for later.

Opens from: Send Queue row click, or per-row "Preview" button

Layout

Invoice header
SLS25310071 · US Air Conditioning · Invoice #4592
Amount $720.83 · Due 12/11/2025 · Sent via Email
Stage: Approved
Rendered invoice (PDF preview)
[ PDF.js viewer — full invoice as customer will receive ]
Includes line items: freight charge + reweigh itemization $286.81
Recipients
To: ar@usairconditioning.com
Cc: Brett Christensen
Send via: Email
Attachments
POD ✓ auto-attached
BOL ✓ auto-attached
W&I cert (optional)
Send history
No prior sends. This is the first attempt.
Resolved · Approval before send
Send directly based on user role permissions — no separate manager-approval queue for normal invoices. Special-case approval may be needed for new staff or unusual situations, gated by role.
Per Friday meeting: matches the team's current process; role-based permissions handle the edge cases without adding a queue.

Overview Resolution Board

Resolution Board

The four-tier sheet handoff (CS & Ops → CS → A&C → Processing) collapsed into one Kanban board. Entry point for the Resolution Workspace.

Primary users: Angela · Kara · Jennifer · Ashley · Racquel · Melisha Replaces: 4 spreadsheets, manual hand-offs Build: ~1 day

Kanban view

New
SLS25296064
Greene Textile · ArcBest
W&I
−$176.52
SLS25301018
Custom Aerospace · FedEx
OTHER
+$268.73
In Audit
SLS25304040
Permalite · Saia
RECON
−$157.69
Mgr Review
SLS25223099
Stage Depot · XPO
OTHER LTD-D
+$219.62
Processing
SLS25254032
Stage Depot · T-Force
LTD-D
+$188.45
SLS25259033
Air Global · Saia
W&I
+$441.00
Finalized
SLS25310071
US AC · XPO · 11/20
+$214.49
SLS25318049
US AC · XPO · 11/21
+$139.42
Click a card to open the Card Detail view. Drag a card across columns to transition stage (writes Activity row). Filters at the top: assigned-to, sales rep, customer, carrier, category, age.

What lands on the board

  1. CS-raised cards while shipment is in transit (CS & Ops Invoice Resolution Sheet)
  2. Auto-routed cards from the Audit Workspace when variance > threshold (Wave 4 Auto FB Audit)
  3. Manager-review escalations from auditors (Manager Review status across sheets)
  4. Re-audits returned from Variance Workspace (loop-back when finalized variance disputed)

Overview Resolution Board SLS25310071

Resolution Detail — Card

Drill-in view from the Resolution Board. Shows the full audit/processing workflow for a single card: three-snapshot financials, Auto/Add rule application, manager review thread.

Opens from: Resolution Board card click

Card detail

Header
SLS25310071 · US Air Conditioning · XPO Logistics
Sales rep: Brett Christensen · Auditor: Kara → review by Angela
W&I + add category
Original (quote)
Raw:$240.94
Sell:$434.02
Margin:$193.08
New (carrier invoice)
Raw:$490.34
Sell:pending
Variance:−$249.40
Finalized
Raw:$490.34
Sell:$720.83
Margin:$230.49
Commission base:$214.49 (−$16)
Auto/Add suggestion · matched rule
Customer rule: US Air Conditioning · Accessorial: W&I · Min $10, 15% markup
Computed itemization: $286.81 reweigh from 100 lbs to 310 lbs
Question · Issue category seed list
We extracted 30 distinct issue codes from your 2025 Variance Report. Bucketed below for review. Confirm coverage, bucket assignments, and let us know what's missing. Aliases (typos to merge): DETENTION → DETN, LUMEPR → LUMPER.
Default: ship the seed list as drafted; add new codes through the Resolution Workspace as the team needs them.

Issue category seed list — for review

Counts shown are 2025 Variance Report frequencies as Issue Type (1). Multi-tag (Issue Type 2 and 3) overlap is high but not shown here.

Accessorial · 13 codes
W&I— see WI bucket
APT/NTFY456
LFTGT227
ATTEMPT175
LTD-D143
REDLVRY76
RESI-D64
RECON82
XCON90
INSIDE_DLVRY17
LTD-O7
RESI-O5
INSIDE_PU1
FSC1
Weight & Inspection · 2 codes
W&I946 · #1 most common
CUB_CAP1
Operational · 5 codes
DETN106
STORAGE24
SORT_AND_SEG6
TONU5
LUMPER3
Billing & Admin · 8 codes
QUOTE_NOT_APPLIED70
CBOL62
SS (Single Shipment charge)58
DATA_ENTRY_ERROR23
TOTAL_COMMISSION14
WRONG_ACCNT_BILLED7
LOWER_CARRIER_BILL (positive)4
PLT_RST (pallet restocking)1
Exception · 2 codes
OTHER269
SERVICE_FAILURE20
Q: Should GUARANTEE_FAILURE be a separate exception code? It has its own SOP but isn't tagged in the variance data.
Codes seen in 2024 archive but not 2025 — keep, drop, or merge?
RESCUE DRY_RUN LOVR PFF $ADDTL_PROFIT$ (positive)
These appeared in 2024 Variance entries. Some may be deprecated; $ADDTL_PROFIT$ appears 20 times in 2025 A&C data and should probably be canonical (positive variance).
Per-category attributes
AttributeCodes
triggers_clawbackSERVICE_FAILURE, GUARANTEE_FAILURE, DATA_ENTRY_ERROR, WRONG_ACCNT_BILLED
is_positive_variance$ADDTL_PROFIT$, LOWER_CARRIER_BILL
aliasesDETN ← DETENTION; LUMPER ← LUMEPR
Resolved · Manager review threshold
Auto-route below threshold; threshold is low — closer to the historical $16 buffer than the $200 we'd proposed. Mike noted the legacy "play money" buffer of $16 (the same fixed deduction in the commission math) — anything below that just gets absorbed without re-billing. Threshold is configurable per category; LTL category specifically needs to be low.
Per Friday meeting: comfortable with rules-and-thresholds approach so most variances clear without bottlenecking through Angela. Initial values: $16 absorb (no re-bill), $16-$50 auto-apply MarkupRule, >$50 needs human review (Resolution card stage = Manager Review).

SOP-driven use cases supported

  1. Pre-delivery intake from CS while shipment in transit (CS & Ops Invoice Resolution Sheet)
  2. Post-delivery audit pickup; card opens with shipment+quote+bill+invoice in scope (Daily Reports - To Be Processed Report, Prism Auditing)
  3. Multi-category issue tagging — up to 3 IssueCategory tags per card (CS/A&C/Processing — Issue Type 1/2/3 columns)
  4. Three-stage financial snapshot with auto-computed deltas (across resolution sheets)
  5. Auto/Add rule application with apply/override/escalate paths (Auto Add Bill List, Prism Auditing)
  6. Responsible party assignment + discussed-with toggle (Variance Responsible Party column)
  7. Manager review handoff with comment thread (Manager Review status across sheets)
  8. Itemization handoff to accounting (pending_itemization flag) (Prism Auditing — FB Itemization Sheet)
  9. Special-client custom workflows (Stage Depot, Air Global, Achem) (Stage Depot Audits, Air Global Accessorial List)
  10. Westset / TTD tenant chargebacks (Variance Responsible Party — Westset entries)
  11. CSR communication log → activity feed (CS sheet CSR Comments column)
  12. Service Failure / Guarantee Failure dedicated paths (Service Failure SOP, Guarantee Failure SOP)

Overview Variance & Commission Settlement queue

Settlement Queue

Entry point for the Variance & Commission Workspace. Per-rep settlement table for the active commission period. Click a rep to drill into per-rep detail.

Primary users: Elvira (manager) · Mike (clawback approval) Replaces: 2024/2025 Variance Reports · manual settlement Build: ~1 day

Per-period commission view

Sales rep Variance entries Commission base Variance clawbacks AR clawbacks Net payout Status
Tony Granillo 179 $24,581.20 −$316.40 $0.00 $24,264.80 Ready
Michael De La Torre 94 $16,202.30 −$48.00 $0.00 $16,154.30 Ready
George Tovar 49 $8,113.05 −$200.00 −$329.84 $7,583.21 Pending Mike's approval (1)
Brett Christensen 5 $870.40 $0.00 $0.00 $870.40 Ready
Jeff Billman 3 $520.10 $0.00 $0.00 $520.10 Ready
Click a rep to drill into their per-rep variance detail. The "Pending Mike's approval" rows surface clawback approvals waiting on Mike.

Tenant commission splits (separate flow — B2B revenue-share, not paycheck)

Tenant Customer Period shipments Profit Split Tenant cut SLS net QB code
Total Transportation (TTD) Global Industries 23 $24,200 60/40 $9,680 $14,520 LTL
Total Transportation (TTD) Valmont Telecommunications 11 $8,540 60/40 $3,416 $5,124 LTL
Westset Distribution Joseph Joseph, Inc 15 $11,300 per-shipment 35% WST
Per BILLING SOP FOR GLOBAL INDUSTRIES: when a customer is booked under a tenant level, SLS invoices the tenant (not the end customer) with an itemized line backing out the tenant's profit-split percentage. Math: $1,000 carrier charge + $1,000 profit → $2,000 sell rate stays in TMS → invoice TTD for $1,600 ($400 = TTD's 40% commission) → TTD invoices end customer the full $2,000 and keeps $400.
Question · Settlement export format
Once Prism owns commissions, what format flows to QB AP? Per-rep monthly bill in QB Vendor table, or journal entry, or paycheck integration? This intersects with whether QBO migration ships before or after this workspace.
Default: per-rep monthly bill in QB Vendor table, exported as the same CSV Business Importer accepts today. When QBO ships, switch to direct API push.
Question · Tenant commission model
Model tenant commissions as a dedicated TenantCommissionAgreement (profit-split %, QB itemize code, optional per-customer overrides), or as a special MarkupRule with negative percentages? Are there tenants beyond TTD and Westset to plan for?
Default: dedicated TenantCommissionAgreement model — the math (split of profit) and routing (invoice goes to tenant, not end customer) are categorically different from MarkupRule.

Overview Variance & Commission Settlement queue George Tovar — Nov 2025

Per-Rep Variance Detail

Drill-in view from the Settlement Queue. Every variance entry that contributed to one rep's commission base for the active period.

Opens from: Settlement Queue row click

Header — George Tovar · November 2025

Period summary
49 finalized variance entries · 12 LOWER BILL outcomes · 3 disputed
Gross commission base: $8,113.05
Variance clawback: −$200.00 (1 entry)
AR clawback: −$329.84 (1 entry)
Net payout: $7,583.21
Approvals required
1 clawback pending Mike
Tamerica Products · $329.84 · 1331 days aged

Per-shipment variance entries

SLS Customer Carrier Category Original margin New margin Commission base Outcome
SLS25310071 US Air Conditioning XPO Logistics W&I $193.08 $230.49 $214.49 + $214.49
SLS25318049 US Air Conditioning XPO Logistics OTHER $143.90 $155.42 $139.42 + $139.42
SLS25239028 US Air Conditioning XPO Logistics CBOL $215.30 $164.00 $148.00 + $148.00 (acc'd in quote)
SLS218353 Silver Spur T-Force W&I $85.25 $65.23 $49.23 George liable
Math per row: commission_base = finalized_sell − finalized_raw − $16. When < 0, it becomes a variance clawback against the rep.
Question · Sales rep termination handling
Today Banyan uses a _fired{date} username convention. Adopt as-is, or use a cleaner effective_to date on CommissionContract?
Default: effective_to on CommissionContract. Open clawbacks transition to "uncollectable" tracking. Reactivation un-stamps the date. Banyan integration mirrors the convention going outbound.

Overview Variance & Commission Clawback ledger

Clawback Ledger

The Uncollectable Agent Clawbacks registry. AR-aging-driven clawbacks with the 1.5% monthly compounding done automatically.

Replaces: Uncollectable Agent Clawbacks tab in the Variance workbook Approval gate: Mike

Open clawbacks

Rep Customer SLS Aging Open balance Carrier cost Late fees Pay-back Batch
George Tovar Tamerica Products SLS212430 1331 days $445.83 $381.32 −$51.48 $329.84 CB 2/16-28
Steve Schuh Beauty 21 Cosmetics SLS40245084 492 days $1,530.12 $1,269.10 −$171.33 $1,097.77 Pending
Steve Schuh Beauty 21 Cosmetics SLS22209014 197 days $398.87 $398.87 −$53.85 $345.02 Pending
Late-fee math: 1.5%/period compounded across 30/60/90/120/150/180/210/240/270/360-day buckets. Pay-back = Carrier Cost − Total Late Fees. Computed automatically from current aging.

Approved batches (this period)

Batch Approved # clawbacks Total pay-back Settlement
CB 11/1-15 11/16/25 · Mike 4 $1,243.18 Exported to QB

SOP-driven use cases supported (across the 3 Variance pages)

  1. Per-rep commission report period view (Elvira's **commission rpt N-YYYY tagging)
  2. Per-period archive view (read-only audit) (Variance sheet — 99% Finalized status)
  3. Uncollectable AR clawback math (1.5% / 30-360 day buckets) (Uncollectable Agent Clawbacks tab)
  4. Variance-driven clawback when commission_base < 0 (Variance sheet rows with actual_loss)
  5. Claim-driven clawback (placeholder for claims module) (Claim Clawbacks empty tab)
  6. Settlement export to QB AP per rep (today: hardcoded in special_qb_report)
  7. Sales rep lifecycle awareness — termination, reactivation (Creating a Sales Rep Banyan)

Overview Statements & Collections Aging dashboard

Aging Dashboard

Entry point for the Statements & Collections Workspace. Customer-side AR aging at a glance, with operations toolbar and special-client cadence cards. Click a bucket or customer to drill into Customer Detail.

Primary users: Accounting team Replaces: QB Pending tab · AR HOLD Report · weekly statements · special-client batch reports Build: ~0.5 day

Aging dashboard

Current
$182,403
1–30
$84,210
31–60
$22,815
61–90
$8,402
91+
$3,917
360+ → clawback
$2,028

Operations

Top customers by aging

CustomerOpen balanceCurrent1–3031–6061–9091+360+
Stage Depot Inc$28,402$18,200$8,402$1,800
NLS Lighting$22,100$14,300$7,800
Air Global$18,420$10,200$5,820$2,400
Tamerica Products$2,028$2,028
Click a customer or aging bucket to drill into the per-customer Statement Detail view.

Special-client cadences

Air Global
Cadence: Weekly Monday batch, 2-week post-delivery lag
Next batch: Mon 12/01
Pending: 14 shipments
Matfer
Cadence: Monthly 1st-week batch, prior month
Next batch: Mon 12/01
Pending: 47 shipments
Achem
Cadence: Weekly billing report (Friday)
Next report: Fri 11/28
Pending: 9 shipments

Outbound A/R submissions

Moody's Analytics Pulse
Cadence: Monthly · per-customer aging buckets (Current / 1-30 / 31-60 / 61-90 / 91+ DBT)
Last submission: 11/01 · 142 customers
Next submission: 12/01 · ~148 customers
Inbound: per-customer % on time, DBT, DCL, EZ Cover Risk Rating — feeds Client Lifecycle credit evaluation. (A/R Data Submission Guidelines)
Question · Statement template
Today statements are emailed from QB with QB's default formatting. Move to a Prism-generated PDF with our branding? Or keep QB visual identity until QBO migration?
Default: Prism-generated PDF, branded, with same field structure as QB output. Customer-facing change is just the design refresh.

Overview Statements & Collections Aging dashboard Stage Depot Inc

Customer Statement Detail

Drill-in view from the Aging Dashboard. Per-customer open invoices, payment history, contact actions, hold management.

Opens from: Aging Dashboard customer-row click, or aging-bucket drill

Header — Stage Depot Inc

Customer
Stage Depot Inc · HOUSE rep · Net 30
Sales contact: George Tovar
AR contact: ar@stagedepot.com
Send via: Mail · POD required ✓ · BOL required ✓
Aging snapshot
Open balance: $28,402
Current $18,200 · 1–30 $8,402 · 31–60 $1,800 · 91+ $0

Open invoices

InvoiceSLSDateDueDaysAmountStatus
4592SLS2530502011/0612/0622$842.62Sent
4571SLS2523902810/3011/29−1 (overdue)$842.62AR HOLD: Pending POD
4540SLS2522309910/2411/23−7 (overdue)$1,165.21Sent

Recent activity

11/20 · System
STATEMENT_SENT — November weekly batch · 18 invoices
11/18 · Ashley
CALL_LOGGED — left voicemail re INV 4571 missing POD
11/04 · System
INVOICE_HELD — INV 4571 · reason: Pending POD

Overview Statements & Collections AR HOLD list

AR HOLD List

Invoices currently on HOLD with structured reasons. Replaces the QB AR HOLD Report SOP (today: free-text in QB Ref# field, monthly manual report).

Cadence today: Monthly report In v3: Live view, hold release writes Activity, releases route back to Send Workspace

Held invoices

8 on hold $5,193 total
SLSCustomerAmountHeld sinceReasonOwner
SLS25239028Stage Depot Inc$842.6211/04Pending PODCS — Ashley
SLS25254032Air Global$1,200.6411/06Pending final sell rate from TonyAudit — Angela
SLS25247016Allstate Floral$3,150.0009/22Service issue under reviewMike
Reasons are structured (not free-text). Releasing a hold writes an Activity row and re-routes the invoice into the Send Queue.

SOP-driven use cases supported (across the 3 Statements pages)

  1. Weekly open invoice statements (Sending Statements)
  2. Collections report — twice-weekly aging review (Weekly Collection Report SOP)
  3. AR HOLD management with structured hold reasons (vs free-text in QB Ref#) (AR HOLD Report SOP)
  4. Special-client invoice report cadences (Air Global Weekly, Achem Weekly Billing, Monthly Matfer)
  5. Late-arriving docs flow — update in-flight QB invoice (Docs Received for shipment already in QuickBooks)
  6. QB Pending / Bills To Be Paid view (carrier-side AP) (To Be Paid-Unbilled Report)
  7. Per-customer drilldown with payment history and contact actions (Banyan Client Invoicing, Prism Quickbooks Bill-Invoice Process)
  8. Moody's Pulse outbound A/R submission — monthly aging file → per-customer credit metrics back (A/R Data Submission Guidelines)

Client Lifecycle (smaller surface)

Onboarding, credit management, terms verification, level changes. Today distributed across Banyan + Prism + QB + 4 spreadsheets.

Build: ~1 day (after core workspaces stabilize) Defer: dedicated UI to Phase 7+; data model lands earlier

Client lifecycle states

Pending Credit App
One-time / Pre-pay
Building Internal Credit
Net 15 / 30
House Account
DO NOT SELL
Inactive

Per-client view (sketch)

Identity & contacts
Company name (matches QB Customer Name) · DBA · physical / mailing address · sales contact · accounting contact · users with portal access
Credit & risk
Moody's % on time · Days Beyond Terms (DBT) · DCL · EZ Cover Risk Rating · Credit App date · CC Auth on file · Credit limit
Billing requirements
Send via: Email / Mail / EDI
Required docs: POD ☐ BOL ☐ W&I ☐
Reference numbers required: BOL ☐ PO ☐ PRO ☐
Cadence & markup
Billing cadence: per-shipment / weekly / monthly
Min markup, target margin %
Auto/Add rules → linked to MarkupRule table
Carriers & defaults
Assigned carriers (currently 23 default LTL carriers per onboarding SOP)
Default freight characteristics (NMFC, sub, class)
Default accessorials with frequencies
Lifecycle history
Reactivation events · level changes · credit-line updates · terms changes — all as Activity rows
Question · Client level enforcement
Today Banyan has "quote-only" client levels (SLS Freight, SLS Freight - <Agent>, SLS Freight - Total Transportation, Westset Distribution) that must be updated to a real customer before booking. Should Prism enforce this with a hard block on booking? Or surface it as a warning + auto-suggest?
Default: warning + auto-suggest (don't block; route to Resolution if not corrected within 24h).

SOP-driven use cases supported

  1. New client registration (Adding New Clients into the TMS(s), Client Registration AGENT)
  2. Credit application & evaluation with Moody's data (Credit Application, OFFICE USE ONLY section)
  3. CC Auth Form on file (CC Auth Form Current — terms encoded)
  4. Customer terms classification (New Client Terms Verification)
  5. Pending / pre-pay / one-time / house monitoring (Pending Credit App spreadsheet, Building Internal Credit)
  6. Account reactivation (Reactivating Accounts SOP)
  7. Quote-only level handling (Changing the Client Level - Banyan)
  8. Default shipment / accessorial defaults per client (Updating Client Defaults - Banyan)

Vendor & Carrier Management (smaller surface)

QuickPay, NOA inquiries, payment status, sales rep onboarding, unknown-shipment intake.

Build: ~0.5 day (Phase 7+ for full UI) Data model: lands during Wave 4–5 to support related workflows

Sketch

Carrier registry
35 active LTL carriers · per-carrier QuickPay flag · NOA status (factoring) · QB vendor mapping · payment terms

For T-Force specifically: shows the Blanket→sub-account mapping (today done by hand)
Sales rep / agent registry
Per-rep contracts, commission rate, fixed deduction, clawback rules · effective dates · Banyan / Prism user accounts

Termination = effective_to date set; reactivation = effective_to cleared
QuickPay queue
FreightBills with QuickPay requested · approval status · per-carrier QuickPay terms (typical: 24h pay for 2% discount)
Unknown shipments inbox
Carrier bills that don't match any Prism shipment · research queue · creates Resolution card on resolution
Question · Factoring / NOA workflow
When a carrier sends an NOA (factoring company has bought their receivables), payment routing changes. Today this is manual — mark on the bill, look up factoring co. in a spreadsheet. Build a structured NOA flow now, or defer?
Default: defer dedicated UI; add a Carrier.factoring_contact field plus a Resolution category so today's manual flow at least leaves a trail.

Activity Feed (cross-cutting spine)

One time-stamped, role-filtered log per shipment. Replaces the four scattered note tables (Invoice.notes, Invoice.history, Shipment.special_notes, Client.notes, Carrier.history_notes), the "Check Call History", and the chronological logs the team manually formats into single Excel cells today.

Build: ~1 day (lands in Wave 2 with Audit Workspace) All workspaces ride on it

Sample feed (right rail of any workspace)

11/20/25 14:22 · Kara Lohse
INVOICE_SENT — bulk send batch · client invoice with reweigh fee · POD attached
11/19/25 16:15 · Kara Lohse
RESOLUTION_FINALIZED — itemized $286.81 reweigh · auto/add markup applied 15%
11/19/25 14:05 · System
CHARGE_ADDED — LFTGT · Raw $249.40 · Profit Markup $37.41 · suggested via MarkupRule "US Air Conditioning × W&I"
11/18/25 09:30 · Racquel Martinez
RESOLUTION_OPENED — variance −$249.40 exceeds $20 threshold · routed to Audit team
11/18/25 09:30 · System
BILL_DISPUTED — auto-flagged · carrier invoice $490.34 vs quote $240.94
11/11/25 17:45 · System
STATUS_CHANGE — Delivered (per carrier API)
11/06/25 08:14 · George Tovar
STATUS_CHANGE — Booked → Dispatched · pickup confirmed

Visibility roles

Each activity row carries a visibility role. Operators filter the feed by role.

all billing ops broker client tenant

Activity kinds (initial set)

NOTE STATUS_CHANGE ISSUE_OPENED ISSUE_RESOLVED BILL_MATCHED BILL_DISPUTED INVOICE_APPROVED INVOICE_SENT INVOICE_PAID INVOICE_HELD INVOICE_RELEASED QB_EXPORTED FORCE_PUSHED_TO_QB CHARGE_ADDED CHARGE_VARIANCED DOC_UPLOADED DOC_RECEIVED_LATE RESOLUTION_OPENED RESOLUTION_FINALIZED MANAGER_REVIEW COMMISSION_PERIOD_TAGGED CLAWBACK_RAISED EMAIL_SENT CALL_LOGGED CARRIER_DISPUTE_FILED APPROVAL_REQUESTED / GRANTED / DENIED
Question · Backfill scope
Forward-only writes for new rows, with a one-time read-only render of legacy notes inline? Or full migration of existing notes into Activity rows?
Default: forward-only, with read-through layer for legacy notes. Cheaper and lower-risk; doesn't mutate history.

Auto/Add Rule Engine (cross-cutting)

Your Auto Add Bill List - Master.xlsx, made first-class in the system. Today: 5 tabs, 30 carriers × 16 accessorials, 225 active customers + 189 inactive, plus Westset and Total Trans tenant overlays. We seed the engine from your exact file on day one.

Lands in: Wave 4 (with Auto-FB-Audit) Powers: Audit Workspace · Resolution Workspace

Rule structure (per cell in Auto Add Bill List)

Each cell in your spreadsheet has these four numbers. The engine reads them as-is.

Min add to cost
e.g. $20
Flat rate to add
e.g. $50
% to add to cost
e.g. 35%
Total not to exceed
e.g. $250 · or "email for approval"

What "precedence" means — in plain English

When a charge needs to be marked up, more than one rule from your Auto Add Bill List could apply at the same time. Precedence is the rule for which one wins.

This is a backend mechanic, but it matters because if we get the order wrong, the system applies the wrong markup and Cara/Angela have to override every time.

Worked example — NLS Lighting ships with T-Force, gets hit with a lift gate fee

Three rules from your spreadsheet could fire. Only one should actually apply.

① Active Customer List
Looking up NLS Lighting row, LFTGT column:
Min $10 · 15% markup
Matched ✓
② Carrier Specific Notes
Looking up T-Force row, LFTGT column:
(empty cell — no override)
Skipped
③ Global default
Min $20 · 35% markup · max via email
Always available as the fallback.
Skipped (① already matched)
Engine applies the customer rule (①)
Carrier billed lift gate at $100 → engine adds 15% markup ($15) on top, with a $10 floor (rule says min $10) → customer is billed $115 for the lift gate.
Why the customer rule wins: it's the most specific to this exact relationship. NLS Lighting's row was set up by Cara/Angela for a reason; the global default is just a catch-all.

The full ranking (most specific wins)

When the engine looks up a markup, it checks in this order. The first matching rule wins; later rules are skipped.

#LevelWhat it meansHow often it firesExample from your spreadsheet
1 customer × carrier A rule for one specific customer with one specific carrier (rare exception cases). Rare "EDI Express × CBOL: DO NOT auto add — SEE Mike"
2 customer The customer's row in your Active List. Applies for any carrier they ship with. ~90% of cases "NLS Lighting / LFTGT: 15% markup, $10 min"
3 tenant × customer For customers under a tenant org (Westset, TTD), the tenant's default rule. Only fires if level ② had no entry. For Westset/TTD customers without their own customer-level rule "Westset default: $20 min, 35% on everything"
4 carrier A rule that applies for any customer using that carrier. Used very rarely in your data. Rare (your Carrier Specific Notes tab is mostly empty — this level rarely fires)
5 global default The catch-all if nothing else matched. Per your Client Registration form: $20 min, 35%, max via email approval. When a brand-new customer/accessorial combo has no rule yet "$20 min, 35%, email for max approval"

Sentinel values (special signals in your spreadsheet cells)

  • NONE — explicitly disabled (e.g., Allstate Floral). Engine does not auto-add for this customer/accessorial.
  • email / Angela — manual approval required. Engine routes to operator instead of auto-applying.
  • at cost (include any processing fee) — pass-through (this is the universal Lumper rule).
  • DO NOT auto add — SEE Mike — hard stop with a note. Engine refuses to suggest; flags to operator.

The actual question I'm asking the customer

When a Westset customer (e.g., Joseph Joseph) has BOTH a customer-level rule AND the Westset tenant default applies, which one wins?

My proposal: the customer-level rule wins (most-specific principle).

An alternative some teams want: the tenant default wins, so all Westset customers get treated uniformly regardless of customer-level overrides. That's the disagreement to surface.

Question · Scoping precedence confirmation
Confirm the ranking above — particularly that customer-level (level 2) beats tenant × customer (level 3). The team's call: do you want a Westset customer's individual rule to override the Westset default, or should the tenant default always apply for tenant customers?
Default: most specific wins; customer-level beats tenant-default.

Overview Cross-cutting Force-billing flow

Force-billing Flow

Per the Friday meeting: special-client invoicing where SLS pushes to QB regardless of shipment state, driven by client accounting deadlines (month-end close, weekly billing cycles). Distinct from the 5-day SLA force-push (Audit Workspace).

Drivers: Matfer (month-end), Air Global (2-week post-shipment), Achem (weekly Friday) Per SOP: Air Global & Matfer SOPs · Friday meeting decision

Two distinct force-bill triggers

5-day SLA force-push (Audit Workspace)
Trigger: any shipment passes the 5-day post-delivery audit mark without resolution
Authorization: Manager override required
Effect: pushes the existing freight bill / invoice to QB with placeholder data where missing
Activity: FORCE_PUSHED_TO_QB with reason text
Client cadence force-bill (this page)
Trigger: client's billing cadence date arrives (month-end, weekly Monday, etc.)
Authorization: scheduled / role-based — runs as a Celery beat job, exception cases need manager
Effect: creates the freight bill + invoice for shipments that may still be in transit, with no validations
Activity: FORCE_BILLED_BY_CADENCE per shipment

UI flow — illustrated

Step 1 — cadence triggers
Celery beat: every Monday 6am Pacific for Air Global; 1st-of-month for Matfer.
Workspace queues a "Force-bill batch" notification on the Statements Dashboard for the operator.
Step 2 — preview batch
Operator opens the Statements Dashboard cadence card. Workspace shows pending shipments, including any still in transit. Each row has badges: In transit No POD No carrier invoice.
Step 3 — confirm + execute
Operator confirms. System creates freight bills with placeholder PRO# = "No Carrier Invoice", marks Export Issues with auto-generated notes, resolves any blocking accounting issues with provenance.

Per-client cadence card (example)

⚡ Force-bill batch · Air Global · Mon 12/01
14 shipments shipped 11/15-11/21
8 still in transit 11 no POD 14 no carrier invoice
Behavior: create FBs with placeholder PRO# = "No Carrier Invoice"; auto-resolve any accounting issues with note "resolving to transfer for Air Global's weekly invoicing"; mark Export Issue with placeholder note; push to QB as a single batch.
Resolved · Force-billing functionality
System will support force-billing for clients with accounting-deadline cadences. Auto-runs on schedule, with operator preview + confirm. Exception cases (off-cadence force-bills) require manager role.
Per Friday meeting: Joseph took the action item to add this illustration to the UI. Matfer = month-end push; Air Global = weekly 2-week-prior push.

SOP-driven use cases supported

  1. Air Global weekly Monday batch with 2-week ship-date lag (Air Global - Weekly processing invoices delivered 2 weeks prior)
  2. Matfer monthly 1st-week batch for previous month's shipments (Monthly processing invoices delivered the previous month — Matfer)
  3. Achem weekly billing report (Friday cadence) (Achem Weekly Billing Report SOP)
  4. Force-create freight bills with PRO# = "No Carrier Invoice" placeholder (Air Global, Matfer SOPs)
  5. Auto-resolve blocking accounting issues with provenance notes (both manifest SOPs)
  6. Mark Export Issue placeholder so audit team picks up post-batch (both manifest SOPs)

Overview Cross-cutting Agentic coaching

Agentic Coaching Metadata

New from the Friday meeting: the workspace acts as a sensor, capturing user activity to power productivity coaching, auto-suggestions, and learned patterns over time. No seed training required — system learns from actual use.

Lands in: Wave 2+ (capture infrastructure with Activity Feed); coaching surfaces ship in Wave 5+

What gets captured

User-velocity signals
Time-on-task per workspace
Click paths and decision points
Average margin per audit (per user)
Frequency of override vs. accept on Auto/Add suggestions
Categories that take longer to resolve
Patterns across day/week/month
Carrier & customer signals
Carrier-by-carrier dispute success rate
Lane performance (on-time, variance frequency)
Customer-by-customer payment behavior
Issue category frequency per relationship
Auto/Add rule application rate vs. override rate

What the agent surfaces

Auto-suggestions in the operator's flow
"Carriers like XPO with this exact issue type historically settled at 65% of disputed amount — draft dispute template ready"

"This customer's last 4 W&I disputes were rejected — flag for manager before submitting"

"You typically batch Air Global shipments on Monday morning; would you like to run the cadence preview now?"
Coaching suggestions
"You spent 12 min on this audit; team median for similar variance is 4 min — would you like to see the auto-applied path?"

"You override Auto/Add suggestions 80% of the time on LFTGT — should we update the customer's MarkupRule?"

"3 of your last 10 disputes succeeded; team avg is 7/10 — review carrier-specific dispute patterns"

Carrier dispute templates (auto-suggest)

LLM-assisted dispute template
Trigger: operator marks an issue with category SERVICE_FAILURE on XPO Logistics
Suggestion: pre-fill dispute email with template incorporating: this carrier's typical settlement language, our contract terms, this customer's prior dispute outcomes, the specific accessorial discrepancy
Operator can: send-as-suggested, edit, regenerate, or skip
Per Friday meeting: "auto-suggest functionality powered by an LLM to assist users with task completion and carrier dispute templates"
Resolved · Agentic coaching adoption
System will implement agentic monitoring using activity-feed metadata. The interface is the sensor; an agent learns over time and surfaces coaching + auto-suggestions in the operator's flow.
Per Friday meeting: extends to learning carrier behavior, customer payment patterns, lane performance — not just user coaching.

Open Questions — Consolidated

Every yellow flag in this deck, in one place. Green-marked items resolved at Friday's meeting. If you don't reply on the remaining ones, we ship the listed default.

Audit Workspace
Force-push override authorization
When a shipment hits day 5 post-delivery without audit completion, who can authorize the force-push to QB?
Resolved: manager override required (role-based, not name-based). Auditor cannot self-authorize. Cross-trainable so any user in the manager access group can approve.
Send Workspace
Bulk-send error handling UX
When a row in a bulk send fails (Stripe error, missing doc, mail-merge), do we email the operator, surface in-app only, or both?
Default: in-app summary in a "Needs attention" pile; failed rows become Resend Required issues. Email digest opt-in per user.
Send Workspace
Approval before send
Should the Send Detail allow direct send, or require an Approve step?
Resolved: direct send based on user role permissions. No separate manager-approval queue for normal invoices. Edge cases gated by role.
Audit Queue
Default sort order
Sort by days-since-delivery, by variance, or by something else?
Resolved: Stage first, Days since delivery second. Yellow 5-day-breach pill still surfaces SLA breaches visually within each stage group.
Resolution Workspace
Issue category seed list
Joseph took the action item to provide ~30 distinct codes for Angela & Mike to review. Once confirmed, this resolves.
Status: code list pending Joseph's prep; review at next Monday meeting (1pm-3pm Pacific).
Resolution Workspace
Manager review threshold
Today everything bottlenecks at Angela. Auto-route only above what threshold?
Resolved: auto-route below threshold; threshold is low (closer to historical $16 buffer than $200). Initial values: $16 absorb (no re-bill), $16-$50 auto-apply MarkupRule, >$50 needs human review. Configurable per category; LTL low.
Variance & Commission
Settlement export format
Per-rep monthly bill in QB Vendor table, journal entry, or paycheck integration? Intersects with QBO migration timing.
Default: per-rep monthly bill in QB Vendor table, exported as the same CSV Business Importer accepts today. Switch to direct QBO API push when QBO ships.
Variance & Commission
Sales rep termination handling
Adopt Banyan's _fired{date} username convention as-is, or use a cleaner effective_to date on CommissionContract?
Default: effective_to on CommissionContract. Banyan integration mirrors the convention going outbound.
Statements & Collections
Statement template
Today statements are emailed from QB with QB's default formatting. Move to Prism-generated PDF with our branding, or keep QB visual identity until QBO migration?
Default: Prism-generated PDF, branded, with same field structure as QB output.
Client Lifecycle
Client level enforcement
Banyan "quote-only" client levels (SLS Freight, SLS Freight - <Agent>, etc.) must be updated to a real customer before booking. Hard block, or warning + auto-suggest?
Default: warning + auto-suggest; route to Resolution if not corrected within 24h.
Vendor & Carrier
Factoring / NOA workflow
When a carrier sends an NOA (factoring co. has bought their receivables), payment routing changes. Build a structured NOA flow now, or defer?
Default: defer dedicated UI; add Carrier.factoring_contact field plus a Resolution category so today's manual flow leaves a trail.
Activity Feed
Backfill scope
Forward-only writes for new rows, with a one-time read-only render of legacy notes inline? Or full migration of existing notes into Activity rows?
Default: forward-only, with read-through layer for legacy notes.
Auto/Add Rule Engine
Scoping precedence
Customer × carrier > customer > tenant × customer > carrier > global. Confirm — particularly whether a Westset customer's customer-level rule beats the Westset tenant default.
Default: most specific wins; customer-level beats tenant-default.
Variance & Commission
Tenant commission model
Per the Global Industries SOP: TTD-tenanted customers are invoiced through TTD with a 60/40 profit split. Model as a dedicated TenantCommissionAgreement (profit-split %, QB itemize code, optional per-customer overrides), or as a special MarkupRule with negative percentages? Are there tenants beyond TTD and Westset to plan for?
Default: dedicated TenantCommissionAgreement model — the math (split of profit) and routing (invoice goes to tenant, not end customer) are categorically different from MarkupRule.

Build Timeline — Agentic Development

Re-estimated for agentic development cycles. Each engineering wave is roughly a focused day; total ~10 build-days, ~3–4 calendar weeks including validation and iteration with your team.

Build days: ~10 Calendar weeks: 3–4 (with daily Kara/Angela/Elvira validation) Compare to v3 plan: 24–30 weeks under traditional dev cycle

Wave-by-wave

D1D2D3D4D5D6D7D8D9D10D11D12D13D14D15D16D17D18D19D20
0.5d · Wave 1 Surfacing fixes
D1
1d · Wave 2 Activity Feed + Audit Workspace
D1–D2
0.5d · Wave 3 Send Workspace
D3
1.5d · Wave 4 Lifecycle + MarkupRule + Auto FB Audit
D3–D5
1d · Wave 5 Resolution Workspace
D5–D6
1d · Wave 6 Variance + Commission + Clawback
D7–D8
0.5d · Wave 7 Statements & Collections
D8
1d · Wave 8 Banyan ingestion (read-only mirror)
D9–D10
0.5d · Wave 9 Cutover (Prism = billing-of-record)
D10
2d · Phase 11 QBO API integration
D11–D14 (after QBO sandbox cutover)

What the agentic estimate covers vs. doesn't

Covered in build days
Model + migration
Views + URL routing
Templates (functional, low-fi)
Activity hooks at write-points
Unit tests for new logic
Integration test for happy path
Documentation update
Calendar overhead (not in build days)
Daily 30-min validation calls with Kara / Angela / Elvira
UX iteration cycles based on operator feedback
Visual polish & theming
Production data backfill
Performance tuning at scale
Phase 10 QBO migration project (mostly accountant time)

Recommended cadence

Week 1: Waves 1–3 (Surfacing + Activity/Audit + Send). Kara reviews before her leave. Daily 30-min standup.
Week 2: Waves 4–5 (Lifecycle + MarkupRule + Resolution). Angela becomes the primary daily reviewer. Friday: full team demo.
Week 3: Waves 6–7 (Variance + Statements). Elvira joins daily review. Replay one full clawback period as cutover gate.
Week 4: Waves 8–9 (Banyan mirror + cutover). Two weeks dual-running before write traffic flips. Phase 10 QBO project starts in parallel.

Phase 10 (QBO migration) and Phase 11 (QBO API) run later, gated by accountant-driven cutover. Phase 11 is ~2 build-days under agentic dev, vs. 6–9 weeks traditional, per the QBO inventory companion doc.