# Invictus Data Landscape: A Plain-English Guide

The Invictus project is a large capital investment programme to modernise a steel manufacturing facility (believed to be Tata Steel UK), covering four areas of the plant: the **Meltshop**, **Casters**, **Pickleline**, and **Hot Rolled Products (HRP)**. To execute this work, the project hires dozens of contractors through a formal process — proposing prices, selecting winners, signing contracts, tracking spend, and managing risks. This repository is the data trail of that entire process. By the end of this document, you will understand what every file contains, what a bid is and how it travels through the system, and which fields stitch all the files together into a single coherent picture.

---

## What Is a Bid?

When the project needs, say, a new electrical system for the Meltshop, it cannot simply buy it off a shelf. It writes a **scope of work** and invites contractors to compete. Each contractor submits a **bid** (also called a **quotation**) — a document saying *"we will do this work for £X, in Y weeks"*. The project team evaluates all bids, negotiates, and awards the **contract** to the winner. That contract value becomes a **commitment** — money the project has promised to spend. As the contractor delivers work and raises invoices, those invoices become **actuals** — money actually paid out.

The gap between the original budget, the committed contracts, and the actual spend is the heartbeat of every capital project. This repository tracks exactly that gap, across four plant areas, over the life of the programme.

---

## The Four Pillars of This Data

### 1. Budget — "What We Planned to Spend"

**Files:** `Cost Data/CBS Master/`
- `Controlled Meltshop FID Budget V10.xlsx`
- `Controlled Casters FID Budget V1.xlsx`
- `Controlled Pickleline FID Budget V1.xlsx`
- `Controlled Hot Rolled Products Life Extension FID Budget V1.xlsx`

These are the **baseline budgets** set at Final Investment Decision (FID) — the formal sign-off where leadership approved spending. Each file covers one plant area. The structure organises costs by a **CBS Code** (Cost Breakdown Structure), which is a hierarchical numbering system like `2.2.3.1` that classifies spend by type (civil, mechanical, electrical, etc.). Think of this as the financial blueprint: every line is a category of work with an approved budget against it.

> **"FID"** — Final Investment Decision — is the governance gate at which capital funding is formally authorised. Before FID, spend is in feasibility/engineering. After FID, the project is live and contractors are engaged.

---

**Key columns:**
CBS Code, Description, FID Budget Value, Work Package (Casters / Meltshop / etc.)

---

### 2. Commercial Management — "Who Bid What and Who Won"

**File:** `Commercial Management/Early Warning _ Quotations and NCE Data.xlsx`

This is where the **competitive bidding** lives. It has several sheets that together tell the procurement story:

| Sheet | What it contains |
|---|---|
| **Q and NCE Data** | Raw quotation and NCE records — every change quote per contractor, per scope (headers on row 5). Columns: `Area`, `Contractor`, `Contract Number`, `Record Number`, `Status`, `Title`, `Change to the prices`, `Change to Days`, `Quotation Decision` |
| **Quotation DB** | A filtered **dashboard view** of Q and NCE Data — dropdowns select Area and Contractor. Not a data source; do not read this sheet programmatically |
| **Contract Value and Owners List** | Awarded contracts: `Vendor`, `Contract Number`, `Contract Owner`, `Contract Value`. Total programme value: **£295,246,743** |
| **Weekly Report** | Live commercial status per contract: `Contract`, `Contractor`, `Base Contract Value`, `Implimented Variations (£)`, `Unimplimented Variations (£)`, `Total (£)`, `Total Commitment (%)`, `Contract Manager` |
| **EW all Data / NCE** | Early Warnings and Notified Compensation Events — individual notices that may or have become cost claims |

An **Early Warning (EW)** is a formal notice — either from the project or the contractor — that something might change the price or timeline. A **Notified Compensation Event (NCE)** is when that potential change becomes a formal claim for more money. Together they represent the **live commercial risk** on each contract.

---

### 3. Cost Tracking — "What We've Committed and Paid"

**Files:**
- `Cost Data/Act & Commit Master.xlsx` — the master ledger (SAP-sourced)
- `Cost Data/New Commitments/Cost Tool Meltshop New_Dec 25.xlsx`
- `Cost Data/New Commitments/Cost Tool Casters New - Live.xlsx`

`Act & Commit Master` is the **central financial file**. It has three sheets:

