Books
Books records every Transaction in one ledger, closes each Period, and files tax at the entity total.
Outcome
| Part | This Process |
|---|---|
| Outcome | Each month’s Period is reconciled, closed and locked, and the Founder has its profit and loss. |
| Reads | Transaction, Period |
| Leaves | Period, Entry, Document |
| On time | Within 5 days (business hours); the clock stops while an Action waits on awaitingInput. Late Actions go to the Founder. |
| Runs in | Each Startup |
Accountable
Workflows
| Workflow | Runs | Team |
|---|---|---|
| Monthly close | every month | Finance Team |
| Tax filing | every day | Finance Team |
Who does each step
| Workflow | Step | Role | Calls | Approval |
|---|---|---|---|---|
| Monthly close | 1. Reconcile every Stripe Transaction with its Entries. | Finance Lead | Transaction.reconcile | Within a Mandate |
| Monthly close | 2. Recognize revenue on delivered Orders and elapsed Subscription days. | Finance Lead | Period.recognize | None |
| Monthly close | 3. Record payouts and fees. | Finance Lead | Entry.post | Asks first; waits 1 business hour |
| Monthly close | 4. Close the Period. | Finance Lead | Period.close | Within a Mandate |
| Monthly close | 5. Lock the Period once the Founder approves. | Finance Lead | Period.lock | Asks first; waits 1 business hour |
| Monthly close | 6. Send the profit and loss to the Founder. | Finance Lead | Message.create | None |
| Tax filing | 1. Total sales per jurisdiction across every Startup the Company holds, from Stripe Tax. | Finance Lead | Transaction.list | None |
| Tax filing | 2. Register in each jurisdiction whose threshold is crossed. | Finance Lead | Company.register | Asks first; waits 1 business hour |
| Tax filing | 3. Turn on Stripe Tax collection for new sales there. | Finance Lead | Setting.update | None |
| Tax filing | 4. File each return by its deadline and pay the tax due. | Finance Lead | Company.submit | Asks first; waits 1 business hour |
Events
| Direction | When | What happens |
|---|---|---|
| In | Every month | Starts Monthly close |
| In | Every day | Starts Tax filing |
| In | On Order.paid | Wakes this Process, the first time only. A Startup takes its first outside payment. |
| Out | Transaction.reconciled | Raised by step 1 of Monthly close |
| Out | Period.recognized | Raised by step 2 of Monthly close |
| Out | Entry.posted | Raised by step 3 of Monthly close |
| Out | Period.closed | Raised by step 4 of Monthly close |
| Out | Period.locked | Raised by step 5 of Monthly close |
| Out | Message.created | Raised by step 6 of Monthly close |
| Out | Company.registered | Raised by step 2 of Tax filing |
| Out | Setting.updated | Raised by step 3 of Tax filing |
| Out | Company.submitted | Raised by step 4 of Tax filing |
Plays
No Play names this Process.
Controls
Settings
| Setting | Type | Default | Say | Set with |
|---|---|---|---|---|
close.businessDay | integer | 5 | Close the books by the fifth business day | Setting.update |
close.lockOnApproval | boolean | true | Lock each month once I approve it | Setting.update |
Failure
A failed step retries; when retries run out, the Action goes to the Founder.
| Step | On failure |
|---|---|
| Monthly close 1. Reconcile every Stripe Transaction with its Entries. | Goes to the Founder. |
| Monthly close 5. Lock the Period once the Founder approves. | Times out after 5 days. Goes to the Founder. |
Loop
No loop: the path is never randomized, because it serves Append-only records.
Code
Turn on booksEnable
On by default for every Product Template. Process.pause stops new Actions; Actions in progress finish.
Close the books by the fifth business dayExample
A bookkeeping service records 312 payments and 41 bills in one month. Monthly close reconciles them, locks the Period on the third working day, and sends the profit and loss. Tax filing registers in a new state the week sales there cross the threshold.