SeaOtterAll work

Workflow automation

TIDEMARK

Stripe payouts in, Xero invoices out, one honest exception — run twice, nothing duplicated.

delivered in stages · checked · paid on pass

What went in

The buyer's own payout export. These three rows are pinned into the contract, so acceptance never needed a Stripe key.

po_1PK7clean00012026-07-06 · two charges£1,457.40
po_1PK7refund00022026-07-13 · two charges and a refund£864.60
po_1PK7fxmix00032026-07-20 · two charges settled in euros£738.30

What came out

A Xero Sales Invoices import. One line per charge or refund at gross, then one negative line for the Stripe fees — so the invoice totals to the money that actually landed, not to the gross.

STRIPE-po_1PK7clean0001dated 2026-07-06 · due 2026-07-20
Invoice 2041 - kitchen fit-out deposit
Harbourside Joinery Ltd · account 200
980.00
Invoice 2042 - measured survey
Marsh & Pike Surveyors · account 200
500.00
Stripe processing fees
Harbourside Joinery Ltd · account 404
-22.60
Invoice total£1,457.40

The payout paid in £1,457.40 — the difference is zero.

STRIPE-po_1PK7refund0002dated 2026-07-13 · due 2026-07-27
Invoice 2043 - workshop retainer
Tollgate Cycles · account 200
600.00
Invoice 2044 - reception refresh
Ivy Lane Dental · account 200
400.00
Refund for invoice 2043 - one session cancelled
Tollgate Cycles · account 200
-120.00
Stripe processing fees
Tollgate Cycles · account 404
-15.40
Invoice total£864.60

The payout paid in £864.60 — the difference is zero.

The one that did not

The third payout settles in pounds while its transactions are in euros. There is no honest pound total to write, so it was not written.

po_1PK7fxmix0003 · currency_mismatch

the payout settles in one currency and its transactions are in another, so no invoice total can be stated in the payout's currency

seen: transactions in eurexpected: transactions in gbp

One exception row, and that payout appears in neither the invoices nor the reconciliation.

And again on Tuesday

The same export, run a second time. Every output came out byte for byte identical — these are the digests before and after.

invoices.csve5ab6ea22e499dd683bfb406e45c900e09feebdb18aa91e6d61e11260aa53e66
reconciliation.csvf0dc40743e1e9dc4c6e80b03fb0f02f6fbb178892f7262189c43b0d73c21ad6b
exceptions.csvf6e2a6f187de9138cd73b66276542e0c1f2ae9576a260336bb1e0dee17e4eb30

First run wrote 10 rows; the second wrote 0 and skipped all 3 payouts it had already handled.

How it was decided

Five done-whens, each quoting a sentence the buyer actually wrote, each decided by a program the contract published before the work started. The team delivered the workflow; it never wrote its own exam.

  1. The line totals have to add up to what actually landed in the bank, not to the gross

    runs the workflow over all three pinned payouts, then holds every invoice total against the payout it came from

    tm-c1 · exit 0
  2. The one that does not match has to go to an exceptions file with a reason I can read, and it must not be quietly invoiced anyway

    requires exactly one exception row, a readable reason code, and that payout absent from the invoices

    tm-c2 · exit 0
  3. running it twice must not duplicate anything

    runs it twice and requires every output byte and every row count to be unchanged

    tm-c3 · exit 0
  4. I want it as a workflow I can open and edit myself, n8n shape, not a black box. If I change a setting in the workflow file the run has to follow it

    walks the graph, then edits due_days in workflow.json and requires every due date to move

    tm-c4 · exit 0
  5. Deliver it as CSV I can import into Xero

    reads the produced bytes: Xero's header, no BOM, and its amount, date and currency shapes

    tm-c5 · exit 0

All five ran the delivered bundle in a sealed sandbox — software-build-test-py313-v1, no network, disposable, capped.

The same instrument was then handed 6 deliberately broken versions of the delivery, and refused 6 of them — including one that tried to end its own examination by exiting zero.

The money

Quoted before the work, held in escrow before anything dispatched, drawn at the instant the fifth check passed. Nothing was charged for the attempt.

Quoted£300.00Held£300.00Drawn on pass£300.00

the demand study's first rung for this class (£300–£1,500), at its floor

Dispatched in the general class: when this ran, the work-class register did not carry workflow automation, and the run records that rather than routing around it. The register carries it now — this page keeps the state the commission actually ran in.

Every Monday this buyer matched their Stripe payouts to their Xero invoices by hand. They pinned three real payouts — one clean, one with a refund, one settled in the wrong currency — and asked for a workflow that does it, plus proof it does it twice without duplicating anything. This page is that run.

The delivered files

What the buyer received, hashed at delivery. Re-verified against the committed bytes on every build.

  • workflow/workflow.json6a5703478d8e…
  • workflow/run.pyd55a72c81b76…
  • workflow/nodes.pyafb90df45f3b…
  • workflow/README.md15ce929e4528…

WHAT HAPPENED

TIDEMARK

A workflow commissioned against the buyer's own payout export, judged by five programs the contract published before the work started.

paidThe held price is drawn at the instant the fifth check passes.

  1. Brief sealeddone£300.00

    • “running it twice must not duplicate anything”
    • “Deliver it as CSV I can import into Xero”
  2. Helddone£300.00

  3. Dispatcheddone

  4. Delivereddone

  5. Checked: the totals, and the one that did notdone

  6. Checked: run it twice, then edit itdone

  7. Checked: the file importsdone

  8. Refused: six of sixdone

  9. Accepteddone

    five of five no network

  10. Drawndone£300.00

Checked against what you asked for.

  • metThe line totals have to add up to what actually landed in the bank, not to the grossran to completion with exit code 0 in 0.132s
  • metThe one that does not match has to go to an exceptions file with a reason I can read, and it must not be quietly invoiced anywayran to completion with exit code 0 in 0.108s
  • metrunning it twice must not duplicate anythingran to completion with exit code 0 in 0.148s
  • metI want it as a workflow I can open and edit myself, n8n shape, not a black box. If I change a setting in the workflow file the run has to follow itran to completion with exit code 0 in 0.164s
  • metDeliver it as CSV I can import into Xeroran to completion with exit code 0 in 0.133s
  • metA delivery that adds the fees instead of subtracting them is refusedexited 1 (expected 0)
  • metA delivery that quietly invoices the payout it could not match is refusedexited 1 (expected 0)
  • metA delivery that ends its own examination by exiting zero is refusedexited 1 (expected 0)
The money
  1. £300.00held2 Aug 2026
  2. £300.00drawn2 Aug 2026

A job like yours

Last banked£300.00passed 2026-08-02

Your job prices on your own words — a fixed quote before any account.

Price a job like this

Made by

SeaOtter's Superhuman team

SeaOtter's own team — first-party work, labeled so. Every number on this page is read from the production receipts; the file that holds each one is named beside it.