Skip to content

Phase 5 Review — Tender & Research Radar (Module 3)

Date: 2026-07-28 · Four-review standard applied to the third core module.

1. Engineering review

Executed and green: ruff clean, mypy strict clean (35 source files), 187 tests passed (was 169), real run: 5 sources → 35 quality rules → gate PASS → 14 marts; research stage reports "6 regionally linked project(s), 2 dropped (no regional participant)" in the run output — the drop is visible, never silent.

Findings: - The CORDIS parser implements the documented bulk-CSV shape with header sniffing (projects vs organisations files) and per-line error reporting; S-06 remains not integrated until a real export replays through the same contract tests — the catalogue says exactly that. - The relationship model is relational-only by design (vw_network_edges unions company→project and project→theme edges); per the brief, a graph database would need demonstrated added value first — none exists at this size. - Multi-file fixture acquisition (directory → sorted payloads) reused the Phase-4 mechanism unchanged — no special-casing.

2. Data review

  • Regional filter integrity is a critical rule (RES-C5): every kept project must have ≥1 participant that entity-links to a Region-10 company; AICHEM/HYDROFLOW are dropped and counted. Foreign partners of kept projects are retained with observed name and canonical_id NULL — RES-I1 states that an unmatched partner is a fact, not an error.
  • Referential integrity is enforced both ways: participations must reference kept projects (RES-C3), themes must exist in the versioned taxonomy (RES-C6).
  • Money handling follows the brief: total_cost_eur only where the source states it (SUNSTORE stays NULL, tested).
  • Tender relevance classification reuses the same explainable keyword machinery: exactly one regional notice matches (Ladeinfrastruktur → charging_infrastructure), keyword stored — deliberately narrow rather than over-matched ("Batteriespeichersystem" does NOT match "Batteriesystem" on word boundaries; under-matching is visible, over-matching would be silent).

3. Business review

  • US-10/11 (tender relevance + deadlines): mart_tender_themes joins deadline views with explainable theme tags. US-12/13 (research landscape + network): mart_research_projects shows regional partner counts and themes; vw_network_edges gives the company↔project↔theme network as plain rows a dashboard or NetworkX export can consume later.
  • Cross-module story now closes: the same canonical company appears in hiring (module 1), transformation themes and change events (module 2), and research participation (module 3) — the "organizations connected through projects, technologies, tenders" question from the brief has a queryable answer.

4. Honesty review

  • All research rows are data_class=fixture with FIXTURE markers in titles and foreign org names; invented EUR figures never look real. ✅
  • The 2-project drop is in the run output, the source-run message, and RES-I1 context — coverage loss is announced, not implied away. ✅
  • No graph database, no forecast, no composite score was smuggled in. ✅
  • Catalogue S-06 keeps its "verified-live source, fixture-only adapter, NOT integrated" three-way distinction intact. ✅

Gate decision: Phase 5 passes for its in-environment scope. All three core modules now run end to end on labelled demo data. Carried: dashboards/API, CI first run, C-03, DuckDB/Postgres, curated-real seed. Proceed to Phase 6 (productization: reports, data dictionary, diagrams, portfolio assets).