@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 105 kB
JavaScript
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var mn=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var n=(l,o)=>mn(l,"name",{value:o,configurable:true});var r=(l,o,t,s)=>{for(var i=s>1?void 0:s?mo(o,t):o,d=l.length-1,g;d>=0;d--)(g=l[d])&&(i=(s?g(o,t,i):g(i))||i);return s&&i&&mn(o,t,i),i};var k=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 Ee=class{validate(o,t){let s=t.constraints[0],i=k.getInstance(),d=i.getEncounterType(),g=i.getExaminerOfficerType();return s.level===0||s.exceptions?.includes(d)||s.level!==void 0&&s.level>d||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(([$,gr])=>typeof gr=="string"?gr.trim().length>0:gr!=null)):true}};n(Ee,"MandatoryFieldConstraint"),Ee=r([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],Ee);function e(l,o){return (t,s)=>{classValidator.registerDecorator({name:"MandatoryField",target:t.constructor,propertyName:s,constraints:[l],options:o,validator:Ee});}}n(e,"MandatoryField");function Mr(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(Mr,"IsNullableNumber");var de=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(de,"UKDateFormatValidator"),de=r([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],de);function u(l){return (o,t)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:o.constructor,propertyName:t,options:l,validator:de});}}n(u,"ValidateUKDateFormat");function En(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(d){return console.error("Failed to validate DeleteEncounter on EncounterReq:",d),false}},defaultMessage(t){return "generatedNumber cannot be null when deleting an existing encounter."}}});}}n(En,"ValidateDeleteEncounter");function dn(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 d=i.audits;for(let g of d)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(dn,"ValidateDeleteEncounterAudit");function gn(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 d=i.encounterTexts;for(let g of d)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(gn,"ValidateDeleteEncounterEncTexts");function Tn(l){return o=>{classValidator.registerDecorator({name:"ValidateIncompleteEncDeleteFixedPenalty",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!k.getInstance().isDeletedEncounter())return true;let g=i.drivers||[],R=Oo(i);function b(me){return g.some(nr=>nr.driverType===me&&nr.actualPayments&&nr.actualPayments.length>0)}n(b,"driverHasActualPayment");function $(me){return R.some(nr=>nr.penaltyNotice&&nr.penaltyNotice.penaltyNoticeStatus?.code==="P"&&nr.penaltyNotice.driverType===me)}n($,"driverHasPenaltyNoticePaid");function gr(me){return R.some(nr=>nr.penaltyNotice&&nr.penaltyNotice.driverType===me)}n(gr,"driverHasFixedPenalty");let Jr="A",q="O",Fr=b(Jr),zt=b(q),at=$(Jr),Kt=$(q),Me=gr(Jr),Se=gr(q);return !(Fr&&at&&Me||zt&&Kt&&Se)},defaultMessage(t){return "Cannot delete encounter with paid fixed penalty"}}});}}n(Tn,"ValidateIncompleteEncDeleteFixedPenalty");function Oo(l){let o=l.motor?.notices||[],t=l.trailer1?.notices||[],s=l.trailer2?.notices||[];return [...o,...t,...s]}n(Oo,"getAllNotices");function fn(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 d=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 !!(d||R)},defaultMessage(t){return "A reason must be given when ethnicity is not provided"}}});}}n(fn,"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 Cn(l){return o=>{classValidator.registerDecorator({name:"ValidateFixedPenalty",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||k.getInstance().isDeletedEncounter())return true;let g=i.motor?.notices??[],R=i.trailer1?.notices??[],b=i.trailer2?.notices??[],$=[...g,...R,...b],gr=["BFPN01","FFPN01","FDEN01"],Jr=$.filter(C=>C.noticeType?.code&&gr.includes(C.noticeType.code)),q=$.filter(C=>C.noticeType?.code==="FFPN01"),Fr=$.filter(C=>C.noticeType?.code==="FDEN01"),zt=Jr.filter(C=>C.noticeStatus==="W"),at="NO IMMEDIATE PAYMENT",Kt="FP WITHDRAWAL REASON";function Me(C){return (i.encounterTexts??[]).some(sr=>sr.textType?.name?.trim().toUpperCase()===C)}n(Me,"encounterTextCorrect");function Se(C){return C.every(sr=>["P","W"].includes(sr.penaltyNotice?.penaltyNoticeStatus?.code??""))}n(Se,"allNoticesPaid");function me(C,sr){return C.some(ht=>sr.some(Vt=>ht.penaltyNotice?.driverType&&Vt.penaltyNotice?.driverType&&ht.penaltyNotice.driverType===Vt.penaltyNotice.driverType))}n(me,"sameDriver");let nr=q.some(C=>C.noticeStatus!=="W"),Zt=Fr.some(C=>C.noticeStatus!=="W");if(nr&&!Zt&&!Se(q)&&!Me(at)||Zt&&!nr&&!Se(Fr)&&!Me(at)||nr&&Zt&&!me(q,Fr)&&(!Se(q)||!Se(Fr))&&!Me(at)||zt.length>0&&!Me(Kt))return false;let un=i.drivers??[],uo=un.flatMap(C=>C.actualPayments??[]),po=["C","Y","N"],Yt="R";for(let C of uo){let sr=C.paymentStatus?.code;if(!C.paymentDate||!C.inputDate||!C.amount||!C.paymentMethod||!C.recorder||!C.clientGuid||sr&&po.includes(sr)&&C.reversalDate||sr===Yt&&!C.reversalDate||C.reversalDate&&sr!==Yt||!C.reversalDate&&sr===Yt)return false}for(let C of un){let sr=C.driverType,ht=Jr.filter(pn=>pn.penaltyNotice?.driverType===sr&&pn.penaltyNotice?.penaltyNoticeStatus?.code==="P"),Vt=C.actualPayments&&C.actualPayments.length>0;if(ht.length>0&&!Vt)return false}return true},defaultMessage(){return "Invalid fixed penalty data: Please check notices, actual payments, and related rules."}}});}}n(Cn,"ValidateFixedPenalty");function cn(l){return o=>{classValidator.registerDecorator({name:"ValidateEncounterReqObject",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let d=i.motor==null,g=i.trailer1==null;return !(d&&g)}catch(d){return console.error("Failed to validate EncounterReqObject:",d),false}},defaultMessage(t){return "At least either motor or trailer1 must be present during an encounter."}}});}}n(cn,"ValidateEncounterReqObject");function Nn(l){return o=>{classValidator.registerDecorator({name:"ValidateJourneyRequired",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let d=i.encounterReason,g=i.journey,R=!1;return d&&d.name&&(R=!d.name.match(/^(ANNUAL TEST|VE OPERATOR VISIT)$/)),R?!!(g&&g.journeyStartLctn!=null&&g.journeyEndLocatn!=null&&g.goodsCarried!=null):!0}catch(d){return console.error("Failed to validate JourneyRequired on EncounterReq:",d),false}},defaultMessage(t){return "Journey start, end locations and goodsCarried are required for this encounter."}}});}}n(Nn,"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(d){return console.error("Failed to validate CloseProhibitions on EncounterReq:",d),false}},defaultMessage(t){return "generatedNumber cannot be null when closing an existing prohibition."}}});}}n(Rn,"ValidateCloseProhibitions");function An(l){return o=>{classValidator.registerDecorator({name:"ValidateTachoValue",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let d=i.tachoCheckQuantity;if(d!=null){let g=i.otherDriverDigitacCheckQuantity!=null?i.otherDriverDigitacCheckQuantity:0,R=i.actualDriverDigitacCheckQuantity!=null?i.actualDriverDigitacCheckQuantity:0,b=i.otherDriverPaperChartCheckQuantity!=null?i.otherDriverPaperChartCheckQuantity:0,$=i.actualDriverPaperChartCheckQuantity!=null?i.actualDriverPaperChartCheckQuantity:0;return R+$+b+g===d}return !0}catch(d){return console.error("Failed to validate EncounterReq tacho check quantities",d),false}},defaultMessage(t){return "tachoCheckQuantity must equal the sum of actualDriverDigitacCheckQuantity, actualDriverPaperChartCheckQuantity, otherDriverDigitacCheckQuantity, and otherDriverPaperChartCheckQuantity."}}});}}n(An,"ValidateTachoValue");function Sr(){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(Sr,"TransformUKDateTime");function On(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(On,"CloseProhibitionsAuditValidator");var or=class{eventCode;eventShortDescription;eventFullDescription;deletionMarker;fpNoticeIndicator;noticeIndicator};n(or,"AuditEventBase"),r([classValidator.IsOptional()],or.prototype,"eventCode",2),r([classValidator.IsOptional()],or.prototype,"eventShortDescription",2),r([classValidator.IsOptional()],or.prototype,"eventFullDescription",2),r([classValidator.IsOptional()],or.prototype,"deletionMarker",2),r([classValidator.IsOptional()],or.prototype,"fpNoticeIndicator",2),r([classValidator.IsOptional()],or.prototype,"noticeIndicator",2),or=r([On({groups:["closeProhibition"]})],or);var B=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(()=>or)],B.prototype,"aevEventCode",2),r([Sr(),u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],B.prototype,"eventTimestamp",2),r([classValidator.IsOptional()],B.prototype,"serverTimestamp",2),r([e({level:4},{groups:["createEncounter"]})],B.prototype,"responsibleFirstName",2),r([e({level:4},{groups:["createEncounter"]})],B.prototype,"responsibleSurname",2),r([e({level:4},{groups:["createEncounter"]})],B.prototype,"responsibleUserId",2),r([e({level:4},{groups:["createEncounter"]})],B.prototype,"eventUnit",2),r([classValidator.IsOptional()],B.prototype,"comments",2),r([classValidator.IsOptional()],B.prototype,"newAuditIndicator",2);function Un(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 d=k.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$",g=new RegExp(d),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 ${k.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$"}`}}});}}n(Un,"ValidateContact");function h(){return classTransformer.Transform(({value:l})=>typeof l=="string"?l.toUpperCase():l)}n(h,"ToUpperCase");var Qr=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"]}),h(),e({level:4},{groups:["createEncounter"]})],Qr.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"]}),h()],Qr.prototype,"postcode",2);var Tr=class Tr extends Qr{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(Tr.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"]}),h(),e({level:4},{groups:["createEncounter"]})],Tr.prototype,"addressLine1",2),r([classValidator.IsOptional(),classValidator.Matches(Tr.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"]}),h()],Tr.prototype,"addressLine2",2),r([classValidator.IsOptional(),classValidator.Matches(Tr.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"]}),h()],Tr.prototype,"addressLine3",2),r([classValidator.IsOptional(),classValidator.Matches(Tr.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"]}),h()],Tr.prototype,"addressLine4",2),r([classValidator.IsOptional(),h()],Tr.prototype,"ukResident",2);var qr=Tr;var Br=class{static{n(this,"CommonTradingAs");}tradingAs;address};r([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&@£#$¥,.:;\-]{2})[A-Za-z0-9&@£#$¥,.:; \-]*$/,{groups:["createEncounter"]}),h()],Br.prototype,"tradingAs",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>qr),e({level:4},{groups:["createEncounter"]})],Br.prototype,"address",2);var vr=class{static{n(this,"ContactType");}ctyNumber;ctyDescription;deletionMarker;updateInd;multipleInd;sortSequence};r([e({level:4},{groups:["createEncounter"]})],vr.prototype,"ctyNumber",2),r([e({level:4},{groups:["createEncounter"]})],vr.prototype,"ctyDescription",2),r([e({level:4},{groups:["createEncounter"]})],vr.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],vr.prototype,"updateInd",2),r([e({level:4},{groups:["createEncounter"]})],vr.prototype,"multipleInd",2),r([e({level:4},{groups:["createEncounter"]})],vr.prototype,"sortSequence",2);var z=class extends Br{generatedNumber;farePaid;contactType;forename;dateOfBirth;contactOnNotice;conComment;occupation;phoneNumber;lastUpdate;surname};n(z,"Contact"),r([T()],z.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],z.prototype,"farePaid",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>vr),e({level:4},{groups:["createEncounter"]})],z.prototype,"contactType",2),r([classValidator.IsOptional(),h()],z.prototype,"forename",2),r([classValidator.IsOptional(),u({groups:["createEncounter"]})],z.prototype,"dateOfBirth",2),r([T()],z.prototype,"contactOnNotice",2),r([T()],z.prototype,"conComment",2),r([T()],z.prototype,"occupation",2),r([classValidator.IsOptional(),classValidator.Length(0,35,{groups:["createEncounter"],message:"Must be no more than 35 characters in length"})],z.prototype,"phoneNumber",2),r([e({level:4},{groups:["createEncounter"]}),u({groups:["createEncounter"]})],z.prototype,"lastUpdate",2),r([T(),h()],z.prototype,"surname",2),z=r([Un({groups:["createEncounter"]})],z);var dr=class extends Qr{static{n(this,"RteArea");}code;areaDescription;address1;address2;address3;address4;email;enforcementArea};r([classValidator.IsOptional()],dr.prototype,"code",2),r([classValidator.IsOptional()],dr.prototype,"areaDescription",2),r([classValidator.IsOptional()],dr.prototype,"address1",2),r([classValidator.IsOptional()],dr.prototype,"address2",2),r([classValidator.IsOptional()],dr.prototype,"address3",2),r([classValidator.IsOptional()],dr.prototype,"address4",2),r([classValidator.IsOptional()],dr.prototype,"email",2),r([classValidator.IsOptional()],dr.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([Mr()],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(()=>dr)],U.prototype,"rteArea",2);var ee=class{static{n(this,"StoppingOfficer");}userId;firstName;surname;examinerType};r([classValidator.IsOptional()],ee.prototype,"userId",2),r([classValidator.IsOptional()],ee.prototype,"firstName",2),r([classValidator.IsOptional()],ee.prototype,"surname",2),r([classValidator.IsOptional()],ee.prototype,"examinerType",2);var yr=class{static{n(this,"DangerousCheckListItemDetailBase");}generatedNumber;checkListItem;questionText;sectionHeading;effectiveFromDate;effectiveToDate};r([e({level:4},{groups:["createEncounter"]})],yr.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],yr.prototype,"checkListItem",2),r([e({level:4},{groups:["createEncounter"]})],yr.prototype,"questionText",2),r([e({level:4},{groups:["createEncounter"]})],yr.prototype,"sectionHeading",2),r([u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],yr.prototype,"effectiveFromDate",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],yr.prototype,"effectiveToDate",2);var ge=class{static{n(this,"DangerousCheckListItemBase");}checkListItemDetail;name;description};r([classValidator.ValidateNested(),classTransformer.Type(()=>yr),e({level:4},{groups:["createEncounter"]})],ge.prototype,"checkListItemDetail",2),r([e({level:4},{groups:["createEncounter"]})],ge.prototype,"name",2),r([e({level:4},{groups:["createEncounter"]})],ge.prototype,"description",2);var Ge=class{static{n(this,"DangerousContainerTypeBase");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Ge.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],Ge.prototype,"deletionMarker",2);var Cr=class{static{n(this,"DangerousCheckListBase");}totQtyDangerousGoods;categoryOfRisk;limitExceeded;miscRemarks;unNumber;carriedOutBy;checkListItems};r([e({level:4},{groups:["createEncounter"]})],Cr.prototype,"totQtyDangerousGoods",2),r([e({level:4},{groups:["createEncounter"]})],Cr.prototype,"categoryOfRisk",2),r([e({level:4},{groups:["createEncounter"]})],Cr.prototype,"limitExceeded",2),r([classValidator.IsOptional()],Cr.prototype,"miscRemarks",2),r([classValidator.MaxLength(300,{message:"Must be no more than 300 characters in length"}),e({level:4},{groups:["createEncounter"]})],Cr.prototype,"unNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Ge),e({level:4},{groups:["createEncounter"]})],Cr.prototype,"carriedOutBy",2),r([classValidator.ValidateNested({each:true}),classTransformer.Type(()=>ge),classValidator.IsArray(),e({level:4},{groups:["createEncounter"]})],Cr.prototype,"checkListItems",2);var lr=class{static{n(this,"CommonDeletion");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],lr.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],lr.prototype,"deletionMarker",2);var Te=class extends lr{static{n(this,"DefectProsecution");}code;prosecutionConsidered;sequenceNumber};r([e({level:2},{groups:["createEncounter"]})],Te.prototype,"code",2),r([e({level:2},{groups:["createEncounter"]})],Te.prototype,"prosecutionConsidered",2),r([e({level:2},{groups:["createEncounter"]})],Te.prototype,"sequenceNumber",2);var fe=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(fe,"IsValidLicenceNumberForUKConstraint"),fe=r([classValidator.ValidatorConstraint({name:"IsValidLicenceNumberForUK",async:false})],fe);function hn(l){return (o,t)=>{classValidator.registerDecorator({target:o.constructor,propertyName:t,options:l,validator:fe});}}n(hn,"IsValidLicenceNumberForUK");var K=class{static{n(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};r([e({level:4},{groups:["createEncounter"]})],K.prototype,"drivingLicenceAuthority",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"irlCountry",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"vehicleIndicator",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"cardIssuingAuthorityInd",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"intelligenceSubjectInd",2),r([classValidator.IsOptional()],K.prototype,"intRegNumberCode",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"nonVosa",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"irlCode",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],K.prototype,"foreignOpNationalityInd",2),r([classValidator.IsOptional()],K.prototype,"inrNationalityInd",2);var kr=class{static{n(this,"PaymentReversalReason");}code;description;sequenceNum;deletionMarker;usageInd};r([classValidator.IsOptional()],kr.prototype,"code",2),r([classValidator.IsOptional()],kr.prototype,"description",2),r([classValidator.IsOptional()],kr.prototype,"sequenceNum",2),r([classValidator.IsOptional()],kr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],kr.prototype,"usageInd",2);var br=class{static{n(this,"PaymentStatus");}code;description;sequenceNum;deletionMarker;cashFlag;callCentreFlag;chequeFlag};r([classValidator.IsOptional()],br.prototype,"description",2),r([classValidator.IsOptional()],br.prototype,"sequenceNum",2),r([classValidator.IsOptional()],br.prototype,"deletionMarker",2),r([classValidator.IsOptional()],br.prototype,"cashFlag",2),r([classValidator.IsOptional()],br.prototype,"callCentreFlag",2),r([classValidator.IsOptional()],br.prototype,"chequeFlag",2);var rr=class{static{n(this,"ActualPayment");}paymentDate;inputDate;amount;paymentMethod;sortCode;chequeNumber;reversalDate;recorder;reverser;pvrCode;clientGuid;callCentreReference;paymentStatus};r([u({groups:["createEncounter"]})],rr.prototype,"paymentDate",2),r([u({groups:["createEncounter"]})],rr.prototype,"inputDate",2),r([classValidator.IsOptional()],rr.prototype,"sortCode",2),r([classValidator.IsOptional()],rr.prototype,"chequeNumber",2),r([classValidator.IsOptional(),u({groups:["createEncounter"]})],rr.prototype,"reversalDate",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],rr.prototype,"recorder",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],rr.prototype,"reverser",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>kr)],rr.prototype,"pvrCode",2),r([classValidator.IsOptional()],rr.prototype,"clientGuid",2),r([classValidator.IsOptional()],rr.prototype,"callCentreReference",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>br)],rr.prototype,"paymentStatus",2);var Ce=class{static{n(this,"DetailsOrigin");}driverDetailsOriginCode;originDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Ce.prototype,"driverDetailsOriginCode",2),r([e({level:4},{groups:["createEncounter"]})],Ce.prototype,"originDescription",2),r([e({level:4},{groups:["createEncounter"]})],Ce.prototype,"deletionMarker",2);var Pe=class{static{n(this,"LicenceCategory");}categoryCode;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Pe.prototype,"categoryCode",2),r([e({level:4},{groups:["createEncounter"]})],Pe.prototype,"deletionMarker",2);var ce=class{static{n(this,"LicenceType");}licenceTypeCode;licenceTypeDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"licenceTypeCode",2),r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"licenceTypeDescription",2),r([e({level:4},{groups:["createEncounter"]})],ce.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([e({level:4},{groups:["createEncounter"]})],c.prototype,"detailsOnNotice",2),r([e({level:4},{groups:["createEncounter"]})],c.prototype,"partOfEncounter",2),r([e({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"]}),e({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"]}),e({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"]}),e({level:4},{groups:["createEncounter"]})],c.prototype,"surname",2),r([u({groups:["createEncounter"]}),e({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(()=>k.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>qr),e({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(()=>Ce),e({level:4},{groups:["createEncounter"]})],c.prototype,"detailsOrigin",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>K)],c.prototype,"nationality",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>ce)],c.prototype,"licenceType",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Pe)],c.prototype,"licenceCategory",2),r([e({level:4},{groups:["createEncounter"]})],c.prototype,"sex",2),r([e({level:4},{groups:["createEncounter"]})],c.prototype,"driverType",2),r([classTransformer.Transform(({value:o})=>o!==null?Number.parseInt(o,10):null),e({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"]}),hn({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(()=>rr)],c.prototype,"actualPayments",2);var te=class{static{n(this,"JourneyType");}generatedNumber;rank;deletionMarker;description};r([e({level:4},{groups:["createEncounter"]})],te.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],te.prototype,"rank",2),r([e({level:4},{groups:["createEncounter"]})],te.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],te.prototype,"description",2);var Ae=class{static{n(this,"PortOfExit");}portCode;portDescription;deletionMarker};r([classTransformer.Transform(({value:o})=>o?.toString()),e({level:4},{groups:["createEncounter"]})],Ae.prototype,"portCode",2),r([e({level:4},{groups:["createEncounter"]})],Ae.prototype,"portDescription",2),r([e({level:4},{groups:["createEncounter"]})],Ae.prototype,"deletionMarker",2);var hr=class hr{static{n(this,"Journey");}static REG_EX_JOURNEY=/^(?!-|\\s)(?!.*[&’',.\-]{2})[A-Za-z0-9&‘’',. \-]*$/;goodsCarried;journeyStartLctn;journeyEndLocatn;journeyType;portOfExit};r([classValidator.ValidateIf(()=>k.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(hr.REG_EX_JOURNEY,{groups:["createEncounter"]}),h(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],hr.prototype,"goodsCarried",2),r([classValidator.ValidateIf(()=>k.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(hr.REG_EX_JOURNEY,{groups:["createEncounter"]}),h(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],hr.prototype,"journeyStartLctn",2),r([classValidator.ValidateIf(()=>k.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(hr.REG_EX_JOURNEY,{groups:["createEncounter"]}),h(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],hr.prototype,"journeyEndLocatn",2),r([classValidator.ValidateIf(()=>k.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>te),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],hr.prototype,"journeyType",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Ae)],hr.prototype,"portOfExit",2);var kt=hr;var ne=class extends lr{static{n(this,"CommonCode");}code;name};r([e({level:4},{groups:["createEncounter"]})],ne.prototype,"code",2),r([e({level:4},{groups:["createEncounter"]})],ne.prototype,"name",2);var Vr=class extends ne{static{n(this,"EncounterReason");}sequenceNumber;fkCtpCheckType;pg35EcRequired;useOffenceFlow;shortCode;version};r([e({level:2},{groups:["createEncounter"]})],Vr.prototype,"sequenceNumber",2),r([e({level:2},{groups:["createEncounter"]})],Vr.prototype,"fkCtpCheckType",2),r([e({level:2},{groups:["createEncounter"]})],Vr.prototype,"pg35EcRequired",2),r([e({level:2},{groups:["createEncounter"]})],Vr.prototype,"useOffenceFlow",2),r([e({level:2},{groups:["createEncounter"]})],Vr.prototype,"shortCode",2),r([e({level:2},{groups:["createEncounter"]})],Vr.prototype,"version",2);var ze=class extends ne{static{n(this,"TextType");}withinEncounter;sortSequence};r([e({level:4},{groups:["createEncounter"]})],ze.prototype,"withinEncounter",2),r([classValidator.IsOptional()],ze.prototype,"sortSequence",2);var Ke=class{static{n(this,"EncounterTexts");}textType;text};r([classValidator.ValidateNested(),classTransformer.Type(()=>ze),e({level:4},{groups:["createEncounter"]})],Ke.prototype,"textType",2),r([e({level:4},{groups:["createEncounter"]})],Ke.prototype,"text",2);var oe=class{static{n(this,"CommonDescription");}code;description};r([T()],oe.prototype,"code",2),r([T()],oe.prototype,"description",2);var Oe=class extends oe{static{n(this,"CapturedEthnicity");}category;deletionMarker;sequenceNumber};r([e({level:4},{groups:["createEncounter"]})],Oe.prototype,"category",2),r([e({level:4},{groups:["createEncounter"]})],Oe.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Oe.prototype,"sequenceNumber",2);var Ze=class{static{n(this,"ObservedEthnicityInfo");}statedNumberOfDriver;capturedEthnicity};r([e({level:4},{groups:["createEncounter"]})],Ze.prototype,"statedNumberOfDriver",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Oe),e({level:4},{groups:["createEncounter"]})],Ze.prototype,"capturedEthnicity",2);var Ye=class{static{n(this,"EthnicityInfo");}isEthnicDataProvided;observedEthnicityInfo};r([classValidator.IsBoolean(),e({level:4},{groups:["createEncounter"]})],Ye.prototype,"isEthnicDataProvided",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>Ze)],Ye.prototype,"observedEthnicityInfo",2);var Et=class extends lr{static{n(this,"InspectionType");}inspectionLevel};r([e({level:2},{groups:["createEncounter"]})],Et.prototype,"inspectionLevel",2);function xn(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 d=i.csiType?.toUpperCase?.()==="P",g=i.setupUser!==null&&i.setupUser!==void 0;return d||g},defaultMessage(t){return 'setupUser must be present when csiType is not "P"'}}});}}n(xn,"ValidateSetupUserInput");var G=class{rclCsiGeneratedNumber;checkSiteType;csiType;csiName;road;direction;townOrVillage;couDescription;rarCode;ifkSetupEmpId;setupUser;lastUpdate;clientGuid;deletionMarker};n(G,"Location"),r([classValidator.IsOptional(),classValidator.MaxLength(10,{groups:["createEncounter"]})],G.prototype,"rclCsiGeneratedNumber",2),r([classValidator.MaxLength(3,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"checkSiteType",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"csiType",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"csiName",2),r([classValidator.MaxLength(15,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"road",2),r([classValidator.IsOptional(),classValidator.MaxLength(3,{groups:["createEncounter"]})],G.prototype,"direction",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"townOrVillage",2),r([classValidator.IsOptional(),classValidator.MaxLength(60,{groups:["createEncounter"]})],G.prototype,"couDescription",2),r([e({level:2},{groups:["createEncounter"]})],G.prototype,"rarCode",2),r([classValidator.IsOptional(),classValidator.MaxLength(30,{groups:["createEncounter"]})],G.prototype,"ifkSetupEmpId",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],G.prototype,"setupUser",2),r([u({groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"lastUpdate",2),r([classValidator.IsOptional(),classValidator.MaxLength(36,{groups:["createEncounter"]})],G.prototype,"clientGuid",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],G.prototype,"deletionMarker",2),G=r([xn({groups:["createEncounter"]})],G);function Dn(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(Dn,"ValidateDeleteEncounterMotor");function Fn(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 d=!!i.nationality,g=!!i.vehicleIdType,R=!!i.roadsideVehicleType;if(!i.vehicleId||!d||!i.nationality?.irlCode||!g||!i.vehicleIdType?.shortCode||!R)return false;let b=i.vehicleId.toLowerCase(),$=i.vehicleIdType.shortCode.toLowerCase();i.nationality.irlCode.toLowerCase();let Jr=i.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",q=0,Fr=k.getInstance().getEncounterType();return ["vrm","vin"].includes($)||q++,Fr!==2&&i.odometerReading==null&&q++,(Fr===2||i.actionCode?.toUpperCase()==="C")&&i.odometerReadingUnit==null&&q++,Jr&&q++,/^[a-z0-9]+$/i.test(b)||q++,q===0},defaultMessage(t){return "Motor requires VehicleId, Nationality, VehicleIdType and RoadsideVehicleType. Odometer or format may also be invalid."}}});}}n(Fn,"ValidateMotorObject");function Mn(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=k.getInstance().getEncounterType();if(!g)return false;let b=g.toLowerCase()==="category t",$=R===2;return !(!b&&!$&&i.bodyType==null)},defaultMessage(t){return 'bodyType must not be null unless body type is "category T" or encounter level is SIFT'}}});}}n(Mn,"ValidateBodyType");var Ue=class{static{n(this,"PoliceDefect");}sequenceNumber;imNumber;defectSeverity};r([classValidator.IsOptional()],Ue.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],Ue.prototype,"imNumber",2),r([classValidator.IsOptional()],Ue.prototype,"defectSeverity",2);var Le=class{static{n(this,"CommonVehicleWeights");}actGrossWeight;permGrossWeight;designGrossWeight};r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],Le.prototype,"actGrossWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],Le.prototype,"permGrossWeight",2),r([classValidator.IsOptional()],Le.prototype,"designGrossWeight",2);var Nr=class Nr extends Le{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"]})],Nr.prototype,"vehicleAxles",2),r([T()],Nr.prototype,"vehicleColour",2),r([classValidator.IsOptional(),classValidator.Matches(Nr.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),h()],Nr.prototype,"vehicleModel",2),r([classValidator.Matches(Nr.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),h(),e({level:1},{groups:["createEncounter"]})],Nr.prototype,"vehicleMake",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>K),e({level:4},{groups:["createEncounter"]})],Nr.prototype,"nationality",2),r([classTransformer.Type(()=>Ue)],Nr.prototype,"policeDefects",2),r([e({level:4},{groups:["createEncounter"]})],Nr.prototype,"nationalitySummary",2);var We=Nr;var ve=class{static{n(this,"Part");}internalNumber;partMake;deletionMarker};r([classValidator.IsOptional()],ve.prototype,"internalNumber",2),r([classValidator.IsOptional()],ve.prototype,"partMake",2),r([classValidator.IsOptional()],ve.prototype,"deletionMarker",2);var xl=/^(?!^%)(?!-|\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(xl,{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,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>ve),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 Gr=class{static{n(this,"SignificanceReason");}generatedNumber;fullReason;shortReason;effectiveFrom;effectiveTo};r([classValidator.IsOptional()],Gr.prototype,"generatedNumber",2),r([classValidator.IsOptional()],Gr.prototype,"fullReason",2),r([classValidator.IsOptional()],Gr.prototype,"shortReason",2),r([u(),classValidator.IsOptional()],Gr.prototype,"effectiveFrom",2),r([u(),classValidator.IsOptional()],Gr.prototype,"effectiveTo",2);var W=class{static{n(this,"DefectSummary");}action;endorsement;lastUpdate;sgnfcanceReason;updateUserId;fiftyPercentRuleMarker;overallProhibitionSeverity;maintenanceFailureMarker;shortReason;deviationDefectCount;cat99DefectCount};r([classValidator.IsOptional()],W.prototype,"action",2),r([classValidator.IsOptional()],W.prototype,"endorsement",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],W.prototype,"lastUpdate",2),r([classValidator.IsOptional()],W.prototype,"sgnfcanceReason",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],W.prototype,"updateUserId",2),r([classValidator.IsOptional()],W.prototype,"fiftyPercentRuleMarker",2),r([classValidator.IsOptional()],W.prototype,"overallProhibitionSeverity",2),r([classValidator.IsOptional()],W.prototype,"maintenanceFailureMarker",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Gr)],W.prototype,"shortReason",2),r([classValidator.IsOptional()],W.prototype,"deviationDefectCount",2),r([classValidator.IsOptional()],W.prototype,"cat99DefectCount",2);var wr=class{static{n(this,"FuelTypeBase");}fuelCode;description;otherTestInd;displayOrder;deletionMarker};r([classValidator.IsOptional()],wr.prototype,"fuelCode",2),r([classValidator.IsOptional()],wr.prototype,"description",2),r([classValidator.IsOptional()],wr.prototype,"otherTestInd",2),r([classValidator.IsOptional()],wr.prototype,"displayOrder",2),r([classValidator.IsOptional()],wr.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(),Sr()],I.prototype,"petrolClbrtnDate",2),r([classValidator.IsOptional(),Sr()],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(()=>wr)],I.prototype,"fuelType",2),r([classValidator.IsOptional()],I.prototype,"otherSerialNum",2),r([classValidator.IsOptional(),Sr()],I.prototype,"otherClbrtnDate",2),r([classValidator.IsOptional()],I.prototype,"clearIndicator",2);function zn(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(zn,"ValidateCloseProhibitionsNotice");function Kn(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 d=i.noticeType?.code!=null,g=i.noticeStatus?.toUpperCase?.()==="W",R=i.issueDate!=null,b=i.inputDa