Claim.java
package uk.gov.dhsc.htbhf.claimant.entity;
import lombok.*;
import org.hibernate.annotations.Type;
import uk.gov.dhsc.htbhf.claimant.model.ClaimStatus;
import uk.gov.dhsc.htbhf.claimant.model.PostcodeData;
import uk.gov.dhsc.htbhf.eligibility.model.CombinedIdentityAndEligibilityResponse;
import uk.gov.dhsc.htbhf.eligibility.model.EligibilityStatus;
import java.time.LocalDateTime;
import java.util.Map;
import javax.persistence.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "claim")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true)
@ToString(callSuper = true)
@SuppressWarnings("PMD.TooManyFields")
public class Claim extends VersionedEntity {
@NotNull
@Column(name = "claim_status")
@Enumerated(EnumType.STRING)
@Setter(AccessLevel.PRIVATE)
private ClaimStatus claimStatus;
@Column(name = "claim_status_timestamp")
@Setter(AccessLevel.PRIVATE)
private LocalDateTime claimStatusTimestamp;
@NotNull
@Column(name = "eligibility_status")
@Enumerated(EnumType.STRING)
@Setter(AccessLevel.PRIVATE)
private EligibilityStatus eligibilityStatus;
@Column(name = "eligibility_status_timestamp")
@Setter(AccessLevel.PRIVATE)
private LocalDateTime eligibilityStatusTimestamp;
@Column(name = "dwp_household_identifier")
private String dwpHouseholdIdentifier;
@Column(name = "hmrc_household_identifier")
private String hmrcHouseholdIdentifier;
@Column(name = "card_account_id")
private String cardAccountId;
@Column(name = "device_fingerprint_json")
@Type(type = JSON_TYPE)
private Map<String, Object> deviceFingerprint;
@Column(name = "device_fingerprint_hash")
private String deviceFingerprintHash;
@Column(name = "web_ui_version")
private String webUIVersion;
@Column(name = "postcode_data_json")
@Type(type = JSON_TYPE)
private PostcodeData postcodeData;
@Column(name = "card_status")
@Enumerated(EnumType.STRING)
@Setter(AccessLevel.PRIVATE)
private CardStatus cardStatus;
@Column(name = "card_status_timestamp")
@Setter(AccessLevel.PRIVATE)
private LocalDateTime cardStatusTimestamp;
@Column(name = "initial_identity_and_eligibility_response")
@Type(type = JSON_TYPE)
private CombinedIdentityAndEligibilityResponse initialIdentityAndEligibilityResponse;
@Column(name = "current_identity_and_eligibility_response")
@Type(type = JSON_TYPE)
private CombinedIdentityAndEligibilityResponse currentIdentityAndEligibilityResponse;
@Valid
@ToString.Exclude
@Embedded
@NotNull
private Claimant claimant;
@Valid
@Column(name = "eligibility_override")
@Type(type = JSON_TYPE)
private EligibilityOverride eligibilityOverride;
@NotNull
@Column(name = "reference")
private String reference;
public void updateClaimStatus(ClaimStatus newStatus) {
if (claimStatus != newStatus) {
claimStatusTimestamp = LocalDateTime.now();
}
claimStatus = newStatus;
}
public void updateEligibilityStatus(EligibilityStatus newStatus) {
if (eligibilityStatus != newStatus) {
eligibilityStatusTimestamp = LocalDateTime.now();
}
eligibilityStatus = newStatus;
}
public void updateCardStatus(CardStatus newStatus) {
if (cardStatus != newStatus) {
cardStatusTimestamp = LocalDateTime.now();
}
cardStatus = newStatus;
}
}