| Sheet | What it contains |
|---|---|
| **Invictus Commitments** | Every Purchase Order raised: PO number, supplier, value, WBS, CBS |
| **Invictus Actuals** | Every invoice paid: period, supplier, value, WBS, CBS |
| **Req+POList** | Requisitions — internal approvals that precede a PO |

The **Cost Tool** files are per-area working files that mirror and extend the master ledger, often with additional analysis, ETC (Estimate to Complete) forecasting, and accruals.

**Key columns:** WBS Element, CBS Code, Req #, PO #, Supplier Name, Value, PM (Project Manager initials)

> **WBS** (Work Breakdown Structure) is a SAP project code like `3701.00025-C-20-101`. It identifies exactly which activity within which area the spend belongs to. **CBS** classifies the *type* of work. Together, WBS + CBS is the financial address of any transaction.

---

### 4. Risk Management — "What Could Go Wrong and What It Costs"

**Files:** `Risk Management/[Casters|Meltshop|Pickleline|HRP]/` — 64 files total

Each area has a **risk register** with snapshots taken roughly monthly from June 2025 to February 2026. Filename pattern: `YYYYMMDD [Area] [Risk|Issue] MainForm LineItems.xlsx`.

- **Risk** = something that *might* happen (probability + impact)
- **Issue** = something that *has* happened (impact is certain)

Each file has a **Main Form** sheet with:

| Column | Meaning |
|---|---|
| Risk ID | `RISK-00016` — unique identifier per risk |
| Type | Risk or Issue |
| Description | Plain-language description of the threat |
| Probability | Likelihood of occurrence |
| Cost Impact | £ value if it materialises |
| Exposure | Probability × Cost Impact = expected monetary value |
| Mitigation | Actions being taken to reduce the risk |

The monthly snapshots allow you to track whether risks are growing or shrinking over time — a rising exposure in December vs. June tells you the project is heading into trouble in that area.

---

### 5. Schedule — "When Things Are Supposed to Happen"

**File:** `Milestone Data/GFA milestone data from P6.xlsx`

Exported from **Primavera P6** (the industry-standard scheduling tool), this file lists the project's key milestones with Activity IDs (`INV0090`-style), activity names, planned dates, and actual dates. It connects to cost data only loosely — by area name — but it provides the time dimension that cost data lacks.

---

## How the Files Link Together

These five domains are not isolated spreadsheets. They are nodes in a data graph, connected by a handful of shared identifiers.

```mermaid
flowchart TD
    FID["FID Budget\n(CBS Master — 4 files)"]
    ACM["Act & Commit Master\n(Commitments · Actuals · Reqs)"]
    CT["Cost Tool\n(per area — live working files)"]
    CM["Commercial Management\n(Quotation DB · Contract List · EW/NCE)"]
    RR["Risk Register\n(monthly snapshots per area)"]
    P6["P6 Milestone Data\n(schedule export)"]

    FID -->|CBS Code| ACM
    ACM <-->|WBS Element| CT
    ACM -->|Supplier Name / Contract| CM
    CM -->|Area — Casters · Meltshop · Pickleline · HRP| RR
    RR -->|Area + milestone linkage| P6
```

The **flow of a single contract** through this graph:

1. A budget line exists in the **CBS Master** under CBS code `2.2.3.1` for "Mechanical — Meltshop Equipment"
2. The procurement team runs a competition; contractor bids are recorded — awarded contracts appear in the **Contract Value and Owners List**
3. The winning bid is awarded; it appears in the **Contract Value and Owners List** with a base value
4. A Purchase Order is raised in SAP; it flows into **Act & Commit Master → Invictus Commitments** via WBS + CBS
5. Invoices are paid; they appear in **Invictus Actuals**
6. The contractor raises an Early Warning that additional work is needed; it enters the **EW all Data** sheet, creating a variation that inflates the contract total
7. The cost risk of this variation is captured in the **Risk Register** for that area
8. If the variation delays a milestone, it surfaces in the **P6 Milestone Data** as a slipped date

---

## Why Your Boss Asked About Masking Data

When your boss says "send this to an LLM or agent", he means an external AI service — ChatGPT, Claude, Gemini, or a custom tool. These run on cloud servers outside the organisation. **This data cannot go there raw.**

The files contain:
- Real contractor names: Tenova, JASO, SRM (Sir Robert McAlpine), ABB, Wernick, Churngold, etc.
- Real contract values: Tenova alone is £104M, total programme is **£295M**
- Internal FID-approved budget baselines per plant area
- Risk descriptions that reveal the project's specific vulnerabilities

