package com.kaidi.oa.domain; import java.math.BigDecimal; import java.time.Instant; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Column; import jakarta.persistence.Table; /** * 知识产权资产(全生命周期管理,知识产权部)。来自需求功能1:提案管理→申请流程管控→ * 官方编号与证书管理→法律状态跟踪。 * * 单一实体承载「申请流程节点状态机」(stage) 与「法律状态」(legalStatus) 两条状态线: * - stage(申请流程):提案 → 内部审核 → 代理委托 → 官方提交 → 已受理 → 已授权 / 已驳回 / 已撤回 * - legalStatus(法律状态):申请中 → 公开 → 实审 → 授权维持 → 失效/终止(含驳回/复审/无效宣告等特殊态) * * ipType:发明专利 / 实用新型 / 外观设计 / 软件著作权 / 商标 / 集成电路布图。 * rdProjectId(可空):与研发立项关联(需求功能3,"每件知识产权必须关联至少一个内部研发项目"), * 也是业务链 6 的中段(研发立项→知识产权→申报)。 * * 金额一律 BigDecimal;日期一律 String(YYYY-MM-DD)。本资产含申请号/证书等敏感登记信息与累计费用, * 写口收 ADMIN/APPROVER(FINANCE_PREFIXES),读口收敏感读门槛(SENSITIVE_READ_PREFIXES)。 */ @Entity @Table(name = "ip_asset") public class IpAsset { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** 系统自动生成的提案编号(如 IP-2026-0007)。 */ private String proposalNo; private String name; /** 知识产权类型:发明专利 / 实用新型 / 外观设计 / 软件著作权 / 商标 / 集成电路布图。 */ private String ipType; /** 技术分类/产品线(如 污水处理-生物脱氮 / AI算法 / 电池结构),用于布局与侵权分析。 */ private String techField; private String applicant; /** 发明人/设计人,逗号分隔。 */ private String inventors; /** 关联研发立项(业务链 6 中段,可空但需求要求至少关联一个项目)。 */ private Long rdProjectId; private String rdProjectName; /** 关联产品线(用于技术布局与侵权分析)。 */ private String productLine; // ---- 申请流程状态机 ---- /** 申请流程节点:提案 / 内部审核 / 代理委托 / 官方提交 / 已受理 / 已授权 / 已驳回 / 已撤回。 */ private String stage; // ---- 法律状态线 ---- /** 法律状态:申请中 / 公开 / 实审 / 授权维持 / 复审中 / 无效宣告 / 失效终止。 */ private String legalStatus; // ---- 官方编号与证书 ---- private String applyNo; private String publicNo; private String grantNo; private String certNo; private String applyDate; private String grantDate; /** 代理机构。 */ private String agency; private String agencyContact; /** 累计归集费用(申请费+代理费+年费+复审费…),由费用台账回写汇总。 */ private BigDecimal totalCost = BigDecimal.ZERO; /** 被引用次数(外部检索/竞争对手技术对比回写,供投入产出分析)。 */ private Integer citedCount = 0; /** 责任人(IP 部门跟案人)。 */ private String owner; @Column(columnDefinition = "TEXT") private String remark; private Instant createdAt; private Instant updatedAt; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getProposalNo() { return proposalNo; } public void setProposalNo(String proposalNo) { this.proposalNo = proposalNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIpType() { return ipType; } public void setIpType(String ipType) { this.ipType = ipType; } public String getTechField() { return techField; } public void setTechField(String techField) { this.techField = techField; } public String getApplicant() { return applicant; } public void setApplicant(String applicant) { this.applicant = applicant; } public String getInventors() { return inventors; } public void setInventors(String inventors) { this.inventors = inventors; } public Long getRdProjectId() { return rdProjectId; } public void setRdProjectId(Long rdProjectId) { this.rdProjectId = rdProjectId; } public String getRdProjectName() { return rdProjectName; } public void setRdProjectName(String rdProjectName) { this.rdProjectName = rdProjectName; } public String getProductLine() { return productLine; } public void setProductLine(String productLine) { this.productLine = productLine; } public String getStage() { return stage; } public void setStage(String stage) { this.stage = stage; } public String getLegalStatus() { return legalStatus; } public void setLegalStatus(String legalStatus) { this.legalStatus = legalStatus; } public String getApplyNo() { return applyNo; } public void setApplyNo(String applyNo) { this.applyNo = applyNo; } public String getPublicNo() { return publicNo; } public void setPublicNo(String publicNo) { this.publicNo = publicNo; } public String getGrantNo() { return grantNo; } public void setGrantNo(String grantNo) { this.grantNo = grantNo; } public String getCertNo() { return certNo; } public void setCertNo(String certNo) { this.certNo = certNo; } public String getApplyDate() { return applyDate; } public void setApplyDate(String applyDate) { this.applyDate = applyDate; } public String getGrantDate() { return grantDate; } public void setGrantDate(String grantDate) { this.grantDate = grantDate; } public String getAgency() { return agency; } public void setAgency(String agency) { this.agency = agency; } public String getAgencyContact() { return agencyContact; } public void setAgencyContact(String agencyContact) { this.agencyContact = agencyContact; } public BigDecimal getTotalCost() { return totalCost; } public void setTotalCost(BigDecimal totalCost) { this.totalCost = totalCost; } public Integer getCitedCount() { return citedCount; } public void setCitedCount(Integer citedCount) { this.citedCount = citedCount; } public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } 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; } public Instant getUpdatedAt() { return updatedAt; } public void setUpdatedAt(Instant updatedAt) { this.updatedAt = updatedAt; } }