package com.brilliance.isc.common.trnmod.vo;

import com.brilliance.mda.runtime.mda.IStream;
import com.brilliance.mda.runtime.mda.impl.StreamImpl;
import com.brilliance.mda.runtime.mda.util.Decimals;
import com.brilliance.isc.common.json.BigDecimalSerialize;
import com.brilliance.isc.common.vo.AbstractCommonVo;
import com.brilliance.isc.common.json.IStreamDeserializer;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

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

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SwiaddVo extends AbstractCommonVo implements Serializable {
    private static Logger log = LoggerFactory.getLogger(SwiaddVo.class);

    //List of SMHINR for SPT to be updated in transaction
    private String smhinrblk = NULLSTR;
    //Content of Fields can not be mapped
    private IStream addstm = new StreamImpl();
    //Names of fields 'Dont Overwrite'
    private IStream ovwfldnam = new StreamImpl();
    //Amended Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal ameamt = Decimals.ZERO_SCALE2;
    //Incoming Tag 12D
    private String tag12d = NULLSTR;
    //Incoming Tag 23H Function
    private String tag23h = NULLSTR;
    //Original Amendment Number
    private int oriamenbr;
    //Creating Transaction ID
    private String cretrn = NULLSTR;
    //Create Amendment Message
    private String amemsgdonflg = NULLSTR;
    //Currency of amended amount
    private String amecur = NULLSTR;
    //Reason for Reduce / Discharge
    private String redrea = NULLSTR;
    //Confirmation Status
    private String cnfsta = NULLSTR;
    //Date of Amendment
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date amedat;
    //Date of Customer's Order
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orddat;
    //Number of Amendment
    private int amenbr;
    // addnewamt
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal addnewamt;
    //New amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newamt = Decimals.ZERO_SCALE2;
    //Currency of new amount
    private String newcur = NULLSTR;
    //New Collection Condition
    private String newdoctypcod = NULLSTR;
    //New Expiry Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newexpdat;
    //New Shipmentdate
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newshpdat;
    //New Maturity Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newmatdat;
    //New positive tolerance
    private int newnomtop;
    //New negative tolerance
    private int newnomton;
    //confirmation amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal cnfamt = Decimals.ZERO_SCALE2;
    //confirmarion currency
    private String cnfcur = NULLSTR;
    //Percentage or Amount Confirmed
    private String cnfflg = NULLSTR;
    //Partial confirmation
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal partcon = Decimals.ZERO_SCALE2;
    //Sender to receiver info Tag 72
    private String strinf = NULLSTR;
    //Add. Amount Flag
    private String addamtflg = NULLSTR;
    //Approximate Expiry Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newdtaappexpdat;
    //Additional Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal addamt = Decimals.ZERO_SCALE2;
    //Additional Currency
    private String addcur = NULLSTR;
    //Additional Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date adddat;
    //Number of days/months for maturity
    private int newmatpercnt;
    //Start of Maturity Period
    private String newmatperbeg = NULLSTR;
    //Days/Month or Year for Maturity Period
    private String newmatpertyp = NULLSTR;
    //Additional External ID
    private String addextid = NULLSTR;
    //Additional text field
    private String addtxtfld = NULLSTR;
    //Additional Reference
    private String addref = NULLSTR;
    //Account
    private String acc = NULLSTR;
    //2nd account
    private String acc2 = NULLSTR;
    //Narrative
    private String nartxt = NULLSTR;
    //Value Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date valdat;
    //charges claimed
    private String chacla = NULLSTR;
    //charges currency
    private String chacur = NULLSTR;
    //charges amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal chaamt = Decimals.ZERO_SCALE2;
    //M1: BIC Advising Bank
    private String m01advbic = NULLSTR;
    //M2: Advising Bank
    private String m02advadrblk = NULLSTR;
    //M3: Reference Advising Bank
    private String m03advref = NULLSTR;
    //M4: Contact to
    private String m04advperson = NULLSTR;
    //M5: Confirmed
    private String m05confir = NULLSTR;
    //M6: Notes for Confirmation
    private String m06confirblk = NULLSTR;
    //M7: Notes Advising Bank
    private String m07advconfirblk = NULLSTR;
    //M8: Fees Advising Bank
    private String m08advfeeblk = NULLSTR;
    //M9: BIC Issuing Bank
    private String m09issbic = NULLSTR;
    //M10: Issuing Bank
    private String m10issadrblk = NULLSTR;
    //M23: Notes advising Bank
    private String m23advcom = NULLSTR;
    //M11: Reference Issuing Bank
    private String m11issref = NULLSTR;
    //M12: Opening date
    private String m12opndat = NULLSTR;
    //M19: Advising date
    private String m19advdat = NULLSTR;
    //M20: Reference Applicant
    private String m20aplref = NULLSTR;
    //M21: Modifaction date
    private String m21moddat = NULLSTR;
    //M22: Amendment counter
    private String m22amecnt = NULLSTR;
    //M24: Info copy
    private String m24infcpy = NULLSTR;
    //Alternative transactions
    private String othtrn = NULLSTR;
    //Groups for OTHTRN
    private String othgrp = NULLSTR;
    //Shipment Period
    private String shpper = NULLSTR;
    //Additional Amount Covered
    private String addamtcov = NULLSTR;
    //For Transportation to
    private String shpto = NULLSTR;
    //Shipment from
    private String shpfro = NULLSTR;
    //Unlimited Validity
    private String newexpflg = NULLSTR;
    //Unlimited Liability
    private String newliaflg = NULLSTR;
    //New Liability Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newliadat;
    //Text for Amendments
    private String ameblk = NULLSTR;
    //Accepted Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal accamt = Decimals.ZERO_SCALE2;
    //Accepted Currency
    private String acccur = NULLSTR;
    //Further Amendments
    private String ametxt = NULLSTR;
    //Actual Amendment number
    private int actamenbr;
    //Amount Specification
    private String nomspc = NULLSTR;
    //Currency
    private String tracur = NULLSTR;
    //Traced Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal traamt = Decimals.ZERO_SCALE2;
    //Content of Tag 72
    private String contag72 = NULLSTR;
    //Content of Tag 79
    private String contag79 = NULLSTR;
    //Port of Loading
    private String porloa = NULLSTR;
    //Port of Discharge
    private String pordis = NULLSTR;
    //Messagetype
    private String msgtyp = NULLSTR;
    //Date the incoming message was sent
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date snddat;
    //Object Type of Additional Contract
    private String objtyp = NULLSTR;
    //Object INR of Additional Contract
    private String objinr = NULLSTR;
    //tag M9 Execution Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date m9exedat;
    //Description of Goods amendment
    private String lcrgod = NULLSTR;
    //Documents Required amendment
    private String lcrdoc = NULLSTR;
    //Additional Conditions amendment
    private String adlcnd = NULLSTR;
    //Narrative modified
    private String nartxtflg = NULLSTR;
    //Instruction to P/A/N Bank amendment
    private String insbnk = NULLSTR;
    //New amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newam1 = Decimals.ZERO_SCALE2;
    //New Expiry Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newexpda1;
    //New Shipmentdate
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newshpda1;
    //New Maturity Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newmatda1;
    //New positive tolerance
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newnomtop1 = Decimals.ZERO_SCALE5;
    //Description of Goods amendment
    private String lcrgo1 = NULLSTR;
    //Documents Required amendment
    private String lcrdo1 = NULLSTR;
    //Additional Conditions amendment
    private String adlcn1 = NULLSTR;
    //Instruction to P/A/N Bank amendment
    private String insbn1 = NULLSTR;
    //New negative tolerance
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newnomton1 = Decimals.ZERO_SCALE5;
    //Amended Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal ameam1 = Decimals.ZERO_SCALE2;
    //Maximum Tenor
    private int tenmaxday;
    //Additional Amount Covered Seq. C
    private String addamtcovc = NULLSTR;
    //Additional Amount Flag Seq. C
    private String addamtflgc = NULLSTR;
    //Text for Amendments
    private String ameblkc = NULLSTR;
    //Increase of Local Undertaking Amount
    private String amecurc = NULLSTR;
    //Increase of Local Guarantee Amount
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal ameamtc = Decimals.ZERO_SCALE2;
    //Amendment Status
    private String amestatxt = NULLSTR;
    //Additional Currency Seq. C
    private String addcurc = NULLSTR;
    //Expiry Type
    private String exptyp = NULLSTR;
    //Instruction to P/A/N Bank amendment
    private String insbnk1 = NULLSTR;
    //Expiry Condition/Event
    private String exptxt = NULLSTR;
    //incoming Text of claim allNETT
    private String incclmtxt = NULLSTR;
    //Expiry Condition/Event
    private String liatxtc = NULLSTR;
    //Middle Rate
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal midrat = Decimals.ZERO_SCALE6;
    //New interest amount direct pay guarantees
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newintamt = Decimals.ZERO_SCALE2;
    //New spread
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newintrat = Decimals.ZERO_SCALE6;
    //Expiry Type
    private String liatypc = NULLSTR;
    //Days of presentation period
    private int prepers18;
    //New Tenor Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date newtendat;
    //Purpose of message
    private String purpos = NULLSTR;
    //Currency of new amount  Counter Guarantee
    private String newcurc = NULLSTR;
    //New Amount Local Guarantee
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newamtc = Decimals.ZERO_SCALE2;
    //Presentation period text
    private String prepertxts18 = NULLSTR;
    //Purpose of amendment  message
    private String purposame = NULLSTR;
    //Amended Tenor
    private String newten = NULLSTR;
    //Special payment conditions for beneficiary amendment
    private String spcben = NULLSTR;
    //Rate
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal rat = Decimals.ZERO_SCALE10;
    //Cancellation Request
    private String reqcan = NULLSTR;
    //Old spread
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal oldintrat = Decimals.ZERO_SCALE5;
    //Special payment conditions for receiver bank amendment
    private String spcrcb = NULLSTR;
    //Narrative
    private String strinfs20 = NULLSTR;
    //Purpose of amendment  message
    private String purposamein = NULLSTR;
    //Text Purpose
    private String tag25f = NULLSTR;
    //Score Customer Reference Tag 21A
    private String tag21aref = NULLSTR;
    //Own Charges Borne by
    private String trnchato = NULLSTR;
    //Form of Documentary Credit
    private String lcrtyp = NULLSTR;
    //Additional Details to Code for Charges CHATO
    private String trnfeetxt = NULLSTR;
    //Additional Amount Covered
    private String addamtcovs20 = NULLSTR;
    //Add. Information
    private String ameinf = NULLSTR;
    //Additional Amount Seq. C
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal addamtc = Decimals.ZERO_SCALE2;
    //Narrative for MT 759
    private String tag45d = NULLSTR;
    //Content of Fields can not be mapped
    @JsonDeserialize(using = IStreamDeserializer.class)
    private IStream addblk = new StreamImpl();
    //TCO M1 Reference
    private String tcom1ref = NULLSTR;
    //Accept Date
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date accdat;
    //退单日期
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date retdat;
    //通知状态
    private String ntcestat = NULLSTR;
    //拒绝理由
    private String rsn = NULLSTR;
    //原报文标识号
    private String orimsgid = NULLSTR;
    //原发起癧接参与机构
    private String oriinstgagt = NULLSTR;
    //原报文类型
    private String orimsgtyp = NULLSTR;
    //带单类型
    private String bllarltp = NULLSTR;
    //修改状态
    private String modfystat = NULLSTR;
    //For Transportation to
    private String shptoelc = NULLSTR;
    //Shipment from
    private String shpfroelc = NULLSTR;
    //单据信息电证
    private String contag46c = NULLSTR;
    //For Transportation to
    private String shptoel1 = NULLSTR;
    //Shipment from
    private String shpfroel1 = NULLSTR;
    //槸易类型
    private String mytype = NULLSTR;
    //Maximum Tenor
    private int tenmaxday1;
    //槸易类型
    private String mytype1 = NULLSTR;
    //手续槹先收后收
    private String disfee = NULLSTR;
    //电子保函手续槹金额
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal dzfeeamt1 = Decimals.ZERO_SCALE2;
    //电子保函客户收槹帐号
    private String dzextacc1 = NULLSTR;
    //电子保函转开手续槹金额
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal dzfeeamt2 = Decimals.ZERO_SCALE2;
    //电子保函客户收槹槦号
    private String dzextacc2 = NULLSTR;
    //额度类型
    private String nonrevflg1 = NULLSTR;
    //额度品种代码
    private String limcodsave = NULLSTR;
    //额度编号
    private String limref = NULLSTR;
    //额度明细编号
    private String infref = NULLSTR;
    //Additional text for letter
    private String addtxt = NULLSTR;
    //电子保函修改手续槹金额
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal dzbhfeamt = Decimals.ZERO_SCALE2;
    //保函修改手续槹收槹槦号
    private String dzbhamefeacc = NULLSTR;
    //New positive tolerance for GNZ
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newnomtopame = Decimals.ZERO_SCALE5;
    //New negative tolerance for GNZ
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal newnomtoname = Decimals.ZERO_SCALE5;
    //发起参与机构
    private String dzlhhh = NULLSTR;
    @JsonSerialize(using = BigDecimalSerialize.class)
    private BigDecimal addameamt = Decimals.ZERO_SCALE2;
    //Additional Currency
    private String addamecur = NULLSTR;

    private String ejsorcref = NULLSTR;

    private BigDecimal opn2amt = Decimals.ZERO_SCALE2;

    private String payeecountcode = NULLSTR;

    //ltdgrp.rec.expplc(New Expiry Place)
    private String expplc = NULLSTR;

    //ltdgrp.rec.shppars18(New Partial Shipment)
    private String shppars18 = NULLSTR;

    //ltdgrp.rec.shptrss18(New Transhipment)
    private String shptrss18 = NULLSTR;

    //ltdgrp.rec.apprul(New Applicable Rules)
    private String apprul = NULLSTR;

    //ltdgrp.rec.apprultxt(New Other Applicable Rules)
    private String apprultxt = NULLSTR;

    //ltdgrp.rec.cnfins(New Confirm. Instructions)
    private String cnfins = NULLSTR;

    //ltdgrp.rec.stacty(New Country Code)
    private String stacty = NULLSTR;
}