Skip to content
Carlos Rubio-Marroquin
All projects

Timecard Visualization Service

In production at FCP Insight

A Flask microservice that turns raw timecard exports into two kinds of chart: a sunburst showing where a crew's hours actually went, and a bar chart comparing worked hours against the estimate, per job phase.

The source is private and the real data isn't mine to publish, so what follows is the concept, explained, plus an interactive rebuild below with invented numbers standing in for the real thing.

How it works

No hand-classification, no separate approval workflow. One flag per timecard entry, set at the source, drives the whole breakdown.

  1. 01Input

    Every timecard entry carries a work type and an hours split

    Each row is one person, one entry: how many hours were reported, how many of those were realized (billable, on a completed job), and a flag for whether the remainder was necessary but not billable, or pure overhead.

  2. 02Rollup

    Hours roll up into three buckets

    Realized time adds to the Realized bucket. The rest splits by that one flag: Utilized for necessary-but-not-billable work, Reported for everything else. That three-way split is the whole idea; everything downstream is just ways to look at it.

  3. 03Sunburst

    A sunburst renders a crew's week at a glance

    Work-type leaves nest under each bucket, sized by hours. The real service has three variants of this chart, from a plain two-ring version up to one that breaks each bucket down by job code, for when you need to see which project actually ate the week.

  4. 04Variance

    A companion chart compares worked vs. estimated hours

    Per job phase, the taller of worked/estimated draws first and the shorter overlays on top, so a phase running over budget reads as an obviously mismatched pair of bars rather than a table you have to do the subtraction on yourself.

Why a sunburst at all: a table of hours by work type answers "how much"; nesting work types under Realized/Utilized/Reported answers "how much, of what kind" in one shape, which is the actual question an ops manager has when they open this.

Try the concept

Three scenarios, six work types, the same three-bucket rollup described above. Hover a segment for the exact split; the numbers are invented, the shape of the chart is real.

Install Service call Diagnostics Travel & setup Admin Training 380 hours / wk
  • Realized Billable time on a completed job. 192h · 51%
  • Utilized Necessary but not directly billable: diagnostics, setup. 113h · 30%
  • Non-billable Admin, training, and other overhead. 75h · 20%
Show the numbers
Work typeBucketHours% of week
InstallRealized118h31%
Service callRealized74h19%
DiagnosticsUtilized52h14%
Travel & setupUtilized61h16%
AdminNon-billable40h11%
TrainingNon-billable35h9%

Illustrative rebuild of the real chart's concept. The numbers above are made up for this page, not FCP Insight's actual timecard data.