Repository navigation
feat(property-source): BRP relations are read behind a setting on the source (decision 220) - #2667
Merged
Merged
Conversation
… source (decision 220) BrpRelationReader asks the brp-haalcentraal source for the partner, parent and child numbers of one person, and only when the source carries configuration.relationFields true. The call stays out of the call log and the value cache, and the log line holds no number and no part of the answer. The person read leaves relation fields out of its question.
rubenvdlinde
requested review from
Rem-Dam,
WilcoLouwerse,
bbrands02 and
rjzondervan
as code owners
October 12, 2026 15:34
Contributor
Quality Report — ConductionNL/integriq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| build | ✅ | ||||
| check-specs | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 143/143 | |||
| npm | ✅ | ✅ 647/647 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| lockfile sync | ✅ | ||||
| PHPUnit | ✅ 5463/5463 · 1 skipped | ||||
| Newman | ✅ 130/130 | ||||
| Playwright | ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development. |
||||
| Hydra gates | ✅ | ||||
| Hydra gates (axe) | ✅ |
Quality workflow — 2026-10-12 15:41 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this does
Decision 220 (Ruben, 12 Oct): dossiq's conflict-of-interest check reads BRP relations through integriq. This is the integriq half. The dossiq half is ConductionNL/dossiq#3844, and it lands after this one.
Cut from origin/development a4a22ca, which holds #2665.
BrpRelationReader::readasks thebrp-haalcentraalsource who a person's partner, parents and children are. It posts RaadpleegMetBurgerservicenummer to/personenand asks for three fields:partners.burgerservicenummer,ouders.burgerservicenummerandkinderen.burgerservicenummer. Nothing else.configuration.relationFields: true. Without it the registry is not asked. Only the booleantruecounts.available,reasonandrelations(relationpartner,parentorchild, with a burgerservicenummer). A caller that reaches the class by name needs none of integriq's types.available: falsecomes withrelations-not-enabled,no-source,unreachableorinvalid-identifier.BrpPropertySource::resolvenow leavespartners,oudersandkinderenfields out of its question. A schema property could declare them before, around any setting. That read caches its answer per person for 15 minutes, so a relation in it would have reached the next reader of that person.RegistrySourceGatewaygainsreadUnrecorded()andconfiguration().Privacy
Relation numbers are personal data about people who are not part of the case.
readUnrecorded(), which passespersistLog: falseto the call service. The call log keeps bodies during an investigation window and keeps a failed request for a replay, so a recorded call could hold both the question and the answer. The read also stays out of the property value cache.property-source.brp.relations.read, with the source slug and the outcome. A test asserts that no burgerservicenummer and no part of the answer reaches the logger, on a good read and on a failed one.Which BRP authorisation the municipality needs
Set
relationFieldsonly when the municipality's autorisatiebesluit from RvIG covers the burgerservicenummer of:for a task that includes checking a worker's personal interest in a case. Corrected 12 October: these numbers were first written from memory. They are now checked against an autorisatietabel RvIG publishes (https://publicaties.rvig.nl/media/13550/download), which lists Burgerservicenummer under exactly these four rubrics. The municipality's own autorisatiebesluit is the authority on what it may ask. Without that authorisation Haal Centraal refuses the fields, and the read answers
unreachable.Rollout, for an administrator
brp-haalcentraalsource and add"relationFields": trueto its configuration.false.Verified
refactor/r2/logs/r1-red.log(exit 2, 13 errors and 1 failure, the reader class and the gateway methods did not exist).tests/Unit/PropertySourceandtests/Unit/Settings: 314 tests, exit 0 (r1-green.log).composer check:strict, run stage by stage in the foreground because no build slot came free in 15 minutes (r1-strict.log): check:no-legacy-types, check:routes, lint, phpcs, phpmd, phpstan and psalm exit 0 each. The full PHPUnit suite exits 2: 5,464 tests, 11 errors, all intests/Unit/AppInfoand all the sameTypeErrorintests/Helpers/AppContainerInjection.php:93(a mock container assigned to a typed property). They fail the same way on origin/development on this machine and touch none of this PR's files. CI is the check for them.npmcheck applies.Not verified
openspec/changes/brp-relations-read/tasks.md.persistLog: falsewas not exercised; the unit test asserts the flag reachesCallService::call.Answered (Q-R2-8, decision 229)
A relation read leaves a call log record without bodies. The follow-up pull request builds that switch and replaces
readUnrecorded()withreadWithoutBodies().