package com.kaidi.oa.domain; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import java.math.BigDecimal; import java.time.Instant; /** * 工程监理部 · 独立索赔事项(投资控制模块 5)。 * *

与 {@link SvChangeClaim} 的区别:本实体专门承载施工方索赔,具备完整四阶段状态机: * 索赔意向(INTENT)→ 事件经过(INCIDENT)→ 工期/费用影响评估(ASSESSMENT)→ 监理意见(OPINION)→ 已结案(CLOSED)。 * 支持关键线路影响分析(criticalPathImpact 说明,以及量化的关键线路延误天数)。 * *

金额一律 {@link com.kaidi.oa.common.Money} 收口 BigDecimal,无裸 double。 */ @Entity @Table(name = "sv_indep_claim") public class SvIndepClaim { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** 关联监理项目 ID。 */ private Long supervisionProjectId; /** 关联监理项目编号(冗余快速显示)。 */ private String supervisionProjectCode; /** 索赔编号(SYC-序号自动生成)。 */ private String claimCode; /** 施工方名称(提出索赔的单位)。 */ private String contractor; // ─── 阶段一:索赔意向 ───────────────────────────── /** 索赔意向提交日期。 */ private String intentDate; /** 索赔事由概述(意向阶段填写)。 */ private String intentSummary; // ─── 阶段二:事件经过 ───────────────────────────── /** 事件起始日期。 */ private String incidentStartDate; /** 事件结束日期(若持续中可为空)。 */ private String incidentEndDate; /** 事件经过详细说明。 */ @Column(columnDefinition = "TEXT") private String incidentDetail; /** 证据材料引用(文件号/URL 逗号分隔)。 */ private String evidenceRef; // ─── 阶段三:工期/费用影响评估 ─────────────────── /** 申报工期影响(天)。 */ private Integer durationImpactDays; /** 关键线路影响天数(区分非关键线路延误,为 0 时说明不在关键路径上)。 */ private Integer criticalPathImpactDays; /** 关键线路影响分析说明(如"该延误不在关键路径,不影响完工日期")。 */ @Column(columnDefinition = "TEXT") private String criticalPathImpact; /** 申报费用索赔金额。 */ @Column(nullable = false) private BigDecimal claimAmount = BigDecimal.ZERO; /** 费用影响评估说明。 */ @Column(columnDefinition = "TEXT") private String costImpactDetail; // ─── 阶段四:监理意见 ───────────────────────────── /** 监理审核人。 */ private String reviewer; /** 监理意见:支持/部分支持/驳回。 */ private String reviewConclusion; /** 监理核定工期补偿(天,监理意见后填写)。 */ private Integer approvedDurationDays; /** 监理核定费用补偿金额。 */ @Column(nullable = false) private BigDecimal approvedAmount = BigDecimal.ZERO; /** 监理意见详细说明。 */ @Column(columnDefinition = "TEXT") private String reviewOpinion; /** 监理意见出具日期。 */ private String reviewDate; // ─── 状态机 ─────────────────────────────────────── /** * 状态:INTENT(索赔意向)/ INCIDENT(事件经过)/ ASSESSMENT(工期费用评估) * / OPINION(监理意见)/ CLOSED(已结案)/ REJECTED(已驳回)。 */ private String claimStatus; private Instant createdAt; private Instant updatedAt; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getSupervisionProjectId() { return supervisionProjectId; } public void setSupervisionProjectId(Long supervisionProjectId) { this.supervisionProjectId = supervisionProjectId; } public String getSupervisionProjectCode() { return supervisionProjectCode; } public void setSupervisionProjectCode(String supervisionProjectCode) { this.supervisionProjectCode = supervisionProjectCode; } public String getClaimCode() { return claimCode; } public void setClaimCode(String claimCode) { this.claimCode = claimCode; } public String getContractor() { return contractor; } public void setContractor(String contractor) { this.contractor = contractor; } public String getIntentDate() { return intentDate; } public void setIntentDate(String intentDate) { this.intentDate = intentDate; } public String getIntentSummary() { return intentSummary; } public void setIntentSummary(String intentSummary) { this.intentSummary = intentSummary; } public String getIncidentStartDate() { return incidentStartDate; } public void setIncidentStartDate(String incidentStartDate) { this.incidentStartDate = incidentStartDate; } public String getIncidentEndDate() { return incidentEndDate; } public void setIncidentEndDate(String incidentEndDate) { this.incidentEndDate = incidentEndDate; } public String getIncidentDetail() { return incidentDetail; } public void setIncidentDetail(String incidentDetail) { this.incidentDetail = incidentDetail; } public String getEvidenceRef() { return evidenceRef; } public void setEvidenceRef(String evidenceRef) { this.evidenceRef = evidenceRef; } public Integer getDurationImpactDays() { return durationImpactDays; } public void setDurationImpactDays(Integer durationImpactDays) { this.durationImpactDays = durationImpactDays; } public Integer getCriticalPathImpactDays() { return criticalPathImpactDays; } public void setCriticalPathImpactDays(Integer criticalPathImpactDays) { this.criticalPathImpactDays = criticalPathImpactDays; } public String getCriticalPathImpact() { return criticalPathImpact; } public void setCriticalPathImpact(String criticalPathImpact) { this.criticalPathImpact = criticalPathImpact; } public BigDecimal getClaimAmount() { return claimAmount; } public void setClaimAmount(BigDecimal claimAmount) { this.claimAmount = claimAmount; } public String getCostImpactDetail() { return costImpactDetail; } public void setCostImpactDetail(String costImpactDetail) { this.costImpactDetail = costImpactDetail; } public String getReviewer() { return reviewer; } public void setReviewer(String reviewer) { this.reviewer = reviewer; } public String getReviewConclusion() { return reviewConclusion; } public void setReviewConclusion(String reviewConclusion) { this.reviewConclusion = reviewConclusion; } public Integer getApprovedDurationDays() { return approvedDurationDays; } public void setApprovedDurationDays(Integer approvedDurationDays) { this.approvedDurationDays = approvedDurationDays; } public BigDecimal getApprovedAmount() { return approvedAmount; } public void setApprovedAmount(BigDecimal approvedAmount) { this.approvedAmount = approvedAmount; } public String getReviewOpinion() { return reviewOpinion; } public void setReviewOpinion(String reviewOpinion) { this.reviewOpinion = reviewOpinion; } public String getReviewDate() { return reviewDate; } public void setReviewDate(String reviewDate) { this.reviewDate = reviewDate; } public String getClaimStatus() { return claimStatus; } public void setClaimStatus(String claimStatus) { this.claimStatus = claimStatus; } public Instant getCreatedAt() { return createdAt; } public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } public Instant getUpdatedAt() { return updatedAt; } public void setUpdatedAt(Instant updatedAt) { this.updatedAt = updatedAt; } }