@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 101 kB
JavaScript
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var nn=Object.defineProperty;var to=Object.getOwnPropertyDescriptor;var n=(l,o)=>nn(l,"name",{value:o,configurable:true});var r=(l,o,t,s)=>{for(var i=s>1?void 0:s?to(o,t):o,E=l.length-1,g;E>=0;E--)(g=l[E])&&(i=(s?g(o,t,i):g(i))||i);return s&&i&&nn(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 ue=class{validate(o,t){let s=t.constraints[0],i=M.getInstance(),E=i.getEncounterType(),g=i.getExaminerOfficerType();return s.level===0||s.exceptions?.includes(E)||s.level!==void 0&&s.level>E||s.roles?.length&&!s.roles.includes(g)&&!s.roles.includes("ANY")?true:o==null?false:typeof o=="string"?s.allowEmpty?true:o.trim().length>0:Array.isArray(o)?o.length===0?false:o.every((R,y)=>R==null?false:Object.entries(R).every(([P,Er])=>typeof Er=="string"?Er.trim().length>0:Er!=null)):true}};n(ue,"MandatoryFieldConstraint"),ue=r([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],ue);function e(l,o){return (t,s)=>{classValidator.registerDecorator({name:"MandatoryField",target:t.constructor,propertyName:s,constraints:[l],options:o,validator:ue});}}n(e,"MandatoryField");function xr(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(xr,"IsNullableNumber");var pe=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(pe,"UKDateFormatValidator"),pe=r([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],pe);function u(l){return (o,t)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:o.constructor,propertyName:t,options:l,validator:pe});}}n(u,"ValidateUKDateFormat");function on(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounter",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{return i.generatedNumber!=null}catch(E){return console.error("Failed to validate DeleteEncounter on EncounterReq:",E),false}},defaultMessage(t){return "generatedNumber cannot be null when deleting an existing encounter."}}});}}n(on,"ValidateDeleteEncounter");function ln(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterAudit",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!i.audits)return false;let E=i.audits;for(let g of E)if(g&&g.aevEventCode&&(g.aevEventCode.eventShortDescription?.toUpperCase()==="DEL"||g.aevEventCode.eventShortDescription?.toUpperCase()==="TFC"))return true;return false},defaultMessage(t){return "AuditBase aevEventCode must have description values of DEL and TFC at minimum."}}});}}n(ln,"ValidateDeleteEncounterAudit");function sn(l){return o=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterEncTexts",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i||!i.encounterTexts)return false;let E=i.encounterTexts;for(let g of E)if(g?.textType&&g.textType.code?.toUpperCase()==="DEL")return true;return false},defaultMessage(t){return "Encounter Texts TextType code must have value of DEL"}}});}}n(sn,"ValidateDeleteEncounterEncTexts");function an(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=Eo(i);function y(ae){return g.some(er=>er.driverType===ae&&er.actualPayments&&er.actualPayments.length>0)}n(y,"driverHasActualPayment");function P(ae){return R.some(er=>er.penaltyNotice&&er.penaltyNotice.penaltyNoticeStatus?.code==="P"&&er.penaltyNotice.driverType===ae)}n(P,"driverHasPenaltyNoticePaid");function Er(ae){return R.some(er=>er.penaltyNotice&&er.penaltyNotice.driverType===ae)}n(Er,"driverHasFixedPenalty");let Yr="A",X="O",_r=y(Yr),Mt=y(X),nt=P(Yr),St=P(X),xe=Er(Yr),Fe=Er(X);return !(_r&&nt&&xe||Mt&&St&&Fe)},defaultMessage(t){return "Cannot delete encounter with paid fixed penalty"}}});}}n(an,"ValidateIncompleteEncDeleteFixedPenalty");function Eo(l){let o=l.motor?.notices||[],t=l.trailer1?.notices||[],s=l.trailer2?.notices||[];return [...o,...t,...s]}n(Eo,"getAllNotices");function un(l){return o=>{classValidator.registerDecorator({name:"ValidateEthnicity",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=i.ethnicityInfo!=null;Array.isArray(i.encounterTexts)&&i.encounterTexts.length>0;let R=Array.isArray(i.encounterTexts)&&i.encounterTexts.some(y=>y?.textType?.code?.toUpperCase()==="EMR");return !!(E||R)},defaultMessage(t){return "A reason must be given when ethnicity is not provided"}}});}}n(un,"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 pn(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??[],y=i.trailer2?.notices??[],P=[...g,...R,...y],Er=["BFPN01","FFPN01","FDEN01"],Yr=P.filter(C=>C.noticeType?.code&&Er.includes(C.noticeType.code)),X=P.filter(C=>C.noticeType?.code==="FFPN01"),_r=P.filter(C=>C.noticeType?.code==="FDEN01"),Mt=Yr.filter(C=>C.noticeStatus==="W"),nt="NO IMMEDIATE PAYMENT",St="FP WITHDRAWAL REASON";function xe(C){return (i.encounterTexts??[]).some(lr=>lr.textType?.name?.trim().toUpperCase()===C)}n(xe,"encounterTextCorrect");function Fe(C){return C.every(lr=>["P","W"].includes(lr.penaltyNotice?.penaltyNoticeStatus?.code??""))}n(Fe,"allNoticesPaid");function ae(C,lr){return C.some(Rt=>lr.some(At=>Rt.penaltyNotice?.driverType&&At.penaltyNotice?.driverType&&Rt.penaltyNotice.driverType===At.penaltyNotice.driverType))}n(ae,"sameDriver");let er=X.some(C=>C.noticeStatus!=="W"),kt=_r.some(C=>C.noticeStatus!=="W");if(er&&!kt&&!Fe(X)&&!xe(nt)||kt&&!er&&!Fe(_r)&&!xe(nt)||er&&kt&&!ae(X,_r)&&(!Fe(X)||!Fe(_r))&&!xe(nt)||Mt.length>0&&!xe(St))return false;let en=i.drivers??[],ro=en.flatMap(C=>C.actualPayments??[]),eo=["C","Y","N"],Gt="R";for(let C of ro){let lr=C.paymentStatus?.code;if(!C.paymentDate||!C.inputDate||!C.amount||!C.paymentMethod||!C.recorder||!C.clientGuid||lr&&eo.includes(lr)&&C.reversalDate||lr===Gt&&!C.reversalDate||C.reversalDate&&lr!==Gt||!C.reversalDate&&lr===Gt)return false}for(let C of en){let lr=C.driverType,Rt=Yr.filter(tn=>tn.penaltyNotice?.driverType===lr&&tn.penaltyNotice?.penaltyNoticeStatus?.code==="P"),At=C.actualPayments&&C.actualPayments.length>0;if(Rt.length>0&&!At)return false}return true},defaultMessage(){return "Invalid fixed penalty data: Please check notices, actual payments, and related rules."}}});}}n(pn,"ValidateFixedPenalty");function mn(l){return o=>{classValidator.registerDecorator({name:"ValidateEncounterReqObject",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let E=i.motor==null,g=i.trailer1==null;return !(E&&g)}catch(E){return console.error("Failed to validate EncounterReqObject:",E),false}},defaultMessage(t){return "At least either motor or trailer1 must be present during an encounter."}}});}}n(mn,"ValidateEncounterReqObject");function En(l){return o=>{classValidator.registerDecorator({name:"ValidateJourneyRequired",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let E=i.encounterReason,g=i.journey,R=!1;return E&&E.name&&(R=!E.name.match(/^(ANNUAL TEST|VE OPERATOR VISIT)$/)),R?!!(g&&g.journeyStartLctn!=null&&g.journeyEndLocatn!=null&&g.goodsCarried!=null):!0}catch(E){return console.error("Failed to validate JourneyRequired on EncounterReq:",E),false}},defaultMessage(t){return "Journey start, end locations and goodsCarried are required for this encounter."}}});}}n(En,"ValidateJourneyRequired");function dn(l){return o=>{classValidator.registerDecorator({name:"ValidateCloseProhibitions",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{return i.generatedNumber!=null}catch(E){return console.error("Failed to validate CloseProhibitions on EncounterReq:",E),false}},defaultMessage(t){return "generatedNumber cannot be null when closing an existing prohibition."}}});}}n(dn,"ValidateCloseProhibitions");function gn(l){return o=>{classValidator.registerDecorator({name:"ValidateTachoValue",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;try{let E=i.tachoCheckQuantity;if(E!=null){let g=i.otherDriverDigitacCheckQuantity!=null?i.otherDriverDigitacCheckQuantity:0,R=i.actualDriverDigitacCheckQuantity!=null?i.actualDriverDigitacCheckQuantity:0,y=i.otherDriverPaperChartCheckQuantity!=null?i.otherDriverPaperChartCheckQuantity:0,P=i.actualDriverPaperChartCheckQuantity!=null?i.actualDriverPaperChartCheckQuantity:0;return R+P+y+g===E}return !0}catch(E){return console.error("Failed to validate EncounterReq tacho check quantities",E),false}},defaultMessage(t){return "tachoCheckQuantity must equal the sum of actualDriverDigitacCheckQuantity, actualDriverPaperChartCheckQuantity, otherDriverDigitacCheckQuantity, and otherDriverPaperChartCheckQuantity."}}});}}n(gn,"ValidateTachoValue");function Fr(){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(Fr,"TransformUKDateTime");function Tn(l,o=[]){return t=>{classValidator.registerDecorator({name:"CloseProhibitionsAuditValidator",target:t,propertyName:void 0,options:l,validator:{validate(s,i){return i.object?.eventFullDescription?.trim().toUpperCase()==="CMP"},defaultMessage(s){return '"eventFullDescription" must be "CMP".'}}});}}n(Tn,"CloseProhibitionsAuditValidator");var 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([Tn({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([Fr(),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 fn(l){return o=>{classValidator.registerDecorator({name:"ValidateContact",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=M.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$",g=new RegExp(E),R=true;return i.forename!=null&&(g.test(i.forename)||(R=false)),i.surname!=null&&(g.test(i.surname)||(R=false)),R},defaultMessage(t){return `forename and surname must match ${M.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$"}`}}});}}n(fn,"ValidateContact");function V(){return classTransformer.Transform(({value:l})=>typeof l=="string"?l.toUpperCase():l)}n(V,"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"]}),V(),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"]}),V()],Qr.prototype,"postcode",2);var dr=class dr 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(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 Wr=dr;var Xr=class{static{n(this,"CommonTradingAs");}tradingAs;address};r([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&@£#$¥,.:;\-]{2})[A-Za-z0-9&@£#$¥,.:; \-]*$/,{groups:["createEncounter"]}),V()],Xr.prototype,"tradingAs",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Wr),e({level:4},{groups:["createEncounter"]})],Xr.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 Xr{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([fn({groups:["createEncounter"]})],j);var mr=class extends Qr{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([xr()],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 qr=class{static{n(this,"StoppingOfficer");}userId;firstName;surname;examinerType};r([classValidator.IsOptional()],qr.prototype,"userId",2),r([classValidator.IsOptional()],qr.prototype,"firstName",2),r([classValidator.IsOptional()],qr.prototype,"surname",2),r([classValidator.IsOptional()],qr.prototype,"examinerType",2);var 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 me=class{static{n(this,"DangerousCheckListItemBase");}checkListItemDetail;name;description};r([classValidator.ValidateNested(),classTransformer.Type(()=>Lr),e({level:4},{groups:["createEncounter"]})],me.prototype,"checkListItemDetail",2),r([e({level:4},{groups:["createEncounter"]})],me.prototype,"name",2),r([e({level:4},{groups:["createEncounter"]})],me.prototype,"description",2);var Me=class{static{n(this,"DangerousContainerTypeBase");}description;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Me.prototype,"description",2),r([e({level:4},{groups:["createEncounter"]})],Me.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(()=>Me),e({level:4},{groups:["createEncounter"]})],Tr.prototype,"carriedOutBy",2),r([classValidator.ValidateNested({each:true}),classTransformer.Type(()=>me),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 Ee=class extends nr{static{n(this,"DefectProsecution");}code;prosecutionConsidered;sequenceNumber};r([e({level:2},{groups:["createEncounter"]})],Ee.prototype,"code",2),r([e({level:2},{groups:["createEncounter"]})],Ee.prototype,"prosecutionConsidered",2),r([e({level:2},{groups:["createEncounter"]})],Ee.prototype,"sequenceNumber",2);var de=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(de,"IsValidLicenceNumberForUKConstraint"),de=r([classValidator.ValidatorConstraint({name:"IsValidLicenceNumberForUK",async:false})],de);function An(l){return (o,t)=>{classValidator.registerDecorator({target:o.constructor,propertyName:t,options:l,validator:de});}}n(An,"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 Dr=class{static{n(this,"PaymentReversalReason");}code;description;sequenceNum;deletionMarker;usageInd};r([classValidator.IsOptional()],Dr.prototype,"code",2),r([classValidator.IsOptional()],Dr.prototype,"description",2),r([classValidator.IsOptional()],Dr.prototype,"sequenceNum",2),r([classValidator.IsOptional()],Dr.prototype,"deletionMarker",2),r([classValidator.IsOptional()],Dr.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(()=>Dr)],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 ge=class{static{n(this,"DetailsOrigin");}driverDetailsOriginCode;originDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],ge.prototype,"driverDetailsOriginCode",2),r([e({level:4},{groups:["createEncounter"]})],ge.prototype,"originDescription",2),r([e({level:4},{groups:["createEncounter"]})],ge.prototype,"deletionMarker",2);var ke=class{static{n(this,"LicenceCategory");}categoryCode;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],ke.prototype,"categoryCode",2),r([e({level:4},{groups:["createEncounter"]})],ke.prototype,"deletionMarker",2);var Te=class{static{n(this,"LicenceType");}licenceTypeCode;licenceTypeDescription;deletionMarker};r([e({level:4},{groups:["createEncounter"]})],Te.prototype,"licenceTypeCode",2),r([e({level:4},{groups:["createEncounter"]})],Te.prototype,"licenceTypeDescription",2),r([e({level:4},{groups:["createEncounter"]})],Te.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(()=>Wr),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(()=>ge),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(()=>Te)],N.prototype,"licenceType",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>ke)],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"]}),An({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 Br=class{static{n(this,"JourneyType");}generatedNumber;rank;deletionMarker;description};r([e({level:4},{groups:["createEncounter"]})],Br.prototype,"generatedNumber",2),r([e({level:4},{groups:["createEncounter"]})],Br.prototype,"rank",2),r([e({level:4},{groups:["createEncounter"]})],Br.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],Br.prototype,"description",2);var Ne=class{static{n(this,"PortOfExit");}portCode;portDescription;deletionMarker};r([classTransformer.Transform(({value:o})=>o?.toString()),e({level:4},{groups:["createEncounter"]})],Ne.prototype,"portCode",2),r([e({level:4},{groups:["createEncounter"]})],Ne.prototype,"portDescription",2),r([e({level:4},{groups:["createEncounter"]})],Ne.prototype,"deletionMarker",2);var br=class br{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(br.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],br.prototype,"goodsCarried",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(br.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],br.prototype,"journeyStartLctn",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.Matches(br.REG_EX_JOURNEY,{groups:["createEncounter"]}),V(),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],br.prototype,"journeyEndLocatn",2),r([classValidator.ValidateIf(()=>M.getInstance().getExaminerOfficerType()==="TRAFFIC"),classValidator.ValidateNested(),classTransformer.Type(()=>Br),e({level:4,roles:["TRAFFIC"]},{groups:["createEncounter"]})],br.prototype,"journeyType",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Ne)],br.prototype,"portOfExit",2);var ht=br;var re=class extends nr{static{n(this,"CommonCode");}code;name};r([e({level:4},{groups:["createEncounter"]})],re.prototype,"code",2),r([e({level:4},{groups:["createEncounter"]})],re.prototype,"name",2);var yr=class extends re{static{n(this,"EncounterReason");}sequenceNumber;fkCtpCheckType;pg35EcRequired;useOffenceFlow;shortCode;version};r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"sequenceNumber",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"fkCtpCheckType",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"pg35EcRequired",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"useOffenceFlow",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"shortCode",2),r([e({level:2},{groups:["createEncounter"]})],yr.prototype,"version",2);var Pe=class extends re{static{n(this,"TextType");}withinEncounter;sortSequence};r([e({level:4},{groups:["createEncounter"]})],Pe.prototype,"withinEncounter",2),r([classValidator.IsOptional()],Pe.prototype,"sortSequence",2);var je=class{static{n(this,"EncounterTexts");}textType;text};r([classValidator.ValidateNested(),classTransformer.Type(()=>Pe),e({level:4},{groups:["createEncounter"]})],je.prototype,"textType",2),r([e({level:4},{groups:["createEncounter"]})],je.prototype,"text",2);var ee=class{static{n(this,"CommonDescription");}code;description};r([T()],ee.prototype,"code",2),r([T()],ee.prototype,"description",2);var ce=class extends ee{static{n(this,"CapturedEthnicity");}category;deletionMarker;sequenceNumber};r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"category",2),r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"deletionMarker",2),r([e({level:4},{groups:["createEncounter"]})],ce.prototype,"sequenceNumber",2);var $e=class{static{n(this,"ObservedEthnicityInfo");}statedNumberOfDriver;capturedEthnicity};r([e({level:4},{groups:["createEncounter"]})],$e.prototype,"statedNumberOfDriver",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>ce),e({level:4},{groups:["createEncounter"]})],$e.prototype,"capturedEthnicity",2);var ze=class{static{n(this,"EthnicityInfo");}isEthnicDataProvided;observedEthnicityInfo};r([classValidator.IsBoolean(),e({level:4},{groups:["createEncounter"]})],ze.prototype,"isEthnicDataProvided",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>$e)],ze.prototype,"observedEthnicityInfo",2);var st=class extends nr{static{n(this,"InspectionType");}inspectionLevel};r([e({level:2},{groups:["createEncounter"]})],st.prototype,"inspectionLevel",2);function vn(l){return o=>{classValidator.registerDecorator({name:"ValidateSetupUserInput",target:o,propertyName:void 0,options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=i.csiType?.toUpperCase?.()==="P",g=i.setupUser!==null&&i.setupUser!==void 0;return E||g},defaultMessage(t){return 'setupUser must be present when csiType is not "P"'}}});}}n(vn,"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([vn({groups:["createEncounter"]})],S);function bn(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(bn,"ValidateDeleteEncounterMotor");function yn(l){return o=>{classValidator.registerDecorator({name:"ValidateMotorObject",target:o,propertyName:"motor",options:l,validator:{validate(t,s){let i=s.object;if(!i)return false;let E=!!i.nationality,g=!!i.vehicleIdType,R=!!i.roadsideVehicleType;if(!i.vehicleId||!E||!i.nationality?.irlCode||!g||!i.vehicleIdType?.shortCode||!R)return false;let y=i.vehicleId.toLowerCase(),P=i.vehicleIdType.shortCode.toLowerCase();i.nationality.irlCode.toLowerCase();let Yr=i.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",X=0,_r=M.getInstance().getEncounterType();return ["vrm","vin"].includes(P)||X++,_r!==2&&i.odometerReading==null&&X++,(_r===2||i.actionCode?.toUpperCase()==="C")&&i.odometerReadingUnit==null&&X++,Yr&&X++,/^[a-z0-9]+$/i.test(y)||X++,X===0},defaultMessage(t){return "Motor requires VehicleId, Nationality, VehicleIdType and RoadsideVehicleType. Odometer or format may also be invalid."}}});}}n(yn,"ValidateMotorObject");function Vn(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 y=g.toLowerCase()==="category t",P=R===2;return !(!y&&!P&&i.bodyType==null)},defaultMessage(t){return 'bodyType must not be null unless body type is "category T" or encounter level is SIFT'}}});}}n(Vn,"ValidateBodyType");var Re=class{static{n(this,"PoliceDefect");}sequenceNumber;imNumber;defectSeverity};r([classValidator.IsOptional()],Re.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],Re.prototype,"imNumber",2),r([classValidator.IsOptional()],Re.prototype,"defectSeverity",2);var Ae=class{static{n(this,"CommonVehicleWeights");}actGrossWeight;permGrossWeight;designGrossWeight};r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],Ae.prototype,"actGrossWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],Ae.prototype,"permGrossWeight",2),r([classValidator.IsOptional()],Ae.prototype,"designGrossWeight",2);var Cr=class Cr extends Ae{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(()=>Re)],Cr.prototype,"policeDefects",2),r([e({level:4},{groups:["createEncounter"]})],Cr.prototype,"nationalitySummary",2);var Ze=Cr;var Oe=class{static{n(this,"Part");}internalNumber;partMake;deletionMarker};r([classValidator.IsOptional()],Oe.prototype,"internalNumber",2),r([classValidator.IsOptional()],Oe.prototype,"partMake",2),r([classValidator.IsOptional()],Oe.prototype,"deletionMarker",2);var Ul=/^(?!^%)(?!-|\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(Ul,{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(()=>Oe),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 Mr=class{static{n(this,"SignificanceReason");}generatedNumber;fullReason;shortReason;effectiveFrom;effectiveTo};r([classValidator.IsOptional()],Mr.prototype,"generatedNumber",2),r([classValidator.IsOptional()],Mr.prototype,"fullReason",2),r([classValidator.IsOptional()],Mr.prototype,"shortReason",2),r([u(),classValidator.IsOptional()],Mr.prototype,"effectiveFrom",2),r([u(),classValidator.IsOptional()],Mr.prototype,"effectiveTo",2);var H=class{static{n(this,"DefectSummary");}action;endorsement;lastUpdate;sgnfcanceReason;updateUserId;fiftyPercentRuleMarker;overallProhibitionSeverity;maintenanceFailureMarker;shortReason;deviationDefectCount;cat99DefectCount};r([classValidator.IsOptional()],H.prototype,"action",2),r([classValidator.IsOptional()],H.prototype,"endorsement",2),r([u({groups:["createEncounter"]}),classValidator.IsOptional()],H.prototype,"lastUpdate",2),r([classValidator.IsOptional()],H.prototype,"sgnfcanceReason",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>U)],H.prototype,"updateUserId",2),r([classValidator.IsOptional()],H.prototype,"fiftyPercentRuleMarker",2),r([classValidator.IsOptional()],H.prototype,"overallProhibitionSeverity",2),r([classValidator.IsOptional()],H.prototype,"maintenanceFailureMarker",2),r([classValidator.ValidateIf((o,t)=>t!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Mr)],H.prototype,"shortReason",2),r([classValidator.IsOptional()],H.prototype,"deviationDefectCount",2),r([classValidator.IsOptional()],H.prototype,"cat99DefectCount",2);var Sr=class{static{n(this,"FuelTypeBase");}fuelCode;description;otherTestInd;displayOrder;deletionMarker};r([classValidator.IsOptional()],Sr.prototype,"fuelCode",2),r([classValidator.IsOptional()],Sr.prototype,"description",2),r([classValidator.IsOptional()],Sr.prototype,"otherTestInd",2),r([classValidator.IsOptional()],Sr.prototype,"displayOrder",2),r([classValidator.IsOptional()],Sr.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(),Fr()],I.prototype,"petrolClbrtnDate",2),r([classValidator.IsOptional(),Fr()],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(()=>Sr)],I.prototype,"fuelType",2),r([classValidator.IsOptional()],I.prototype,"otherSerialNum",2),r([classValidator.IsOptional(),Fr()],I.prototype,"otherClbrtnDate",2),r([classValidator.IsOptional()],I.prototype,"clearIndicator",2);function Sn(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(Sn,"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 E=i.noticeType?.code!=null,g=i.noticeStatus?.toUpperCase?.()==="W",R=i.issueDate!=null,y=i.inputDate!=null;retu