Files
lunarfront-app/planning/09_Domain_Batch_Repairs.md
Ryan Moon 5f8726ee4e Add planning documents for Forte music store platform
17 domain design docs covering architecture, accounts, inventory,
rentals, lessons, repairs, POS, payments, batch repairs, delivery,
billing, accounting, deployment, licensing, installer, and backend
tech architecture. Plus implementation roadmap (doc 18) and
personnel management (doc 19).

Key design decisions documented:
- company/location model (multi-tenant + multi-location)
- member entity (renamed from student to support multiple adults)
- Stripe vs Global Payments billing ownership differences
- User/location/terminal licensing model
- Valkey 8 instead of Redis
2026-03-27 14:51:23 -05:00

4.7 KiB

Music Store Management Platform

Domain Design: Batch Repairs

1. Overview

The Batch Repairs domain handles bulk instrument repair jobs from schools and institutions. This workflow replaces the current spreadsheet-based tracking system. A batch groups multiple individual repair tickets under one job — one approval, one invoice, one delivery event — while still tracking each instrument individually.

2. Batch Lifecycle

Status

Description

scheduled

Pickup from school scheduled — instruments not yet received

picked_up

Store has collected all instruments from school

intake_complete

All instruments assessed, individual tickets created, estimates compiled

pending_approval

Batch estimate sent to school contact — awaiting authorization

approved

School approved — all child tickets authorized to proceed

in_progress

Work underway — child tickets at various stages

ready

All child tickets resolved — batch ready for delivery

delivered

All instruments returned to school, invoice sent

invoiced

Invoice sent to school — awaiting payment

paid

Payment received in full

closed

Batch complete and reconciled

3. Database Schema

3.1 repair_batch

Column

Type

Notes

id

uuid PK

company_id

uuid FK

batch_number

varchar

Human-readable batch ID e.g. BATCH-2024-0042

account_id

uuid FK

School/institution account

contact_name

varchar

School contact person for this batch

contact_phone

varchar

contact_email

varchar

Where to send estimates and invoices

school_po_number

varchar

School's purchase order number if applicable

status

enum

See lifecycle above

scheduled_pickup_date

date

When store plans to collect instruments

actual_pickup_date

date

When store actually collected

promised_return_date

date

Committed return date to school

actual_return_date

date

When instruments actually returned

instrument_count

integer

Expected number of instruments

received_count

integer

Actual count received at pickup

total_estimated

numeric(10,2)

Sum of all child ticket estimates

total_actual

numeric(10,2)

Sum of all child ticket actual costs

approval_date

date

When school approved the estimate

approved_by

varchar

Name/signature of school approver

notes

text

Internal notes

legacy_id

varchar

Reference to source spreadsheet row/ID if migrated

created_at

timestamptz

updated_at

timestamptz

4. Batch Business Rules

  • Batch status auto-advances to 'ready' when all child repair_ticket records reach 'ready' or 'cancelled'

  • Batch approval cascades to all child tickets — sets each to 'approved' status

  • Individual tickets within a batch can still be worked and tracked independently

  • Total estimated and total actual are computed from child tickets — not manually entered

  • School contact can differ from account primary contact — stored per batch

  • School PO number is stored for institutional billing requirements

  • Cancelled child tickets excluded from invoice total but noted on batch summary

  • Instrument count vs received count discrepancy flagged at pickup — requires staff acknowledgement

5. Batch Workflow

5.1 Creating a Batch

  • Staff creates batch record — links to school account, sets contact, expected count, scheduled pickup date

  • Batch number auto-generated in sequence

  • Delivery event created simultaneously for the pickup leg (see Delivery domain)

5.2 Pickup & Intake

  • Driver collects instruments from school — delivery event records condition of each at pickup

  • Back at store, staff creates individual repair_ticket for each instrument

  • Each ticket linked to repair_batch_id

  • Technician assesses each instrument — sets estimated_cost per ticket

  • Once all tickets have estimates, batch status moves to 'pending_approval'

  • Batch estimate report generated — itemized list of all instruments and estimated costs

5.3 Approval

  • Estimate sent to school contact via email (PDF attachment)

  • School approves — approval date and approver name recorded on batch

  • All child tickets set to 'approved' — work begins

  • School may reject specific instruments — those tickets set to 'cancelled', excluded from work

5.4 Invoicing

  • Batch invoice generated when status reaches 'delivered'

  • Invoice shows each instrument, work performed, parts, labor — itemized

  • Total compared to estimate — any variance noted

  • Invoice sent to school contact email and available in customer portal

  • School PO number printed on invoice if provided

6. Reporting

  • Batch repair revenue by school/account

  • Average turnaround time per batch

  • Estimate vs actual variance report

  • Instruments per batch — count and breakdown by work type

  • Outstanding batch invoices (accounts receivable)

  • Technician productivity across batch and individual repairs