Available for work
DK

Hello 👋, I'm Dmytro

Solution Architect Tenerife, Spain

I design and build production platforms that replace fragmented workflows with systems companies actually rely on — CRM architecture, AI-powered automation, and backend platforms on Python, FastAPI & AWS. Currently Tech Lead & Solution Architect at Amulet Property Investment.

LinkedIn GitHub Telegram Email
Back to writing
Automation Feb 2026 2 min read

Zero Manual Entry: Automating Owner Financial Reports

Monthly owner reports used to be a person, a spreadsheet, and a long afternoon. Every number was copied from somewhere, and every copy was a chance to be wrong. We automated the whole chain so the report is generated, not assembled.

The chain

Each step is triggered by the previous one completing — no nightly batch that re-derives the world, no human kicking off the next stage.

reservation.confirmed
  → deal.updated            (revenue recognized)
  → agent.assigned          (commission attributed)
  → owner.profit.computed   (gross − costs − commission)
  → report.generated        (per owner, per month)

Because every stage records a fact, the monthly report is a deterministic fold over those facts. Run it twice and you get the same numbers — which is the property that lets people stop double-checking.

Where the rigor goes

Automating money means the boring parts carry the weight:

  • Idempotency. A reservation webhook delivered twice must not pay an agent twice. Every step keys on a stable id and is safe to replay.
  • Explicit costs. Net owner profit is gross minus named deductions, each traceable to a source record. "Net" is never a magic adjustment.
  • Reproducible reports. A report references the exact events it was built from, so a question three months later has an auditable answer.

The human's new job

Nobody enters data anymore. The human role moved up a level: review exceptions the system flags, not transcribe rows the system already has. That's the real win of "zero manual entry" — not that work disappeared, but that people spend it on judgment instead of copying.

The first month the report generated itself and the totals matched the old hand-made version, the spreadsheet quietly stopped being opened. That was the goal all along.