MOM'S WHOLESALE CLOTHING BUSINESS OS — PROJECT CONTEXT
For AI assistants (Claude, Claude Code, etc.) picking up this project
Last updated: April 17, 2026
Owner: Sam (Zalman) Treitel — sam@hookstreetcapital.com
End user: Sam's mother — primary operator, NOT a power user
STATUS UPDATE - 2026-05-07
This document is the original broad architecture, not the current execution plan.
Current direction:
- Do not create a new
mom-wholesale-osrepo for execution. - The active build is
CM_Invoice_System. - The current working Google Sheet is
CM Invoice System_v2:1nMTEl_eYpAsQ774Qe0MNEcbib8Qgj2X6_9PfeZk32iI. - The current bound Apps Script is
106wdSg6lMTsqBaGBtH93j_D0AbSrjUtKuRM2WzdjKE7tq5Vqbe1ZQPAp. - Live Apps Script source was cloned and confirmed to match local Phase 7.6
Code.js/appsscript.json. CM_Invoice_System_FINALis now treated as a reference/template, not the active production target.- The retired standalone clone lives in
archive/graveyard/2026-04-28_mom-clone-redundant/.
Most important new finding from the local Excel files:
CM_Invoice_System_FINAL.xlsxandINVOICE_SYSTEM_AUTOMATED_BASE.xlsxpreserve a wide 277-columnInvoice_Recordmodel where one invoice is one row, including up to 15 item blocks and size quantities.- Sam confirmed that wide model is required as the canonical invoice ledger.
- Local
CM_Invoice_System/Code.jsnow patchesInvoice_Recordinto the 277-column one-row invoice archive and can restore saved invoice rows back intoInvoice_Entry. - Optional normalized line-item/reporting tabs may be added later, but they should not replace the wide invoice archive as source of truth.
WHAT THIS IS
Google Sheets business OS for a women's wholesale clothing business.
Replacing: manual Excel, hand-written orders, Box folder chaos, copy-paste invoices.
Building: product data, orders, invoicing, AR tracking, vendor management, reporting.
End user is not a power user. All complexity must be hidden behind simple forms, dropdowns, buttons. Front-end dead simple. Back-end can be sophisticated.
BUSINESS CONTEXT
- Type: Women's wholesale clothing
- Manufacturing: Turkey + Hong Kong (international wires, multi-currency)
- Sales cycle: Two major show events per year (Spring/Summer + Fall/Winter)
- Buyers: Retail store buyers from multiple states
- Order flow: Buyers place orders at shows → goods manufactured → shipped months later → invoiced on shipment
CRITICAL WHOLESALE CONCEPTS
Orders ≠ Invoices
Order placed at show (Feb) → goods ship (Aug) → invoice created on shipment. Separate tabs, separate stages.
Pipeline: Order Placed → Confirmed → In Production → Shipped → Invoiced → Paid/Partial/Overdue
Chargebacks (biggest gap in original plan)
Buyers short-pay invoices, deduct without authorization.
Example: Invoice $4,200 → buyer pays $3,800 and deducts $400 for "late delivery."
MUST track: invoice amount, payment received, deduction amount, reason, disputed Y/N, credit memo.
Without this, AR numbers are always wrong.
Net Terms
Due date = ship date + terms days (Net 30 / Net 60 / 2/10 Net 30 — per customer).
AR aging calculated from DUE DATE, not invoice date.
Seasons
Every record (style, order, invoice) tagged SS or FW. Required for meaningful reporting.
Partial Shipments
One order → multiple shipments → multiple invoices.
Track: ordered qty vs. shipped qty vs. remaining vs. invoiced per order.
FULL TAB ARCHITECTURE
Source Tabs (manual entry)
| Tab | Purpose |
|---|---|
| Config | Settings, invoice/order counters, bank, Drive folder IDs, tax info |
| Styles_Master | Style #, name, description, sizes, colors, pricing, season, status |
| Customers | Name, contact, address, terms, resale cert #, cert expiry |
| Orders_Log | Order #, customer, date, season, items/qtys/prices, status |
| Invoices_Master | Invoice #, order #, customer, ship date, due date, items, total |
| Payments_Log | Invoice #, payment date, amount, deduction amount, reason, method |
| Chargebacks_Log | Invoice #, deduction, reason, disputed Y/N, resolution, credit memo # |
| Vendors | Name, country, currency, SWIFT, bank details |
| Vendor_Payments | PO #, amount, currency, FX rate, USD equivalent, wire confirmation # |
| Samples_Tracker | Style, sent to, sent date, expected return, returned Y/N, converted |
Derived Tabs (formulas only)
- Invoice_Register — Open/Partial/Paid/Overdue auto-status
- AR_Aging — from due dates (Current/30/60/90/120+)
- Collections_Dashboard — who owes what, how late, next action
Output Tabs (print-ready)
- Print_Invoice — formatted invoice driven by invoice # input
- Order_Confirmation — printable order summary
- Price_List — current season line sheet from Styles_Master
Reporting Tabs
- Command_Center — monthly P&L
- Season_Report — season-level performance
- Sales_by_Style / Sales_by_Customer
APPS SCRIPT FUNCTIONS
| Function | Trigger | Action |
|---|---|---|
| generateInvoice() | Button | Create invoice record, assign #, increment Config counter |
| exportPDF() | Button | Export Print_Invoice as PDF, save to Drive |
| sendInvoiceEmail() | Button | Create Gmail draft with PDF attached, pre-filled to customer |
| confirmOrder() | Button | Mark confirmed, send confirmation email draft |
| flagOverdueInvoices() | Daily | Scan Invoice_Register, mark overdue, email owner |
| updateARaging() | Daily or on edit | Recalculate AR aging buckets |
| createDriveFolders() | One-time | Build full Drive folder structure |
CONFIG TAB (build first)
Business Name | Next Invoice # (1001, auto-increment) | Next Order # (5001, auto-increment) | Invoice Prefix (INV-) | Order Prefix (ORD-) | Business Address/Phone/Email | Bank Name/Routing/Account | Current Season (SS2026) | Invoice Drive Folder ID | Default Payment Terms (Net 30)
Rule: Use getConfigValue() pattern from BOS skill — NEVER hardcode row numbers.
DRIVE FOLDER STRUCTURE
Mom's Business OS/
├── Invoices/ (SS2026/ FW2026/ Archive/)
├── Orders/ (SS2026/ FW2026/)
├── Customers/Resale_Certificates/
├── Vendors/Wire_Confirmations/
├── Samples/
└── Reports/ (SS2026/ FW2026/)
BUILD PHASES
Phase 1 — Core Flow: Config → Styles_Master → Customers → Orders_Log → Invoices_Master → Print_Invoice → Apps Script (generateInvoice, exportPDF, sendInvoiceEmail) → Payments_Log → Invoice_Register → Drive folders
Phase 2 — AR & Collections: Chargebacks_Log → AR_Aging → Collections_Dashboard → flagOverdueInvoices daily trigger → Command_Center P&L
Phase 3 — Vendor & Reporting: Vendors → Vendor_Payments (multi-currency) → Samples_Tracker → Season_Report / Sales_by_Style / Sales_by_Customer → Price_List → Box → Drive migration
KEY BLIND SPOTS
- Chargebacks — not in original doc, most critical missing piece
- Orders ≠ Invoices — separate stages, separate tabs
- Net Terms + Due Dates — AR aging from due date
- Season tagging on everything
- Partial shipments — one order, multiple invoices
- Multi-currency vendor payments (TRY/EUR/HKD)
- Resale certificates with expiry tracking
- Show entry mode — simplified fast entry
- Box → Drive migration — planned transition
- Usability first — hide complexity for non-tech user
- Price list generation from Styles_Master by season
- Credit memo flow — accepted chargebacks reduce AR
NEXT SESSION PRIORITIES
- Config tab
- Styles_Master with dropdown validation
- Customers tab with terms + resale cert
- Orders_Log with season + status pipeline
- Invoices_Master with ship/due date calculation
- Print_Invoice output
- Apps Script: generateInvoice, exportPDF, sendInvoiceEmail
- Payments_Log + Invoice_Register
- AR_Aging from due dates
- Drive folder structure via Apps Script
Skill: /mnt/skills/user/business-os-spreadsheet/SKILL.md — Phase 1-7 exactly. Use getConfigValue(), SEQ column pattern, SUMIF with anchored ranges, IFERROR on FILTER, PDF export via UrlFetchApp with OAuth.
CURRENT STATUS (April 17, 2026)
2026-05-07 note: this status block is stale. Keep it as historical context only. See the status update at the top of this file and the current audit in CM_Invoice_System/CM_CURRENT_AUDIT_2026-05-06.md.
- Sheets OS: NOT BUILT
- Drive folders: NOT BUILT
- Apps Script: NOT BUILT
- Data migration from Excel/Box: NOT STARTED
- Context.md: DONE (this file + Gmail draft backup)