ViewCommitteeProductivityMatrix.java

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

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

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

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_committee_productivity_matrix database view.
 * 
 * Intelligence Purpose: Tracks committee productivity metrics over time with
 * quarterly aggregation, trend analysis, and automated productivity classifications.
 * Provides comprehensive assessment of committee performance patterns and efficiency.
 * 
 * Created by: Liquibase v1.30 (OSINT Performance Tracking)
 * Risk Rules Supported: C-01 to C-04 (Committee performance and productivity rules)
 */
@Entity(name = "ViewCommitteeProductivityMatrix")
@Table(name = "view_committee_productivity_matrix")
public class ViewCommitteeProductivityMatrix implements Serializable {

	private static final long serialVersionUID = 1L;

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

	@Id
	@Column(name = "period_start", nullable = false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date periodStart;

	@Column(name = "committee_name", length = 255)
	private String committeeName;

	@Column(name = "committee_category", length = 100)
	private String committeeCategory;

	@Column(name = "period_end")
	@Temporal(TemporalType.TIMESTAMP)
	private Date periodEnd;

	@Column(name = "year")
	private Integer year;

	@Column(name = "quarter")
	private Integer quarter;

	@Column(name = "total_documents")
	private Long totalDocuments;

	@Column(name = "committee_reports")
	private Long committeeReports;

	@Column(name = "motions_handled")
	private Long motionsHandled;

	@Column(name = "active_members")
	private Integer activeMembers;

	@Column(name = "documents_per_member", precision = 10, scale = 2)
	private BigDecimal documentsPerMember;

	@Column(name = "reports_per_member", precision = 10, scale = 2)
	private BigDecimal reportsPerMember;

	@Column(name = "document_change")
	private Long documentChange;

	@Column(name = "document_change_pct", precision = 10, scale = 2)
	private BigDecimal documentChangePct;

	@Column(name = "ma_4quarter_documents", precision = 10, scale = 2)
	private BigDecimal movingAvg4QuarterDocuments;

	@Column(name = "period_avg_documents", precision = 10, scale = 2)
	private BigDecimal periodAvgDocuments;

	@Column(name = "period_median_documents", precision = 10, scale = 2)
	private BigDecimal periodMedianDocuments;

	@Column(name = "period_max_documents")
	private Long periodMaxDocuments;

	@Column(name = "period_min_documents")
	private Long periodMinDocuments;

	@Column(name = "vs_average", precision = 10, scale = 2)
	private BigDecimal vsAverage;

	@Column(name = "vs_average_pct", precision = 10, scale = 2)
	private BigDecimal vsAveragePct;

	@Column(name = "productivity_level", length = 50)
	private String productivityLevel;

	@Column(name = "productivity_trend", length = 50)
	private String productivityTrend;

	@Column(name = "productivity_assessment", length = 255)
	private String productivityAssessment;

	@Column(name = "first_document_date")
	@Temporal(TemporalType.TIMESTAMP)
	private Date firstDocumentDate;

	@Column(name = "last_document_date")
	@Temporal(TemporalType.TIMESTAMP)
	private Date lastDocumentDate;

	@Column(name = "activity_span_days")
	private Integer activitySpanDays;

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

	// Getters and Setters

	public String getCommitteeCode() {
		return committeeCode;
	}

	public void setCommitteeCode(String committeeCode) {
		this.committeeCode = committeeCode;
	}

	public Date getPeriodStart() {
		return periodStart;
	}

	public void setPeriodStart(Date periodStart) {
		this.periodStart = periodStart;
	}

	public String getCommitteeName() {
		return committeeName;
	}

	public void setCommitteeName(String committeeName) {
		this.committeeName = committeeName;
	}

	public String getCommitteeCategory() {
		return committeeCategory;
	}

	public void setCommitteeCategory(String committeeCategory) {
		this.committeeCategory = committeeCategory;
	}

	public Date getPeriodEnd() {
		return periodEnd;
	}

	public void setPeriodEnd(Date periodEnd) {
		this.periodEnd = periodEnd;
	}

	public Integer getYear() {
		return year;
	}

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

	public Integer getQuarter() {
		return quarter;
	}

	public void setQuarter(Integer quarter) {
		this.quarter = quarter;
	}

	public Long getTotalDocuments() {
		return totalDocuments;
	}

	public void setTotalDocuments(Long totalDocuments) {
		this.totalDocuments = totalDocuments;
	}

	public Long getCommitteeReports() {
		return committeeReports;
	}

	public void setCommitteeReports(Long committeeReports) {
		this.committeeReports = committeeReports;
	}

	public Long getMotionsHandled() {
		return motionsHandled;
	}

	public void setMotionsHandled(Long motionsHandled) {
		this.motionsHandled = motionsHandled;
	}

	public Integer getActiveMembers() {
		return activeMembers;
	}

	public void setActiveMembers(Integer activeMembers) {
		this.activeMembers = activeMembers;
	}

	public BigDecimal getDocumentsPerMember() {
		return documentsPerMember;
	}

	public void setDocumentsPerMember(BigDecimal documentsPerMember) {
		this.documentsPerMember = documentsPerMember;
	}

	public BigDecimal getReportsPerMember() {
		return reportsPerMember;
	}

	public void setReportsPerMember(BigDecimal reportsPerMember) {
		this.reportsPerMember = reportsPerMember;
	}

	public Long getDocumentChange() {
		return documentChange;
	}

	public void setDocumentChange(Long documentChange) {
		this.documentChange = documentChange;
	}

	public BigDecimal getDocumentChangePct() {
		return documentChangePct;
	}

	public void setDocumentChangePct(BigDecimal documentChangePct) {
		this.documentChangePct = documentChangePct;
	}

	public BigDecimal getMovingAvg4QuarterDocuments() {
		return movingAvg4QuarterDocuments;
	}

	public void setMovingAvg4QuarterDocuments(BigDecimal movingAvg4QuarterDocuments) {
		this.movingAvg4QuarterDocuments = movingAvg4QuarterDocuments;
	}

	public BigDecimal getPeriodAvgDocuments() {
		return periodAvgDocuments;
	}

	public void setPeriodAvgDocuments(BigDecimal periodAvgDocuments) {
		this.periodAvgDocuments = periodAvgDocuments;
	}

	public BigDecimal getPeriodMedianDocuments() {
		return periodMedianDocuments;
	}

	public void setPeriodMedianDocuments(BigDecimal periodMedianDocuments) {
		this.periodMedianDocuments = periodMedianDocuments;
	}

	public Long getPeriodMaxDocuments() {
		return periodMaxDocuments;
	}

	public void setPeriodMaxDocuments(Long periodMaxDocuments) {
		this.periodMaxDocuments = periodMaxDocuments;
	}

	public Long getPeriodMinDocuments() {
		return periodMinDocuments;
	}

	public void setPeriodMinDocuments(Long periodMinDocuments) {
		this.periodMinDocuments = periodMinDocuments;
	}

	public BigDecimal getVsAverage() {
		return vsAverage;
	}

	public void setVsAverage(BigDecimal vsAverage) {
		this.vsAverage = vsAverage;
	}

	public BigDecimal getVsAveragePct() {
		return vsAveragePct;
	}

	public void setVsAveragePct(BigDecimal vsAveragePct) {
		this.vsAveragePct = vsAveragePct;
	}

	public String getProductivityLevel() {
		return productivityLevel;
	}

	public void setProductivityLevel(String productivityLevel) {
		this.productivityLevel = productivityLevel;
	}

	public String getProductivityTrend() {
		return productivityTrend;
	}

	public void setProductivityTrend(String productivityTrend) {
		this.productivityTrend = productivityTrend;
	}

	public String getProductivityAssessment() {
		return productivityAssessment;
	}

	public void setProductivityAssessment(String productivityAssessment) {
		this.productivityAssessment = productivityAssessment;
	}

	public Date getFirstDocumentDate() {
		return firstDocumentDate;
	}

	public void setFirstDocumentDate(Date firstDocumentDate) {
		this.firstDocumentDate = firstDocumentDate;
	}

	public Date getLastDocumentDate() {
		return lastDocumentDate;
	}

	public void setLastDocumentDate(Date lastDocumentDate) {
		this.lastDocumentDate = lastDocumentDate;
	}

	public Integer getActivitySpanDays() {
		return activitySpanDays;
	}

	public void setActivitySpanDays(Integer activitySpanDays) {
		this.activitySpanDays = activitySpanDays;
	}

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

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

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
				.append("committeeCode", committeeCode)
				.append("periodStart", periodStart)
				.append("committeeName", committeeName)
				.append("productivityLevel", productivityLevel)
				.append("productivityAssessment", productivityAssessment)
				.toString();
	}
}