package com.kaidi.oa.domain; 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; /** * 融资方案比选(金融办·融资申请与审批流程)。 * 支持对同一融资需求录入多家金融机构的报价,系统自动计算简化 IRR(综合成本率), * 辅助财务人员择优决策。 * * 状态:待比选 → 已推荐 → 已选定 → 已驳回。 * status=已选定 时,系统自动用 selectedSchemeId 回写 Financing 台账的 lender/rate/repayMethod。 */ @Entity @Table(name = "pmt_loan_scheme") public class PmtLoanScheme { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** 关联融资台账 id(pmt_loan_scheme 属于某次融资需求下的比选方案之一)。 */ private Long financingId; /** 融资台账编号(冗余)。 */ private String financingCode; /** 报价机构名称(银行/租赁公司名)。 */ private String institution; /** 融资品种:银行贷款 / 融资租赁 / 债券 / 票据 / 其他。 */ private String loanType; /** 拟融资金额(元)。 */ private BigDecimal amount = BigDecimal.ZERO; /** 年化利率(百分比,如 4.35 表示 4.35%)。 */ private BigDecimal annualRate; /** 期限(月)。 */ private Integer termMonths; /** 还款方式:等额本息 / 等额本金 / 到期一次还本付息 / 按期付息到期还本。 */ private String repayMethod; /** 手续费(一次性)。 */ private BigDecimal handlingFee = BigDecimal.ZERO; /** 担保方式:信用贷 / 抵押 / 质押 / 保证 / 组合担保。 */ private String guaranteeType; /** 担保费率(年化,百分比)。 */ private BigDecimal guaranteeRate; /** 提款条件(文字描述)。 */ private String drawdownConditions; /** * 系统自动计算的综合成本率(利息+费用+担保成本之和/本金,IRR 简化口径,百分比)。 * 创建/更新时服务端根据 rate+费用+担保自动回填。 */ private BigDecimal effectiveCostRate; /** 综合排名(越小越优,由 /rank 端点服务端按综合成本排序后写入)。 */ private Integer rank; /** 是否已推荐(比选后 owner 标注的首选方案)。 */ private Boolean recommended = false; /** 经办人。 */ private String owner; /** 状态:待比选 / 已推荐 / 已选定 / 已驳回。 */ private String status; /** 备注(机构具体条款说明)。 */ private String remark; private Instant createdAt; // ---------- getters/setters ---------- public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getFinancingId() { return financingId; } public void setFinancingId(Long financingId) { this.financingId = financingId; } public String getFinancingCode() { return financingCode; } public void setFinancingCode(String financingCode) { this.financingCode = financingCode; } public String getInstitution() { return institution; } public void setInstitution(String institution) { this.institution = institution; } public String getLoanType() { return loanType; } public void setLoanType(String loanType) { this.loanType = loanType; } public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal amount) { this.amount = amount; } public BigDecimal getAnnualRate() { return annualRate; } public void setAnnualRate(BigDecimal annualRate) { this.annualRate = annualRate; } public Integer getTermMonths() { return termMonths; } public void setTermMonths(Integer termMonths) { this.termMonths = termMonths; } public String getRepayMethod() { return repayMethod; } public void setRepayMethod(String repayMethod) { this.repayMethod = repayMethod; } public BigDecimal getHandlingFee() { return handlingFee; } public void setHandlingFee(BigDecimal handlingFee) { this.handlingFee = handlingFee; } public String getGuaranteeType() { return guaranteeType; } public void setGuaranteeType(String guaranteeType) { this.guaranteeType = guaranteeType; } public BigDecimal getGuaranteeRate() { return guaranteeRate; } public void setGuaranteeRate(BigDecimal guaranteeRate) { this.guaranteeRate = guaranteeRate; } public String getDrawdownConditions() { return drawdownConditions; } public void setDrawdownConditions(String drawdownConditions) { this.drawdownConditions = drawdownConditions; } public BigDecimal getEffectiveCostRate() { return effectiveCostRate; } public void setEffectiveCostRate(BigDecimal effectiveCostRate) { this.effectiveCostRate = effectiveCostRate; } public Integer getRank() { return rank; } public void setRank(Integer rank) { this.rank = rank; } public Boolean getRecommended() { return recommended; } public void setRecommended(Boolean recommended) { this.recommended = recommended; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public Instant getCreatedAt() { return createdAt; } public void setCreatedAt(Instant createdAt) { this.createdAt = createdAt; } }