The numbers of four clinics, in a single dashboard.

A Roman group of four outpatient clinics read its numbers on a QLIK setup fed by unsupported extractions and on a hand-kept Excel file of doctors' fees. We built a dashboard that starts from the management software's data.

Sector
Healthcare
Practice
Data and analytics
Year
2026
How it works
Sources
Management software exportsfront desk
Fiscal documentsinvoices, CNs
Doctors' feeswas Excel
Management dashboard
Four clinics, one group view
One tab per clinicGroup viewYear on yearDay-by-hour mapsReport turnaroundCredit notes
Readers
Managementgroup
Clinicsone tab
Accountscosts
In brief

For a group of four outpatient clinics in Rome we built a management dashboard with one tab per clinic, a group view and year-on-year comparisons. The data comes from exports of the management software used at the front desks. The first versions were static HTML pages generated by a Python script; the fifth is a Laravel and Filament application, with new and returning patients, service macro-areas, multi-level costs and automatic extraction of fiscal documents.

4
outpatient clinics, one tab each plus the group view
5,484
invoices analysed from January 2025 to March 2026
3
payer types: private, co-payment, regional share
~100
patient admissions a day at each of the two larger clinics

Context

Two of the group's clinics handle about a hundred patient admissions a day, the other two between twenty and thirty. The front desks work on the clinics' management software, which produces the exports. Management followed performance on a QLIK setup fed by extractions nobody supported any more, while doctors' fees sat in an Excel file updated by hand. The project started on our own initiative, within the IT role we hold for the group.

The problem

With unsupported extractions every report was fragile: one change in the software and the numbers stopped adding up. With fees kept by hand, revenue and costs lived in two different places, and comparing clinics, or the same month a year earlier, meant rebuilding the figures every time. On top of that, an outpatient clinic is paid from three sources: the private patient, the co-payment and the share covered by the Region. Without telling them apart, turnover says little.

What we did

  1. 01

    Start from the exports

    The dashboard reads the front-desk software's exports, not a parallel database to keep in sync. In one analysis we worked on 5,484 invoices, from January 2025 to March 2026, split by payer type: private, co-payment and regional share.

  2. 02

    Static pages to begin with

    The first versions are a Python script generating static HTML pages, published on the web server behind basic authentication. Previews v2 and v3 were shared with the team to gather feedback before adding more.

  3. 03

    Charts that answer questions

    Day-by-hour heatmaps showing when each clinic is busiest, report turnaround times, the weekly rhythm. Each clinic has its own tab, the group its own view, and every period is compared with the same one a year earlier.

  4. 04

    Version five on Laravel and Filament

    New and returning patients, services grouped into macro-areas, costs managed on several levels. Fiscal documents are extracted automatically, credit notes included.

  5. 05

    Credit notes count

    Turnover that ignores credit notes is inflated turnover. That's why the extraction treats them as fiscal documents in their own right, alongside invoices.

How it went

The dashboard takes the place of QLIK and the fees spreadsheet, and it is fed by the same data the front desks produce every day. The static versions showed which numbers management actually looks at; the fifth puts them in an application that can grow without rebuilding the base.

Tools

PythonHTMLLaravelFilamentnginx

FAQ

Do the clinics need to change their management software?

No. The dashboard works on the existing software's exports: the front desks carry on as before.

Why start with static pages rather than an application?

To show real numbers quickly and work out with the team which charts are needed. Once the questions had settled, version five moved to Laravel and Filament.

What's the difference between private, co-payment and regional share?

They are the three revenue sources of an accredited clinic in Italy: what the private patient pays, the co-payment the patient pays for services covered by the national health service, and the part reimbursed by the Region. Keeping them apart shows where turnover really comes from.

Contact

Facing something similar?

Tell us what you run today and what isn't working. We'll reply within one business day with a first technical read.

Email
hello@cloudfactory.it
Address
Viale di Trastevere 114, 00153 Rome, Italy