Grupo Médico Atlántico coordinates clinical activity, billing, laboratory, staffing, and patient experience across five systems that never spoke to each other. Here is what we built on Microsoft Fabric — with data quality verified at every layer, before it ever reaches a single dashboard.
Grupo Médico Atlántico operates a network of centers spanning clinical activity, insurer billing, an in-house laboratory, and clinical staff — each area handled for years by a separate system, with no shared validation layer between them. In healthcare, a piece of data that falls out of sync is not just a wrong report: it is a clinical or administrative decision made on incomplete information.
Bar length is proportional to record volume per source system. The HIS alone accounts for more than half the total — the first data point that shaped the dimension design and the load order into Bronze.
What they asked for was not another pretty dashboard. It was the ability to trust the data before ever looking at it: that if a center, a specialty, or a payer changed, the number on screen would genuinely reflect that — not a half-finished load or an out-of-sync cache that says "correct" without having moved a single row.
The same path we follow with any client of this size, adapted to an industry where a data error carries real cost: first a model that can carry the business, then an architecture that validates before it trusts, and finally verification that does not settle for the pipeline simply saying "correct."
We designed a star schema with six dimensions (center, specialty, payer, patient, staff, date) and five fact tables, each with its load type matched to how the underlying data actually changes: stable catalogs in SCD0, evolving attributes in SCD1, patient-payer history in SCD2.
6 dimensions · 5 facts · SCD0 / SCD1 / SCD2Medallion architecture (Bronze → Silver → Gold) on Fabric. Before a single dimension or fact reaches the Gold Warehouse, it passes through a quality Gate built with Great Expectations that checks for nulls, ranges, duplicates, and relationships — nothing is served unless it passes.
Great Expectations · Gate 3 on every dimension and factWe found that Fabric's SQL endpoint can fall out of sync after a Spark write: the stored procedure reports "Succeeded" even though it processed zero rows. We fixed it with a metadata refresh via the Fabric API, using controlled retries — not a fixed wait that merely hides the symptom.
Fix via Fabric API · 0 false positives in productionFive dashboards in production, one per operating area, all reading from a Gold Warehouse that has already passed its own quality control. Real screenshots of the platform in production — click to enlarge.
In compliance with our information security policies and the confidentiality commitments made to the client — particularly sensitive in the healthcare sector — the organization's name, along with the data and databases shown in this case study, have been altered and anonymized. The nature and scale of the results faithfully reflect the work performed.
Appointments by provider, center, and day of the week, with occupancy and no-shows tracked against a target.
Actual screenshot · click to enlargeRevenue by insurer and private vs. insurer mix, with SCD2 history and outstanding balances cross-referenced by center.
Actual screenshot · click to enlargeTurnaround time and % outside SLA by test type and center — the reference threshold (24h) is still pending confirmation with the client.
Actual screenshot · click to enlargePatient segmentation by loyalty, with interaction trends and repeat-visit rate traced back to a single master record.
Actual screenshot · click to enlargeShift coverage and hours worked by center and professional role, with absenteeism rate visible to catch gaps early.
Actual screenshot · click to enlargeThe difference between a report and a data platform you can audit: the latter tells you where the pipeline itself might fail before it fails silently.
Fabric's SQL endpoint can fall out of sync after a Spark write: the stored procedure reports "Succeeded" even though it processed zero rows. Detected and fixed with a metadata refresh via the API before it ever touched production.
An interactive notebook session keeps consuming capacity for up to 20 minutes after its last use — invisible in the pipeline, but enough to exhaust a shared test capacity.
The Gate 3 quality check (Great Expectations) validates 6 dimensions and 5 facts before a single record reaches the Gold Warehouse — zero silent exceptions, zero "we'll fix it later."
No dashboard reads directly from a source system. Each one queries a Gold model that has already passed its own quality control — the difference doesn't show up on screen, it shows up in the fact that the number doesn't change if you ask again.
fact_activity + dim_center + dim_specialty + dim_date, with SCD1 on centers and specialties.
fact_billing + dim_payer + dim_patient, with SCD2 for payer history by patient.
fact_lab + dim_specialty + dim_date, with turnaround-time tracking by specialty.
fact_patient_interaction + dim_patient, with full traceability across 56.650 patients.
fact_staff_shift + dim_staff + dim_center, with shift validation by center.
No figure in this section is a contractual promise. These are the next steps already planned on top of the architecture already running in production — not a wish list.
| Lever | Why it applies | Estimate |
|---|---|---|
| Orchestrated master pipeline | Today Bronze, Silver, and Gold run separately; the next step chains all three layers plus the Power BI refresh into a single scheduled pipeline. | Daily · 11:00 PM |
| Generalize the sync fix | The metadata refresh via API already applied to Gold gets extended to any new table that depends on the SQL endpoint. | 0 false positives |
| Spark autoscaling | Avoids over-provisioning test capacity during overnight loads, now that the real usage pattern is known. | 5–15% compute |
| Active alerts on Gate 3 | Today the Gate result is reviewed in the notebook; the next step is to notify automatically whenever a load fails to pass. | Detection within minutes |
The master pipeline and its scheduled validation (daily at 11:00 PM) are the next confirmed step, not a done deal — they build on an architecture that already runs in production with real data, not one starting from scratch.
If your activity, billing, or staffing data is spread across more systems than you can count from memory, you probably recognize the starting point. Let's talk about what your case would need — starting, as with Grupo Médico Atlántico, by finding out whether you can trust the data before building a single dashboard.
Email us →