These cookies are required for the website to function properly. They ensure security, enable basic features like page navigation, and store user session data. You cannot disable these cookies.
- Invoicing & Billing System
- Data model
The tables behind Invoicing & Billing System
Invoicing & Billing System ships with 17 tables, grouped here by the feature that uses them. Every record your team works with lives in one of them, and you can add fields and tables in Proto.
- Tables
- 17
- Features
- 6, plus shared settings
- Change it
- Add fields and tables in Proto
How the model is organised
Business setup
Business profile, Clients, Items, sales tax rates. Business identities, classifications and reviewed defaults provide stable references for prices and customer documents.
Billing documents
Estimates, estimate lines, Invoices, invoice lines. Documents preserve dates, amounts, customer decisions and issued versions. Detail records retain their owning document and cannot move across unrelated estimates or invoices.
Recurring work and receipts
Recurring schedules, recurring schedule lines, payment links, Payments, Reminders, Expenses, time entries. Schedules retain each billing occurrence, billable work remains reserved once, and verified receipts explain the collectible invoice balance.
Reporting and evidence
Tax forms1099 sent, audit events. Reviewed outgoing-payment workpapers remain separate from customer receipts. Immutable audit events explain protected changes and external acknowledgments.
Every table, by feature
- Clients and estimates4
- Invoice preparation5
- Recurring billing4
- Payments and reconciliation4
- Billable work6
- Collections and reporting5
- Shared and settings1
- Clients
The customer record — kept light. Email is the natural key for dedupe. Carries a default payment term that overrides the business default at invoice creation time.
- Items
Reusable line-item catalog. Items can be services (priced per hour / day / project) or tangible goods (priced per each).
IsTaxablecontrols whether sales tax is added at invoice line time. - Estimates
Pre-invoice quote sent to a Client. Draft is sent as a sealed document revision. Sent may become Viewed; Sent or Viewed may become Approved, Declined or Expired. Only Approved can become Converted. Declined, Expired and Converted are terminal for that offer. An accepted offer stays Approved after its response deadline; it does not expire while waiting for conversion. Conversion copies the accepted snapshot into exactly one invoice. Changed terms after acceptance require a new linked estimate and a new customer decision.
Linked to Clients, Invoices (set when converted) - Estimate lines
Per-line detail on an Estimate. Snapshot item description, rate, taxable decision and the resolved fractional tax rate at line creation. Draft changes recalculate under the reviewed inputs; sending seals those values with the document. Later catalogue or tax-rate edits cannot recalculate a sent or accepted offer.
Linked to Estimates, Items (null when ad-hoc line), Sales tax rates (resolved from Client billing state + ZIP)
- Invoices
The bill the Client owes. Draft becomes Sent after validation and sealing; the first permitted view may mark an unpaid Sent document Viewed. Recognized receipts derive partial paid or Paid from the issued balance. An unpaid Sent, Viewed or partial paid invoice becomes Overdue only after its due date. Paid never becomes Overdue merely as time passes. An evidenced refund or reversal can reopen a positive balance into partial paid or Overdue. An authorized void produces terminal Voided; viewing, reminders or delayed callbacks cannot undo it. Generated by direct user create, by
Linked to Clients, Estimates (set when converted), Recurring schedules (set when generated)estimate-converts-to-invoice, or byrecurring-invoice-generationon theRecurringSchedulescadence. The rendered invoice PDF and the line-snapshot are frozen on Send. Line snapshot is a sealed JSON snapshot frozen at Status: Sent — never edited; for the live editable line set see invoice lines. - Invoice lines
Per-line detail on an Invoice. Snapshots Item info at line creation. Carries the tax-rate resolution and the optional billable-source link to an Expense or time entry that this line came from.
Linked to Invoices, Items (null when ad-hoc), Sales tax rates, Expenses (set when line was rebilled from a billable Expense) - Clients
The customer record — kept light. Email is the natural key for dedupe. Carries a default payment term that overrides the business default at invoice creation time.
- Items
Reusable line-item catalog. Items can be services (priced per hour / day / project) or tangible goods (priced per each).
IsTaxablecontrols whether sales tax is added at invoice line time. - Sales tax rates
US sales-tax rate per state plus optional ZIP override. Refreshed from a rate-data provider (tax jar / Avalara rate-only). The
sales-tax-auto-calcworkflow resolves the rate from the Client’s billing state + ZIP at line creation. This is rate auto-fill only — no nexus tracking, no marketplace facilitator logic, no filing; the user is responsible for filing.
- Recurring schedules
Auto-generates an Invoice on a fixed cadence. The
Linked to Clients, Invoices (most-recent generated)recurring-invoice-generationworkflow runs nightly, seesNextRunDate <= today, instantiates a new Invoice by copying the childRecurringScheduleLinesrows into freshInvoiceLines, advancesNextRunDate, and (ifAutoSend = true) firesinvoice-send-via-email. - Recurring schedule lines
Per-line template detail on a recurring schedule. The
Linked to Recurring schedules, Itemsrecurring-invoice-generationworkflow reads these rows nightly and copies each into a freshInvoiceLinesrow on the generated Invoice (re-resolving tax rate from the current Client billing state + ZIP). - Invoices
The bill the Client owes. Draft becomes Sent after validation and sealing; the first permitted view may mark an unpaid Sent document Viewed. Recognized receipts derive partial paid or Paid from the issued balance. An unpaid Sent, Viewed or partial paid invoice becomes Overdue only after its due date. Paid never becomes Overdue merely as time passes. An evidenced refund or reversal can reopen a positive balance into partial paid or Overdue. An authorized void produces terminal Voided; viewing, reminders or delayed callbacks cannot undo it. Generated by direct user create, by
Linked to Clients, Estimates (set when converted), Recurring schedules (set when generated)estimate-converts-to-invoice, or byrecurring-invoice-generationon theRecurringSchedulescadence. The rendered invoice PDF and the line-snapshot are frozen on Send. Line snapshot is a sealed JSON snapshot frozen at Status: Sent — never edited; for the live editable line set see invoice lines. - Invoice lines
Per-line detail on an Invoice. Snapshots Item info at line creation. Carries the tax-rate resolution and the optional billable-source link to an Expense or time entry that this line came from.
Linked to Invoices, Items (null when ad-hoc), Sales tax rates, Expenses (set when line was rebilled from a billable Expense)
- Payments
Records of money received against an Invoice. Webhook-fed for Stripe / Square; manually entered for Check, Cash, and Other. Carries the processor reference and the processor fee so the net deposit reconciles to the bank.
Linked to Invoices, Clients (snapshot from Invoice) - Payment links
Tokenized checkout URL per Invoice, generated by the
Linked to Invoicespayment-link-creationworkflow onInvoices.Status = Sent. The Client clicks this from the invoice email and lands on a Stripe / Square hosted checkout that supports ACH and Card. - Invoices
The bill the Client owes. Draft becomes Sent after validation and sealing; the first permitted view may mark an unpaid Sent document Viewed. Recognized receipts derive partial paid or Paid from the issued balance. An unpaid Sent, Viewed or partial paid invoice becomes Overdue only after its due date. Paid never becomes Overdue merely as time passes. An evidenced refund or reversal can reopen a positive balance into partial paid or Overdue. An authorized void produces terminal Voided; viewing, reminders or delayed callbacks cannot undo it. Generated by direct user create, by
Linked to Clients, Estimates (set when converted), Recurring schedules (set when generated)estimate-converts-to-invoice, or byrecurring-invoice-generationon theRecurringSchedulescadence. The rendered invoice PDF and the line-snapshot are frozen on Send. Line snapshot is a sealed JSON snapshot frozen at Status: Sent — never edited; for the live editable line set see invoice lines. - Business profile
Single-row configuration for the small business itself. Carries the legal name, logo, federal tax ID (used on 1099 forms), and the bank account that payouts land in. Only the Owner / Admin can edit;
FederalTaxIDandBankAccountNumberare masked to all other roles.
- Expenses
Lightweight expense capture — a vendor, an amount, a category, and a snapped receipt photo. When
Linked to Clients (required when BillableToClient = true), Invoices (set when this Expense was added to an Invoice)BillableToClientis true and a Client is set, the Expense becomes available to add as a line on the next Invoice for that Client. - Time entries
Lightweight billable hours capture. When
Linked to Clients (required when Billable = true), Items (used to default Rate and Description), InvoicesBillable = trueand a Client is set, the time entry becomes available to add as a line on the next Invoice for that Client at the entry’s Rate. - Invoice lines
Per-line detail on an Invoice. Snapshots Item info at line creation. Carries the tax-rate resolution and the optional billable-source link to an Expense or time entry that this line came from.
Linked to Invoices, Items (null when ad-hoc), Sales tax rates, Expenses (set when line was rebilled from a billable Expense) - Invoices
The bill the Client owes. Draft becomes Sent after validation and sealing; the first permitted view may mark an unpaid Sent document Viewed. Recognized receipts derive partial paid or Paid from the issued balance. An unpaid Sent, Viewed or partial paid invoice becomes Overdue only after its due date. Paid never becomes Overdue merely as time passes. An evidenced refund or reversal can reopen a positive balance into partial paid or Overdue. An authorized void produces terminal Voided; viewing, reminders or delayed callbacks cannot undo it. Generated by direct user create, by
Linked to Clients, Estimates (set when converted), Recurring schedules (set when generated)estimate-converts-to-invoice, or byrecurring-invoice-generationon theRecurringSchedulescadence. The rendered invoice PDF and the line-snapshot are frozen on Send. Line snapshot is a sealed JSON snapshot frozen at Status: Sent — never edited; for the live editable line set see invoice lines. - Clients
The customer record — kept light. Email is the natural key for dedupe. Carries a default payment term that overrides the business default at invoice creation time.
- Items
Reusable line-item catalog. Items can be services (priced per hour / day / project) or tangible goods (priced per each).
IsTaxablecontrols whether sales tax is added at invoice line time.
- Reminders
Scheduled and sent late-payment reminders against an Invoice. The
Linked to Invoiceslate-payment-reminderworkflow seeds the four standard rows onInvoices.Status = Sent(Day 1 before due, Day 7 / 14 / 30 after due) and sends each at its scheduled time unless the Invoice is already Paid or Voided. - Invoices
The bill the Client owes. Draft becomes Sent after validation and sealing; the first permitted view may mark an unpaid Sent document Viewed. Recognized receipts derive partial paid or Paid from the issued balance. An unpaid Sent, Viewed or partial paid invoice becomes Overdue only after its due date. Paid never becomes Overdue merely as time passes. An evidenced refund or reversal can reopen a positive balance into partial paid or Overdue. An authorized void produces terminal Voided; viewing, reminders or delayed callbacks cannot undo it. Generated by direct user create, by
Linked to Clients, Estimates (set when converted), Recurring schedules (set when generated)estimate-converts-to-invoice, or byrecurring-invoice-generationon theRecurringSchedulescadence. The rendered invoice PDF and the line-snapshot are frozen on Send. Line snapshot is a sealed JSON snapshot frozen at Status: Sent — never edited; for the live editable line set see invoice lines. - Payments
Records of money received against an Invoice. Webhook-fed for Stripe / Square; manually entered for Check, Cash, and Other. Carries the processor reference and the processor fee so the net deposit reconciles to the bank.
Linked to Invoices, Clients (snapshot from Invoice) - Tax forms 1099sent
Year-end 1099-MISC forms issued by the user (the small business) to Clients (typically contractor / vendor clients) the user paid above the IRS reporting threshold during the calendar year. The
Linked to Clients (the contractor receiving the 1099)year-end-1099-misc-generationworkflow runs in late January, identifies eligible Clients (Issue1099 = trueANDYTDPaidAmount > Thresholdfor the closed tax year), generates one row per Client per tax year, and queues e-file via the IRS filing partner. Note: this is the user issuing 1099-MISC outbound to their own contractors — the reverse direction of a 1099-NEC the user receives from clients of theirs. - Clients
The customer record — kept light. Email is the natural key for dedupe. Carries a default payment term that overrides the business default at invoice creation time.
Keys and references
Preserve canonical record identifiers, source-system identifiers and the workspace or legal-entity scope. A readable name is not a unique identity. Validate every referenced record before saving a transaction. Derived monetary fields are server-computed; imports cannot bypass that calculation or change issued history.
Migration order
- Confirm scope. Agree entities, currencies, responsible people and imported opening positions.
- Load masters. Resolve duplicate identities and reviewed policy defaults.
- Load documents. Preserve source references, line ownership and supporting files.
- Reconcile history. Compare balances and outcomes before enabling automated work.
- Verify access. Test permitted and denied actions using actual assigned roles.
Set up Invoicing & Billing System your way.
Start free, then use Proto to change fields, steps and approvals before your team goes live.