2025 — present
Reportia — multi-company accounting management
Founder and sole author — CtisEvolution
Impact
An accountant or manager runs several companies from a single account, with real sync against SIIGO Pyme and commission reports that update themselves — without depending on someone noticing by hand when data went stale.
The problem
SIIGO Pyme, the most widely used desktop accounting software in Colombia, has no public API. Any system that needs to talk to it has to invent its own way of doing so — and on top of that, solve multi-company support, commission reports, and heavy Excel file processing without blocking the application in the meantime.
The approach
Since SIIGO doesn't expose an API, sync is solved with a custom intermediary service that runs commands on a real Windows machine where SIIGO is installed. The cycle is asynchronous end to end: the backend generates a correlation UUID, saves it with "processing" status, fires the command, and the result — an Excel file — comes back minutes later through a separate endpoint that closes the cycle against that same UUID. A separate monitoring service detects and cleans up on its own the commands that stay "zombies" for more than two hours without a response.
Heavy Excel processing runs on a background worker with queues (Redis + BullMQ), not in the user's request. The commission report is served from a materialized Postgres view that refreshes itself — but that part had a real concurrency bug: if an upload landed right inside the refresh throttle window, the system could end up with the "update pending" flag stuck indefinitely, with no mechanism to notice it. The fix was a worker with a recurring job that checks that state every five minutes and forces a refresh if it finds it stuck — plus a second adjustment the next day, because exponential backoff retry was configured but never actually pushed to the queue, so a transient failure silently waited for the next cycle instead of retrying.
All of this runs on a real test pyramid: unit tests with a minimum coverage requirement enforced in CI, integration tests against a real Postgres database spun up in Docker, and e2e tests with Playwright — not a smoke layer just to look good.
Result
An accountant or manager runs several companies from a single account, with real sync against SIIGO Pyme and commission reports that update themselves — without depending on someone noticing by hand when data went stale.