Repository navigation
feat(brp): count the people registered at an address object, a number and nothing else - #4657
Merged
Merged
Conversation
… and nothing else
BrpPersonProvider::countResidentsAtAddressObject() asks Haal Centraal
ZoekMetAdresseerbaarObjectIdentificatie with one field and answers
{ total, meta }. It asks only when the brp-haalcentraal source carries
configuration.residentCount: true, and the call reaches the connector with
withholdBodies so the residents' numbers are never stored. The router gains
sourceConfiguration() and the withholdBodies call option. This is the
openregister half of portaliq identity-registered-details T07.
Assisted-by: ClaudeCode:claude-opus-5-5
Contributor
Quality Report — ConductionNL/openregister @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-specs | ✅ | ||||
| test-l10n | ✅ | ||||
| test-l10n-parity | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| composer | ✅ | ✅ 173/173 | |||
| npm | ✅ | ✅ 648/648 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ✅ | ||||
| lockfile sync | ✅ | ||||
| PHPUnit | ✅ 26213/26213 · 25 skipped | ||||
| Newman | ✅ 714/714 | ||||
| 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 | ✅ |
Quality workflow — 2026-10-15 18:44 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
Portaliq's "Mijn gegevens" shows a resident how many people are registered at their own address, as MijnOverheid does. Portaliq reads the BRP only through
BrpPersonProvider, which could not answer that. This is the openregister half of portaliqidentity-registered-detailsT07 (rowcmp-id-residents-at-address, REQ-IRD-005), built as a dependency per decision 156.BrpPersonProvider::countResidentsAtAddressObject(addressObjectId)postsZoekMetAdresseerbaarObjectIdentificatieto/personenwith one field and answers{ total, meta }(the Wet-BRP audit metadata, aslookupByBsn). A malformed id (not 16 digits) answersinvalid-identifierwithout a call. A missing or unreachable source degrades to{ unavailable, cause }.brp-haalcentraalsource carriesconfiguration.residentCount: true(only the boolean counts), the way integriq reads BRP relations only behindconfiguration.relationFields: true(integriq chore(release): 1.1.5-unstable.20260821031704 #2667, decision 220). Otherwise:resident-count-not-enabled, no call.CallService::callwithwithholdBodies: true(integriq chore(release): 1.1.5-unstable.20260821034229 #2669): the call is recorded, its bodies are not. A connector whosecallhas no such parameter is never called (PHP refuses the named argument before the method runs) and the answer isupstream-service-down.ExternalIntegrationRoutergainssourceConfiguration(provider)and the genericwithholdBodiescall option.invokeandinvokeWithMetanow share onedispatch.Privacy
A count, never names: the answer holds
totalandmetaonly; no name, BSN, person object or address object id leaves the provider, and the one log line on a transport failure holds neither. Tests assert both.OpenSpec
New change
brp-residents-at-address-count, built and archived in this PR (openspec/changes/archive/2026-10-15-brp-residents-at-address-count); its two requirements are folded intoopenspec/specs/integration-person-lookup/spec.md, which gains ascreens.md(no screen: provider API).Tests
BrpPersonProviderResidentCountTest(10 tests: the count, zero, four settings that do not allow it, malformed ids, missing source, unreachable registry, an unexpected failure logged without the address).ExternalIntegrationRouterTest+5:sourceConfigurationanswers and fails likecall;withholdBodiesreaches the CallService and not the request options; without the option nothing changes; a CallService without the parameter is not called.Checks (local, changed files)
php -l 0, phpcs 0 (inherited
@specwarnings on the class and its getters), phpstan 0, phpmd 0 (empty HOME), psalm--threads=10, phpunit 79/79 across the integration tests,openspec validate --strict0.Hydra gates (full tree, as CI runs them): gates 1 to 11 PASS; the remaining whole-tree gates had not finished locally when this PR opened, so CI's Hydra Gates job is the arbiter for them.
composer check:strictwas not run locally (disk and memory are shared and tight); CI's PHPUnit job runs the full suite.After this lands
Portaliq's half (fills
residentsAtAddressfrom this method, behindmethod_exists) follows as a portaliq PR. An administrator turns the count on withresidentCount: trueon thebrp-haalcentraalsource.This PR was prepared with AI assistance (Claude Code).