ViewRiksdagenVotingAnomalyDetection.java

package com.hack23.cia.model.internal.application.data.politician.impl;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * JPA entity for view_riksdagen_voting_anomaly_detection database view.
 * 
 * Intelligence Purpose: Detects voting anomalies and party discipline violations
 * through analysis of individual politician voting patterns against party lines.
 * Identifies rebellion rates, unanimous vote deviations, and defection risks.
 * 
 * Created by: Liquibase v1.29 (Intelligence Operations)
 * Risk Rules Supported: P-03, P-05, P-13 (Rebellion and party discipline assessment)
 */
@Entity(name = "ViewRiksdagenVotingAnomalyDetection")
@Table(name = "view_riksdagen_voting_anomaly_detection")
public class ViewRiksdagenVotingAnomalyDetection implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "person_id", nullable = false, length = 255)
	private String personId;

	@Id
	@Column(name = "party", nullable = false, length = 50)
	private String party;

	@Column(name = "first_name", length = 255)
	private String firstName;

	@Column(name = "last_name", length = 255)
	private String lastName;

	@Column(name = "total_votes")
	private Long totalVotes;

	@Column(name = "aligned_votes")
	private Long alignedVotes;

	@Column(name = "opposed_votes")
	private Long opposedVotes;

	@Column(name = "party_discipline_score", precision = 5, scale = 2)
	private BigDecimal partyDisciplineScore;

	@Column(name = "rebellion_rate", precision = 5, scale = 2)
	private BigDecimal rebellionRate;

	@Column(name = "unanimous_deviations")
	private Long unanimousDeviations;

	@Column(name = "discipline_classification", length = 100)
	private String disciplineClassification;

	@Column(name = "defection_risk_assessment", length = 255)
	private String defectionRiskAssessment;

	@Column(name = "anomaly_count")
	private Long anomalyCount;

	/**
	 * Default constructor.
	 */
	public ViewRiksdagenVotingAnomalyDetection() {
		super();
	}

	// Getters and Setters

	public String getPersonId() {
		return personId;
	}

	public void setPersonId(String personId) {
		this.personId = personId;
	}

	public String getParty() {
		return party;
	}

	public void setParty(String party) {
		this.party = party;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public Long getTotalVotes() {
		return totalVotes;
	}

	public void setTotalVotes(Long totalVotes) {
		this.totalVotes = totalVotes;
	}

	public Long getAlignedVotes() {
		return alignedVotes;
	}

	public void setAlignedVotes(Long alignedVotes) {
		this.alignedVotes = alignedVotes;
	}

	public Long getOpposedVotes() {
		return opposedVotes;
	}

	public void setOpposedVotes(Long opposedVotes) {
		this.opposedVotes = opposedVotes;
	}

	public BigDecimal getPartyDisciplineScore() {
		return partyDisciplineScore;
	}

	public void setPartyDisciplineScore(BigDecimal partyDisciplineScore) {
		this.partyDisciplineScore = partyDisciplineScore;
	}

	public BigDecimal getRebellionRate() {
		return rebellionRate;
	}

	public void setRebellionRate(BigDecimal rebellionRate) {
		this.rebellionRate = rebellionRate;
	}

	public Long getUnanimousDeviations() {
		return unanimousDeviations;
	}

	public void setUnanimousDeviations(Long unanimousDeviations) {
		this.unanimousDeviations = unanimousDeviations;
	}

	public String getDisciplineClassification() {
		return disciplineClassification;
	}

	public void setDisciplineClassification(String disciplineClassification) {
		this.disciplineClassification = disciplineClassification;
	}

	public String getDefectionRiskAssessment() {
		return defectionRiskAssessment;
	}

	public void setDefectionRiskAssessment(String defectionRiskAssessment) {
		this.defectionRiskAssessment = defectionRiskAssessment;
	}

	public Long getAnomalyCount() {
		return anomalyCount;
	}

	public void setAnomalyCount(Long anomalyCount) {
		this.anomalyCount = anomalyCount;
	}

	@Override
	public boolean equals(final Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null || getClass() != obj.getClass()) {
			return false;
		}
		final ViewRiksdagenVotingAnomalyDetection other = (ViewRiksdagenVotingAnomalyDetection) obj;
		return new EqualsBuilder()
				.append(personId, other.personId)
				.append(party, other.party)
				.isEquals();
	}

	@Override
	public int hashCode() {
		return new HashCodeBuilder()
				.append(personId)
				.append(party)
				.toHashCode();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
				.append("personId", personId)
				.append("firstName", firstName)
				.append("lastName", lastName)
				.append("party", party)
				.append("rebellionRate", rebellionRate)
				.append("disciplineClassification", disciplineClassification)
				.toString();
	}
}