Legacy Claims Portal Home Patterns Handbuch
Java-Quellcode · HTML-first

ClaimTransitionPolicy.java

Browserlesbare Ansicht der unveränderten Java-Quelldatei. Die Originaldatei bleibt im Maven-Projekt erhalten.

Zuordnung

Policy / Domain Service
Originalpfad03_after_refactoring_modular/claim-domain/src/main/java/com/seb4u/demo/claims/domain/ClaimTransitionPolicy.java

Quellcode

package com.seb4u.demo.claims.domain;


/**
 * Entwurfsmuster: Policy / State Transition. Kapselt erlaubte Statuswechsel der Claim-Domain.
 */
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;

public class ClaimTransitionPolicy {
    private final Map<ClaimStatus, Set<ClaimStatus>> transitions = new EnumMap<>(ClaimStatus.class);

    public ClaimTransitionPolicy() {
        transitions.put(ClaimStatus.CREATED, EnumSet.of(ClaimStatus.DOCUMENTS_PENDING, ClaimStatus.DOCUMENTS_VERIFIED, ClaimStatus.REJECTED));
        transitions.put(ClaimStatus.DOCUMENTS_PENDING, EnumSet.of(ClaimStatus.DOCUMENTS_VERIFIED, ClaimStatus.REJECTED));
        transitions.put(ClaimStatus.DOCUMENTS_VERIFIED, EnumSet.of(ClaimStatus.COVERAGE_CHECKED, ClaimStatus.FRAUD_REVIEW_REQUIRED, ClaimStatus.REJECTED));
        transitions.put(ClaimStatus.COVERAGE_CHECKED, EnumSet.of(ClaimStatus.APPROVAL_REQUIRED, ClaimStatus.REJECTED));
        transitions.put(ClaimStatus.APPROVAL_REQUIRED, EnumSet.of(ClaimStatus.APPROVED, ClaimStatus.REJECTED, ClaimStatus.ESCALATED));
        transitions.put(ClaimStatus.APPROVED, EnumSet.of(ClaimStatus.PAYMENT_RELEASED));
    }

    public void requireAllowed(ClaimStatus current, ClaimStatus next) {
        if (!transitions.getOrDefault(current, Set.of()).contains(next)) {
            throw new IllegalStateException("Illegal claim transition: " + current + " -> " + next);
        }
    }
}
⌂ Cockpit