package com.brilliance.isc.vo.model;

import com.brilliance.mda.runtime.mda.util.Decimals;
import com.brilliance.isc.common.json.BigDecimalSerialize;
import com.brilliance.isc.common.vo.AbstractCommonVo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;

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

import static com.brilliance.mda.runtime.mda.Constants.NULLDATE;
import static com.brilliance.mda.runtime.mda.Constants.NULLSTR;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GidVo extends AbstractCommonVo {

    //Internal Unique ID of Guarantee
    private String inr = NULLSTR;

    //Reference
    private String ownref = NULLSTR;

    //Externally Displayed Name to Identify the Contract
    private String nam = NULLSTR;

    //Responsible User
    private String ownusr = NULLSTR;

    //Date of Creation Opening or Registry
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date credat = NULLDATE;

    //Valid from
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date opndat = NULLDATE;

    //Date Guarantee Closed
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date clsdat = NULLDATE;

    //Old Reference
    private String oldref = NULLSTR;

    //Date of Last Amendment
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date amedat = NULLDATE;

    //Date of Customer's Order
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orddat = NULLDATE;

    //Number of Amendment
    private int amenbr;

    //Number of Pending Claims
    private int pndclm;

    //Own Charges Borne by
    private String chato = NULLSTR;

    //Valid until
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expdat = NULLDATE;

    //Liability until
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date liadat = NULLDATE;

    //Country Code Risk Country
    private String stacty = NULLSTR;

    //Version Counter
    //private String ver = NULLSTR;

    //Handling Type
    private String hndtyp = NULLSTR;

    //Modify Guarantee Text
    private String gidtxtmodflg = NULLSTR;

    //INR of Generating Text
    private String gtxinr = NULLSTR;

    //Guarantee Language
    private String giduil = NULLSTR;

    //Unlimited Guarantee
    private String expflg = NULLSTR;

    //Unlimited Liability
    private String liaflg = NULLSTR;

    //Date from Original Contract
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orcdat = NULLDATE;

    //Reference of Original Contract
    private String orcref = NULLSTR;

    //Currency of Original Contract
    private String orccur = NULLSTR;

    //Amount of Original Contract
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal orcamt = Decimals.ZERO_SCALE2;

    //Percentage/Rate of Original Contract
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal orcrat = Decimals.ZERO_SCALE6;

    //Guarantee Send to
    private String sndto = NULLSTR;

    //Reason of Cancelation
    private String purcan = NULLSTR;

    //Tender Reference
    private String tenref = NULLSTR;

    //Tender Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date tendat = NULLDATE;

    //Date of Preadvice
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date avidat = NULLDATE;

    //Tender Closing Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date tenclsdat = NULLDATE;

    //Declaration of Readiness
    private String decrea = NULLSTR;

    //Place of Jurisdiction
    private String jurplc = NULLSTR;

    //Law of Jurisdiction
    private String jurlaw = NULLSTR;

    //Account for Advance Payment
    private String acc = NULLSTR;

    //Reserved Contract
    private String resflg = NULLSTR;

    //Goods Code for Statistics
    private String stagod = NULLSTR;

    //Reduced Amount to be Paid
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal redamt = Decimals.ZERO_SCALE2;

    //Currency of Reduced Amount to be Paid
    private String redcur = NULLSTR;

    //Date of Reduction or Release
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date reddat = NULLDATE;

    //Currency Outstanding Amount
    private String outcur = NULLSTR;

    //Outstanding Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal outamt = Decimals.ZERO_SCALE2;

    //Confirmation Status
    private String cnfsta = NULLSTR;

    //Partial Confirmation
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal partcon = Decimals.ZERO_SCALE2;

    //Confirmation Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date cnfdat = NULLDATE;

    //Percentage or Amount Confirmed
    private String cnfflg = NULLSTR;

    //Declaration of Indemnity
    private String revflg = NULLSTR;

    //TRNINR which L/C Opened/Issued
    private String opntrninr = NULLSTR;

    //INR of Generating Text ATX
    private String atxinr = NULLSTR;

    //Applicable Rules Reimbursement
    private String apprulrmb = NULLSTR;

    //Date of Authorization to Reimburse
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date autdat = NULLDATE;

    //Auto-Renewal - Local Undertaking Seq. C
    private String autrnwflgc = NULLSTR;

    //Auto-Renewal
    private String autrnwflg = NULLSTR;

    //Modify Guarantee Text
    private String gidtxtmodflg2 = NULLSTR;

    //Modify Object of Contract Sequence C
    private String covgodsrvcmodflg = NULLSTR;

    //Delivery of Original - Local Undertaking Seq. C
    private String deloric = NULLSTR;

    //Delivery of Original Undertaking
    private String delori = NULLSTR;

    //Delivery To/Collection By
    private String delto = NULLSTR;

    //Delivery To/Collection By - Local Undertaking Seq. C
    private String deltoc = NULLSTR;

    //Demand Indicator
    private String demand = NULLSTR;

    //Second Guarantee Language
    private String giduil2 = NULLSTR;

    //Demand Indicator - Local Undertaking Seq. C
    private String demandc = NULLSTR;

    //Draft Number
    private int dftnbr;

    //Reinstatement Days
    private int dipreiday;

    //Modify Object of Contract
    private String covgodsrvmodflg = NULLSTR;

    //Reinstatement Interest Amount
    private String dipreiflg3 = NULLSTR;

    //Reinstatement Principle Amount
    private String dipreiflg1 = NULLSTR;

    //Delivery of Original - Local Undertaking Seq. C
    private String deloritxtc = NULLSTR;

    //Advice Period Type
    private String advper = NULLSTR;

    //Automatic Extension Final Expiry Date - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expdatfinc = NULLDATE;

    //Advice Period
    private int advnbr;

    //Undertaking Type from Local Undertaking Seq. C
    private String gartypin = NULLSTR;

    //Modify Expiry Condition/Event
    private String exptxtmodflg = NULLSTR;

    //INR of Generating Text for second text
    private String gtxinr2 = NULLSTR;

    //INR of Generating Text - Local Undertaking Seq. C
    private String gtxinrc = NULLSTR;

    //Automatic Extension Notification Period
    private int notnbrc;

    //Modify Guarantee Text - Local Undertaking Seq. C
    private String gidtxtmodflgc = NULLSTR;

    //Final Expiry Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expdatfin = NULLDATE;

    //Notify Period Type
    private String notper = NULLSTR;

    //Delivery of Original Undertaking Details
    private String deloritxt = NULLSTR;

    //Requested Date of Issue - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date opndatc = NULLDATE;

    //Date of Customer's Order - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orddatc = NULLDATE;

    //Notify Period
    private int notnbr;

    //Modify Document and Presentation Instructions
    private String prepermodflg = NULLSTR;

    //Leading field for original amount and contract
    private String orcflgc = NULLSTR;

    //Purpose of Message as from incoming message
    private String purposin = NULLSTR;

    //Confirmation Instructions
    private String cnfdet = NULLSTR;

    //Received Confirmation Instructions
    private String reccnfdet = NULLSTR;

    //Direct rejection
    private String rejflg = NULLSTR;

    //Modify Document and Presentation Instructions
    private String prepercmodflg = NULLSTR;

    //Reimbursing Bank's Charges
    private String rmbcha = NULLSTR;

    //Purpose of Message for outgoing
    private String purpos = NULLSTR;

    //Reimbursing Bank Account Identification
    private String rmbact = NULLSTR;

    //Modify Liability Condition/Event - Counter Undertaking
    private String liatxtcmodflg = NULLSTR;

    //Renewal-Period Type
    private String rnwper = NULLSTR;

    private String iscrotra = NULLSTR;

    //Reimbursement Information
    private String rmbflg = NULLSTR;

    //Automatic Extension Period - Local Undertaking Seq. C
    private String rnwperc = NULLSTR;

    //Renewal-Period
    private int rnwnbr;

    //Details of automatic extension period
    private String rnwpertxt = NULLSTR;

    //Automatic Extension Period
    private String rnwpers20 = NULLSTR;

    //Renewal-Period
    private int rnwnbrc;

    //Bilingual Guarantee
    private String secuilflg = NULLSTR;

    //Details of automatic extension period - Local Undertaking Seq. C
    private String rnwpertxtc = NULLSTR;

    //Standard wording required
    private String stdwrdc = NULLSTR;

    //is contract due to SR2020 standard?
    private String s20staflg = NULLSTR;

    //Transfer Indicator
    private String transfer = NULLSTR;

    //Standard wording requested language
    private String stdwrduilc = NULLSTR;

    //Transfer Indicator - Local Undertaking Seq. C
    private String transferc = NULLSTR;

    //INCCORMSGFLG
    private String inccormsgflg = NULLSTR;

    //Entity holding Contract
    private String etyextkey = NULLSTR;

    //Type of Undertaking
    private String gartyp = NULLSTR;

    //Transmit Original Guarantee Latest on
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date trmdat = NULLDATE;

    //Legal Undertaking Form
    private String legfrm = NULLSTR;

    //Account for Advance Payment - Local Undertaking Seq. C
    private String accc = NULLSTR;

    //Type of Request
    private String drpreflg = NULLSTR;

    //Expiry Type
    private String exptyp = NULLSTR;

    //Undertaking Type - Local Undertaking Seq. C
    private String gartypc = NULLSTR;

    //Governing Law Country - Local Undertaking Seq. C
    private String jurlawc = NULLSTR;

    //Governing Law Country
    private String jurlaws20 = NULLSTR;

    //Details of Governing Law - Local Undertaking Seq. C
    private String jurlawtxtc = NULLSTR;

    //Place of Jurisdiction - Local Undertaking Seq. C
    private String jurplcc = NULLSTR;

    //Form of Undertaking - Local Undertaking Seq. C
    private String legfrmc = NULLSTR;

    //Liability Type - Local Undertaking Seq. C
    private String liatypc = NULLSTR;

    //Amount of Original Contract - Local Undertaking Seq. C
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal orcamtc = Decimals.ZERO_SCALE2;

    //Currency of Original Contract - Local Undertaking Seq. C
    private String orccurc = NULLSTR;

    //Date from Original Contract - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orcdatc = NULLDATE;

    //Reference of Original Contract - Local Undertaking Seq. C
    private String orcrefc = NULLSTR;

    //Percentage/Rate of Original Contract - Local Undertaking Seq. C
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal orcratc = Decimals.ZERO_SCALE6;

    //Tender Closing Date - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date tenclsdatc = NULLDATE;

    //Tender Date - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date tendatc = NULLDATE;

    //Tender Reference - Local Undertaking Seq. C
    private String tenrefc = NULLSTR;

    //Transmit Original Guarantee Latest on - Local Undertaking Seq. C
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date trmdatc = NULLDATE;

    //EXPPLC
    private String expplc = NULLSTR;

    //Inure Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date inudat = NULLDATE;

    //Fee Collection date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date feecoldat = NULLDATE;

    //BRANCH CODE KEYINR
    private String bchkeyinr = NULLSTR;

    //BRANCHINR
    private String branchinr = NULLSTR;

    //Test Key Unconfirmity
    private String teskeyunc = NULLSTR;

    //组织机构
    private String juscod = NULLSTR;

    //流动资金槷款利率档次
    private String cunqii = NULLSTR;

    //利率
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal bilvvv = Decimals.ZERO_SCALE5;

    //decrease amount flg
    private String decflg = NULLSTR;

    //Risk Rate
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal rskrat = Decimals.ZERO_SCALE2;

    //Cash cover percent
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal cshpct = Decimals.ZERO_SCALE2;

    //Mortgage Flag
    private String guaflg = NULLSTR;

    //合同号
    private String rptref = NULLSTR;

    //发票号
    private String invref = NULLSTR;

    //跨境人民币保函
    private String cmtflg = NULLSTR;

    //企业海关十位编码
    private String bngcod = NULLSTR;

    //是否对外担保
    private String fingua = NULLSTR;

    //对外担保类型
    private String cfaguatyp = NULLSTR;

    //核销日期
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date vrfdat = NULLDATE;

    //手册号码
    private String mannum = NULLSTR;

    //境内外对手行代码
    private String oppbnk = NULLSTR;

    //是否分离式保函
    private String fenlishi = NULLSTR;

    //来源系统
    private String fromflg = NULLSTR;

    //标段编号
    private String bidnum = NULLSTR;

    //标段名称
    private String bidname = NULLSTR;

    //第三方系统编号
    private String othersno = NULLSTR;

    //返回文件类型
    private String rtnfilestyle = NULLSTR;

    //苏州密文保函文本INR
    private String gtxinrmw = NULLSTR;

    //Modify Guarantee TextMW
    private String gidtxtmodflgmw = NULLSTR;

    //受益人统一社会信用代码
    private String benecreditcode = NULLSTR;

    //项目名称
    private String projectname = NULLSTR;

    //标段名称密文
    private String bidnamemw = NULLSTR;

    //amount in words
    private String amtwrdtxt = NULLSTR;

    //受益人名称
    private String bennam = NULLSTR;

    //受益人地址
    private String benadr = NULLSTR;

    //申请人名称
    private String yptaplnam = NULLSTR;

    //申请人地址
    private String yptapladr = NULLSTR;

    //被担保人名称
    private String grtnam = NULLSTR;

    //被担保人地址
    private String grtadr = NULLSTR;

    //是否以SWIFT开出
    private String swiftflg = NULLSTR;

    //OPN需客户确认
    private String needcuscomopn = NULLSTR;

    //AME需客户确认
    private String needcuscomame = NULLSTR;

    // 特殊保函类型
    private String ghdsegtyp;

    // 机构名称
    private String upbchbchname;

    //查询码标志
    private String cxmflg;

    //查询码
    private String quycod;

    //申请人名称
    private String aplnam;

    //项目名称
    private String projnam;

    //保函类型
    private String guatyp;

    //开立状态
    private String flwsta;

    // 受益人国别
    private String countrycod;
}
