@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 102 kB
JavaScript
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var an=Object.defineProperty;var ao=Object.getOwnPropertyDescriptor;var n=(l,o)=>an(l,"name",{value:o,configurable:true});var r=(l,o,t,s)=>{for(var i=s>1?void 0:s?ao(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&&an(o,t,i),i};var M=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 pe=class{validate(o,t){let s=t.constraints[0],i=M.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(([P,Er])=>typeof Er=="string"?Er.trim().length>0:Er!=null)):true}};n(pe,"MandatoryFieldConstraint"),pe=r([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],pe);function e(l,o){return (t,s)=>{classValidator.registerDecorator({name:"MandatoryField",target:t.constructor,propertyName:s,constraints:[l],options:o,validator:pe});}}n(e,"MandatoryField");function Fr(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(Fr,"IsNullableNumber");var me=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(me,"UKDateFormatValidator"),me=r([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],me);function u(l){return (o,t)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:o.constructor,propertyName:t,options:l,validator:me});}}n(u,"ValidateUKDateFormat");function un(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(un,"ValidateDeleteEncounter");function pn(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(pn,"ValidateDeleteEncounterAudit");function mn(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(mn,"ValidateDeleteEncounterEncTexts");function En(l){return o=>{classValidator.registerDecorator({name:"ValidateIncompleteEncDeleteFixedPenalty",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!M.getInstance().isDeletedEncounter())return true;let g=i.drivers||[],R=co(i);function b(ue){return g.some(er=>er.driverType===ue&&er.actualPayments&&er.actualPayments.length>0)}n(b,"driverHasActualPayment");function P(ue){return R.some(er=>er.penaltyNotice&&er.penaltyNotice.penaltyNoticeStatus?.code==="P"&&er.penaltyNotice.driverType===ue)}n(P,"driverHasPenaltyNoticePaid");function Er(ue){return R.some(er=>er.penaltyNotice&&er.penaltyNotice.driverType===ue)}n(Er,"driverHasFixedPenalty");let Hr="A",X="O",xr=b(Hr),wt=b(X),it=P(Hr),Pt=P(X),Fe=Er(Hr),De=Er(X);return !(xr&&it&&Fe||wt&&Pt&&De)},defaultMessage(t){return "Cannot delete encounter with paid fixed penalty"}}});}}n(En,"ValidateIncompleteEncDeleteFixedPenalty");function co(l){let o=l.motor?.notices||[],t=l.trailer1?.notices||[],s=l.trailer2?.notices||[];return [...o,...t,...s]}n(co,"getAllNotices");function dn(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(dn,"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 gn(l){return o=>{classValidator.registerDecorator({name:"ValidateFixedPenalty",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||M.getInstance().isDeletedEncounter())return true;let g=i.motor?.notices??[],R=i.trailer1?.notices??[],b=i.trailer2?.notices??[],P=[...g,...R,...b],Er=["BFPN01","FFPN01","FDEN01"],Hr=P.filter(C=>C.noticeType?.code&&Er.includes(C.noticeType.code)),X=P.filter(C=>C.noticeType?.code==="FFPN01"),xr=P.filter(C=>C.noticeType?.code==="FDEN01"),wt=Hr.filter(C=>C.noticeStatus==="W"),it="NO IMMEDIATE PAYMENT",Pt="FP WITHDRAWAL REASON";function Fe(C){return (i.encounterTexts??[]).some(lr=>lr.textType?.name?.trim().toUpperCase()===C)}n(Fe,"encounterTextCorrect");function De(C){return C.every(lr=>["P","W"].includes(lr.penaltyNotice?.penaltyNoticeStatus?.code??""))}n(De,"allNoticesPaid");function ue(C,lr){return C.some(Lt=>lr.some(vt=>Lt.penaltyNotice?.driverType&&vt.penaltyNotice?.driverType&&Lt.penaltyNotice.driverType===vt.penaltyNotice.driverType))}n(ue,"sameDriver");let er=X.some(C=>C.noticeStatus!=="W"),jt=xr.some(C=>C.noticeStatus!=="W");if(er&&!jt&&!De(X)&&!Fe(it)||jt&&!er&&!De(xr)&&!Fe(it)||er&&jt&&!ue(X,xr)&&(!De(X)||!De(xr))&&!Fe(it)||wt.length>0&&!Fe(Pt))return false;let ln=i.drivers??[],io=ln.flatMap(C=>C.actualPayments??[]),so=["C","Y","N"],$t="R";for(let C of io){let lr=C.paymentStatus?.code;if(!C.paymentDate||!C.inputDate||!C.amount||!C.paymentMethod||!C.recorder||!C.clientGuid||lr&&so.includes(lr)&&C.reversalDate||lr===$t&&!C.reversalDate||C.reversalDate&&lr!==$t||!C.reversalDate&&lr===$t)return false}for(let C of ln){let lr=C.driverType,Lt=Hr.filter(sn=>sn.penaltyNotice?.driverType===lr&&sn.penaltyNotice?.penaltyNoticeStatus?.code==="P"),vt=C.actualPayments&&C.actualPayments.length>0;if(Lt.length>0&&!vt)return false}return true},defaultMessage(){return "Invalid fixed penalty data: Please check notices, actual payments, and related rules."}}});}}n(gn,"ValidateFixedPenalty");function Tn(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(Tn,"ValidateEncounterReqObject");function fn(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(fn,"ValidateJourneyRequired");function Cn(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(Cn,"ValidateCloseProhibitions");function Nn(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,P=i.actualDriverPaperChartCheckQuantity!=null?i.actualDriverPaperChartCheckQuantity:0;return R+P+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(Nn,"ValidateTachoValue");function Dr(){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(Dr,"TransformUKDateTime");function cn(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(cn,"CloseProhibitionsAuditValidator");var tr=class{eventCode;eventShortDescription;eventFullDescription;deletionMarker;fpNoticeIndicator;noticeIndicator};n(tr,"AuditEventBase"),r([classValidator.IsOptional()],tr.prototype,"eventCode",2),r([classValidator.IsOptional()],tr.prototype,"eventShortDescription",2),r([classValidator.IsOptional()],tr.prototype,"eventFullDescription",2),r([classValidator.IsOptional()],tr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],tr.prototype,"fpNoticeIndicator",2),r([classValidator.IsOptional()],tr.prototype,"noticeIndicator",2),tr=r([cn({groups:["closeProhibition"]})],tr);var J=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(()=>tr)],J.prototype,"aevEventCode",2),r([Dr(),u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],J.prototype,"eventTimestamp",2),r([classValidator.IsOptional()],J.prototype,"serverTimestamp",2),r([e({level:4},{groups:["createEncounter"]})],J.prototype,"responsibleFirstName",2),r([e({level:4},{groups:["createEncounter"]})],J.prototype,"responsibleSurname",2),r([e({level:4},{groups:["createEncounter"]})],J.prototype,"responsibleUserId",2),r([e({level:4},{groups:["createEncounter"]})],J.prototype,"eventUnit",2),r([classValidator.IsOptional()],J.prototype,"comments",2),r([classValidator.IsOptional()],J.prototype,"newAuditIndicator",2);function Rn(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=M.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 ${M.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$"}`}}});}}n(Rn,"ValidateContact");function V(){return classTransformer.Transform(({value:l})=>typeof l=="string"?l.toUpperCase():l)}n(V,"ToUpperCase");var Wr=class{static{n(this,"CommonPostAddress");}postTown;postcode};r([classValidator.Matches(/^(?!-|\s)(?!.*[&‘’',.-]{2})[A-Za-z0-9&‘’',. -]{0,20}$/,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(20,{message:"Must be no more than 20 characters in length",groups:["createEncounter"]}),V(),e({level:4},{groups:["createEncounter"]})],Wr.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()],Wr.prototype,"postcode",2);var dr=class dr extends Wr{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(dr.REG_EX_ADDRESS_LINE,{message:"Must match pattern",groups:["createEncounter"]}),classValidator.MaxLength(60,{message:"Must be no more than 60 characters in length",groups:["createEncounter"]}),V(),e({level:4},{groups:["createEncounter"]})],dr.prototype,"addressLine1",2),r([classValidator.IsOptional(),classValidator.Matches(dr.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()],dr.prototype,"addressLine2",2),r([classValidator.IsOptional(),classValidator.Matches(dr.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()],dr.prototype,"addressLine3",2),r([classValidator.IsOptional(),classValidator.Matches(dr.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()],dr.prototype,"addressLine4",2),r([classValidator.IsOptional(),V()],dr.prototype,"ukResident",2);var Xr=dr;var Jr=class{static{n(this,"CommonTradingAs");}tradingAs;address};r([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&@£#$¥,.:;\-]{2})[A-Za-z0-9&@£#$¥,.:; \-]*$/,{groups:["createEncounter"]}),V()],Jr.prototype,"tradingAs",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Xr),e({level:4},{groups:["createEncounter"]})],Jr.prototype,"address",2);var Ur=class{static{n(this,"ContactType");}ctyNumber;ctyDescription;deletionMarker;updateInd;multipleInd;sortSequence};r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"ctyNumber",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"ctyDescription",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"updateInd",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"multipleInd",2),r([e({level:4},{groups:["createEncounter"]})],Ur.prototype,"sortSequence",2);var j=class extends Jr{generatedNumber;farePaid;contactType;forename;dateOfBirth;contactOnNotice;conComment;occupation;phoneNumber;lastUpdate;surname};n(j,"Contact"),r([T()],j.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],j.prototype,"farePaid",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Ur),e({level:4},{groups:["createEncounter"]})],j.prototype,"contactType",2),r([classValidator.IsOptional(),V()],j.prototype,"forename",2),r([classValidator.IsOptional(),u({groups:["createEncounter"]})],j.prototype,"dateOfBirth",2),r([T()],j.prototype,"contactOnNotice",2),r([T()],j.prototype,"conComment",2),r([T()],j.prototype,"occupation",2),r([classValidator.IsOptional(),classValidator.Length(0,35,{groups:["createEncounter"],message:"Must be no more than 35 characters in length"})],j.prototype,"phoneNumber",2),r([e({level:4},{groups:["createEncounter"]}),u({groups:["createEncounter"]})],j.prototype,"lastUpdate",2),r([T(),V()],j.prototype,"surname",2),j=r([Rn({groups:["createEncounter"]})],j);var mr=class extends Wr{static{n(this,"RteArea");}code;areaDescription;address1;address2;address3;address4;email;enforcementArea};r([classValidator.IsOptional()],mr.prototype,"code",2),r([classValidator.IsOptional()],mr.prototype,"areaDescription",2),r([classValidator.IsOptional()],mr.prototype,"address1",2),r([classValidator.IsOptional()],mr.prototype,"address2",2),r([classValidator.IsOptional()],mr.prototype,"address3",2),r([classValidator.IsOptional()],mr.prototype,"address4",2),r([classValidator.IsOptional()],mr.prototype,"email",2),r([classValidator.IsOptional()],mr.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([Fr()],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(()=>mr)],U.prototype,"rteArea",2);var Br=class{static{n(this,"StoppingOfficer");}userId;firstName;surname;examinerType};r([classValidator.IsOptional()],Br.prototype,"userId",2),r([classValidator.IsOptional()],Br.prototype,"firstName",2),r([classValidator.IsOptional()],Br.prototype,"surname",2),r([classValidator.IsOptional()],Br.prototype,"examinerType",2);var Lr=class{static{n(this,"DangerousCheckListItemDetailBase");}generatedNumber;checkListItem;questionText;sectionHeading;effectiveFromDate;effectiveToDate};r([e({level:4},{groups:["createEncounter"]})],Lr.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],Lr.prototype,"checkListItem",2),r([e({level:4},{groups:["createEncounter"]})],Lr.prototype,"questionText",2),r([e({level:4},{groups:["createEncounter"]})],Lr.prototype,"sectionHeading",2),r([u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],Lr.prototype,"effectiveFromDate",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],Lr.prototype,"effectiveToDate",2);var Ee=class{static{n(this,"DangerousCheckListItemBase");}checkListItemDetail;name;description};r([classValidator.ValidateNested(),classTransformer.Type(()=>Lr),e({level:4},{groups:["createEncounter"]})],Ee.prototype,"checkListItemDetail",2),r([e({level:4},{groups:["createEncounter"]})],Ee.prototype,"name",2),r([e({level:4},{groups:["createEncounter"]})],Ee.prototype,"description",2);var Se=class{static{n(this,"DangerousContainerTypeBase");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Se.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],Se.prototype,"deletionMarker",2);var Tr=class{static{n(this,"DangerousCheckListBase");}totQtyDangerousGoods;categoryOfRisk;limitExceeded;miscRemarks;unNumber;carriedOutBy;checkListItems};r([e({level:4},{groups:["createEncounter"]})],Tr.prototype,"totQtyDangerousGoods",2),r([e({level:4},{groups:["createEncounter"]})],Tr.prototype,"categoryOfRisk",2),r([e({level:4},{groups:["createEncounter"]})],Tr.prototype,"limitExceeded",2),r([classValidator.IsOptional()],Tr.prototype,"miscRemarks",2),r([classValidator.MaxLength(300,{message:"Must be no more than 300 characters in length"}),e({level:4},{groups:["createEncounter"]})],Tr.prototype,"unNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Se),e({level:4},{groups:["createEncounter"]})],Tr.prototype,"carriedOutBy",2),r([classValidator.ValidateNested({each:true}),classTransformer.Type(()=>Ee),classValidator.IsArray(),e({level:4},{groups:["createEncounter"]})],Tr.prototype,"checkListItems",2);var nr=class{static{n(this,"CommonDeletion");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],nr.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],nr.prototype,"deletionMarker",2);var de=class extends nr{static{n(this,"DefectProsecution");}code;prosecutionConsidered;sequenceNumber};r([e({level:2},{groups:["createEncounter"]})],de.prototype,"code",2),r([e({level:2},{groups:["createEncounter"]})],de.prototype,"prosecutionConsidered",2),r([e({level:2},{groups:["createEncounter"]})],de.prototype,"sequenceNumber",2);var ge=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(ge,"IsValidLicenceNumberForUKConstraint"),ge=r([classValidator.ValidatorConstraint({name:"IsValidLicenceNumberForUK",async:false})],ge);function vn(l){return (o,t)=>{classValidator.registerDecorator({target:o.constructor,propertyName:t,options:l,validator:ge});}}n(vn,"IsValidLicenceNumberForUK");var $=class{static{n(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};r([e({level:4},{groups:["createEncounter"]})],$.prototype,"drivingLicenceAuthority",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"irlCountry",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"vehicleIndicator",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"cardIssuingAuthorityInd",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"intelligenceSubjectInd",2),r([classValidator.IsOptional()],$.prototype,"intRegNumberCode",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"nonVosa",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"irlCode",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],$.prototype,"foreignOpNationalityInd",2),r([classValidator.IsOptional()],$.prototype,"inrNationalityInd",2);var Mr=class{static{n(this,"PaymentReversalReason");}code;description;sequenceNum;deletionMarker;usageInd};r([classValidator.IsOptional()],Mr.prototype,"code",2),r([classValidator.IsOptional()],Mr.prototype,"description",2),r([classValidator.IsOptional()],Mr.prototype,"sequenceNum",2),r([classValidator.IsOptional()],Mr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],Mr.prototype,"usageInd",2);var vr=class{static{n(this,"PaymentStatus");}code;description;sequenceNum;deletionMarker;cashFlag;callCentreFlag;chequeFlag};r([classValidator.IsOptional()],vr.prototype,"description",2),r([classValidator.IsOptional()],vr.prototype,"sequenceNum",2),r([classValidator.IsOptional()],vr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],vr.prototype,"cashFlag",2),r([classValidator.IsOptional()],vr.prototype,"callCentreFlag",2),r([classValidator.IsOptional()],vr.prototype,"chequeFlag",2);var q=class{static{n(this,"ActualPayment");}paymentDate;inputDate;amount;paymentMethod;sortCode;chequeNumber;reversalDate;recorder;reverser;pvrCode;clientGuid;callCentreReference;paymentStatus};r([u({groups:["createEncounter"]})],q.prototype,"paymentDate",2),r([u({groups:["createEncounter"]})],q.prototype,"inputDate",2),r([classValidator.IsOptional()],q.prototype,"sortCode",2),r([classValidator.IsOptional()],q.prototype,"chequeNumber",2),r([classValidator.IsOptional(),u({groups:["createEncounter"]})],q.prototype,"reversalDate",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],q.prototype,"recorder",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U)],q.prototype,"reverser",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Mr)],q.prototype,"pvrCode",2),r([classValidator.IsOptional()],q.prototype,"clientGuid",2),r([classValidator.IsOptional()],q.prototype,"callCentreReference",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>vr)],q.prototype,"paymentStatus",2);var Te=class{static{n(this,"DetailsOrigin");}driverDetailsOriginCode;originDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Te.prototype,"driverDetailsOriginCode",2),r([e({level:4},{groups:["createEncounter"]})],Te.prototype,"originDescription",2),r([e({level:4},{groups:["createEncounter"]})],Te.prototype,"deletionMarker",2);var Ge=class{static{n(this,"LicenceCategory");}categoryCode;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Ge.prototype,"categoryCode",2),r([e({level:4},{groups:["createEncounter"]})],Ge.prototype,"deletionMarker",2);var fe=class{static{n(this,"LicenceType");}licenceTypeCode;licenceTypeDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],fe.prototype,"licenceTypeCode",2),r([e({level:4},{groups:["createEncounter"]})],fe.prototype,"licenceTypeDescription",2),r([e({level:4},{groups:["createEncounter"]})],fe.prototype,"deletionMarker",2);var N=class{static{n(this,"Drivers");}detailsOnNotice;partOfEncounter;theSourceDriverType;driverOnNotice;birthPlace;dateOfBirth;forename;surname;lastUpdate;licenceIssueNo;registeredKeeper;address;phoneNumber;detailsOrigin;nationality;licenceType;licenceCategory;sex;driverType;amount;passportNumber;occupation;driverLicNum;documentPath;linkedNoticeId;driverCardNumber;drivingLicenceStatus;drivingLicenceIssueDate;odrExhibitNumber;generatedNumber;agencyDriver;actualPayments};r([e({level:4},{groups:["createEncounter"]})],N.prototype,"detailsOnNotice",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"partOfEncounter",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"theSourceDriverType",2),r([classValidator.IsOptional()],N.prototype,"driverOnNotice",2),r([classValidator.IsOptional(),classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[‘’',.-]{2})[A-Za-z‘’',. -]*$/,{message:"Birth Place must consist of characters A-Z, hyphen, full-stop or apostrophe",groups:["createEncounter"]})],N.prototype,"birthPlace",2),r([u({groups:["createEncounter"]}),e({level:4,exceptions:[2]},{groups:["createEncounter"]})],N.prototype,"dateOfBirth",2),r([classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[‘’',.-]{2})[A-Za-z‘’',. -]*$/,{message:"forename must consist of characters space, A-Z, hyphen or apostrophe.",groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],N.prototype,"forename",2),r([classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[‘’',.-]{2})[A-Za-z‘’',. -]*$/,{message:"surname must consist of characters space, A-Z, hyphen or apostrophe.",groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],N.prototype,"surname",2),r([u({groups:["createEncounter"]}),e({level:4},{groups:["createEncounter"]})],N.prototype,"lastUpdate",2),r([classValidator.IsOptional(),classValidator.Matches(/^(?:[0-9]|[1-9][0-9]{1,3}|[12][0-9]{4}|30000)$/,{message:"licenceIssueNo must be a numeric string between 0 and 30000",groups:["createEncounter"]})],N.prototype,"licenceIssueNo",2),r([classValidator.IsOptional()],N.prototype,"registeredKeeper",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>Xr),e({roles:["TRAFFIC"]},{groups:["createEncounter"]})],N.prototype,"address",2),r([classValidator.IsOptional(),classValidator.MaxLength(35,{groups:["createEncounter"]}),classValidator.Matches(/\d{0,35}| {0,35}/,{groups:["createEncounter"]})],N.prototype,"phoneNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Te),e({level:4},{groups:["createEncounter"]})],N.prototype,"detailsOrigin",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>$)],N.prototype,"nationality",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>fe)],N.prototype,"licenceType",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Ge)],N.prototype,"licenceCategory",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"sex",2),r([e({level:4},{groups:["createEncounter"]})],N.prototype,"driverType",2),r([classTransformer.Transform(({value:o})=>o!==null?Number.parseInt(o,10):null),e({level:4},{groups:["createEncounter"]})],N.prototype,"amount",2),r([classValidator.IsOptional(),classValidator.MaxLength(12,{groups:["createEncounter"]}),classValidator.Matches(/^[a-zA-Z0-9]*$/,{message:"PassportNumber must consist of characters space, A-Z or 0-9.",groups:["createEncounter"]})],N.prototype,"passportNumber",2),r([classValidator.IsOptional(),classValidator.MaxLength(50,{groups:["createEncounter"]})],N.prototype,"occupation",2),r([classValidator.IsOptional(),classValidator.MaxLength(16,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\\s)(?!.*[&‘’\\',.()\/-]{2})[A-Za-z0-9 &‘’\\',.()\/-]*$/,{groups:["createEncounter"]}),vn({groups:["createEncounter"]})],N.prototype,"driverLicNum",2),r([classValidator.IsOptional()],N.prototype,"documentPath",2),r([classValidator.IsOptional()],N.prototype,"linkedNoticeId",2),r([classValidator.IsOptional()],N.prototype,"driverCardNumber",2),r([classValidator.IsOptional()],N.prototype,"drivingLicenceStatus",2),r([T(),u({groups:["createEncounter"]})],N.prototype,"drivingLicenceIssueDate",2),r([classValidator.IsOptional()],N.prototype,"odrExhibitNumber",2),r([classValidator.IsOptional()],N.prototype,"generatedNumber",2),r([classValidator.IsOptional()],N.prototype,"agencyDriver",2),r([classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>q)],N.prototype,"actualPayments",2);var re=class{static{n(this,"JourneyType");}generatedNumber;rank;deletionMarker;description};r([e({level:4},{groups:["createEncounter"]})],re.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],re.prototype,"rank",2),r([e({level:4},{groups:["createEncounter"]})],re.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],re.prototype,"description",2);var ce=class{static{n(this,"PortOfExit");}portCode;portDescription;deletionMarker};r([classTransformer.Transform(({value:o})=>o?.toString()),e({level:4},{groups:["createEncounter"]})],ce.prototype,"portCode",2),r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"portDescription",2),r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"deletionMarker",2);var yr=class yr{static{n(this,"Journey");}static REG_EX_JOURNEY=/^(?!-|\\s)(?!.*[&’',.\-]{2})[A-Za-z0-9&‘’',. \-]*$/;goodsCarried;journeyStartLctn;journeyEndLocatn;journeyType;portOfExit};r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(yr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],yr.prototype,"goodsCarried",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(yr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],yr.prototype,"journeyStartLctn",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(yr.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],yr.prototype,"journeyEndLocatn",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>re),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],yr.prototype,"journeyType",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>ce)],yr.prototype,"portOfExit",2);var Ft=yr;var ee=class extends nr{static{n(this,"CommonCode");}code;name};r([e({level:4},{groups:["createEncounter"]})],ee.prototype,"code",2),r([e({level:4},{groups:["createEncounter"]})],ee.prototype,"name",2);var br=class extends ee{static{n(this,"EncounterReason");}sequenceNumber;fkCtpCheckType;pg35EcRequired;useOffenceFlow;shortCode;version};r([e({level:2},{groups:["createEncounter"]})],br.prototype,"sequenceNumber",2),r([e({level:2},{groups:["createEncounter"]})],br.prototype,"fkCtpCheckType",2),r([e({level:2},{groups:["createEncounter"]})],br.prototype,"pg35EcRequired",2),r([e({level:2},{groups:["createEncounter"]})],br.prototype,"useOffenceFlow",2),r([e({level:2},{groups:["createEncounter"]})],br.prototype,"shortCode",2),r([e({level:2},{groups:["createEncounter"]})],br.prototype,"version",2);var je=class extends ee{static{n(this,"TextType");}withinEncounter;sortSequence};r([e({level:4},{groups:["createEncounter"]})],je.prototype,"withinEncounter",2),r([classValidator.IsOptional()],je.prototype,"sortSequence",2);var $e=class{static{n(this,"EncounterTexts");}textType;text};r([classValidator.ValidateNested(),classTransformer.Type(()=>je),e({level:4},{groups:["createEncounter"]})],$e.prototype,"textType",2),r([e({level:4},{groups:["createEncounter"]})],$e.prototype,"text",2);var te=class{static{n(this,"CommonDescription");}code;description};r([T()],te.prototype,"code",2),r([T()],te.prototype,"description",2);var Re=class extends te{static{n(this,"CapturedEthnicity");}category;deletionMarker;sequenceNumber};r([e({level:4},{groups:["createEncounter"]})],Re.prototype,"category",2),r([e({level:4},{groups:["createEncounter"]})],Re.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Re.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(()=>Re),e({level:4},{groups:["createEncounter"]})],ze.prototype,"capturedEthnicity",2);var Ke=class{static{n(this,"EthnicityInfo");}isEthnicDataProvided;observedEthnicityInfo};r([classValidator.IsBoolean(),e({level:4},{groups:["createEncounter"]})],Ke.prototype,"isEthnicDataProvided",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>ze)],Ke.prototype,"observedEthnicityInfo",2);var pt=class extends nr{static{n(this,"InspectionType");}inspectionLevel};r([e({level:2},{groups:["createEncounter"]})],pt.prototype,"inspectionLevel",2);function hn(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(hn,"ValidateSetupUserInput");var S=class{rclCsiGeneratedNumber;checkSiteType;csiType;csiName;road;direction;townOrVillage;couDescription;rarCode;ifkSetupEmpId;setupUser;lastUpdate;clientGuid;deletionMarker};n(S,"Location"),r([classValidator.IsOptional(),classValidator.MaxLength(10,{groups:["createEncounter"]})],S.prototype,"rclCsiGeneratedNumber",2),r([classValidator.MaxLength(3,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"checkSiteType",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"csiType",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"csiName",2),r([classValidator.MaxLength(15,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"road",2),r([classValidator.IsOptional(),classValidator.MaxLength(3,{groups:["createEncounter"]})],S.prototype,"direction",2),r([classValidator.MaxLength(60,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"townOrVillage",2),r([classValidator.IsOptional(),classValidator.MaxLength(60,{groups:["createEncounter"]})],S.prototype,"couDescription",2),r([e({level:2},{groups:["createEncounter"]})],S.prototype,"rarCode",2),r([classValidator.IsOptional(),classValidator.MaxLength(30,{groups:["createEncounter"]})],S.prototype,"ifkSetupEmpId",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],S.prototype,"setupUser",2),r([u({groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"lastUpdate",2),r([classValidator.IsOptional(),classValidator.MaxLength(36,{groups:["createEncounter"]})],S.prototype,"clientGuid",2),r([classValidator.MaxLength(1,{groups:["createEncounter"]}),e({level:2},{groups:["createEncounter"]})],S.prototype,"deletionMarker",2),S=r([hn({groups:["createEncounter"]})],S);function In(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(In,"ValidateDeleteEncounterMotor");function _n(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(),P=i.vehicleIdType.shortCode.toLowerCase();i.nationality.irlCode.toLowerCase();let Hr=i.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",X=0,xr=M.getInstance().getEncounterType();return ["vrm","vin"].includes(P)||X++,xr!==2&&i.odometerReading==null&&X++,(xr===2||i.actionCode?.toUpperCase()==="C")&&i.odometerReadingUnit==null&&X++,Hr&&X++,/^[a-z0-9]+$/i.test(b)||X++,X===0},defaultMessage(t){return "Motor requires VehicleId, Nationality, VehicleIdType and RoadsideVehicleType. Odometer or format may also be invalid."}}});}}n(_n,"ValidateMotorObject");function xn(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=M.getInstance().getEncounterType();if(!g)return false;let b=g.toLowerCase()==="category t",P=R===2;return !(!b&&!P&&i.bodyType==null)},defaultMessage(t){return 'bodyType must not be null unless body type is "category T" or encounter level is SIFT'}}});}}n(xn,"ValidateBodyType");var Ae=class{static{n(this,"PoliceDefect");}sequenceNumber;imNumber;defectSeverity};r([classValidator.IsOptional()],Ae.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],Ae.prototype,"imNumber",2),r([classValidator.IsOptional()],Ae.prototype,"defectSeverity",2);var Oe=class{static{n(this,"CommonVehicleWeights");}actGrossWeight;permGrossWeight;designGrossWeight};r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],Oe.prototype,"actGrossWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],Oe.prototype,"permGrossWeight",2),r([classValidator.IsOptional()],Oe.prototype,"designGrossWeight",2);var Cr=class Cr extends Oe{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"]})],Cr.prototype,"vehicleAxles",2),r([T()],Cr.prototype,"vehicleColour",2),r([classValidator.IsOptional(),classValidator.Matches(Cr.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),V()],Cr.prototype,"vehicleModel",2),r([classValidator.Matches(Cr.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),V(),e({level:1},{groups:["createEncounter"]})],Cr.prototype,"vehicleMake",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>$),e({level:4},{groups:["createEncounter"]})],Cr.prototype,"nationality",2),r([classTransformer.Type(()=>Ae)],Cr.prototype,"policeDefects",2),r([e({level:4},{groups:["createEncounter"]})],Cr.prototype,"nationalitySummary",2);var Ye=Cr;var Ue=class{static{n(this,"Part");}internalNumber;partMake;deletionMarker};r([classValidator.IsOptional()],Ue.prototype,"internalNumber",2),r([classValidator.IsOptional()],Ue.prototype,"partMake",2),r([classValidator.IsOptional()],Ue.prototype,"deletionMarker",2);var hl=/^(?!^%)(?!-|\s)(?!.*[&@£#$()'*,.:;+-]{4})[A-Za-z0-9\/&@£#$%()'*,.:;+ -]*$/,c=class{static{n(this,"Defect");}action;additionalText;clearanceDate;deviationComment;adeEnd;nonCmplnceRsn;positionOnAxle;sequenceNumber;serialNumber;side;adeSize;verticalPosition;make;actualAction;axleNumber;mechDefctIndictr;sigMntncFailure;status;part;maintenance;defectCatDetailDescription;defectSectionDetailDescription;defectSubDetailDescription;defectDetailDescription;defectSubDescription;severityOfDefectDescription;dudGenNum;sodGeneratedNumber;partNumber;sectionNumber};r([classValidator.IsOptional()],c.prototype,"action",2),r([classValidator.IsOptional(),classValidator.Matches(hl,{groups:["createEncounter"],message:"Invalid format"}),classValidator.MaxLength(254,{groups:["createEncounter"],message:"Must be no more than 254 characters in length"})],c.prototype,"additionalText",2),r([classValidator.IsOptional()],c.prototype,"clearanceDate",2),r([classValidator.IsOptional()],c.prototype,"deviationComment",2),r([classValidator.IsOptional()],c.prototype,"adeEnd",2),r([classValidator.IsOptional()],c.prototype,"nonCmplnceRsn",2),r([classValidator.IsOptional()],c.prototype,"positionOnAxle",2),r([classValidator.IsOptional()],c.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],c.prototype,"serialNumber",2),r([classValidator.IsOptional()],c.prototype,"side",2),r([classValidator.IsOptional()],c.prototype,"adeSize",2),r([classValidator.IsOptional()],c.prototype,"verticalPosition",2),r([classValidator.IsOptional()],c.prototype,"make",2),r([classValidator.IsOptional()],c.prototype,"actualAction",2),r([classValidator.IsOptional()],c.prototype,"axleNumber",2),r([classValidator.IsOptional()],c.prototype,"mechDefctIndictr",2),r([classValidator.IsOptional()],c.prototype,"sigMntncFailure",2),r([classValidator.IsOptional()],c.prototype,"status",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Ue),classValidator.IsOptional()],c.prototype,"part",2),r([classValidator.IsOptional()],c.prototype,"maintenance",2),r([classValidator.IsOptional()],c.prototype,"defectCatDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectSectionDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectSubDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectDetailDescription",2),r([classValidator.IsOptional()],c.prototype,"defectSubDescription",2),r([classValidator.IsOptional()],c.prototype,"severityOfDefectDescription",2),r([classValidator.IsOptional()],c.prototype,"dudGenNum",2),r([classValidator.IsOptional()],c.prototype,"sodGeneratedNumber",2),r([classValidator.IsOptional()],c.prototype,"partNumber",2),r([classValidator.IsOptional()],c.prototype,"sectionNumber",2);var Sr=class{static{n(this,"SignificanceReason");}generatedNumber;fullReason;shortReason;effectiveFrom;effectiveTo};r([classValidator.IsOptional()],Sr.prototype,"generatedNumber",2),r([classValidator.IsOptional()],Sr.prototype,"fullReason",2),r([classValidator.IsOptional()],Sr.prototype,"shortReason",2),r([u(),classValidator.IsOptional()],Sr.prototype,"effectiveFrom",2),r([u(),classValidator.IsOptional()],Sr.prototype,"effectiveTo",2);var Y=class{static{n(this,"DefectSummary");}action;endorsement;lastUpdate;sgnfcanceReason;updateUserId;fiftyPercentRuleMarker;overallProhibitionSeverity;maintenanceFailureMarker;shortReason;deviationDefectCount;cat99DefectCount};r([classValidator.IsOptional()],Y.prototype,"action",2),r([classValidator.IsOptional()],Y.prototype,"endorsement",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],Y.prototype,"lastUpdate",2),r([classValidator.IsOptional()],Y.prototype,"sgnfcanceReason",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],Y.prototype,"updateUserId",2),r([classValidator.IsOptional()],Y.prototype,"fiftyPercentRuleMarker",2),r([classValidator.IsOptional()],Y.prototype,"overallProhibitionSeverity",2),r([classValidator.IsOptional()],Y.prototype,"maintenanceFailureMarker",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Sr)],Y.prototype,"shortReason",2),r([classValidator.IsOptional()],Y.prototype,"deviationDefectCount",2),r([classValidator.IsOptional()],Y.prototype,"cat99DefectCount",2);var kr=class{static{n(this,"FuelTypeBase");}fuelCode;description;otherTestInd;displayOrder;deletionMarker};r([classValidator.IsOptional()],kr.prototype,"fuelCode",2),r([classValidator.IsOptional()],kr.prototype,"description",2),r([classValidator.IsOptional()],kr.prototype,"otherTestInd",2),r([classValidator.IsOptional()],kr.prototype,"displayOrder",2),r([classValidator.IsOptional()],kr.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(),Dr()],I.prototype,"petrolClbrtnDate",2),r([classValidator.IsOptional(),Dr()],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(()=>kr)],I.prototype,"fuelType",2),r([classValidator.IsOptional()],I.prototype,"otherSerialNum",2),r([classValidator.IsOptional(),Dr()],I.prototype,"otherClbrtnDate",2),r([classValidator.IsOptional()],I.prototype,"clearIndicator",2);function Pn(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(Pn,"ValidateCloseProhibitionsNotice");function jn(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.inputDate!=null;retu