Prepaid Schedule
Extracts prepaid items from invoices and builds amortization schedules. Initial extract is best in Cowork (PDF/image invoices in a folder). Ongoing schedule maintenance is best in the Excel add-in (existing workbook).
Required inputs
For new items:
- Invoice files (PDF, PNG, or structured CSV/XLSX with invoice fields)
- Period of recognition — the close period the items are being booked into (e.g.,
2026-04)
For schedule maintenance:
- Existing prepaid workbook with the standard tabs (
Schedule,Inputs,Summary)
Workflow — new item extraction
Extract invoice fields. Run
scripts/extract_invoice_fields.py. For each invoice, extract:- vendor name, invoice number, invoice date
- amount (USD)
- service start, service end (or service period descriptor)
- category (subscription, insurance, rent, license, etc.)
- confidence per field (
HIGH/MEDIUM/LOW)
Fields the OCR cannot extract with confidence are blank and flagged for preparer. Don't guess service periods. If the invoice says "annual subscription" with no dates, mark
service_period_descriptor = "annual"withMEDIUMconfidence and let downstream logic infer 12 months (stillMEDIUM).Classify treatment. For each item:
EXPENSE_NOW— service period closes in current period or earlier, OR amount <materiality.prepaid_capitalize_threshold(default $1,000)PREPAID— service period extends >materiality.prepaid_min_monthspast period closeREVIEW— service period ambiguous, vendor unfamiliar, or amount unusually large
Build the amortization schedule. Run
scripts/build_amortization.py. The output is formulas, not values — schedule cells reference the inputs tab so changes propagate. For eachPREPAIDitem:- Capitalize full amount on service start month to account
1220 - Prepaid Software/Subscriptions(or the right prepaid account per category) - Amortize
=amount / monthseach month into the matching expense account - Round the final month to absorb cumulative rounding so the schedule fully amortizes
- Capitalize full amount on service start month to account
Generate JEs.
- Initial recognition (one JE per item): debit
1220, credit2010 AP(or1010 Cashif cash basis), full amount. - First-month amortization (consolidated across items by expense account): debit expense, credit
1220, monthly amount. - Both JE sets go to
JEs_Proposedforje-review.
- Initial recognition (one JE per item): debit
Build summary views.
- By month — total prepaid balance roll forward, amortization, ending balance
- By vendor — total open prepaid by vendor
- By category — total amortization by expense account for the current period
Workflow — schedule maintenance
For an existing workbook:
- Add new items to
Inputstab. - Recalculate the
Scheduletab — formulas pick up new rows automatically if the schedule uses dynamic ranges or table references. If hardcoded ranges, extend them. - Verify roll-forward: prior period ending balance + additions − amortization = current period ending balance.
- Generate the current month's amortization JE.
Output workbook tabs
Cover— period, preparer, statusInputs— one row per prepaid item with all extracted fields (this is the data tab; everything else references it)Schedule— month-by-month amortization, formulas referencing InputsSummary_By_Month— totals roll-forwardSummary_By_VendorJEs_Proposed— recognition and amortization JEsEvidence— every Inputs row links back to its source invoice file and pageReview_Notes— items flaggedREVIEW, MEDIUM/LOW confidence extractions, vendor not previously seen
Invariants
- Schedule cells contain formulas, never computed values pasted as numbers. A reviewer changing an amount or term must see all downstream values update.
- Service period must be derivable from source. If only an invoice date is present with no service period or descriptor, the item is
REVIEW. - Every Inputs row has an Evidence row pointing to the source invoice file and page.
- The amortization fully resolves to zero by the service end month — rounding handled in the final month.
When to say "I don't know"
- Invoice has no clear service period and no period descriptor →
REVIEW, ask the preparer. - Vendor name is unreadable (OCR low confidence) →
REVIEW, ask the preparer to confirm. - Amount is materially different from prior invoices from the same vendor → flag for confirmation before adding to schedule.