Contents9
At a glance
In thirty seconds- StakeEvery after-sales return must reach the manufacturer on that manufacturer’s own form; copying files across by hand took time and invited costly mistakes.
- MechanismVersioned routing rules designate the target forms, deterministic automation fills them, and AI only ever sees synthetic samples.
- ProofTens of thousands of requests processed in production since September 2025, with 100% operational completion according to my operational monitoring.
- ImpactData entry becomes configuration: at least 500 hours avoided per 10,000 requests, and a failed request is replayed without redoing the batch.
- LimitsThe indicators come from operational monitoring I report; they have not been independently audited.
- Client
Santécie- My role
- Main developer, back end and front end
- Setting
- Through a partner
Silico
- Team
- Embedded in an existing team · 2 peopleEmbedded in the project team, with a second developer in 2024-2025.
- Technologies
NestJS
Prisma
- Vue.js
Pinia
TypeScript
- BullMQ
- Links
The starting point
Santécie distributes medical devices. When a device comes back for after-sales service, the return must go to the manufacturer with the right form, filled according to that manufacturer’s template: each manufacturer has its own fields, versions and requirements. Return files mostly arrive as Excel spreadsheets, and someone had to copy their content across, form after form.
That work requires no judgement, but constant attention, and a copying mistake is expensive to fix. So the request had two parts: stop the re-keying, and know afterwards what was sent, where and why.
What I built
The heart of the system is not the filling but the routing. A file can concern one form, several, or none, depending on its content. I structured the domain around three sharp notions: the form group, identified by a stable business code; the routing configuration, written as a sequence of conditions; the fill target, which ties a form to a precise version.
Two decisions mattered. Routing is resolved at run time, then frozen with the run: you fix a rule without rewriting history, and every filled form keeps the rule that produced it. With the team, I also separated completing a request, which only reruns what failed, from replaying it entirely.
A NestJS API with Prisma carries the domain, BullMQ queues absorb the volume, and a Vue 3 interface manages forms, their versions and the rules. Access is split by role, operator or administrator, and logs and processed content have a retention period.
Where AI goes, and where it does not
With health data, the question is not whether AI can help, but where it is allowed to act. Production requests go through deterministic automation, with strict rules and schema. AI-assisted analysis is used only on synthetic samples, to generate the mapping models between incoming columns and a form’s fields. Human validation happens upstream, on the configuration, not on each request.
Working inside the team, not beside it
I joined this project the way you join a team: through its code, its vocabulary and its habits, and I became its main author1. Today the repository carries what lets someone else, human or agent, pick it up: a context file at the root, architecture decisions recorded one by one, an audit of the flows and a business glossary shared with the users.
Git history of the repository: 113…
Git history of the repository: 113 of 193 commits are mine, from July 2024 to September 2026. A second developer contributed in 2024 and 2025. A commit count measures neither effort nor quality.
That glossary mattered more than it seems. A “request” is not a “batch”, a “replay” is not a “completion”. The day a user asks why a form was filled twice, the answer lies in those distinctions.
What the evidence shows
The automation has run in production since September 2025. The figures below come from my operational monitoring2, and they only make sense with their definition.
Aggregated counts from operational monitoring, which…
Aggregated counts from operational monitoring, which I report. The exact volume and an anonymised export of the counts are available on request.
The trace can be checked at any time: for a given request, the tool shows which rule applied, which branch was selected and which conditions were evaluated.
- of requests processed in production since September 2025
- tens of thousands
- operational completion, as defined above
- 100%
- operational failures, external outages tracked separately
- 0
- of data entry avoided per 10,000 requests (estimate)
- ≥ 500 h
What it changes
Re-keying turns into configuration: a rule is set once and applies to every incoming file. At 3 to 5 minutes of manual entry per form, every 10,000 requests represent between 500 and 830 hours of data entry avoided3.
10,000 requests × 3 minutes =…
10,000 requests × 3 minutes = 500 hours; × 5 minutes = about 830 hours. The 3 to 5 minutes is an estimate of manual filling time, not a measurement.
When a file fails, you know which rule sent it where, and you complete or replay it without redoing the whole batch.
The system keeps evolving, with recent work on SAP routing integration and deployment. I work on it as an independent, embedded in the project team: first as a sole trader, then through MC Studio since January 2026.
Limits
- The counts are mine: they have not been independently audited, and the exact volume is available on request.
- The completion rate measures end-to-end execution with its trace, not the correctness of each mapping.
- Time avoided is an estimate based on a manual entry duration, not a before-and-after measurement.
- The project is a team effort: product decisions were shared, and I do not claim sole direction.
Share and reuse
The link, the plain text and visuals ready for LinkedIn.


