FraudAlert.java
package com.hsbc.fraud.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
/**
* Represents a fraud alert generated when suspicious activity is detected.
* Contains detailed information about the fraud detection result.
*/
public class FraudAlert implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("alert_id")
private String alertId;
@JsonProperty("transaction")
private Transaction transaction;
@JsonProperty("alert_type")
private AlertType alertType;
@JsonProperty("severity")
private AlertSeverity severity;
@JsonProperty("risk_score")
private double riskScore;
@JsonProperty("triggered_rules")
private List<String> triggeredRules;
@JsonProperty("description")
private String description;
@JsonProperty("created_at")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "UTC")
private Instant createdAt;
@JsonProperty("status")
private AlertStatus status;
public FraudAlert() {
this.alertId = UUID.randomUUID().toString();
this.triggeredRules = new ArrayList<>();
this.createdAt = Instant.now();
this.status = AlertStatus.NEW;
}
public FraudAlert(Transaction transaction, AlertType alertType, AlertSeverity severity,
double riskScore, String description) {
this();
this.transaction = transaction;
this.alertType = alertType;
this.severity = severity;
this.riskScore = riskScore;
this.description = description;
}
// Builder pattern
public static Builder builder() {
return new Builder();
}
// Getters and Setters
public String getAlertId() {
return alertId;
}
public void setAlertId(String alertId) {
this.alertId = alertId;
}
public Transaction getTransaction() {
return transaction;
}
public void setTransaction(Transaction transaction) {
this.transaction = transaction;
}
public AlertType getAlertType() {
return alertType;
}
public void setAlertType(AlertType alertType) {
this.alertType = alertType;
}
public AlertSeverity getSeverity() {
return severity;
}
public void setSeverity(AlertSeverity severity) {
this.severity = severity;
}
public double getRiskScore() {
return riskScore;
}
public void setRiskScore(double riskScore) {
this.riskScore = riskScore;
}
public List<String> getTriggeredRules() {
return triggeredRules;
}
public void setTriggeredRules(List<String> triggeredRules) {
this.triggeredRules = triggeredRules;
}
public void addTriggeredRule(String rule) {
this.triggeredRules.add(rule);
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Instant getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
public AlertStatus getStatus() {
return status;
}
public void setStatus(AlertStatus status) {
this.status = status;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FraudAlert that = (FraudAlert) o;
return Objects.equals(alertId, that.alertId);
}
@Override
public int hashCode() {
return Objects.hash(alertId);
}
@Override
public String toString() {
return "FraudAlert{" +
"alertId='" + alertId + '\'' +
", transactionId='" + (transaction != null ? transaction.getTransactionId() : "null") + '\'' +
", alertType=" + alertType +
", severity=" + severity +
", riskScore=" + riskScore +
", triggeredRules=" + triggeredRules +
", description='" + description + '\'' +
", createdAt=" + createdAt +
", status=" + status +
'}';
}
// Builder class
public static class Builder {
private final FraudAlert alert = new FraudAlert();
public Builder transaction(Transaction transaction) {
alert.setTransaction(transaction);
return this;
}
public Builder alertType(AlertType alertType) {
alert.setAlertType(alertType);
return this;
}
public Builder severity(AlertSeverity severity) {
alert.setSeverity(severity);
return this;
}
public Builder riskScore(double riskScore) {
alert.setRiskScore(riskScore);
return this;
}
public Builder triggeredRules(List<String> rules) {
alert.setTriggeredRules(rules);
return this;
}
public Builder addTriggeredRule(String rule) {
alert.addTriggeredRule(rule);
return this;
}
public Builder description(String description) {
alert.setDescription(description);
return this;
}
public Builder status(AlertStatus status) {
alert.setStatus(status);
return this;
}
public FraudAlert build() {
return alert;
}
}
}