Repository navigation
Integrate dossiq batch b43: r31 case-type lines, decision letter source, request fields - #4669
Merged
Merged
Conversation
The Fasen en taken tab made one phase per status, so regulier v4 showed Ontvangen / Aanvullende gegevens gevraagd / In behandeling / ... where DqZaaktype draws "Fase 1: Ontvangst / 2: Beoordeling / 3: Besluit". A status type's optional `phase` (r25/status-type-phase) now groups: the statuses naming one phase share it, named by the phase, ordered by the first of them, with the tasks of all of them. Once a type is phased a final status without phase or task is not listed as a phase. Without any phase every status stays its own phase, as before. Assisted-by: ClaudeCode:claude-opus-5-5
CaseTypeResolver merged a child's statuses into its parent's by name, so regulier (6 statuses of its own) also listed Omgevingsvergunning's Besluitvorming and Afgehandeld: 8 where DqZaaktype draws 6. A type that declares statuses of its own now takes only those, its whole lifecycle; a child that declares none still inherits its parent's. Result types and fields keep merging by name. Assisted-by: ClaudeCode:claude-opus-5-5
DqZaaktypeVelden "Wie wat ziet en invult, per rol en status" draws a
column per role, labelled with the statuses its rules name ("Intaker,
ontvangen"), and one pill per cell: Verplicht, Bewerken, Verborgen or
Alleen lezen. The matrix had a column per status with lines of text.
Each cell now holds what the field is for that role: a rule of the role
first, then required in one of its statuses, else edit.
Assisted-by: ClaudeCode:claude-opus-5-5
DqZaaktypeOverzicht Privacy draws "Bewaartermijn 20 jaar na afhandeling"; live printed the stored months beside a fixed "maanden", which also showed with no period set. The entry now reads lawfulPurposeRetention with the facts `months` format (whole years as years) and the suffix "after closing", dropped with an empty value. Assisted-by: ClaudeCode:claude-opus-5-5
DqZaaktype Gegevens draws "Behandelende teams: Vergunningen, Toezicht en handhaving"; live printed the group ids. The entry's parts now use the facts `group` format and, for the list, `itemFormat: "group"`. Assisted-by: ClaudeCode:claude-opus-5-5
The Versies list read only validFrom, which a draft does not have, so
regulier v5 showed no date where the boards draw "Concept, gewijzigd
7 okt". The date part is now a candidate pair: validFrom, else "Draft,
changed {versionDate|date}".
Assisted-by: ClaudeCode:claude-opus-5-5
A child that declares statuses replaced its parent's outright, which would drop the parent's other statuses from a child that only recolours or renames one (the schema promises a merge by name). The child's own statuses now replace the parent's only when they make a lifecycle of their own, a status that is not final and one that is (regulier v4/v5); a smaller declaration merges by name as before. Assisted-by: ClaudeCode:claude-opus-5-5
draft-version-date gives the versions card's first meta part a fallback:
the validFrom date, else 'Draft, changed {versionDate|date}'.
Assisted-by: ClaudeCode:claude-opus-5-5
caseType gains requestFields (1.43.0), the facts entries the request card shows instead of the description; the card reads it through nextcloud-vue's facts fieldsFrom. The Zuiddrecht Woo type lists the request's scope, its period in years and the kinds of document. Assisted-by: ClaudeCode:claude-opus-5-5
…letter The card read the case's besluitDocument, the text a flow step renders, so it stayed empty on a case whose letter was drafted from the case type's template. It now reads dossiq's letters route for the decision purpose, the newest dossier document of the type the case type declares under documentDrafts.decision, as the decide dialog does: the letter, its status, the template and the date, empty while there is none. The route also answers the declaration's template slug and format, and empty: true while the case holds no such letter. Assisted-by: ClaudeCode:claude-opus-5-5
…d delivery
A case type's documentDrafts.<purpose> may now declare signing and
delivery, each a language map ({"nl": ..., "en": ...}), as procedure
configuration. The letters route returns both in the reader's language
beside the letter, and the Beschikking card draws the board's four rows:
Status, Sjabloon, Ondertekenen, Verzenden. The Woo case types (both
versions) declare 'Via LibreSign, na de paraaf' and 'Berichtenbox van
MijnOverheid'. caseType 1.24.0, register 0.20.74.
Assisted-by: ClaudeCode:claude-opus-5-5
The boards draw colleagues as parties (Lars as "Collega", an Adviseur on 710d44a4), but a party's kind comes from its schema and dossiq only had person and organisation. A colleague schema (kind colleague, tied to a Nextcloud user by userId) is added, the case accepts it (case 1.53.0), and every kind names its identityShapes so the parties widget checks a party against pipelinq's role kinds in one vocabulary (kvkCompany 1.6.0). Assisted-by: ClaudeCode:claude-opus-5-5
…n the merge child-statuses-replace-parent gave inheritedRows a boolean ownReplaces flag and took CaseTypeResolver to complexity 52 and inheritedRows to cyclomatic 10 (phpmd). statusTypesFor now asks ownLifecycle first and merges only when the type declares less than a whole lifecycle; the two value questions (empty value, whole lifecycle) live in InheritedRowValues. Behaviour unchanged. Assisted-by: ClaudeCode:claude-opus-5-5
inheritedRows stayed at cyclomatic 10 after the own-lifecycle move; adding the rows that belong to no case type is now withSharedRows. Assisted-by: ClaudeCode:claude-opus-5-5
colleague-party adds the colleague schema with no dossiq page to open, so searchableSchemas asked to link it or opt it out; it opts out, as the other schemas without a page do. Digests recorded (the colleague schema ships with this batch; the caseType record follows the base register's 1.24.0). Assisted-by: ClaudeCode:claude-opus-5-5
# Conflicts: # lib/Settings/example-sets/zuiddrecht.json
Assisted-by: ClaudeCode:claude-opus-5-5
The colleague schema has no surface: no page, route or service names it,
and case.partyKinds lists kinds, not schemas. SchemaHasSurfaceTest's
allowlist ceiling is 0 ('a new schema needs a surface rather than a line
here'), so the line goes back to DQ-L7 to give it one (for example the
parties card's add-party source over colleagues). Reverts the merge of
d1102e0 and the searchable fix on top of it; re-land by reverting this
commit together with the surface.
Assisted-by: ClaudeCode:claude-opus-5-5
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn and
remko48
as code owners
October 26, 2026 08:58
rubenvdlinde
requested review from
WilcoLouwerse,
bbrands02 and
rjzondervan
as code owners
October 26, 2026 08:58
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ❌ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| check-debt-ratchet | ❌ | ||||
| check-types-e2e | ✅ | ||||
| composer | ✅ | ✅ 109/109 | |||
| npm | ❌ | ✅ 658/658 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| lockfile sync | ✅ | ||||
| PHPUnit | ❌ | ||||
| Newman | ⏭️ | ||||
| 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-26 09:09 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.
Dossiq batch b43: DQ-L8's six r31 case-type lines. They cover phases by status phase, child statuses replacing the parent's, the field rights matrix by role, privacy retention in years, handling teams by name, and the draft version date. Items that need nextcloud-vue 24t1y (facts months/group format) stay in as manifest config; :8080 builds against 24t1y. It also took three late lines: DQ-L2's case-type-request-fields (25aba94, caseType 1.43.0), DQ-L4's decision-letter-source (a207b85, register 0.20.74) and DQ-L7's colleague-party (d1102e0), which is taken out again (see below). It builds on development after #4665, with #4664 (inherited fields) merged in.
Heads (merge order, --no-ff)
r31/case-type-phases-by-status-phased08f3bcr31/child-statuses-replace-parent512ed03r31/field-rights-matrix-by-role6bc6bb2r31/privacy-retention-in-years26111c7r31/handling-teams-by-name4600ac0r31/draft-version-date98628dbr32/decision-letter-sourcea207b85r31/case-type-request-fields25aba94Integration changes
inheritedRowsa booleanownReplacesflag, which took CaseTypeResolver to complexity 52 andinheritedRowsto cyclomatic 10 (phpmd).statusTypesFornow asksownLifecyclefirst and merges only when the type declares less than a whole lifecycle. The two value questions (empty value, whole lifecycle) move toInheritedRowValues, with a test. Behaviour is unchanged; the case type tests pass, 721.inheritedRowsstayed at cyclomatic 10 after that move. Adding the rows that belong to no case type is now its own step,withSharedRows.case.partyKindslists kinds, not schemas. SchemaHasSurfaceTest's allowlist ceiling is 0 ("a new schema needs a surface rather than a line here"), so the line goes back to DQ-L7 to give it one (for example an add-party source over colleagues on the parties card). To re-land it, revert the revert commit together with that surface. portaliq feat(menu): Flows is the single workflow entry #1716 should wait for it.Verified locally
COMPOSER_PROCESS_TIMEOUT=0 composer check:stricton the final head, run alone: ALL CHECKS PASSED, exit 0. PHPUnit: 9888 tests, 0 errors, 0 failures. Earlier runs were red on phpmd (CaseTypeResolver) and on SchemaHasSurface (colleague), both handled as described above.Prepared by a dossiq integration lane (AI-assisted, Claude Code); the coordinator merges.