@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 98.3 kB
JavaScript
'use strict';require('reflect-metadata');var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var Ht=Object.defineProperty;var jn=Object.getOwnPropertyDescriptor;var n=(i,o)=>Ht(i,"name",{value:o,configurable:true});var r=(i,o,e,s)=>{for(var l=s>1?void 0:s?jn(o,e):o,E=i.length-1,g;E>=0;E--)(g=i[E])&&(l=(s?g(o,e,l):g(l))||l);return s&&l&&Ht(o,e,l),l};var x=class i{static{n(this,"CurrentEncounterLevel");}static instance;level;officerType;requestType;constructor(){this.level=1,this.officerType="ANY",this.requestType="C";}static getInstance(){return i.instance||(i.instance=new i),i.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,e){let s=e.constraints[0],l=x.getInstance(),E=l.getEncounterType(),g=l.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 t(i,o){return (e,s)=>{classValidator.registerDecorator({name:"MandatoryField",target:e.constructor,propertyName:s,constraints:[i],options:o,validator:te});}}n(t,"MandatoryField");function _r(i){return (o,e)=>{classValidator.registerDecorator({name:"isNullableNumber",target:o.constructor,propertyName:e,options:i,validator:{validate(s,l){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,e){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(i){return (o,e)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:o.constructor,propertyName:e,options:i,validator:ne});}}n(u,"ValidateUKDateFormat");function Zt(i){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounter",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;try{return l.generatedNumber!=null}catch(E){return console.error("Failed to validate DeleteEncounter on EncounterReq:",E),false}},defaultMessage(e){return "generatedNumber cannot be null when deleting an existing encounter."}}});}}n(Zt,"ValidateDeleteEncounter");function Kt(i){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterAudit",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l||!l.audits)return false;let E=l.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(e){return "AuditBase aevEventCode must have description values of DEL and TFC at minimum."}}});}}n(Kt,"ValidateDeleteEncounterAudit");function Yt(i){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterEncTexts",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l||!l.encounterTexts)return false;let E=l.encounterTexts;for(let g of E)if(g?.textType&&g.textType.code?.toUpperCase()==="DEL")return true;return false},defaultMessage(e){return "Encounter Texts TextType code must have value of DEL"}}});}}n(Yt,"ValidateDeleteEncounterEncTexts");function Qt(i){return o=>{classValidator.registerDecorator({name:"ValidateIncompleteEncDeleteFixedPenalty",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l||!x.getInstance().isDeletedEncounter())return true;let g=l.drivers||[],R=Jn(l);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),Lt=b(W),Qe=w(Hr),vt=w(W),ve=mr(Hr),ye=mr(W);return !(Ir&&Qe&&ve||Lt&&vt&&ye)},defaultMessage(e){return "Cannot delete encounter with paid fixed penalty"}}});}}n(Qt,"ValidateIncompleteEncDeleteFixedPenalty");function Jn(i){let o=i.motor?.notices||[],e=i.trailer1?.notices||[],s=i.trailer2?.notices||[];return [...o,...e,...s]}n(Jn,"getAllNotices");function Wt(i){return o=>{classValidator.registerDecorator({name:"ValidateEthnicity",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l)return false;let E=l.ethnicityInfo!=null;Array.isArray(l.encounterTexts)&&l.encounterTexts.length>0;let R=Array.isArray(l.encounterTexts)&&l.encounterTexts.some(b=>b?.textType?.code?.toUpperCase()==="EMR");return !!(E||R)},defaultMessage(e){return "A reason must be given when ethnicity is not provided"}}});}}n(Wt,"ValidateEthnicity");function T(i){return (o,e)=>{classValidator.registerDecorator({name:"isNullableString",target:o.constructor,propertyName:e,options:i,validator:{validate(s,l){return s===null||typeof s=="string"},defaultMessage(s){return `${s.property} must be a string or null`}}});}}n(T,"IsNullableString");function Xt(i){return o=>{classValidator.registerDecorator({name:"ValidateFixedPenalty",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l||x.getInstance().isDeletedEncounter())return true;let g=l.motor?.notices??[],R=l.trailer1?.notices??[],b=l.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"),Lt=Hr.filter(C=>C.noticeStatus==="W"),Qe="NO IMMEDIATE PAYMENT",vt="FP WITHDRAWAL REASON";function ve(C){return (l.encounterTexts??[]).some(nr=>nr.textType?.name?.trim().toUpperCase()===C)}n(ve,"encounterTextCorrect");function ye(C){return C.every(nr=>["P","W"].includes(nr.penaltyNotice?.penaltyNoticeStatus?.code??""))}n(ye,"allNoticesPaid");function ee(C,nr){return C.some(mt=>nr.some(Et=>mt.penaltyNotice?.driverType&&Et.penaltyNotice?.driverType&&mt.penaltyNotice.driverType===Et.penaltyNotice.driverType))}n(ee,"sameDriver");let B=W.some(C=>C.noticeStatus!=="W"),yt=Ir.some(C=>C.noticeStatus!=="W");if(B&&!yt&&!ye(W)&&!ve(Qe)||yt&&!B&&!ye(Ir)&&!ve(Qe)||B&&yt&&!ee(W,Ir)&&(!ye(W)||!ye(Ir))&&!ve(Qe)||Lt.length>0&&!ve(vt))return false;let $t=l.drivers??[],kn=$t.flatMap(C=>C.actualPayments??[]),wn=["C","Y","N"],bt="R";for(let C of kn){let nr=C.paymentStatus?.code;if(!C.paymentDate||!C.inputDate||!C.amount||!C.paymentMethod||!C.recorder||!C.clientGuid||nr&&wn.includes(nr)&&C.reversalDate||nr===bt&&!C.reversalDate||C.reversalDate&&nr!==bt||!C.reversalDate&&nr===bt)return false}for(let C of $t){let nr=C.driverType,mt=Hr.filter(zt=>zt.penaltyNotice?.driverType===nr&&zt.penaltyNotice?.penaltyNoticeStatus?.code==="P"),Et=C.actualPayments&&C.actualPayments.length>0;if(mt.length>0&&!Et)return false}return true},defaultMessage(){return "Invalid fixed penalty data: Please check notices, actual payments, and related rules."}}});}}n(Xt,"ValidateFixedPenalty");function Jt(i){return o=>{classValidator.registerDecorator({name:"ValidateEncounterReqObject",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;try{let E=l.motor==null,g=l.trailer1==null;return !(E&&g)}catch(E){return console.error("Failed to validate EncounterReqObject:",E),false}},defaultMessage(e){return "At least either motor or trailer1 must be present during an encounter."}}});}}n(Jt,"ValidateEncounterReqObject");function qt(i){return o=>{classValidator.registerDecorator({name:"ValidateJourneyRequired",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;try{let E=l.encounterReason,g=l.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(e){return "Journey start, end locations and goodsCarried are required for this encounter."}}});}}n(qt,"ValidateJourneyRequired");function Bt(i){return o=>{classValidator.registerDecorator({name:"ValidateCloseProhibitions",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;try{return l.generatedNumber!=null}catch(E){return console.error("Failed to validate CloseProhibitions on EncounterReq:",E),false}},defaultMessage(e){return "generatedNumber cannot be null when closing an existing prohibition."}}});}}n(Bt,"ValidateCloseProhibitions");function rn(i){return o=>{classValidator.registerDecorator({name:"ValidateTachoValue",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;try{let E=l.tachoCheckQuantity;if(E!=null){let g=l.otherDriverDigitacCheckQuantity!=null?l.otherDriverDigitacCheckQuantity:0,R=l.actualDriverDigitacCheckQuantity!=null?l.actualDriverDigitacCheckQuantity:0,b=l.otherDriverPaperChartCheckQuantity!=null?l.otherDriverPaperChartCheckQuantity:0,w=l.actualDriverPaperChartCheckQuantity!=null?l.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(e){return "tachoCheckQuantity must equal the sum of actualDriverDigitacCheckQuantity, actualDriverPaperChartCheckQuantity, otherDriverDigitacCheckQuantity, and otherDriverPaperChartCheckQuantity."}}});}}n(rn,"ValidateTachoValue");function xr(){return classTransformer.Transform(({value:i})=>{if(typeof i!="string")return i;let o=luxon.DateTime.fromFormat(i,"dd/MM/yyyy HH:mm:ss",{zone:"Europe/London"});return o.isValid?o.toFormat("yyyy-MM-dd HH:mm:ss"):i})}n(xr,"TransformUKDateTime");function en(i,o=[]){return e=>{classValidator.registerDecorator({name:"CloseProhibitionsAuditValidator",target:e,propertyName:void 0,options:i,validator:{validate(s,l){return l.object?.eventFullDescription?.trim().toUpperCase()==="CMP"},defaultMessage(s){return '"eventFullDescription" must be "CMP".'}}});}}n(en,"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([en({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,e)=>e!=null),classValidator.ValidateNested(),classTransformer.Type(()=>rr)],or.prototype,"aevEventCode",2),r([xr(),u({groups:["createEncounter"]}),t({level:4},{groups:["createEncounter"]})],or.prototype,"eventTimestamp",2),r([classValidator.IsOptional()],or.prototype,"serverTimestamp",2),r([t({level:4},{groups:["createEncounter"]})],or.prototype,"responsibleFirstName",2),r([t({level:4},{groups:["createEncounter"]})],or.prototype,"responsibleSurname",2),r([t({level:4},{groups:["createEncounter"]})],or.prototype,"responsibleUserId",2),r([t({level:4},{groups:["createEncounter"]})],or.prototype,"eventUnit",2),r([classValidator.IsOptional()],or.prototype,"comments",2),r([classValidator.IsOptional()],or.prototype,"newAuditIndicator",2);function tn(i){return o=>{classValidator.registerDecorator({name:"ValidateContact",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l)return false;let E=x.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 l.forename!=null&&(g.test(l.forename)||(R=false)),l.surname!=null&&(g.test(l.surname)||(R=false)),R},defaultMessage(e){return `forename and surname must match ${x.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$"}`}}});}}n(tn,"ValidateContact");function V(){return classTransformer.Transform(({value:i})=>typeof i=="string"?i.toUpperCase():i)}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(),t({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(),t({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 Ve=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(()=>Ve),t({level:4},{groups:["createEncounter"]})],Kr.prototype,"address",2);var Or=class{static{n(this,"ContactType");}ctyNumber;ctyDescription;deletionMarker;updateInd;multipleInd;sortSequence};r([t({level:4},{groups:["createEncounter"]})],Or.prototype,"ctyNumber",2),r([t({level:4},{groups:["createEncounter"]})],Or.prototype,"ctyDescription",2),r([t({level:4},{groups:["createEncounter"]})],Or.prototype,"deletionMarker",2),r([t({level:4},{groups:["createEncounter"]})],Or.prototype,"updateInd",2),r([t({level:4},{groups:["createEncounter"]})],Or.prototype,"multipleInd",2),r([t({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([t({level:4},{groups:["createEncounter"]})],j.prototype,"farePaid",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Or),t({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([t({level:4},{groups:["createEncounter"]}),u({groups:["createEncounter"]})],j.prototype,"lastUpdate",2),r([T(),V()],j.prototype,"surname",2),j=r([tn({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,e)=>e!=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([t({level:4},{groups:["createEncounter"]})],Ur.prototype,"generatedNumber",2),r([t({level:4},{groups:["createEncounter"]})],Ur.prototype,"checkListItem",2),r([t({level:4},{groups:["createEncounter"]})],Ur.prototype,"questionText",2),r([t({level:4},{groups:["createEncounter"]})],Ur.prototype,"sectionHeading",2),r([u({groups:["createEncounter"]}),t({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),t({level:4},{groups:["createEncounter"]})],oe.prototype,"checkListItemDetail",2),r([t({level:4},{groups:["createEncounter"]})],oe.prototype,"name",2),r([t({level:4},{groups:["createEncounter"]})],oe.prototype,"description",2);var he=class{static{n(this,"DangerousContainerTypeBase");}description;deletionMarker};r([t({level:4},{groups:["createEncounter"]})],he.prototype,"description",2),r([t({level:4},{groups:["createEncounter"]})],he.prototype,"deletionMarker",2);var gr=class{static{n(this,"DangerousCheckListBase");}totQtyDangerousGoods;categoryOfRisk;limitExceeded;miscRemarks;unNumber;carriedOutBy;checkListItems};r([t({level:4},{groups:["createEncounter"]})],gr.prototype,"totQtyDangerousGoods",2),r([t({level:4},{groups:["createEncounter"]})],gr.prototype,"categoryOfRisk",2),r([t({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"}),t({level:4},{groups:["createEncounter"]})],gr.prototype,"unNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>he),t({level:4},{groups:["createEncounter"]})],gr.prototype,"carriedOutBy",2),r([classValidator.ValidateNested({each:true}),classTransformer.Type(()=>oe),classValidator.IsArray(),t({level:4},{groups:["createEncounter"]})],gr.prototype,"checkListItems",2);var er=class{static{n(this,"CommonDeletion");}description;deletionMarker};r([t({level:4},{groups:["createEncounter"]})],er.prototype,"description",2),r([t({level:4},{groups:["createEncounter"]})],er.prototype,"deletionMarker",2);var ie=class extends er{static{n(this,"DefectProsecution");}code;prosecutionConsidered;sequenceNumber};r([t({level:2},{groups:["createEncounter"]})],ie.prototype,"code",2),r([t({level:2},{groups:["createEncounter"]})],ie.prototype,"prosecutionConsidered",2),r([t({level:2},{groups:["createEncounter"]})],ie.prototype,"sequenceNumber",2);var le=class{validate(o,e){let s=e.object,l=/(^[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?l.test(o):true}defaultMessage(){return "Driver licence number for GB/UK does not match the expected format."}};n(le,"IsValidLicenceNumberForUKConstraint"),le=r([classValidator.ValidatorConstraint({name:"IsValidLicenceNumberForUK",async:false})],le);function an(i){return (o,e)=>{classValidator.registerDecorator({target:o.constructor,propertyName:e,options:i,validator:le});}}n(an,"IsValidLicenceNumberForUK");var P=class{static{n(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};r([t({level:4},{groups:["createEncounter"]})],P.prototype,"drivingLicenceAuthority",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"irlCountry",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"vehicleIndicator",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"cardIssuingAuthorityInd",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"intelligenceSubjectInd",2),r([classValidator.IsOptional()],P.prototype,"intRegNumberCode",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"nonVosa",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"irlCode",2),r([t({level:4},{groups:["createEncounter"]})],P.prototype,"deletionMarker",2),r([t({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,e)=>e!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],X.prototype,"recorder",2),r([classValidator.ValidateIf((o,e)=>e!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],X.prototype,"reverser",2),r([classValidator.ValidateIf((o,e)=>e!=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,e)=>e!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Lr)],X.prototype,"paymentStatus",2);var se=class{static{n(this,"DetailsOrigin");}driverDetailsOriginCode;originDescription;deletionMarker};r([t({level:4},{groups:["createEncounter"]})],se.prototype,"driverDetailsOriginCode",2),r([t({level:4},{groups:["createEncounter"]})],se.prototype,"originDescription",2),r([t({level:4},{groups:["createEncounter"]})],se.prototype,"deletionMarker",2);var _e=class{static{n(this,"LicenceCategory");}categoryCode;deletionMarker};r([t({level:4},{groups:["createEncounter"]})],_e.prototype,"categoryCode",2),r([t({level:4},{groups:["createEncounter"]})],_e.prototype,"deletionMarker",2);var ae=class{static{n(this,"LicenceType");}licenceTypeCode;licenceTypeDescription;deletionMarker};r([t({level:4},{groups:["createEncounter"]})],ae.prototype,"licenceTypeCode",2),r([t({level:4},{groups:["createEncounter"]})],ae.prototype,"licenceTypeDescription",2),r([t({level:4},{groups:["createEncounter"]})],ae.prototype,"deletionMarker",2);var c=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([t({level:4},{groups:["createEncounter"]})],c.prototype,"detailsOnNotice",2),r([t({level:4},{groups:["createEncounter"]})],c.prototype,"partOfEncounter",2),r([t({level:4},{groups:["createEncounter"]})],c.prototype,"theSourceDriverType",2),r([classValidator.IsOptional()],c.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"]})],c.prototype,"birthPlace",2),r([u({groups:["createEncounter"]}),t({level:4,exceptions:[2]},{groups:["createEncounter"]})],c.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"]}),t({level:4},{groups:["createEncounter"]})],c.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"]}),t({level:4},{groups:["createEncounter"]})],c.prototype,"surname",2),r([u({groups:["createEncounter"]}),t({level:4},{groups:["createEncounter"]})],c.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"]})],c.prototype,"licenceIssueNo",2),r([classValidator.IsOptional()],c.prototype,"registeredKeeper",2),r([classValidator.ValidateIf(()=>x.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>Ve),t({roles:["TRAFFIC"]},{groups:["createEncounter"]})],c.prototype,"address",2),r([classValidator.IsOptional(),classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/\d{0,35}| {0,35}/,{groups:["createEncounter"]})],c.prototype,"phoneNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>se),t({level:4},{groups:["createEncounter"]})],c.prototype,"detailsOrigin",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>P)],c.prototype,"nationality",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>ae)],c.prototype,"licenceType",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>_e)],c.prototype,"licenceCategory",2),r([t({level:4},{groups:["createEncounter"]})],c.prototype,"sex",2),r([t({level:4},{groups:["createEncounter"]})],c.prototype,"driverType",2),r([classTransformer.Transform(({value:o})=>o!==null?Number.parseInt(o,10):null),t({level:4},{groups:["createEncounter"]})],c.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"]})],c.prototype,"passportNumber",2),r([classValidator.IsOptional(),classValidator.MaxLength(50,{groups:["createEncounter"]})],c.prototype,"occupation",2),r([classValidator.IsOptional(),classValidator.MaxLength(16,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[&‘’\\',.()\/-]{2})[A-Za-z0-9 &‘’\\',.()\/-]*$/,{groups:["createEncounter"]}),an({groups:["createEncounter"]})],c.prototype,"driverLicNum",2),r([classValidator.IsOptional()],c.prototype,"documentPath",2),r([classValidator.IsOptional()],c.prototype,"linkedNoticeId",2),r([classValidator.IsOptional()],c.prototype,"driverCardNumber",2),r([classValidator.IsOptional()],c.prototype,"drivingLicenceStatus",2),r([T(),u({groups:["createEncounter"]})],c.prototype,"drivingLicenceIssueDate",2),r([classValidator.IsOptional()],c.prototype,"odrExhibitNumber",2),r([classValidator.IsOptional()],c.prototype,"generatedNumber",2),r([classValidator.IsOptional()],c.prototype,"agencyDriver",2),r([classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>X)],c.prototype,"actualPayments",2);var Wr=class{static{n(this,"JourneyType");}generatedNumber;rank;deletionMarker;description};r([t({level:4},{groups:["createEncounter"]})],Wr.prototype,"generatedNumber",2),r([t({level:4},{groups:["createEncounter"]})],Wr.prototype,"rank",2),r([t({level:4},{groups:["createEncounter"]})],Wr.prototype,"deletionMarker",2),r([t({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()),t({level:4},{groups:["createEncounter"]})],me.prototype,"portCode",2),r([t({level:4},{groups:["createEncounter"]})],me.prototype,"portDescription",2),r([t({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(()=>x.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(vr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),t({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"goodsCarried",2),r([classValidator.ValidateIf(()=>x.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(vr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),t({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"journeyStartLctn",2),r([classValidator.ValidateIf(()=>x.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(vr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),t({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"journeyEndLocatn",2),r([classValidator.ValidateIf(()=>x.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>Wr),t({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],vr.prototype,"journeyType",2),r([classValidator.ValidateIf((o,e)=>e!=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([t({level:4},{groups:["createEncounter"]})],Xr.prototype,"code",2),r([t({level:4},{groups:["createEncounter"]})],Xr.prototype,"name",2);var yr=class extends Xr{static{n(this,"EncounterReason");}sequenceNumber;fkCtpCheckType;pg35EcRequired;useOffenceFlow;shortCode;version};r([t({level:2},{groups:["createEncounter"]})],yr.prototype,"sequenceNumber",2),r([t({level:2},{groups:["createEncounter"]})],yr.prototype,"fkCtpCheckType",2),r([t({level:2},{groups:["createEncounter"]})],yr.prototype,"pg35EcRequired",2),r([t({level:2},{groups:["createEncounter"]})],yr.prototype,"useOffenceFlow",2),r([t({level:2},{groups:["createEncounter"]})],yr.prototype,"shortCode",2),r([t({level:2},{groups:["createEncounter"]})],yr.prototype,"version",2);var De=class extends Xr{static{n(this,"TextType");}withinEncounter;sortSequence};r([t({level:4},{groups:["createEncounter"]})],De.prototype,"withinEncounter",2),r([classValidator.IsOptional()],De.prototype,"sortSequence",2);var Me=class{static{n(this,"EncounterTexts");}textType;text};r([classValidator.ValidateNested(),classTransformer.Type(()=>De),t({level:4},{groups:["createEncounter"]})],Me.prototype,"textType",2),r([t({level:4},{groups:["createEncounter"]})],Me.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([t({level:4},{groups:["createEncounter"]})],Ee.prototype,"category",2),r([t({level:4},{groups:["createEncounter"]})],Ee.prototype,"deletionMarker",2),r([t({level:4},{groups:["createEncounter"]})],Ee.prototype,"sequenceNumber",2);var Se=class{static{n(this,"ObservedEthnicityInfo");}statedNumberOfDriver;capturedEthnicity};r([t({level:4},{groups:["createEncounter"]})],Se.prototype,"statedNumberOfDriver",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Ee),t({level:4},{groups:["createEncounter"]})],Se.prototype,"capturedEthnicity",2);var Ge=class{static{n(this,"EthnicityInfo");}isEthnicDataProvided;observedEthnicityInfo};r([classValidator.IsBoolean(),t({level:4},{groups:["createEncounter"]})],Ge.prototype,"isEthnicDataProvided",2),r([classValidator.ValidateIf((o,e)=>e!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>Se)],Ge.prototype,"observedEthnicityInfo",2);var qe=class extends er{static{n(this,"InspectionType");}inspectionLevel};r([t({level:2},{groups:["createEncounter"]})],qe.prototype,"inspectionLevel",2);function En(i){return o=>{classValidator.registerDecorator({name:"ValidateSetupUserInput",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l)return false;let E=l.csiType?.toUpperCase?.()==="P",g=l.setupUser!==null&&l.setupUser!==void 0;return E||g},defaultMessage(e){return 'setupUser must be present when csiType is not "P"'}}});}}n(En,"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"]}),t({level:2},{groups:["createEncounter"]})],M.prototype,"checkSiteType",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),t({level:2},{groups:["createEncounter"]})],M.prototype,"csiType",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),t({level:2},{groups:["createEncounter"]})],M.prototype,"csiName",2),r([classValidator.MaxLength(15,{groups:["createEncounter"]}),t({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"]}),t({level:2},{groups:["createEncounter"]})],M.prototype,"townOrVillage",2),r([classValidator.IsOptional(),classValidator.MaxLength(60,{groups:["createEncounter"]})],M.prototype,"couDescription",2),r([t({level:2},{groups:["createEncounter"]})],M.prototype,"rarCode",2),r([classValidator.IsOptional(),classValidator.MaxLength(30,{groups:["createEncounter"]})],M.prototype,"ifkSetupEmpId",2),r([classValidator.ValidateIf((o,e)=>e!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],M.prototype,"setupUser",2),r([u({groups:["createEncounter"]}),t({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"]}),t({level:2},{groups:["createEncounter"]})],M.prototype,"deletionMarker",2),M=r([En({groups:["createEncounter"]})],M);function dn(i){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterMotor",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;return l?l.vehicleId!=null:false},defaultMessage(e){return "Motor vehicleId must not be null."}}});}}n(dn,"ValidateDeleteEncounterMotor");function gn(i){return o=>{classValidator.registerDecorator({name:"ValidateMotorObject",target:o,propertyName:"motor",options:i,validator:{validate(e,s){let l=s.object;if(!l)return false;let E=!!l.nationality,g=!!l.vehicleIdType,R=!!l.roadsideVehicleType;if(!l.vehicleId||!E||!l.nationality?.irlCode||!g||!l.vehicleIdType?.shortCode||!R)return false;let b=l.vehicleId.toLowerCase(),w=l.vehicleIdType.shortCode.toLowerCase();l.nationality.irlCode.toLowerCase();let Hr=l.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",W=0,Ir=x.getInstance().getEncounterType();return ["vrm","vin"].includes(w)||W++,Ir!==2&&l.odometerReading==null&&W++,(Ir===2||l.actionCode?.toUpperCase()==="C")&&l.odometerReadingUnit==null&&W++,Hr&&W++,/^[a-z0-9]+$/i.test(b)||W++,W===0},defaultMessage(e){return "Motor requires VehicleId, Nationality, VehicleIdType and RoadsideVehicleType. Odometer or format may also be invalid."}}});}}n(gn,"ValidateMotorObject");function Tn(i){return o=>{classValidator.registerDecorator({name:"ValidateBodyType",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l)return false;let g=l.roadsideVehicleType?.description,R=x.getInstance().getEncounterType();if(!g)return false;let b=g.toLowerCase()==="category t",w=R===2;return !(!b&&!w&&l.bodyType==null)},defaultMessage(e){return 'bodyType must not be null unless body type is "category T" or encounter level is SIFT'}}});}}n(Tn,"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([t({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(),t({level:1},{groups:["createEncounter"]})],fr.prototype,"vehicleMake",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>P),t({level:4},{groups:["createEncounter"]})],fr.prototype,"nationality",2),r([classTransformer.Type(()=>de)],fr.prototype,"policeDefects",2),r([t({level:4},{groups:["createEncounter"]})],fr.prototype,"nationalitySummary",2);var we=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 ai=/^(?!^%)(?!-|\s)(?!.*[&@£#$()'*,.:;+-]{4})[A-Za-z0-9\/&@£#$%()'*,.:;+ -]*$/,N=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()],N.prototype,"action",2),r([classValidator.IsOptional(),classValidator.Matches(ai,{groups:["createEncounter"],message:"Invalid format"}),classValidator.MaxLength(254,{groups:["createEncounter"],message:"Must be no more than 254 characters in length"})],N.prototype,"additionalText",2),r([classValidator.IsOptional()],N.prototype,"clearanceDate",2),r([classValidator.IsOptional()],N.prototype,"deviationComment",2),r([classValidator.IsOptional()],N.prototype,"adeEnd",2),r([classValidator.IsOptional()],N.prototype,"nonCmplnceRsn",2),r([classValidator.IsOptional()],N.prototype,"positionOnAxle",2),r([classValidator.IsOptional()],N.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],N.prototype,"serialNumber",2),r([classValidator.IsOptional()],N.prototype,"side",2),r([classValidator.IsOptional()],N.prototype,"adeSize",2),r([classValidator.IsOptional()],N.prototype,"verticalPosition",2),r([classValidator.IsOptional()],N.prototype,"make",2),r([classValidator.IsOptional()],N.prototype,"actualAction",2),r([classValidator.IsOptional()],N.prototype,"axleNumber",2),r([classValidator.IsOptional()],N.prototype,"mechDefctIndictr",2),r([classValidator.IsOptional()],N.prototype,"sigMntncFailure",2),r([classValidator.IsOptional()],N.prototype,"status",2),r([classValidator.ValidateIf((o,e)=>e!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Te),classValidator.IsOptional()],N.prototype,"part",2),r([classValidator.IsOptional()],N.prototype,"maintenance",2),r([classValidator.IsOptional()],N.prototype,"defectCatDetailDescription",2),r([classValidator.IsOptional()],N.prototype,"defectSectionDetailDescription",2),r([classValidator.IsOptional()],N.prototype,"defectSubDetailDescription",2),r([classValidator.IsOptional()],N.prototype,"defectDetailDescription",2),r([classValidator.IsOptional()],N.prototype,"defectSubDescription",2),r([classValidator.IsOptional()],N.prototype,"severityOfDefectDescription",2),r([classValidator.IsOptional()],N.prototype,"dudGenNum",2),r([classValidator.IsOptional()],N.prototype,"sodGeneratedNumber",2),r([classValidator.IsOptional()],N.prototype,"partNumber",2),r([classValidator.IsOptional()],N.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,e)=>e!=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,e)=>e!=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,e)=>e!=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 Un(i){return o=>{classValidator.registerDecorator({name:"ValidateCloseProhibitionsNotice",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;return l?l.noticeStatus?.toUpperCase?.()==="C":false},defaultMessage(e){return "Notices noticeStatus must be 'C'."}}});}}n(Un,"ValidateCloseProhibitionsNotice");function Ln(i){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterNotice",target:o,propertyName:void 0,options:i,validator:{validate(e,s){let l=s.object;if(!l)return false;let E=l.noticeType?.code!=null,g=l.noticeStatus?.toUpperCase?.()==="W",R=l.issueDate!=null,b