The GMA Case
CASE 02HEALTHCARE · CLINICAL NETWORK

Five clinical systems. Zero shared visibility. Data that is now validated before it is ever displayed.

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.

5 source systems 56.650 patients 6 dimensions + 5 facts 5 dashboards in production 100% Gate 3 approved
The client

The same old problem, with a different kind of risk

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.

HIS Clinical activity, centers, and specialties
~340K records
ERP Billing and payers
~120K records
LIS Laboratory and SLA compliance
~95K records
CRM Patients and experience
~45K records
HR Staff and shifts
4.899 records

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.


Our approach

Model, build with validation, verify for real

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."

01

Model before moving a single piece of data

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 / SCD2
02

Build on an architecture that validates before it serves

Medallion 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 fact
03

Verify for real, not just when the number looks right

We 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 production

Results

What Grupo Médico Atlántico sees today, every day

Five 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.

Confidentiality note

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.

5
dashboards in production
11
dimensions + facts validated
100%
Gate 3 approved
56.650
patients with full traceability
CLINICAL ACTIVITY 360
12K
total appointments
81,3%
occupancy rate
9,0%
no-show rate (10% target)

Appointments by provider, center, and day of the week, with occupancy and no-shows tracked against a target.

Actual screenshot · click to enlarge
BILLING
€371,43K
total revenue
58,8%
private-pay mix
-5,7%
vs. prior year

Revenue by insurer and private vs. insurer mix, with SCD2 history and outstanding balances cross-referenced by center.

Actual screenshot · click to enlarge
LABORATORY & SLA
3K
lab results
72,4h
average turnaround time
20
test types

Turnaround time and % outside SLA by test type and center — the reference threshold (24h) is still pending confirmation with the client.

Actual screenshot · click to enlarge
PATIENTS & EXPERIENCE
9K
active patients
97,2%
repeat-visit rate
80,1
average satisfaction

Patient segmentation by loyalty, with interaction trends and repeat-visit rate traced back to a single master record.

Actual screenshot · click to enlarge
STAFF & HR
120
active staff members
947,5
hours worked
18,0%
absenteeism rate

Shift coverage and hours worked by center and professional role, with absenteeism rate visible to catch gaps early.

Actual screenshot · click to enlarge

Beyond dashboards

Findings nobody had to go looking for

The 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.

0 rows

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.

20 min

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.

11 tables

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."


Architecture

Every dashboard, backed by a validated Gold layer

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.

GOLD

Clinical Activity 360

fact_activity + dim_center + dim_specialty + dim_date, with SCD1 on centers and specialties.

GOLD

Billing

fact_billing + dim_payer + dim_patient, with SCD2 for payer history by patient.

GOLD

Laboratory & SLA

fact_lab + dim_specialty + dim_date, with turnaround-time tracking by specialty.

GOLD

Patients & Experience

fact_patient_interaction + dim_patient, with full traceability across 56.650 patients.

GOLD

Staff & HR

fact_staff_shift + dim_staff + dim_center, with shift validation by center.


What's next

Automate, don't promise

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.

LeverWhy it appliesEstimate
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.

What about your operation?

Does your clinical or administrative data look like this?

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 →