@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 97.3 kB
JavaScript
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var Zt=Object.defineProperty;var zn=Object.getOwnPropertyDescriptor;var n=(l,o)=>Zt(l,"name",{value:o,configurable:true});var r=(l,o,t,s)=>{for(var i=s>1?void 0:s?zn(o,t):o,E=l.length-1,g;E>=0;E--)(g=l[E])&&(i=(s?g(o,t,i):g(i))||i);return s&&i&&Zt(o,t,i),i};var D=class l{static{n(this,"CurrentEncounterLevel");}static instance;level;officerType;requestType;constructor(){this.level=1,this.officerType="ANY",this.requestType="C";}static getInstance(){return l.instance||(l.instance=new l),l.instance}getEncounterType(){return this.level}setEncounterType(o){this.level=o;}getExaminerOfficerType(){return this.officerType}setExaminerOfficerType(o){this.officerType=o;}getRequestType(){return this.requestType}setRequestType(o){this.requestType=o;}isDeletedEncounter(){return this.requestType==="D"}};var te=class{validate(o,t){let s=t.constraints[0],i=D.getInstance(),E=i.getEncounterType(),g=i.getExaminerOfficerType();return s.level===0||s.exceptions?.includes(E)||s.level!==void 0&&s.level>E||s.roles?.length&&!s.roles.includes(g)&&!s.roles.includes("ANY")?true:o==null?false:typeof o=="string"?s.allowEmpty?true:o.trim().length>0:Array.isArray(o)?o.length===0?false:o.every((R,b)=>R==null?false:Object.entries(R).every(([w,mr])=>typeof mr=="string"?mr.trim().length>0:mr!=null)):true}};n(te,"MandatoryFieldConstraint"),te=r([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],te);function e(l,o){return (t,s)=>{classValidator.registerDecorator({name:"MandatoryField",target:t.constructor,propertyName:s,constraints:[l],options:o,validator:te});}}n(e,"MandatoryField");function _r(l){return (o,t)=>{classValidator.registerDecorator({name:"isNullableNumber",target:o.constructor,propertyName:t,options:l,validator:{validate(s,i){return s===null||typeof s=="number"},defaultMessage(s){return `${s.property} must be a number or null`}}});}}n(_r,"IsNullableNumber");var ne=class{validate(o,t){return o==null?true:/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(o)}defaultMessage(o){return `${o.property} must match format YYYY-MM-DD HH:mm:ss`}};n(ne,"UKDateFormatValidator"),ne=r([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],ne);function u(l){return (o,t)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:o.constructor,propertyName:t,options:l,validator:ne});}}n(u,"ValidateUKDateFormat");function Kt(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounter",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{return i.generatedNumber!=null}catch(E){return console.error("Failed to validate DeleteEncounter on EncounterReq:",E),false}},defaultMessage(t){return "generatedNumber cannot be null when deleting an existing encounter."}}});}}n(Kt,"ValidateDeleteEncounter");function Yt(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterAudit",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!i.audits)return false;let E=i.audits;for(let g of E)if(g&&g.aevEventCode&&(g.aevEventCode.eventShortDescription?.toUpperCase()==="DEL"||g.aevEventCode.eventShortDescription?.toUpperCase()==="TFC"))return true;return false},defaultMessage(t){return "AuditBase aevEventCode must have description values of DEL and TFC at minimum."}}});}}n(Yt,"ValidateDeleteEncounterAudit");function Qt(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterEncTexts",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!i.encounterTexts)return false;let E=i.encounterTexts;for(let g of E)if(g?.textType&&g.textType.code?.toUpperCase()==="DEL")return true;return false},defaultMessage(t){return "Encounter Texts TextType code must have value of DEL"}}});}}n(Qt,"ValidateDeleteEncounterEncTexts");function Wt(l){return o=>{classValidator.registerDecorator({name:"ValidateIncompleteEncDeleteFixedPenalty",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!D.getInstance().isDeletedEncounter())return true;let g=i.drivers||[],R=Bn(i);function b(ee){return g.some(B=>B.driverType===ee&&B.actualPayments&&B.actualPayments.length>0)}n(b,"driverHasActualPayment");function w(ee){return R.some(B=>B.penaltyNotice&&B.penaltyNotice.penaltyNoticeStatus?.code==="P"&&B.penaltyNotice.driverType===ee)}n(w,"driverHasPenaltyNoticePaid");function mr(ee){return R.some(B=>B.penaltyNotice&&B.penaltyNotice.driverType===ee)}n(mr,"driverHasFixedPenalty");let Hr="A",W="O",Ir=b(Hr),vt=b(W),We=w(Hr),yt=w(W),ye=mr(Hr),be=mr(W);return !(Ir&&We&&ye||vt&&yt&&be)},defaultMessage(t){return "Cannot delete encounter with paid fixed penalty"}}});}}n(Wt,"ValidateIncompleteEncDeleteFixedPenalty");function Bn(l){let o=l.motor?.notices||[],t=l.trailer1?.notices||[],s=l.trailer2?.notices||[];return [...o,...t,...s]}n(Bn,"getAllNotices");function Xt(l){return o=>{classValidator.registerDecorator({name:"ValidateEthnicity",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=i.ethnicityInfo!=null;Array.isArray(i.encounterTexts)&&i.encounterTexts.length>0;let R=Array.isArray(i.encounterTexts)&&i.encounterTexts.some(b=>b?.textType?.code?.toUpperCase()==="EMR");return !!(E||R)},defaultMessage(t){return "A reason must be given when ethnicity is not provided"}}});}}n(Xt,"ValidateEthnicity");function T(l){return (o,t)=>{classValidator.registerDecorator({name:"isNullableString",target:o.constructor,propertyName:t,options:l,validator:{validate(s,i){return s===null||typeof s=="string"},defaultMessage(s){return `${s.property} must be a string or null`}}});}}n(T,"IsNullableString");function Jt(l){return o=>{classValidator.registerDecorator({name:"ValidateFixedPenalty",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||D.getInstance().isDeletedEncounter())return true;let g=i.motor?.notices??[],R=i.trailer1?.notices??[],b=i.trailer2?.notices??[],w=[...g,...R,...b],mr=["BFPN01","FFPN01","FDEN01"],Hr=w.filter(C=>C.noticeType?.code&&mr.includes(C.noticeType.code)),W=w.filter(C=>C.noticeType?.code==="FFPN01"),Ir=w.filter(C=>C.noticeType?.code==="FDEN01"),vt=Hr.filter(C=>C.noticeStatus==="W"),We="NO IMMEDIATE PAYMENT",yt="FP WITHDRAWAL REASON";function ye(C){return (i.encounterTexts??[]).some(nr=>nr.textType?.name?.trim().toUpperCase()===C)}n(ye,"encounterTextCorrect");function be(C){return C.every(nr=>["P","W"].includes(nr.penaltyNotice?.penaltyNoticeStatus?.code??""))}n(be,"allNoticesPaid");function ee(C,nr){return C.some(Et=>nr.some(dt=>Et.penaltyNotice?.driverType&&dt.penaltyNotice?.driverType&&Et.penaltyNotice.driverType===dt.penaltyNotice.driverType))}n(ee,"sameDriver");let B=W.some(C=>C.noticeStatus!=="W"),bt=Ir.some(C=>C.noticeStatus!=="W");if(B&&!bt&&!be(W)&&!ye(We)||bt&&!B&&!be(Ir)&&!ye(We)||B&&bt&&!ee(W,Ir)&&(!be(W)||!be(Ir))&&!ye(We)||vt.length>0&&!ye(yt))return false;let zt=i.drivers??[],Pn=zt.flatMap(C=>C.actualPayments??[]),$n=["C","Y","N"],Vt="R";for(let C of Pn){let nr=C.paymentStatus?.code;if(!C.paymentDate||!C.inputDate||!C.amount||!C.paymentMethod||!C.recorder||!C.clientGuid||nr&&$n.includes(nr)&&C.reversalDate||nr===Vt&&!C.reversalDate||C.reversalDate&&nr!==Vt||!C.reversalDate&&nr===Vt)return false}for(let C of zt){let nr=C.driverType,Et=Hr.filter(Ht=>Ht.penaltyNotice?.driverType===nr&&Ht.penaltyNotice?.penaltyNoticeStatus?.code==="P"),dt=C.actualPayments&&C.actualPayments.length>0;if(Et.length>0&&!dt)return false}return true},defaultMessage(){return "Invalid fixed penalty data: Please check notices, actual payments, and related rules."}}});}}n(Jt,"ValidateFixedPenalty");function qt(l){return o=>{classValidator.registerDecorator({name:"ValidateEncounterReqObject",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let E=i.motor==null,g=i.trailer1==null;return !(E&&g)}catch(E){return console.error("Failed to validate EncounterReqObject:",E),false}},defaultMessage(t){return "At least either motor or trailer1 must be present during an encounter."}}});}}n(qt,"ValidateEncounterReqObject");function Bt(l){return o=>{classValidator.registerDecorator({name:"ValidateJourneyRequired",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let E=i.encounterReason,g=i.journey,R=!1;return E&&E.name&&(R=!E.name.match(/^(ANNUAL TEST|VE OPERATOR VISIT)$/)),R?!!(g&&g.journeyStartLctn!=null&&g.journeyEndLocatn!=null&&g.goodsCarried!=null):!0}catch(E){return console.error("Failed to validate JourneyRequired on EncounterReq:",E),false}},defaultMessage(t){return "Journey start, end locations and goodsCarried are required for this encounter."}}});}}n(Bt,"ValidateJourneyRequired");function rn(l){return o=>{classValidator.registerDecorator({name:"ValidateCloseProhibitions",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{return i.generatedNumber!=null}catch(E){return console.error("Failed to validate CloseProhibitions on EncounterReq:",E),false}},defaultMessage(t){return "generatedNumber cannot be null when closing an existing prohibition."}}});}}n(rn,"ValidateCloseProhibitions");function en(l){return o=>{classValidator.registerDecorator({name:"ValidateTachoValue",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let E=i.tachoCheckQuantity;if(E!=null){let g=i.otherDriverDigitacCheckQuantity!=null?i.otherDriverDigitacCheckQuantity:0,R=i.actualDriverDigitacCheckQuantity!=null?i.actualDriverDigitacCheckQuantity:0,b=i.otherDriverPaperChartCheckQuantity!=null?i.otherDriverPaperChartCheckQuantity:0,w=i.actualDriverPaperChartCheckQuantity!=null?i.actualDriverPaperChartCheckQuantity:0;return R+w+b+g===E}return !0}catch(E){return console.error("Failed to validate EncounterReq tacho check quantities",E),false}},defaultMessage(t){return "tachoCheckQuantity must equal the sum of actualDriverDigitacCheckQuantity, actualDriverPaperChartCheckQuantity, otherDriverDigitacCheckQuantity, and otherDriverPaperChartCheckQuantity."}}});}}n(en,"ValidateTachoValue");function xr(){return classTransformer.Transform(({value:l})=>{if(typeof l!="string")return l;let o=luxon.DateTime.fromFormat(l,"dd/MM/yyyy HH:mm:ss",{zone:"Europe/London"});return o.isValid?o.toFormat("yyyy-MM-dd HH:mm:ss"):l})}n(xr,"TransformUKDateTime");function tn(l,o=[]){return t=>{classValidator.registerDecorator({name:"CloseProhibitionsAuditValidator",target:t,propertyName:void 0,options:l,validator:{validate(s,i){return i.object?.eventFullDescription?.trim().toUpperCase()==="CMP"},defaultMessage(s){return '"eventFullDescription" must be "CMP".'}}});}}n(tn,"CloseProhibitionsAuditValidator");var rr=class{eventCode;eventShortDescription;eventFullDescription;deletionMarker;fpNoticeIndicator;noticeIndicator};n(rr,"AuditEventBase"),r([classValidator.IsOptional()],rr.prototype,"eventCode",2),r([classValidator.IsOptional()],rr.prototype,"eventShortDescription",2),r([classValidator.IsOptional()],rr.prototype,"eventFullDescription",2),r([classValidator.IsOptional()],rr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],rr.prototype,"fpNoticeIndicator",2),r([classValidator.IsOptional()],rr.prototype,"noticeIndicator",2),rr=r([tn({groups:["closeProhibition"]})],rr);var or=class{static{n(this,"AuditBase");}generatedNumber;venGeneratedNumber;aevEventCode;eventTimestamp;serverTimestamp;responsibleFirstName;responsibleSurname;responsibleUserId;eventUnit;comments;newAuditIndicator};r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>rr)],or.prototype,"aevEventCode",2),r([xr(),u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],or.prototype,"eventTimestamp",2),r([classValidator.IsOptional()],or.prototype,"serverTimestamp",2),r([e({level:4},{groups:["createEncounter"]})],or.prototype,"responsibleFirstName",2),r([e({level:4},{groups:["createEncounter"]})],or.prototype,"responsibleSurname",2),r([e({level:4},{groups:["createEncounter"]})],or.prototype,"responsibleUserId",2),r([e({level:4},{groups:["createEncounter"]})],or.prototype,"eventUnit",2),r([classValidator.IsOptional()],or.prototype,"comments",2),r([classValidator.IsOptional()],or.prototype,"newAuditIndicator",2);function nn(l){return o=>{classValidator.registerDecorator({name:"ValidateContact",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=D.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$",g=new RegExp(E),R=true;return i.forename!=null&&(g.test(i.forename)||(R=false)),i.surname!=null&&(g.test(i.surname)||(R=false)),R},defaultMessage(t){return `forename and surname must match ${D.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$"}`}}});}}n(nn,"ValidateContact");function V(){return classTransformer.Transform(({value:l})=>typeof l=="string"?l.toUpperCase():l)}n(V,"ToUpperCase");var Zr=class{static{n(this,"CommonPostAddress");}postTown;postcode};r([classValidator.Matches(/^(?!-|\s)(?!.*[&‘’',.-]{2})[A-Za-z0-9&‘’',. -]{0,20}$/,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(20,{message:"Must be no more than 20 characters in length",groups:["createEncounter"]}),V(),e({level:4},{groups:["createEncounter"]})],Zr.prototype,"postTown",2),r([classValidator.IsOptional(),classValidator.Matches(/^[A-Za-z0-9 -]*$/,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(8,{message:"Must be no more than 8 characters in length",groups:["createEncounter"]}),V()],Zr.prototype,"postcode",2);var Er=class Er extends Zr{static{n(this,"Address");}static REG_EX_ADDRESS_LINE=/^(?!-|\\s)(?!.*[&‘’',.-]{2})[A-Za-z0-9&‘’',. -]{0,60}$/;addressLine1;addressLine2;addressLine3;addressLine4;ukResident};r([classValidator.Matches(Er.REG_EX_ADDRESS_LINE,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(60,{message:"Must be no more than 60 characters in length",groups:["createEncounter"]}),V(),e({level:4},{groups:["createEncounter"]})],Er.prototype,"addressLine1",2),r([classValidator.IsOptional(),classValidator.Matches(Er.REG_EX_ADDRESS_LINE,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(60,{message:"Must be no more than 60 characters in length",groups:["createEncounter"]}),V()],Er.prototype,"addressLine2",2),r([classValidator.IsOptional(),classValidator.Matches(Er.REG_EX_ADDRESS_LINE,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(60,{message:"Must be no more than 60 characters in length",groups:["createEncounter"]}),V()],Er.prototype,"addressLine3",2),r([classValidator.IsOptional(),classValidator.Matches(Er.REG_EX_ADDRESS_LINE,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(60,{message:"Must be no more than 60 characters in length",groups:["createEncounter"]}),V()],Er.prototype,"addressLine4",2),r([classValidator.IsOptional(),V()],Er.prototype,"ukResident",2);var he=Er;var Kr=class{static{n(this,"CommonTradingAs");}tradingAs;address};r([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&@£#$¥,.:;\-]{2})[A-Za-z0-9&@£#$¥,.:; \-]*$/,{groups:["createEncounter"]}),V()],Kr.prototype,"tradingAs",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>he),e({level:4},{groups:["createEncounter"]})],Kr.prototype,"address",2);var Or=class{static{n(this,"ContactType");}ctyNumber;ctyDescription;deletionMarker;updateInd;multipleInd;sortSequence};r([e({level:4},{groups:["createEncounter"]})],Or.prototype,"ctyNumber",2),r([e({level:4},{groups:["createEncounter"]})],Or.prototype,"ctyDescription",2),r([e({level:4},{groups:["createEncounter"]})],Or.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Or.prototype,"updateInd",2),r([e({level:4},{groups:["createEncounter"]})],Or.prototype,"multipleInd",2),r([e({level:4},{groups:["createEncounter"]})],Or.prototype,"sortSequence",2);var j=class extends Kr{generatedNumber;farePaid;contactType;forename;dateOfBirth;contactOnNotice;conComment;occupation;phoneNumber;lastUpdate;surname};n(j,"Contact"),r([T()],j.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],j.prototype,"farePaid",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Or),e({level:4},{groups:["createEncounter"]})],j.prototype,"contactType",2),r([classValidator.IsOptional(),V()],j.prototype,"forename",2),r([classValidator.IsOptional(),u({groups:["createEncounter"]})],j.prototype,"dateOfBirth",2),r([T()],j.prototype,"contactOnNotice",2),r([T()],j.prototype,"conComment",2),r([T()],j.prototype,"occupation",2),r([classValidator.IsOptional(),classValidator.Length(0,35,{groups:["createEncounter"],message:"Must be no more than 35 characters in length"})],j.prototype,"phoneNumber",2),r([e({level:4},{groups:["createEncounter"]}),u({groups:["createEncounter"]})],j.prototype,"lastUpdate",2),r([T(),V()],j.prototype,"surname",2),j=r([nn({groups:["createEncounter"]})],j);var pr=class extends Zr{static{n(this,"RteArea");}code;areaDescription;address1;address2;address3;address4;email;enforcementArea};r([classValidator.IsOptional()],pr.prototype,"code",2),r([classValidator.IsOptional()],pr.prototype,"areaDescription",2),r([classValidator.IsOptional()],pr.prototype,"address1",2),r([classValidator.IsOptional()],pr.prototype,"address2",2),r([classValidator.IsOptional()],pr.prototype,"address3",2),r([classValidator.IsOptional()],pr.prototype,"address4",2),r([classValidator.IsOptional()],pr.prototype,"email",2),r([classValidator.IsOptional()],pr.prototype,"enforcementArea",2);var U=class{static{n(this,"GenericContact");}manager;costCentre;csiGeneratedNumber;userId;firstName;surname;email;rarCode;status;gvtsMarker;examinerType;ehrEmployeeId;workTelephone;mobileTelephone;version;rteArea};r([classValidator.IsOptional()],U.prototype,"manager",2),r([classValidator.IsOptional()],U.prototype,"costCentre",2),r([classValidator.IsOptional()],U.prototype,"csiGeneratedNumber",2),r([classValidator.IsOptional()],U.prototype,"userId",2),r([classValidator.IsOptional()],U.prototype,"firstName",2),r([classValidator.IsOptional()],U.prototype,"surname",2),r([classValidator.IsOptional()],U.prototype,"email",2),r([_r()],U.prototype,"rarCode",2),r([T()],U.prototype,"status",2),r([T()],U.prototype,"gvtsMarker",2),r([classValidator.IsOptional()],U.prototype,"examinerType",2),r([classValidator.IsOptional()],U.prototype,"ehrEmployeeId",2),r([classValidator.IsOptional()],U.prototype,"workTelephone",2),r([classValidator.IsOptional()],U.prototype,"mobileTelephone",2),r([T()],U.prototype,"version",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>pr)],U.prototype,"rteArea",2);var Qr=class{static{n(this,"StoppingOfficer");}userId;firstName;surname;examinerType};r([classValidator.IsOptional()],Qr.prototype,"userId",2),r([classValidator.IsOptional()],Qr.prototype,"firstName",2),r([classValidator.IsOptional()],Qr.prototype,"surname",2),r([classValidator.IsOptional()],Qr.prototype,"examinerType",2);var Ur=class{static{n(this,"DangerousCheckListItemDetailBase");}generatedNumber;checkListItem;questionText;sectionHeading;effectiveFromDate;effectiveToDate};r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"checkListItem",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"questionText",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"sectionHeading",2),r([u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],Ur.prototype,"effectiveFromDate",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],Ur.prototype,"effectiveToDate",2);var oe=class{static{n(this,"DangerousCheckListItemBase");}checkListItemDetail;name;description};r([classValidator.ValidateNested(),classTransformer.Type(()=>Ur),e({level:4},{groups:["createEncounter"]})],oe.prototype,"checkListItemDetail",2),r([e({level:4},{groups:["createEncounter"]})],oe.prototype,"name",2),r([e({level:4},{groups:["createEncounter"]})],oe.prototype,"description",2);var Ie=class{static{n(this,"DangerousContainerTypeBase");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Ie.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],Ie.prototype,"deletionMarker",2);var gr=class{static{n(this,"DangerousCheckListBase");}totQtyDangerousGoods;categoryOfRisk;limitExceeded;miscRemarks;unNumber;carriedOutBy;checkListItems};r([e({level:4},{groups:["createEncounter"]})],gr.prototype,"totQtyDangerousGoods",2),r([e({level:4},{groups:["createEncounter"]})],gr.prototype,"categoryOfRisk",2),r([e({level:4},{groups:["createEncounter"]})],gr.prototype,"limitExceeded",2),r([classValidator.IsOptional()],gr.prototype,"miscRemarks",2),r([classValidator.MaxLength(300,{message:"Must be no more than 300 characters in length"}),e({level:4},{groups:["createEncounter"]})],gr.prototype,"unNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Ie),e({level:4},{groups:["createEncounter"]})],gr.prototype,"carriedOutBy",2),r([classValidator.ValidateNested({each:true}),classTransformer.Type(()=>oe),classValidator.IsArray(),e({level:4},{groups:["createEncounter"]})],gr.prototype,"checkListItems",2);var er=class{static{n(this,"CommonDeletion");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],er.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],er.prototype,"deletionMarker",2);var le=class extends er{static{n(this,"DefectProsecution");}code;prosecutionConsidered;sequenceNumber};r([e({level:2},{groups:["createEncounter"]})],le.prototype,"code",2),r([e({level:2},{groups:["createEncounter"]})],le.prototype,"prosecutionConsidered",2),r([e({level:2},{groups:["createEncounter"]})],le.prototype,"sequenceNumber",2);var ie=class{validate(o,t){let s=t.object,i=/(^[A-Za-z9]{5}\d[0156]\d([0][1-9]|[12]\d|3[01])\d[A-Za-z9]{2}\d[A-Za-z]{2}$)|(^[0-9]{8}$)/,g=s?.nationality?.irlCode?.toUpperCase();return (g==="GB"||g==="UK")&&s?.licenceIssueNo!=null&&o!=null?i.test(o):true}defaultMessage(){return "Driver licence number for GB/UK does not match the expected format."}};n(ie,"IsValidLicenceNumberForUKConstraint"),ie=r([classValidator.ValidatorConstraint({name:"IsValidLicenceNumberForUK",async:false})],ie);function un(l){return (o,t)=>{classValidator.registerDecorator({target:o.constructor,propertyName:t,options:l,validator:ie});}}n(un,"IsValidLicenceNumberForUK");var P=class{static{n(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};r([e({level:4},{groups:["createEncounter"]})],P.prototype,"drivingLicenceAuthority",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"irlCountry",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"vehicleIndicator",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"cardIssuingAuthorityInd",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"intelligenceSubjectInd",2),r([classValidator.IsOptional()],P.prototype,"intRegNumberCode",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"nonVosa",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"irlCode",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],P.prototype,"foreignOpNationalityInd",2),r([classValidator.IsOptional()],P.prototype,"inrNationalityInd",2);var Fr=class{static{n(this,"PaymentReversalReason");}code;description;sequenceNum;deletionMarker;usageInd};r([classValidator.IsOptional()],Fr.prototype,"code",2),r([classValidator.IsOptional()],Fr.prototype,"description",2),r([classValidator.IsOptional()],Fr.prototype,"sequenceNum",2),r([classValidator.IsOptional()],Fr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],Fr.prototype,"usageInd",2);var Lr=class{static{n(this,"PaymentStatus");}code;description;sequenceNum;deletionMarker;cashFlag;callCentreFlag;chequeFlag};r([classValidator.IsOptional()],Lr.prototype,"description",2),r([classValidator.IsOptional()],Lr.prototype,"sequenceNum",2),r([classValidator.IsOptional()],Lr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],Lr.prototype,"cashFlag",2),r([classValidator.IsOptional()],Lr.prototype,"callCentreFlag",2),r([classValidator.IsOptional()],Lr.prototype,"chequeFlag",2);var X=class{static{n(this,"ActualPayment");}paymentDate;inputDate;amount;paymentMethod;sortCode;chequeNumber;reversalDate;recorder;reverser;pvrCode;clientGuid;callCentreReference;paymentStatus};r([u({groups:["createEncounter"]})],X.prototype,"paymentDate",2),r([u({groups:["createEncounter"]})],X.prototype,"inputDate",2),r([classValidator.IsOptional()],X.prototype,"sortCode",2),r([classValidator.IsOptional()],X.prototype,"chequeNumber",2),r([classValidator.IsOptional(),u({groups:["createEncounter"]})],X.prototype,"reversalDate",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],X.prototype,"recorder",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],X.prototype,"reverser",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Fr)],X.prototype,"pvrCode",2),r([classValidator.IsOptional()],X.prototype,"clientGuid",2),r([classValidator.IsOptional()],X.prototype,"callCentreReference",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Lr)],X.prototype,"paymentStatus",2);var se=class{static{n(this,"DetailsOrigin");}driverDetailsOriginCode;originDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],se.prototype,"driverDetailsOriginCode",2),r([e({level:4},{groups:["createEncounter"]})],se.prototype,"originDescription",2),r([e({level:4},{groups:["createEncounter"]})],se.prototype,"deletionMarker",2);var xe=class{static{n(this,"LicenceCategory");}categoryCode;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],xe.prototype,"categoryCode",2),r([e({level:4},{groups:["createEncounter"]})],xe.prototype,"deletionMarker",2);var ae=class{static{n(this,"LicenceType");}licenceTypeCode;licenceTypeDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],ae.prototype,"licenceTypeCode",2),r([e({level:4},{groups:["createEncounter"]})],ae.prototype,"licenceTypeDescription",2),r([e({level:4},{groups:["createEncounter"]})],ae.prototype,"deletionMarker",2);var N=class{static{n(this,"Drivers");}detailsOnNotice;partOfEncounter;theSourceDriverType;driverOnNotice;birthPlace;dateOfBirth;forename;surname;lastUpdate;licenceIssueNo;registeredKeeper;address;phoneNumber;detailsOrigin;nationality;licenceType;licenceCategory;sex;driverType;amount;passportNumber;occupation;driverLicNum;documentPath;linkedNoticeId;driverCardNumber;drivingLicenceStatus;drivingLicenceIssueDate;odrExhibitNumber;generatedNumber;agencyDriver;actualPayments};r([e({level:4},{groups:["createEncounter"]})],N.prototype,"detailsOnNotice",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"partOfEncounter",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"theSourceDriverType",2),r([classValidator.IsOptional()],N.prototype,"driverOnNotice",2),r([classValidator.IsOptional(),classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[‘’',.-]{2})[A-Za-z‘’',. -]*$/,{message:"Birth Place must consist of characters A-Z, hyphen, full-stop or apostrophe",groups:["createEncounter"]})],N.prototype,"birthPlace",2),r([u({groups:["createEncounter"]}),e({level:4,exceptions:[2]},{groups:["createEncounter"]})],N.prototype,"dateOfBirth",2),r([classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[‘’',.-]{2})[A-Za-z‘’',. -]*$/,{message:"forename must consist of characters space, A-Z, hyphen or apostrophe.",groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],N.prototype,"forename",2),r([classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[‘’',.-]{2})[A-Za-z‘’',. -]*$/,{message:"surname must consist of characters space, A-Z, hyphen or apostrophe.",groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],N.prototype,"surname",2),r([u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],N.prototype,"lastUpdate",2),r([classValidator.IsOptional(),classValidator.Matches(/^(?:[0-9]|[1-9][0-9]{1,3}|[12][0-9]{4}|30000)$/,{message:"licenceIssueNo must be a numeric string between 0 and 30000",groups:["createEncounter"]})],N.prototype,"licenceIssueNo",2),r([classValidator.IsOptional()],N.prototype,"registeredKeeper",2),r([classValidator.ValidateIf(()=>D.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>he),e({roles:["TRAFFIC"]},{groups:["createEncounter"]})],N.prototype,"address",2),r([classValidator.IsOptional(),classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/\d{0,35}| {0,35}/,{groups:["createEncounter"]})],N.prototype,"phoneNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>se),e({level:4},{groups:["createEncounter"]})],N.prototype,"detailsOrigin",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>P)],N.prototype,"nationality",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>ae)],N.prototype,"licenceType",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>xe)],N.prototype,"licenceCategory",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"sex",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"driverType",2),r([classTransformer.Transform(({value:o})=>o!==null?Number.parseInt(o,10):null),e({level:4},{groups:["createEncounter"]})],N.prototype,"amount",2),r([classValidator.IsOptional(),classValidator.MaxLength(12,{groups:["createEncounter"]}),classValidator.Matches(/^[a-zA-Z0-9]*$/,{message:"PassportNumber must consist of characters space, A-Z or 0-9.",groups:["createEncounter"]})],N.prototype,"passportNumber",2),r([classValidator.IsOptional(),classValidator.MaxLength(50,{groups:["createEncounter"]})],N.prototype,"occupation",2),r([classValidator.IsOptional(),classValidator.MaxLength(16,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[&‘’\\',.()\/-]{2})[A-Za-z0-9 &‘’\\',.()\/-]*$/,{groups:["createEncounter"]}),un({groups:["createEncounter"]})],N.prototype,"driverLicNum",2),r([classValidator.IsOptional()],N.prototype,"documentPath",2),r([classValidator.IsOptional()],N.prototype,"linkedNoticeId",2),r([classValidator.IsOptional()],N.prototype,"driverCardNumber",2),r([classValidator.IsOptional()],N.prototype,"drivingLicenceStatus",2),r([T(),u({groups:["createEncounter"]})],N.prototype,"drivingLicenceIssueDate",2),r([classValidator.IsOptional()],N.prototype,"odrExhibitNumber",2),r([classValidator.IsOptional()],N.prototype,"generatedNumber",2),r([classValidator.IsOptional()],N.prototype,"agencyDriver",2),r([classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>X)],N.prototype,"actualPayments",2);var Wr=class{static{n(this,"JourneyType");}generatedNumber;rank;deletionMarker;description};r([e({level:4},{groups:["createEncounter"]})],Wr.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],Wr.prototype,"rank",2),r([e({level:4},{groups:["createEncounter"]})],Wr.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Wr.prototype,"description",2);var me=class{static{n(this,"PortOfExit");}portCode;portDescription;deletionMarker};r([classTransformer.Transform(({value:o})=>o?.toString()),e({level:4},{groups:["createEncounter"]})],me.prototype,"portCode",2),r([e({level:4},{groups:["createEncounter"]})],me.prototype,"portDescription",2),r([e({level:4},{groups:["createEncounter"]})],me.prototype,"deletionMarker",2);var vr=class vr{static{n(this,"Journey");}static REG_EX_JOURNEY=/^(?!-|\\s)(?!.*[&’',.\-]{2})[A-Za-z0-9&‘’',. \-]*$/;goodsCarried;journeyStartLctn;journeyEndLocatn;journeyType;portOfExit};r([classValidator.ValidateIf(()=>D.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(vr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"goodsCarried",2),r([classValidator.ValidateIf(()=>D.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(vr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"journeyStartLctn",2),r([classValidator.ValidateIf(()=>D.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(vr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"journeyEndLocatn",2),r([classValidator.ValidateIf(()=>D.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>Wr),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"journeyType",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>me)],vr.prototype,"portOfExit",2);var At=vr;var Xr=class extends er{static{n(this,"CommonCode");}code;name};r([e({level:4},{groups:["createEncounter"]})],Xr.prototype,"code",2),r([e({level:4},{groups:["createEncounter"]})],Xr.prototype,"name",2);var yr=class extends Xr{static{n(this,"EncounterReason");}sequenceNumber;fkCtpCheckType;pg35EcRequired;useOffenceFlow;shortCode;version};r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"sequenceNumber",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"fkCtpCheckType",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"pg35EcRequired",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"useOffenceFlow",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"shortCode",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"version",2);var Me=class extends Xr{static{n(this,"TextType");}withinEncounter;sortSequence};r([e({level:4},{groups:["createEncounter"]})],Me.prototype,"withinEncounter",2),r([classValidator.IsOptional()],Me.prototype,"sortSequence",2);var Se=class{static{n(this,"EncounterTexts");}textType;text};r([classValidator.ValidateNested(),classTransformer.Type(()=>Me),e({level:4},{groups:["createEncounter"]})],Se.prototype,"textType",2),r([e({level:4},{groups:["createEncounter"]})],Se.prototype,"text",2);var Jr=class{static{n(this,"CommonDescription");}code;description};r([T()],Jr.prototype,"code",2),r([T()],Jr.prototype,"description",2);var Ee=class extends Jr{static{n(this,"CapturedEthnicity");}category;deletionMarker;sequenceNumber};r([e({level:4},{groups:["createEncounter"]})],Ee.prototype,"category",2),r([e({level:4},{groups:["createEncounter"]})],Ee.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Ee.prototype,"sequenceNumber",2);var ke=class{static{n(this,"ObservedEthnicityInfo");}statedNumberOfDriver;capturedEthnicity};r([e({level:4},{groups:["createEncounter"]})],ke.prototype,"statedNumberOfDriver",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Ee),e({level:4},{groups:["createEncounter"]})],ke.prototype,"capturedEthnicity",2);var Ge=class{static{n(this,"EthnicityInfo");}isEthnicDataProvided;observedEthnicityInfo};r([classValidator.IsBoolean(),e({level:4},{groups:["createEncounter"]})],Ge.prototype,"isEthnicDataProvided",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>ke)],Ge.prototype,"observedEthnicityInfo",2);var Be=class extends er{static{n(this,"InspectionType");}inspectionLevel};r([e({level:2},{groups:["createEncounter"]})],Be.prototype,"inspectionLevel",2);function dn(l){return o=>{classValidator.registerDecorator({name:"ValidateSetupUserInput",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=i.csiType?.toUpperCase?.()==="P",g=i.setupUser!==null&&i.setupUser!==void 0;return E||g},defaultMessage(t){return 'setupUser must be present when csiType is not "P"'}}});}}n(dn,"ValidateSetupUserInput");var M=class{rclCsiGeneratedNumber;checkSiteType;csiType;csiName;road;direction;townOrVillage;couDescription;rarCode;ifkSetupEmpId;setupUser;lastUpdate;clientGuid;deletionMarker};n(M,"Location"),r([classValidator.IsOptional(),classValidator.MaxLength(10,{groups:["createEncounter"]})],M.prototype,"rclCsiGeneratedNumber",2),r([classValidator.MaxLength(3,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"checkSiteType",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"csiType",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"csiName",2),r([classValidator.MaxLength(15,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"road",2),r([classValidator.IsOptional(),classValidator.MaxLength(3,{groups:["createEncounter"]})],M.prototype,"direction",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"townOrVillage",2),r([classValidator.IsOptional(),classValidator.MaxLength(60,{groups:["createEncounter"]})],M.prototype,"couDescription",2),r([e({level:2},{groups:["createEncounter"]})],M.prototype,"rarCode",2),r([classValidator.IsOptional(),classValidator.MaxLength(30,{groups:["createEncounter"]})],M.prototype,"ifkSetupEmpId",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],M.prototype,"setupUser",2),r([u({groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"lastUpdate",2),r([classValidator.IsOptional(),classValidator.MaxLength(36,{groups:["createEncounter"]})],M.prototype,"clientGuid",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],M.prototype,"deletionMarker",2),M=r([dn({groups:["createEncounter"]})],M);function gn(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterMotor",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;return i?i.vehicleId!=null:false},defaultMessage(t){return "Motor vehicleId must not be null."}}});}}n(gn,"ValidateDeleteEncounterMotor");function Tn(l){return o=>{classValidator.registerDecorator({name:"ValidateMotorObject",target:o,propertyName:"motor",options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=!!i.nationality,g=!!i.vehicleIdType,R=!!i.roadsideVehicleType;if(!i.vehicleId||!E||!i.nationality?.irlCode||!g||!i.vehicleIdType?.shortCode||!R)return false;let b=i.vehicleId.toLowerCase(),w=i.vehicleIdType.shortCode.toLowerCase();i.nationality.irlCode.toLowerCase();let Hr=i.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",W=0,Ir=D.getInstance().getEncounterType();return ["vrm","vin"].includes(w)||W++,Ir!==2&&i.odometerReading==null&&W++,(Ir===2||i.actionCode?.toUpperCase()==="C")&&i.odometerReadingUnit==null&&W++,Hr&&W++,/^[a-z0-9]+$/i.test(b)||W++,W===0},defaultMessage(t){return "Motor requires VehicleId, Nationality, VehicleIdType and RoadsideVehicleType. Odometer or format may also be invalid."}}});}}n(Tn,"ValidateMotorObject");function fn(l){return o=>{classValidator.registerDecorator({name:"ValidateBodyType",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let g=i.roadsideVehicleType?.description,R=D.getInstance().getEncounterType();if(!g)return false;let b=g.toLowerCase()==="category t",w=R===2;return !(!b&&!w&&i.bodyType==null)},defaultMessage(t){return 'bodyType must not be null unless body type is "category T" or encounter level is SIFT'}}});}}n(fn,"ValidateBodyType");var de=class{static{n(this,"PoliceDefect");}sequenceNumber;imNumber;defectSeverity};r([classValidator.IsOptional()],de.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],de.prototype,"imNumber",2),r([classValidator.IsOptional()],de.prototype,"defectSeverity",2);var ge=class{static{n(this,"CommonVehicleWeights");}actGrossWeight;permGrossWeight;designGrossWeight};r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],ge.prototype,"actGrossWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],ge.prototype,"permGrossWeight",2),r([classValidator.IsOptional()],ge.prototype,"designGrossWeight",2);var fr=class fr extends ge{static{n(this,"CommonVehicle");}static REGEX_MODEL_MAKE=/^(?!-|\s)(?!.*[&()!#;:+?@‘’',.\-\/]{2})[A-Za-z0-9][A-Za-z0-9&()!#;:+?@‘’',. \-\/]{0,29}$/;vehicleAxles;vehicleColour;vehicleModel;vehicleMake;nationality;policeDefects;nationalitySummary};r([e({level:4},{groups:["createEncounter"]})],fr.prototype,"vehicleAxles",2),r([T()],fr.prototype,"vehicleColour",2),r([classValidator.IsOptional(),classValidator.Matches(fr.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),V()],fr.prototype,"vehicleModel",2),r([classValidator.Matches(fr.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),V(),e({level:1},{groups:["createEncounter"]})],fr.prototype,"vehicleMake",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>P),e({level:4},{groups:["createEncounter"]})],fr.prototype,"nationality",2),r([classTransformer.Type(()=>de)],fr.prototype,"policeDefects",2),r([e({level:4},{groups:["createEncounter"]})],fr.prototype,"nationalitySummary",2);var je=fr;var Te=class{static{n(this,"Part");}internalNumber;partMake;deletionMarker};r([classValidator.IsOptional()],Te.prototype,"internalNumber",2),r([classValidator.IsOptional()],Te.prototype,"partMake",2),r([classValidator.IsOptional()],Te.prototype,"deletionMarker",2);var pl=/^(?!^%)(?!-|\s)(?!.*[&@£#$()'*,.:;+-]{4})[A-Za-z0-9\/&@£#$%()'*,.:;+ -]*$/,c=class{static{n(this,"Defect");}action;additionalText;clearanceDate;deviationComment;adeEnd;nonCmplnceRsn;positionOnAxle;sequenceNumber;serialNumber;side;adeSize;verticalPosition;make;actualAction;axleNumber;mechDefctIndictr;sigMntncFailure;status;part;maintenance;defectCatDetailDescription;defectSectionDetailDescription;defectSubDetailDescription;defectDetailDescription;defectSubDescription;severityOfDefectDescription;dudGenNum;sodGeneratedNumber;partNumber;sectionNumber};r([classValidator.IsOptional()],c.prototype,"action",2),r([classValidator.IsOptional(),classValidator.Matches(pl,{groups:["createEncounter"],message:"Invalid format"}),classValidator.MaxLength(254,{groups:["createEncounter"],message:"Must be no more than 254 characters in length"})],c.prototype,"additionalText",2),r([classValidator.IsOptional()],c.prototype,"clearanceDate",2),r([classValidator.IsOptional()],c.prototype,"deviationComment",2),r([classValidator.IsOptional()],c.prototype,"adeEnd",2),r([classValidator.IsOptional()],c.prototype,"nonCmplnceRsn",2),r([classValidator.IsOptional()],c.prototype,"positionOnAxle",2),r([classValidator.IsOptional()],c.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],c.prototype,"serialNumber",2),r([classValidator.IsOptional()],c.prototype,"side",2),r([classValidator.IsOptional()],c.prototype,"adeSize",2),r([classValidator.IsOptional()],c.prototype,"verticalPosition",2),r([classValidator.IsOptional()],c.prototype,"make",2),r([classValidator.IsOptional()],c.prototype,"actualAction",2),r([classValidator.IsOptional()],c.prototype,"axleNumber",2),r([classValidator.IsOptional()],c.prototype,"mechDefctIndictr",2),r([classValidator.IsOptional()],c.prototype,"sigMntncFailure",2),r([classValidator.IsOptional()],c.prototype,"status",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Te),classValidator.IsOptional()],c.prototype,"part",2),r([classValidator.IsOptional()],c.prototype,"maintenance",2),r([classValidator.IsOptional()],c.prototype,"defectCatDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectSectionDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectSubDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectSubDescription",2),r([classValidator.IsOptional()],c.prototype,"severityOfDefectDescription",2),r([classValidator.IsOptional()],c.prototype,"dudGenNum",2),r([classValidator.IsOptional()],c.prototype,"sodGeneratedNumber",2),r([classValidator.IsOptional()],c.prototype,"partNumber",2),r([classValidator.IsOptional()],c.prototype,"sectionNumber",2);var Dr=class{static{n(this,"SignificanceReason");}generatedNumber;fullReason;shortReason;effectiveFrom;effectiveTo};r([classValidator.IsOptional()],Dr.prototype,"generatedNumber",2),r([classValidator.IsOptional()],Dr.prototype,"fullReason",2),r([classValidator.IsOptional()],Dr.prototype,"shortReason",2),r([u(),classValidator.IsOptional()],Dr.prototype,"effectiveFrom",2),r([u(),classValidator.IsOptional()],Dr.prototype,"effectiveTo",2);var Z=class{static{n(this,"DefectSummary");}action;endorsement;lastUpdate;sgnfcanceReason;updateUserId;fiftyPercentRuleMarker;overallProhibitionSeverity;maintenanceFailureMarker;shortReason;deviationDefectCount;cat99DefectCount};r([classValidator.IsOptional()],Z.prototype,"action",2),r([classValidator.IsOptional()],Z.prototype,"endorsement",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],Z.prototype,"lastUpdate",2),r([classValidator.IsOptional()],Z.prototype,"sgnfcanceReason",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],Z.prototype,"updateUserId",2),r([classValidator.IsOptional()],Z.prototype,"fiftyPercentRuleMarker",2),r([classValidator.IsOptional()],Z.prototype,"overallProhibitionSeverity",2),r([classValidator.IsOptional()],Z.prototype,"maintenanceFailureMarker",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Dr)],Z.prototype,"shortReason",2),r([classValidator.IsOptional()],Z.prototype,"deviationDefectCount",2),r([classValidator.IsOptional()],Z.prototype,"cat99DefectCount",2);var Mr=class{static{n(this,"FuelTypeBase");}fuelCode;description;otherTestInd;displayOrder;deletionMarker};r([classValidator.IsOptional()],Mr.prototype,"fuelCode",2),r([classValidator.IsOptional()],Mr.prototype,"description",2),r([classValidator.IsOptional()],Mr.prototype,"otherTestInd",2),r([classValidator.IsOptional()],Mr.prototype,"displayOrder",2),r([classValidator.IsOptional()],Mr.prototype,"deletionMarker",2);var I=class{static{n(this,"EmissionCheckBase");}engineHot;ambientTemprature;petrolCo;dieselKValue;dieselOilTemp;catalystLambda;catalystOilTemp;catalystNormalCo;catalystFastCo;catalystNormalRpm;catalystFastRpm;catalystHc;petrolHc;petrolClbrtnDate;dieselClbrtnDate;dieselSerialNum;petrolSerialNum;testType;fuelType;otherSerialNum;otherClbrtnDate;clearIndicator};r([classValidator.IsOptional()],I.prototype,"engineHot",2),r([classValidator.IsOptional()],I.prototype,"ambientTemprature",2),r([classValidator.IsOptional()],I.prototype,"petrolCo",2),r([classValidator.IsOptional()],I.prototype,"dieselKValue",2),r([classValidator.IsOptional()],I.prototype,"dieselOilTemp",2),r([classValidator.IsOptional()],I.prototype,"catalystLambda",2),r([classValidator.IsOptional()],I.prototype,"catalystOilTemp",2),r([classValidator.IsOptional()],I.prototype,"catalystNormalCo",2),r([classValidator.IsOptional()],I.prototype,"catalystFastCo",2),r([classValidator.IsOptional()],I.prototype,"catalystNormalRpm",2),r([classValidator.IsOptional()],I.prototype,"catalystFastRpm",2),r([classValidator.IsOptional()],I.prototype,"catalystHc",2),r([classValidator.IsOptional()],I.prototype,"petrolHc",2),r([classValidator.IsOptional(),xr()],I.prototype,"petrolClbrtnDate",2),r([classValidator.IsOptional(),xr()],I.prototype,"dieselClbrtnDate",2),r([classValidator.IsOptional()],I.prototype,"dieselSerialNum",2),r([classValidator.IsOptional()],I.prototype,"petrolSerialNum",2),r([classValidator.IsOptional()],I.prototype,"testType",2),r([classValidator.ValidateIf((o,t)=>t!=null,{groups:["createEncounter"]}),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Mr)],I.prototype,"fuelType",2),r([classValidator.IsOptional()],I.prototype,"otherSerialNum",2),r([classValidator.IsOptional(),xr()],I.prototype,"otherClbrtnDate",2),r([classValidator.IsOptional()],I.prototype,"clearIndicator",2);function Ln(l){return o=>{classValidator.registerDecorator({name:"ValidateCloseProhibitionsNotice",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;return i?i.noticeStatus?.toUpperCase?.()==="C":false},defaultMessage(t){return "Notices noticeStatus must be 'C'."}}});}}n(Ln,"ValidateCloseProhibitionsNotice");function vn(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterNotice",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=i.noticeType?.code!=null,g=i.noticeStatus?.toUpperCase?.()==="W",R=i.issueDate!=null,b=i.inputDate!=null;return E&