Sending this to an external AI service would expose commercially sensitive procurement data. If a competitor or the contractors themselves saw it, future bid competitions would be compromised — they would know what the project paid last time and price accordingly.

**Masking** solves this by stripping the sensitive layer while keeping the analytical structure intact. There are two levels:

### Option A — Headers Only (Safest)

Export just the column names from every sheet, with no data values at all. The AI sees:

```
Act & Commit Master → Invictus Commitments:
  WBS Element | Req # | PO # | Supplier Name | Description | Value | CBS | PM

Commercial Management → Quotation DB:
  Scope | Contractor | Bid Value | Submission Date | Status | Notes
```

The AI can map relationships between files, suggest join keys, and design an analysis — but it never sees a single real name or number. This is what he means by "just export the column headers."

### Option B — Masked Data (More Useful)

Replace sensitive values with anonymised stand-ins, keeping the *structure and ratios* realistic:

| Original | Masked |
|---|---|
| `Tenova` | `Supplier_A` |
| `Bath Demolition Services` | `Supplier_B` |
| `£99,832,916` | `£99,832,916` *(keep, or scale to index)* |
| `3701.00025-C-20-101` | `WBS-001` |
| RISK-00016 description | `Risk_016` |

With masked data, the AI can actually run comparisons — "Supplier_B's contract grew +91% from base; Supplier_A grew +4%" — without those statements being traceable to real contractors.

> [!NOTE]
> Masking supplier names but keeping real £ values is still a risk if the values are distinctive enough to identify the contractor from market knowledge. The safest mask replaces both.

---

## What "Comparing Bids" Would Mean Here

Your boss is asking: **for each awarded contract, how much did the contractor originally agree to do the work for, and how much is the project now paying them?** The gap is "variation creep" — the most revealing signal of whether a bid was genuinely competitive or just low to win.

The `Weekly Report` sheet already has the full picture in one place. Here are the 14 active contracts as of March 2026, sorted by variation:

| Contractor | Base Contract (£) | Current Total (£) | Variation % |
|---|---|---|---|
| Bath Demolition Services | 1,634,219 | 3,122,703 | **+91%** |
| Churngold | 2,068,849 | 3,584,242 | **+73%** |
| Darlow Lloyd | 6,893,744 | 9,241,666 | **+34%** |
| Knights Brown | 6,797,619 | 9,292,614 | **+37%** |
| Andrew Scott NG Prep | 8,952,185 | 12,873,042 | **+44%** |
| Andrew Scott Yard Prep | 7,455,196 | 8,664,970 | +16% |
| Wernick | 10,636,263 | 14,181,700 | +33% |
| Skanska | 8,850,304 | 9,608,648 | +9% |
| SRM | 27,157,822 | 27,508,640 | +1% |
| ABB | 15,187,679 | 15,187,680 | ~0% |
| PERT SRL | 8,498,641 | 8,498,641 | 0% |
| Sarens | 5,324,407 | 5,324,407 | 0% |
| JASO | 40,127,969 | 40,127,970 | ~0% |
| Tenova | 99,832,916 | 104,123,501 | +4% |

The interesting insight is not just "who bid lowest" but **"who bid low and then expanded"**. Bath Demolition at +91% and Churngold at +73% are the clearest examples — their original bids look competitive but the actual cost is nearly double. To understand *why*, drill into their NCE records in `Q and NCE Data`, where each `QUOTE-XXXXXX` record explains what triggered each price change.

See `bid-comparision-plan.md` for the step-by-step Python script that produces this table, cross-checks it against SAP actuals, and drills into individual vendor NCE histories.

---

## Open Questions

1. **The `Q and NCE Data` sheet tracks post-award variation quotes, not original competitive bids.** — All `QUOTE-XXXXXX` records have a `Change to the prices` column, indicating these are NCE/variation quotations raised after contract award, not the original tender submissions. If original bid documents exist (tender prices from all bidders before award), they are not in this repository.

2. **What is the relationship between FEL3 budgets and FID budgets?** — `Cost Data/FEL3 Final.xlsx` and `FEL3 Proposed Changes.xlsx` exist alongside the FID budgets. FEL3 (Front End Loading stage 3) typically precedes FID. Understanding whether these are superseded or still tracked as a baseline variance would clarify the budget history.

3. **Are the Risk snapshots the only record of risk over time, or does a live register exist?** — The monthly snapshot pattern suggests no single live file; analysis would need to diff successive snapshots to compute trends.
