# Summary This PR introduces a **Case Lifecycle Domain Boundary** to centralize lifecycle decision logic and reduce coupling within the appeals application. The work is **behaviour-preserving** and introduces no intentional changes to business rules, CRM integrations, translations, dashboards, API routes, or user-facing functionality. ## What was added New lifecycle boundary: ```text lib/domain/case-lifecycle/ ``` Key responsibilities extracted: - Specialist process normalization - Appeal type mapping - Specialist process stage override mapping - Stage case-type resolution - Stage catalogue lookup - Closed-case status recognition - Lifecycle stage index resolution - Lifecycle stage status assignment ## Behaviour preserved Characterization tests were added before each extraction to preserve: - Appeal type mapping and aliases - Specialist process handling - Lifecycle stage progression - Closed-case handling - Status assignment (`complete`, `in-progress`, `not-started`) - Existing ROW behaviour - Existing `statuscode` lifecycle semantics Closed-case recognition remains unchanged for: ```text 1000 5 6 846040013 846040059 846040060 ``` ## Documentation Added: ```text lib/domain/case-lifecycle/README.md ``` Documenting: - Boundary ownership - Non-goals - Lifecycle invariants - Known architectural constraints - Future extraction roadmap ## Testing Added lifecycle characterization coverage for: - Stage wrapper behaviour - Specialist process normalization - Appeal type mapping - Specialist process stage mapping - Stage case-type resolution - Stage catalogue lookup - Progress behaviour - Closed-case status handling - Stage index resolution - Stage status assignment ## Validation - Lifecycle characterization tests passed - `npm run lint` passed with no errors ## Out of Scope No changes to: - Stage catalogue ownership - Representation eligibility - Dashboard calculations - CRM/OData queries - API routes - Redux state - EN/CY translations - Event visibility logic ## Risk **Low risk** The refactor was delivered through small, characterization-first slices with no functional changes intended. Related work items: #23527
10 lines
603 B
JavaScript
10 lines
603 B
JavaScript
export { getLifecycleStagesForCase } from "./getLifecycleStagesForCase";
|
|
export { isClosedCaseStatus } from "./isClosedCaseStatus";
|
|
export { getLifecycleStageIndex } from "./getLifecycleStageIndex";
|
|
export { getLifecycleStageStatus } from "./getLifecycleStageStatus";
|
|
export { getStageCaseTypeKey } from "./getStageCaseTypeKey";
|
|
export { getStagesForCaseTypeKey } from "./getStagesForCaseTypeKey";
|
|
export { mapAppealType } from "./mapAppealType";
|
|
export { mapSpecialistProcessStageType } from "./mapSpecialistProcessStageType";
|
|
export { normalizeSpecialistProcess } from "./normalizeSpecialistProcess";
|