ViewRiksdagenElectionYearAnomalies.java

/*
 * Copyright 2010-2026 James Pether Sörling
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *	$Id$
 *  $HeadURL$
 */
package com.hack23.cia.model.internal.application.data.seasonal.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;
import org.hibernate.annotations.Immutable;

/**
 * The Class ViewRiksdagenElectionYearAnomalies.
 * Database view for election year anomaly detection with z-score thresholds (|z| > 1.5).
 * Filters election years only with statistically unusual patterns.
 */
@Entity
@Immutable
@Table(name = "view_riksdagen_election_year_anomalies")
public class ViewRiksdagenElectionYearAnomalies implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "year", nullable = false)
	private Integer year;

	@Column(name = "total_ballots")
	private Long totalBallots;

	@Column(name = "documents_produced")
	private Long documentsProduced;

	@Column(name = "motions_filed")
	private Long motionsFiled;

	@Column(name = "proposals_filed")
	private Long proposalsFiled;

	@Column(name = "attendance_rate")
	private BigDecimal attendanceRate;

	@Column(name = "ballot_z_score_vs_election_avg")
	private BigDecimal ballotZScoreVsElectionAvg;

	@Column(name = "doc_z_score_vs_election_avg")
	private BigDecimal docZScoreVsElectionAvg;

	@Column(name = "motion_z_score")
	private BigDecimal motionZScore;

	@Column(name = "year_classification")
	private String yearClassification;

	@Column(name = "composite_classification")
	private String compositeClassification;

	@Column(name = "yoy_ballot_change_pct")
	private BigDecimal yoyBallotChangePct;

	@Column(name = "has_ballot_anomaly")
	private Boolean hasBallotAnomaly;

	@Column(name = "has_doc_anomaly")
	private Boolean hasDocAnomaly;

	@Column(name = "has_motion_anomaly")
	private Boolean hasMotionAnomaly;

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

	@Column(name = "anomaly_types")
	private String anomalyTypes;

	@Column(name = "anomaly_severity")
	private String anomalySeverity;

	@Column(name = "max_z_score")
	private BigDecimal maxZScore;

	@Column(name = "anomaly_direction")
	private String anomalyDirection;

	@Column(name = "election_avg_ballots")
	private BigDecimal electionAvgBallots;

	@Column(name = "election_stddev_ballots")
	private BigDecimal electionStddevBallots;

	@Column(name = "election_avg_docs")
	private BigDecimal electionAvgDocs;

	@Column(name = "election_stddev_docs")
	private BigDecimal electionStddevDocs;

	@Column(name = "election_avg_motions")
	private BigDecimal electionAvgMotions;

	@Column(name = "election_stddev_motions")
	private BigDecimal electionStddevMotions;

	/**
	 * Instantiates a new view riksdagen election year anomalies.
	 */
	public ViewRiksdagenElectionYearAnomalies() {
		super();
	}

	// Getters and setters

	public Integer getYear() {
		return year;
	}

	public void setYear(final Integer year) {
		this.year = year;
	}

	public Long getTotalBallots() {
		return totalBallots;
	}

	public void setTotalBallots(final Long totalBallots) {
		this.totalBallots = totalBallots;
	}

	public Long getDocumentsProduced() {
		return documentsProduced;
	}

	public void setDocumentsProduced(final Long documentsProduced) {
		this.documentsProduced = documentsProduced;
	}

	public Long getMotionsFiled() {
		return motionsFiled;
	}

	public void setMotionsFiled(final Long motionsFiled) {
		this.motionsFiled = motionsFiled;
	}

	public Long getProposalsFiled() {
		return proposalsFiled;
	}

	public void setProposalsFiled(final Long proposalsFiled) {
		this.proposalsFiled = proposalsFiled;
	}

	public BigDecimal getAttendanceRate() {
		return attendanceRate;
	}

	public void setAttendanceRate(final BigDecimal attendanceRate) {
		this.attendanceRate = attendanceRate;
	}

	public BigDecimal getBallotZScoreVsElectionAvg() {
		return ballotZScoreVsElectionAvg;
	}

	public void setBallotZScoreVsElectionAvg(final BigDecimal ballotZScoreVsElectionAvg) {
		this.ballotZScoreVsElectionAvg = ballotZScoreVsElectionAvg;
	}

	public BigDecimal getDocZScoreVsElectionAvg() {
		return docZScoreVsElectionAvg;
	}

	public void setDocZScoreVsElectionAvg(final BigDecimal docZScoreVsElectionAvg) {
		this.docZScoreVsElectionAvg = docZScoreVsElectionAvg;
	}

	public BigDecimal getMotionZScore() {
		return motionZScore;
	}

	public void setMotionZScore(final BigDecimal motionZScore) {
		this.motionZScore = motionZScore;
	}

	public String getYearClassification() {
		return yearClassification;
	}

	public void setYearClassification(final String yearClassification) {
		this.yearClassification = yearClassification;
	}

	public String getCompositeClassification() {
		return compositeClassification;
	}

	public void setCompositeClassification(final String compositeClassification) {
		this.compositeClassification = compositeClassification;
	}

	public BigDecimal getYoyBallotChangePct() {
		return yoyBallotChangePct;
	}

	public void setYoyBallotChangePct(final BigDecimal yoyBallotChangePct) {
		this.yoyBallotChangePct = yoyBallotChangePct;
	}

	public Boolean getHasBallotAnomaly() {
		return hasBallotAnomaly;
	}

	public void setHasBallotAnomaly(final Boolean hasBallotAnomaly) {
		this.hasBallotAnomaly = hasBallotAnomaly;
	}

	public Boolean getHasDocAnomaly() {
		return hasDocAnomaly;
	}

	public void setHasDocAnomaly(final Boolean hasDocAnomaly) {
		this.hasDocAnomaly = hasDocAnomaly;
	}

	public Boolean getHasMotionAnomaly() {
		return hasMotionAnomaly;
	}

	public void setHasMotionAnomaly(final Boolean hasMotionAnomaly) {
		this.hasMotionAnomaly = hasMotionAnomaly;
	}

	public Integer getAnomalyCount() {
		return anomalyCount;
	}

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

	public String getAnomalyTypes() {
		return anomalyTypes;
	}

	public void setAnomalyTypes(final String anomalyTypes) {
		this.anomalyTypes = anomalyTypes;
	}

	public String getAnomalySeverity() {
		return anomalySeverity;
	}

	public void setAnomalySeverity(final String anomalySeverity) {
		this.anomalySeverity = anomalySeverity;
	}

	public BigDecimal getMaxZScore() {
		return maxZScore;
	}

	public void setMaxZScore(final BigDecimal maxZScore) {
		this.maxZScore = maxZScore;
	}

	public String getAnomalyDirection() {
		return anomalyDirection;
	}

	public void setAnomalyDirection(final String anomalyDirection) {
		this.anomalyDirection = anomalyDirection;
	}

	public BigDecimal getElectionAvgBallots() {
		return electionAvgBallots;
	}

	public void setElectionAvgBallots(final BigDecimal electionAvgBallots) {
		this.electionAvgBallots = electionAvgBallots;
	}

	public BigDecimal getElectionStddevBallots() {
		return electionStddevBallots;
	}

	public void setElectionStddevBallots(final BigDecimal electionStddevBallots) {
		this.electionStddevBallots = electionStddevBallots;
	}

	public BigDecimal getElectionAvgDocs() {
		return electionAvgDocs;
	}

	public void setElectionAvgDocs(final BigDecimal electionAvgDocs) {
		this.electionAvgDocs = electionAvgDocs;
	}

	public BigDecimal getElectionStddevDocs() {
		return electionStddevDocs;
	}

	public void setElectionStddevDocs(final BigDecimal electionStddevDocs) {
		this.electionStddevDocs = electionStddevDocs;
	}

	public BigDecimal getElectionAvgMotions() {
		return electionAvgMotions;
	}

	public void setElectionAvgMotions(final BigDecimal electionAvgMotions) {
		this.electionAvgMotions = electionAvgMotions;
	}

	public BigDecimal getElectionStddevMotions() {
		return electionStddevMotions;
	}

	public void setElectionStddevMotions(final BigDecimal electionStddevMotions) {
		this.electionStddevMotions = electionStddevMotions;
	}

	@Override
	public boolean equals(final Object obj) {
		return EqualsBuilder.reflectionEquals(this, obj);
	}

	@Override
	public int hashCode() {
		return HashCodeBuilder.reflectionHashCode(this);
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
	}
}