Healthcare·Reactive Move

From a Ministry rejection three days later to knowing what is missing before the file goes up.

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.

Client
Reactive Move
Industry
Healthcare
Size
2 locations · 14 physical therapists · over 1,000 appointments/month
Counterpart
General Manager
Duration
5 weeks of build · in pilot since September 2026
Service type
Custom software: RIPS module (Colombian Resolution 948 of 2026) integrated with AgendaPro, with deterministic generation, pre-validation and record coverage
9 in 10patients missing a mandatory field when we measured the records
15 daysper period: one official file per fortnight
0fields made up: what is missing is excluded, not papered over

The problem

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:

  • The Ministry's validator rejected the file three days after upload, without saying which patient or service held the error.
  • Nobody knew, before generating, how many patients could be reported and how many could not.
  • When we measured the records on September 9, 2026, 240 of 240 had a document, 188 had a date of birth and only 25 had sex, a mandatory field.
  • Every manual correction restarted the three-day cycle.

What we built

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.

  1. 01
    Record coverage before generating: one tab shows, per patient, which mandatory field is missing and lets the team fix it by hand or sync it from AgendaPro. The team knows how many patients make it into the file before producing it.
  2. 02
    Clinical parameters: each agenda service maps to its CUPS code and diagnosis; each therapist carries their ID number; the official catalogs (10,024 CUPS and 12,634 ICD-10 codes) are loaded with version and date.
  3. 03
    Deterministic generation: regenerating a period produces exactly the same file, verified with a SHA-256 fingerprint, and each patient's sequence number never changes once assigned.
  4. 04
    Pre-validation with the Ministry's rules: before download, the system runs the technical annex's validation rules plus the clinic's own rules, and locates each error by patient, service and field.
  5. 05
    Period lifecycle: draft, passed, downloaded, reported and approved with the Ministry's unique validation code, or rejected. The history is logged and the generator runs by itself on the 1st and the 16th.

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.

The result

01

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.

02

Coverage is measured, not guessed

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.

03

A file that does not lie

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.

04

No new work for the clinical team

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.

The system from the inside

Reference images of the delivered product. The data shown is illustrative and does not correspond to real client or operational information.

The Forabi Method

  1. 01
    Free consultation

    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.

  2. 02
    Design

    We modeled the period as a state machine and the file as the output of a pure function: same appointments, same file.

  3. 03
    Build

    Record sync from AgendaPro, service and professional parameters, generation engine, validator and the three-tab interface, in five weeks.

  4. 04
    Adoption

    We measured real record coverage and the clinic started completing the missing data before the first reported period.

  5. 05
    Ongoing support

    Official catalogs are updated with versions and the module is adjusted when the Ministry changes the technical annex.

Is your operation growing faster than your tools can measure it?

Book your free consultation
Reactive Move · Case study · forabi.ai