The error shows before upload, not three days later
Pre-validation runs the Ministry's own rules on the file before download. Each error names patient, service and field, and the fix never goes through the portal.
Healthcare·Reactive Move
How Reactive Move started generating its RIPS health-service reports from the same appointments it already had in its agenda, with every error located by patient, service and field.
RIPS are the records every healthcare provider in Colombia must report to the Ministry of Health for each service rendered. Since 2026, Resolution 948 requires them in an exact JSON format, validated against official catalogs of procedures (CUPS), diagnoses (ICD-10) and municipalities. A file with one badly written field is rejected whole.
Reactive Move sees over a thousand appointments a month across two locations and runs its agenda on AgendaPro. But AgendaPro does not generate RIPS, and the patient record that works for booking is not the one the Ministry demands: sex, date of birth or document type were missing in a large share of records.
The result was a blind cycle:
We built the RIPS module inside the back office that already read AgendaPro for the clinic's KPIs. Each fortnight the system takes the appointments attended, matches them with each patient's record and each therapist's ID number, and produces the official file with the name and structure the resolution requires. What cannot be reported goes to an exclusions list with its reason, instead of being filled with fake data.
None of this replaces the agenda or invoicing: the module reads AgendaPro and produces the file. The team uploads it to the Ministry's portal and records the response in the system. As of the end of September 2026 the module is in pilot: generation runs on real appointments and the clinic is completing the missing records; approval figures will come with the first reported periods.
Pre-validation runs the Ministry's own rules on the file before download. Each error names patient, service and field, and the fix never goes through the portal.
The coverage tab showed that 9 in 10 patients could not be reported because of a single field. That number turned an invisible problem into a list of records to complete.
Patients with incomplete records go to exclusions with their reason. The uploaded file contains only what complies, and regenerating it gives the same result byte for byte.
The appointments were already in AgendaPro. The module reads them; the team completes each patient record once and maps each service to its code once.
Reference images of the delivered product. The data shown is illustrative and does not correspond to real client or operational information.



We read Resolution 948 and its technical annex with the clinic's advisor and defined the fortnightly cutoff and what happens with a patient who cannot be reported.
We modeled the period as a state machine and the file as the output of a pure function: same appointments, same file.
Record sync from AgendaPro, service and professional parameters, generation engine, validator and the three-tab interface, in five weeks.
We measured real record coverage and the clinic started completing the missing data before the first reported period.
Official catalogs are updated with versions and the module is adjusted when the Ministry changes the technical annex.