feat(case-location): apply spec#395
Merged
Merged
Conversation
Manifest-first apply of the case-location change. Adds a `location` schema to the Procest register with a back-reference to `case`, the case detail "Locaties" sidebar tab (related-index widget filtered by case UUID), and admin index/detail pages for browsing all case locations. The location entity CRUD is handled entirely by the OpenRegister auto-form rendered by the manifest — no bespoke LocationController. LocationService.php exposes the server-side helpers the manifest cannot: - validate() — cross-field rules from design.md §Validation Rules - reverseGeocode() — delegates to PdokLocatieserverService (pdok-integration) with graceful null fallback when PDOK is unavailable - attachToCase() — persists a validated location through the OpenRegister object store, scoped to a case - listForCase() — server-side helper for workflow guards and map clustering Settings: adds `location_schema` to the app-config allow-list and the `location` → `location_schema` slug mapping so the schema UUID is resolvable at runtime. Spec tasks applied: T01 (schema + config key), T02 (back-reference relation docs), T04 (LocationService validate/reverseGeocode/attachToCase). Deferred: T03 (PDOK client supplied by pdok-integration #390), T05 (no bespoke LocationController — manifest covers CRUD), T06 (manifest-driven tab replaces Vue-side CaseLocationsTab.vue for MVP), T07/T08 (CSV import/export — follow-up), V01-V04 (test scope — strict watchdog lint+jq only).
54e0460 to
f6dc42d
Compare
Contributor
Quality Report — ConductionNL/procest @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 419/419 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ❌ |
Spec coverage: 3% (21 tests / 673 specs)
Quality workflow — 2026-05-11 12:19 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.
Summary
Manifest-first apply of the
case-locationchange. Adds alocationschema with a back-reference tocase, surfaces it on the case detail "Locaties" sidebar tab via therelated-indexwidget, and adds admin Locations / LocationDetail pages for browsing.CRUD goes through the OpenRegister auto-form rendered by the manifest — no bespoke
LocationController.LocationService.phpowns the server-side helpers (validate,reverseGeocode,attachToCase,listForCase) and delegates reverse geocoding toPdokLocatieserverServicefrom #390.Changes
lib/Settings/procest_register.json: newlocationschema (back-ref tocase,nummeraanduidingId,parcelId,latitude,longitude,formattedAddress,accuracyRadius,sourceenum,label), registered in the Procest register schema list.lib/Service/SettingsService.php:location_schemaconfig key + slug mapping.lib/Service/LocationService.php: NEW — validate / reverseGeocode (PDOK-aware with graceful fallback) / attachToCase / listForCase.src/manifest.json:Locations(index) +LocationDetail(detail) admin pages,LocationsMenusettings menu item, newlocatiessidebar tab onCaseDetailpage.builds/build.json: applied entry forcase-locationwith task accounting.Spec coverage
Applied: T01 (schema +
location_schemaconfig key), T02 (back-reference relation), T04 (LocationService).Deferred (follow-up issues):
pdok-integration(feat(pdok-integration): apply spec #390);LocationService.reverseGeocode()delegates to it.LocationController; manifest + OpenRegister object endpoint cover CRUD.related-indexwidget replaces Vue-sideCaseLocationsTab.vuefor MVP.Constraints honoured
LocationController.LocationService::validate).php -l+jqvalidation; no i18n; no composer.pdok-integrationservices are unavailable.Test plan
composer check:strictlocally once PR lands (deferred under watchdog).LocationService::validate()rejects payload missing both BAG ID and coordinates./settings/locationsindex page renders without 500.LocationService::reverseGeocode()returns null when PDOK service is missing.