Skip to content

Fix: Implement Claim state machine with transitionTo helper (#200)#243

Open
precious-akpan wants to merge 6 commits into
DigiNodes:mainfrom
precious-akpan:fix/issue-200-claim-state-machine-transitions
Open

Fix: Implement Claim state machine with transitionTo helper (#200)#243
precious-akpan wants to merge 6 commits into
DigiNodes:mainfrom
precious-akpan:fix/issue-200-claim-state-machine-transitions

Conversation

@precious-akpan
Copy link
Copy Markdown

@precious-akpan precious-akpan commented May 28, 2026

Summary

Fixes #200 - Implements a validated state machine for Claim entity to prevent invalid state transitions.

Changes Made

Core Implementation

  • Added ClaimState enum (PENDING, RESOLVED, FINALIZED)
  • Added transitionTo() helper method with validation logic
  • Added getCurrentState() helper method
  • Comprehensive unit tests (35+ test cases)

Service Updates

  • Updated ClaimsService.resolveClaim() to use transitionTo()
  • Updated ClaimsService.finalizeClaim() to use transitionTo()
  • Updated ClaimResolutionService.resolveClaim() to use transitionTo()
  • Updated JobsService.computeScores() to use transitionTo()

Documentation

  • Added comprehensive state machine documentation
  • Added usage examples and migration guide
  • Added state diagrams and transition rules

Valid Transitions

PENDING → RESOLVED     (requires verdict + confidence)
PENDING → FINALIZED    (requires verdict + confidence)
RESOLVED → FINALIZED   (optional data update)
RESOLVED → RESOLVED    (update verdict/confidence)
FINALIZED → *          INVALID (immutable)
* → PENDING            INVALID (cannot unresolve)

Testing

  • All existing tests maintained
  • 35+ new unit tests for state transitions
  • Tests cover valid transitions, invalid transitions, and edge cases

Commits (Atomic)

  1. feat: Add ClaimState enum and transitionTo helper method
  2. test: Add comprehensive unit tests for Claim state transitions
  3. refactor: Update ClaimsService to use transitionTo helper
  4. refactor: Update ClaimResolutionService to use transitionTo helper
  5. refactor: Update JobsService to use transitionTo helper
  6. docs: Add state machine documentation

Acceptance Criteria

  • Implementation needed is functional
  • Tests passed (35+ unit tests)
  • No regressions (maintains existing functionality)
  • Prevents invalid state transitions
  • Works with audit trail system
  • Comprehensive documentation

Security / Integrity

  • Prevents race conditions between manual and automated resolution
  • Ensures finalized claims are immutable
  • Validates all state transitions
  • Maintains data integrity across services

Documentation

  • docs/CLAIM_STATE_MACHINE.md - Full state machine documentation with usage examples and migration guide

- Add ClaimState enum (PENDING, RESOLVED, FINALIZED)
- Add ClaimTransitionData interface for transition parameters
- Implement getCurrentState() method to determine current state
- Implement transitionTo() method with validation logic
- Enforce valid state transitions and prevent invalid ones
- Add comprehensive documentation for state machine rules

Valid transitions:
- PENDING → RESOLVED (requires verdict + confidence)
- PENDING → FINALIZED (requires verdict + confidence)
- RESOLVED → FINALIZED (optional verdict/confidence update)

Invalid transitions:
- FINALIZED → * (immutable)
- * → PENDING (cannot unresolve)

Refs: DigiNodes#200
- Add tests for getCurrentState() method
- Add tests for all valid transitions (PENDING→RESOLVED, PENDING→FINALIZED, RESOLVED→FINALIZED)
- Add tests for invalid transitions (from FINALIZED, to PENDING)
- Add tests for missing required data validation
- Add tests for edge cases (false verdict, 0/1 confidence)
- Add tests for state consistency across multiple transitions
- Total: 35+ test cases covering all state machine scenarios

Refs: DigiNodes#200
- Import ClaimState enum
- Update resolveClaim() to use transitionTo(RESOLVED)
- Update finalizeClaim() to use transitionTo(FINALIZED)
- Add validation comments for clarity
- Remove direct field assignments
- Maintain audit trail and cache invalidation logic

This ensures all state transitions in ClaimsService are validated
and prevents invalid state changes.

Refs: DigiNodes#200
- Import ClaimState enum
- Update resolveClaim() to use transitionTo(FINALIZED)
- Replace direct field assignments with validated transition
- Add explanatory comment for PENDING→FINALIZED transition
- Maintain cache invalidation logic

This ensures claim resolution through voting uses validated
state transitions.

Refs: DigiNodes#200
- Import ClaimState enum
- Update computeScores() to use transitionTo(FINALIZED)
- Replace direct field assignments with validated transition
- Improve verdict parsing logic for clarity
- Handle low-confidence case separately (no state change)
- Maintain cache invalidation logic

This ensures automated claim resolution via scheduled jobs
uses validated state transitions and prevents race conditions.

Refs: DigiNodes#200
Add comprehensive documentation for Claim state machine:
- State definitions and transition rules
- Usage examples and error handling
- Service implementation details
- Testing information
- Migration guide from old to new approach

Refs: DigiNodes#200
@precious-akpan precious-akpan force-pushed the fix/issue-200-claim-state-machine-transitions branch from 7a81479 to 1ad7033 Compare May 28, 2026 19:01
@dDevAhmed
Copy link
Copy Markdown
Contributor

resolve conflicts @precious-akpan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Claim state machine invalid transitions

2 participants