package com.zt.plat.module.contractorder.api.vo.contract.international;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 合同请求主实体
 */
@Data
public class IntContract {

    // 基础信息
    @Schema(description = "操作标志")
    private String operateFlag;           // 操作标志
    @Schema(description = "账套代码")
    private String bookId;                // 账套代码
    @Schema(description = "组织ID")
    private String orgId;                 // 组织ID
    @Schema(description = "合同唯一键")
    private String contractId;            // 合同唯一键
    @Schema(description = "合同操作类型 (新增, 变更, 修正)")
    private String operateType;           // 合同操作类型 (新增, 变更, 修正)
    @Schema(description = "合同编号")
    private String contractCode;          // 合同编号
    @Schema(description = "业务合同编号")
    private String contractBusinessNo;    // 业务合同编号
    @Schema(description = "对方合同号")
    private String contractExternalNo;    // 对方合同号
    @Schema(description = "系统合同版本号")
    private BigDecimal contractVersion;   // 系统合同版本号
    @Schema(description = "合同状态代码 (值集: 40-签约)")
    private String contractStatus;        // 合同状态代码 (值集: 40-签约)
    @Schema(description = "合同名称")
    private String contractName;          // 合同名称
    @Schema(description = "合同类型 (货运;货代;仓储;保险)")
    private String contractType;          // 合同类型 (货运;货代;仓储;保险)
    @Schema(description = "是否非标准合同文本")
    private String textType;              // 是否非标准合同文本
    @Schema(description = "合同有效期起")
    private String contractStartDate;       // 合同有效期起
    @Schema(description = "合同有效期止")
    private String contractEndDate;         // 合同有效期止
    @Schema(description = "是否固定单价 (0-浮动, 1-固定)")
    private String priceType;             // 是否固定单价 (0-浮动, 1-固定)
    @Schema(description = "合同币种")
    private String currencyCode;          // 合同币种
    @Schema(description = "结算方式")
    private String settleMethod;          // 结算方式
    @Schema(description = "对方合同号")
    private String firstContractCode;     // 对方合同号
    @Schema(description = "预估含税总金额")
    private BigDecimal estimateAmountTotal; // 预估含税总金额
    @Schema(description = "结算依据 (10-交货量, 20-卸车量)")
    private String settleGist;            // 结算依据 (10-交货量, 20-卸车量)
    @Schema(description = "税率")
    private BigDecimal priceTaxRate;      // 税率
    @Schema(description = "运输方式 (10-铁路或汽运, 20-水路运输, 30-铁路运输, 40-汽车运输, 50-航空运输)")
    private String transType;             // 运输方式 (10-铁路或汽运, 20-水路运输, 30-铁路运输, 40-汽车运输, 50-航空运输)
    @Schema(description = "包装方式")
    private String packMethod;            // 包装方式
    @Schema(description = "在途损耗")
    private BigDecimal intransitLoss;     // 在途损耗
    @Schema(description = "提货地")
    private String pickupLocation;        // 提货地
    @Schema(description = "仓库数")
    private BigDecimal warehouseNum;      // 仓库数
    @Schema(description = "按码单入库磅差比")
    private BigDecimal weightDisparity;   // 按码单入库磅差比
    @Schema(description = "投保标的")
    private String insuredSubjectMatter;  // 投保标的
    @Schema(description = "预计年保险总额")
    private BigDecimal estimateCoverageAmount; // 预计年保险总额
    @Schema(description = "预计年保险费")
    private BigDecimal estimatePremium;   // 预计年保险费
    @Schema(description = "保险费率")
    private BigDecimal premiumRate;       // 保险费率
    @Schema(description = "备注信息")
    private String remark;                // 备注信息
    @Schema(description = "经办人工号")
    private String createdUser;           // 经办人工号
    @Schema(description = "经办人姓名")
    private String createdUserName;       // 经办人姓名
    @Schema(description = "拟签递交人工号")
    private String approveSubmitCode;     // 拟签递交人工号
    @Schema(description = "拟签递交人姓名")
    private String approveSubmitName;     // 拟签递交人姓名
    @Schema(description = "拟签呈批日期")
    private String approveSubmitDate;     // 拟签呈批日期
    @Schema(description = "拟签通过人工号")
    private String approvePassCode;       // 拟签通过人工号
    @Schema(description = "拟签通过人姓名")
    private String approvePassName;       // 拟签通过人姓名
    @Schema(description = "拟签通过日期")
    private String approvePassDate;       // 拟签通过日期
    @Schema(description = "签约地 (40-签约必填)")
    private String signSite;              // 签约地 (40-签约必填)
    @Schema(description = "签约日期 (40-签约必填)")
    private String signDate;              // 签约日期 (40-签约必填)
    @Schema(description = "对方签约人 (40-签约必填)")
    private String signFirstPerson;       // 对方签约人 (40-签约必填)
    @Schema(description = "我方签约人工号 (40-签约必填)")
    private String signSecondPersonCode;  // 我方签约人工号 (40-签约必填)
    @Schema(description = "我方签约人")
    private String signSecondPersonName;  // 我方签约人
    @Schema(description = "推荐签约人工号 (40-签约必填, Y/N)")
    private String onceAuthorityFlag;     // 推荐签约人工号 (40-签约必填, Y/N)
    @Schema(description = "推荐签约人工号")
    private String signOnceAccredit;      // 推荐签约人工号
    @Schema(description = "备用字段1")
    private String extCol1;               // 备用字段1
    @Schema(description = "备用字段2")
    private String extCol2;               // 备用字段2
    @Schema(description = "备用字段3")
    private String extCol3;               // 备用字段3
    @Schema(description = "备用字段4")
    private String extCol4;               // 备用字段4
    @Schema(description = "备用字段5")
    private String extCol5;               // 备用字段5
    @Schema(description = "备用字段6")
    private String extCol6;               // 备用字段6
    @Schema(description = "备用字段7")
    private String extCol7;               // 备用字段7
    @Schema(description = "备用字段8")
    private String extCol8;               // 备用字段8
    @Schema(description = "备用字段9")
    private String extCol9;               // 备用字段9
    @Schema(description = "备用字段10")
    private String extCol10;              // 备用字段10
    @Schema(description = "附件清单列表")
    private List<String> attachList;      // 附件清单列表
    @Schema(description = "是否内部企业")
    private String isInternal;              // 是否内部企业
    @Schema(description = "是否框架合同")
    private String isFramework;              // 是否框架合同

    // 嵌套列表
    @Schema(description = "客商信息")
    private List<Partner> partnerList;            // 客商信息
    @Schema(description = "收发港/站点")
    private List<GoodsSite> goodsSiteList;        // 收发港/站点
    @Schema(description = "货物装卸要求")
    private List<LoadingRequirement> loadingRequirementsList; // 货物装卸要求
    @Schema(description = "收付款账号")
    private List<Account> accountList;            // 收付款账号
    @Schema(description = "费用明细")
    private List<Freight> freightList;            // 费用明细
    @Schema(description = "服务费用项目")
    private List<ServiceFee> serviceFeeList;      // 服务费用项目
    @Schema(description = "仓库明细")
    private List<Storge> storgeList;              // 仓库明细
    @Schema(description = "接货地址")
    private List<ReceivingAddr> receivingAddrList; // 接货地址
}