Skip to content

CVR: fully liable partners in BackgroundCheck, keyed on the participant number; page every CVR list - #476

Merged
StephenAbbott merged 1 commit into
mainfrom
feat/cvr-fully-liable-partners
Oct 21, 2026
Merged

StephenAbbott merged 1 commit into
mainfrom
feat/cvr-fully-liable-partners

Conversation

@StephenAbbott

Copy link
Copy Markdown
Owner

Notion: https://app.notion.com/p/3a57f3dc292881bd99ffe09d2b9e78aa

BackgroundCheck Phase F, task 3: the first new person source after Phase 393's identity-first merge.

What Datafordeler's CVR data has (checked live, 21 Oct 2026)

  • Exactly one relation to people: CVR_FuldtAnsvarligDeltagerRelation, the fully liable partners of I/S, K/S and P/S firms. Directors, boards and owners are not in it; they are only in Erhvervsstyrelsen's System-til-System distribution, which is being applied for separately.
  • Each participant's unit (CVR_CVREnhed) gives its type and CVR's participant number (enhedsnummer), and CVR_Navn gives its name. There is no birth date and no CPR number.

Change

  • Adapter: reads every participant's unit and name in two requests per 100 ids (an in list may hold at most 100: DAF-GQL-0016). A failed read is recorded as a source_read degradation, and a bundle missing its participants is not cached. The cache key is now cvr_denmark:v2:.
  • Fix: paging. Datafordeler returns 100 rows per page unless asked for more, and the adapter never asked. Willis Towers Watson Consultancy Services I/S's 132 partner rows were cut at 100, and the names, addresses, industry codes and legal forms used the same unpaged query. Every query now pages, and hitting the page limit raises an error rather than passing a truncated list off as complete.
  • Fix: current-partner list. It no longer inherits _current()'s fall-back to every row. With that fall-back, a firm whose partners had all left would still have read as having them.
  • Mapper: each participant becomes either a person keyed on DK-CVR-ENHEDSNUMMER (in an identifying annotation, per Phase 255) or a company keyed on its DK-CVR number. Each gets one otherInfluenceOrControl relationship whose interests are the periods CVR records, and ended partners are closed. No share and no beneficial-ownership flag are set.
  • Frontend: dk-cvr-enhedsnummer is added to ONE_PERSON_PER_VALUE_SCHEMES. Willis has two partners named Mikkel Martin Nielsen with different numbers, and Phase 393's same-source name rule would otherwise merge them into one person.

Verified

  • Replayed 24 answers recorded live through the real adapter and mapper:
    • MADEGÅRDEN I/S: 2 named partners.
    • Willis: 132 participants (130 people and 2 companies). The 2 current partners are the companies; 130 relationships are closed.
    • Novo Nordisk A/S: unchanged.
  • BackgroundCheck run on the real Willis bundle (extractConnectedPeople and clusterConnectedPeople): 130 people, no clusters.
  • Backend: the 22 failures in this sandbox are identical on unmodified main (no ftm/ICU stack here). test_cvr_partners.py adds 10 tests, and the CVR/timeline tests are green.
  • Frontend: tsc, all 1,375 vitest tests and lint:design pass. The OKF check is in sync.

After deploy

Open BackgroundCheck on MADEGÅRDEN I/S and check that both partners show with the "Fully liable participant" role.


Generated by Claude Code

…; page every list

Datafordeler's CVR data carries one relation to people, the fully liable
participants of I/S, K/S and P/S firms. Read each participant's unit type
and name (two requests per 100, DAF-GQL-0016) and map a person keyed on
CVR's participant number (DK-CVR-ENHEDSNUMMER, an identifying annotation;
no CPR, no birth date) or a company keyed on its CVR number, with one
relationship whose interests are CVR's periods.

dk-cvr-enhedsnummer joins ONE_PERSON_PER_VALUE_SCHEMES: Willis Towers
Watson Consultancy Services I/S has two partners of one name.

Every CVR query now pages: Datafordeler answers 100 rows unless asked, and
Willis's 132 partner rows were cut at 100. A failed participant read is a
source_read degradation and is not cached; cache key cvr_denmark:v2.

Notion: https://app.notion.com/p/3a57f3dc292881bd99ffe09d2b9e78aa

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014UZpyb3XxStyJjMqCN2nTB
@StephenAbbott
StephenAbbott merged commit 1856ef2 into main Oct 21, 2026
8 checks passed
@StephenAbbott
StephenAbbott deleted the feat/cvr-fully-liable-partners branch October 21, 2026 10:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant