Marti Soura Vamseekar

Work / WorkforceGuard AI

WorkforceGuard AI

Turns EU labour-market data and a company's own payroll into a pay-gap position it can defend to a regulator.

LiveJan 2024 – PresentEU Pay Transparency Directive 2023/970

The problem

From June 2027, employers with 250+ staff must report gender pay gaps and justify them. Most know their own number. Almost none can say whether it is normal for their sector and country — or show the working when asked.

Data path

Public reference data · EU27Labour forceemployment · LFSVacanciesdemand · JVSEarningspay gap · SESModelledstaging → martsYour payrollnever sharedBenchmarkyou × marketAnsweryou · 21.4%sector · 25.0%all sectors · 10.9%source datasetformula versionGovernance loghash-chainedEvery figure traces to its source dataset and formula version.Every decision is logged, and the chain is verified on each request.
Public reference data and the employer's own payroll meet in one model, so the benchmark and the answer share a single provenance.

Three Eurostat sources — labour force survey, job vacancy statistics and structure of earnings survey — are ingested and modelled through a layered transformation: staging, then a core layer covering all 27 member states and 13 sectors. The employer's uploaded payroll joins at the internal mart. The result is an evidence bundle in which every figure carries its source dataset, formula version and review status. Each decision is written to a hash-chained governance log whose integrity is verified on every request.

How it works

  1. 01

    Start from the market, not a spreadsheet

    Employment, vacancy and pay-gap series for all 27 member states and 13 sectors are already loaded from Eurostat, so there is a benchmark before anyone uploads anything.

  2. 02

    Add your payroll

    Internal pay data is blended against the matching country and sector benchmark — not a global average that flatters or unfairly damns you.

  3. 03

    See which gaps need a reason

    The review queue flags where the company sits outside its benchmark, so effort goes to the roles that will actually be questioned.

  4. 04

    Export something a regulator accepts

    Every figure carries its Eurostat source, dataset version and formula version. Decisions are written to a tamper-evident log and exported as one evidence pack.

Engineering notes

  • 16 Eurostat datasets (LFS, JVS, SES) ingested as Parquet and modelled through layered dbt (~31 models) on DuckDB — no database server at query time.
  • A single analytics repository resolves filters, assembles evidence bundles and writes governance events, keeping provenance structural rather than cosmetic.
  • Governance events are chained with SHA-256, so tampering is detectable and chain integrity is verified on every API call.
  • The copilot selects its benchmark basis from data coverage and declines to answer confidently when coverage is partial.

Trade-offs

DuckDB over a hosted warehouse

instead of Postgres or BigQuery

The analytical workload is read-heavy over a fixed panel. An embedded engine removes a server from the deployment and makes the whole warehouse reproducible from source data.

Layered dbt marts over one wide table

instead of a single denormalised model

The EU reference layer and the company layer have different owners and refresh cadences. Separating them means either can be tested or replaced without touching the other.

Refusing to answer over guessing

instead of always returning a number

A confident answer on partial coverage is worse than no answer when the output is going to a regulator.

Evidence

27

member states

13

NACE sectors

16

source datasets

~31

dbt models