UNPKG

@dvsa/smc-encounter-schema

Version:

Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites

1 lines 35.8 kB
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var Ir=Object.defineProperty;var Hr=Object.getOwnPropertyDescriptor;var t=(o,e)=>Ir(o,"name",{value:e,configurable:true});var r=(o,e,l,u)=>{for(var i=u>1?void 0:u?Hr(e,l):e,N=o.length-1,x;N>=0;N--)(x=o[N])&&(i=(u?x(e,l,i):x(i))||i);return u&&i&&Ir(e,l,i),i};var Nr=class o{static{t(this,"CurrentEncounterLevel");}static instance;level;officerType;requestType;constructor(){this.level=1,this.officerType="ANY",this.requestType="C";}static getInstance(){return o.instance||(o.instance=new o),o.instance}getEncounterType(){return this.level}setEncounterType(e){this.level=e;}getExaminerOfficerType(){return this.officerType}setExaminerOfficerType(e){this.officerType=e;}getRequestType(){return this.requestType}setRequestType(e){this.requestType=e;}isDeletedEncounter(){return this.requestType==="D"}};var W=class{validate(e,l){let u=l.constraints[0],i=Nr.getInstance(),N=i.getEncounterType(),x=i.getExaminerOfficerType();return u.level===0||u.exceptions?.includes(N)||u.level!==void 0&&u.level>N||u.roles?.length&&!u.roles.includes(x)&&!u.roles.includes("ANY")?true:e==null?false:typeof e=="string"?u.allowEmpty?true:e.trim().length>0:Array.isArray(e)?e.length===0?false:e.every((F,j)=>F==null?false:Object.entries(F).every(([gr,Lr])=>typeof Lr=="string"?Lr.trim().length>0:Lr!=null)):true}};t(W,"MandatoryFieldConstraint"),W=r([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],W);function n(o,e){return (l,u)=>{classValidator.registerDecorator({name:"MandatoryField",target:l.constructor,propertyName:u,constraints:[o],options:e,validator:W});}}t(n,"MandatoryField");function hr(o){return e=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterTrailer",target:e,propertyName:"trailer",options:o,validator:{validate(l,u){let i=u.object;return i?i.vehicleId!=null:true},defaultMessage(l){return "Trailer vehicleId must not be null."}}});}}t(hr,"ValidateDeleteEncounterTrailer");function Vr(o){return e=>{classValidator.registerDecorator({name:"ValidateTrailerObject",target:e,propertyName:"trailer",options:o,validator:{validate(l,u){let i=u.object;if(!i||!i.vehicleId||!i.nationality?.irlCode||!i.vehicleIdType?.shortCode||!i.roadsideVehicleType?.key)return false;let N=i.vehicleId.toLowerCase(),x=i.vehicleIdType.shortCode.toLowerCase(),F=i.nationality.irlCode.toLowerCase(),j=i.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",gr=0;return /^(tin|tra)+$/.test(x)||gr++,j||gr++,Jr(F,x,N)||gr++,gr===0},defaultMessage(l){return "Trailer object validation failed: invalid VehicleId, VehicleIdType, or RoadsideVehicleType."}}});}}t(Vr,"ValidateTrailerObject");function Jr(o,e,l){return e==="tin"||e==="tra"?/^[a-z0-9]+$/i.test(l):false}t(Jr,"checkVehicleIdentifier");function d(o){return (e,l)=>{classValidator.registerDecorator({name:"isNullableString",target:e.constructor,propertyName:l,options:o,validator:{validate(u,i){return u===null||typeof u=="string"},defaultMessage(u){return `${u.property} must be a string or null`}}});}}t(d,"IsNullableString");function z(){return classTransformer.Transform(({value:o})=>typeof o=="string"?o.toUpperCase():o)}t(z,"ToUpperCase");var b=class{static{t(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};r([n({level:4},{groups:["createEncounter"]})],b.prototype,"drivingLicenceAuthority",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"irlCountry",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"vehicleIndicator",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"cardIssuingAuthorityInd",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"intelligenceSubjectInd",2),r([classValidator.IsOptional()],b.prototype,"intRegNumberCode",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"nonVosa",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"irlCode",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"deletionMarker",2),r([n({level:4},{groups:["createEncounter"]})],b.prototype,"foreignOpNationalityInd",2),r([classValidator.IsOptional()],b.prototype,"inrNationalityInd",2);var X=class{static{t(this,"PoliceDefect");}sequenceNumber;imNumber;defectSeverity};r([classValidator.IsOptional()],X.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],X.prototype,"imNumber",2),r([classValidator.IsOptional()],X.prototype,"defectSeverity",2);var J=class{static{t(this,"CommonVehicleWeights");}actGrossWeight;permGrossWeight;designGrossWeight};r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],J.prototype,"actGrossWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],J.prototype,"permGrossWeight",2),r([classValidator.IsOptional()],J.prototype,"designGrossWeight",2);var y=class y extends J{static{t(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([n({level:4},{groups:["createEncounter"]})],y.prototype,"vehicleAxles",2),r([d()],y.prototype,"vehicleColour",2),r([classValidator.IsOptional(),classValidator.Matches(y.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),z()],y.prototype,"vehicleModel",2),r([classValidator.Matches(y.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),z(),n({level:1},{groups:["createEncounter"]})],y.prototype,"vehicleMake",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>b),n({level:4},{groups:["createEncounter"]})],y.prototype,"nationality",2),r([classTransformer.Type(()=>X)],y.prototype,"policeDefects",2),r([n({level:4},{groups:["createEncounter"]})],y.prototype,"nationalitySummary",2);var Or=y;var Q=class{static{t(this,"Part");}internalNumber;partMake;deletionMarker};r([classValidator.IsOptional()],Q.prototype,"internalNumber",2),r([classValidator.IsOptional()],Q.prototype,"partMake",2),r([classValidator.IsOptional()],Q.prototype,"deletionMarker",2);var un=/^(?!^%)(?!-|\s)(?!.*[&@£#$()'*,.:;+-]{4})[A-Za-z0-9\/&@£#$%()'*,.:;+ -]*$/,E=class{static{t(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()],E.prototype,"action",2),r([classValidator.IsOptional(),classValidator.Matches(un,{groups:["createEncounter"],message:"Invalid format"}),classValidator.MaxLength(254,{groups:["createEncounter"],message:"Must be no more than 254 characters in length"})],E.prototype,"additionalText",2),r([classValidator.IsOptional()],E.prototype,"clearanceDate",2),r([classValidator.IsOptional()],E.prototype,"deviationComment",2),r([classValidator.IsOptional()],E.prototype,"adeEnd",2),r([classValidator.IsOptional()],E.prototype,"nonCmplnceRsn",2),r([classValidator.IsOptional()],E.prototype,"positionOnAxle",2),r([classValidator.IsOptional()],E.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],E.prototype,"serialNumber",2),r([classValidator.IsOptional()],E.prototype,"side",2),r([classValidator.IsOptional()],E.prototype,"adeSize",2),r([classValidator.IsOptional()],E.prototype,"verticalPosition",2),r([classValidator.IsOptional()],E.prototype,"make",2),r([classValidator.IsOptional()],E.prototype,"actualAction",2),r([classValidator.IsOptional()],E.prototype,"axleNumber",2),r([classValidator.IsOptional()],E.prototype,"mechDefctIndictr",2),r([classValidator.IsOptional()],E.prototype,"sigMntncFailure",2),r([classValidator.IsOptional()],E.prototype,"status",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.ValidateNested(),classTransformer.Type(()=>Q),classValidator.IsOptional()],E.prototype,"part",2),r([classValidator.IsOptional()],E.prototype,"maintenance",2),r([classValidator.IsOptional()],E.prototype,"defectCatDetailDescription",2),r([classValidator.IsOptional()],E.prototype,"defectSectionDetailDescription",2),r([classValidator.IsOptional()],E.prototype,"defectSubDetailDescription",2),r([classValidator.IsOptional()],E.prototype,"defectDetailDescription",2),r([classValidator.IsOptional()],E.prototype,"defectSubDescription",2),r([classValidator.IsOptional()],E.prototype,"severityOfDefectDescription",2),r([classValidator.IsOptional()],E.prototype,"dudGenNum",2),r([classValidator.IsOptional()],E.prototype,"sodGeneratedNumber",2),r([classValidator.IsOptional()],E.prototype,"partNumber",2),r([classValidator.IsOptional()],E.prototype,"sectionNumber",2);var P=class{validate(e,l){return e==null?true:/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(e)}defaultMessage(e){return `${e.property} must match format YYYY-MM-DD HH:mm:ss`}};t(P,"UKDateFormatValidator"),P=r([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],P);function m(o){return (e,l)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:e.constructor,propertyName:l,options:o,validator:P});}}t(m,"ValidateUKDateFormat");function B(o){return (e,l)=>{classValidator.registerDecorator({name:"isNullableNumber",target:e.constructor,propertyName:l,options:o,validator:{validate(u,i){return u===null||typeof u=="number"},defaultMessage(u){return `${u.property} must be a number or null`}}});}}t(B,"IsNullableNumber");var lr=class{static{t(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"]}),z(),n({level:4},{groups:["createEncounter"]})],lr.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"]}),z()],lr.prototype,"postcode",2);var _=class extends lr{static{t(this,"RteArea");}code;areaDescription;address1;address2;address3;address4;email;enforcementArea};r([classValidator.IsOptional()],_.prototype,"code",2),r([classValidator.IsOptional()],_.prototype,"areaDescription",2),r([classValidator.IsOptional()],_.prototype,"address1",2),r([classValidator.IsOptional()],_.prototype,"address2",2),r([classValidator.IsOptional()],_.prototype,"address3",2),r([classValidator.IsOptional()],_.prototype,"address4",2),r([classValidator.IsOptional()],_.prototype,"email",2),r([classValidator.IsOptional()],_.prototype,"enforcementArea",2);var f=class{static{t(this,"GenericContact");}manager;costCentre;csiGeneratedNumber;userId;firstName;surname;email;rarCode;status;gvtsMarker;examinerType;ehrEmployeeId;workTelephone;mobileTelephone;version;rteArea};r([classValidator.IsOptional()],f.prototype,"manager",2),r([classValidator.IsOptional()],f.prototype,"costCentre",2),r([classValidator.IsOptional()],f.prototype,"csiGeneratedNumber",2),r([classValidator.IsOptional()],f.prototype,"userId",2),r([classValidator.IsOptional()],f.prototype,"firstName",2),r([classValidator.IsOptional()],f.prototype,"surname",2),r([classValidator.IsOptional()],f.prototype,"email",2),r([B()],f.prototype,"rarCode",2),r([d()],f.prototype,"status",2),r([d()],f.prototype,"gvtsMarker",2),r([classValidator.IsOptional()],f.prototype,"examinerType",2),r([classValidator.IsOptional()],f.prototype,"ehrEmployeeId",2),r([classValidator.IsOptional()],f.prototype,"workTelephone",2),r([classValidator.IsOptional()],f.prototype,"mobileTelephone",2),r([d()],f.prototype,"version",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.ValidateNested(),classTransformer.Type(()=>_)],f.prototype,"rteArea",2);var q=class{static{t(this,"SignificanceReason");}generatedNumber;fullReason;shortReason;effectiveFrom;effectiveTo};r([classValidator.IsOptional()],q.prototype,"generatedNumber",2),r([classValidator.IsOptional()],q.prototype,"fullReason",2),r([classValidator.IsOptional()],q.prototype,"shortReason",2),r([m(),classValidator.IsOptional()],q.prototype,"effectiveFrom",2),r([m(),classValidator.IsOptional()],q.prototype,"effectiveTo",2);var v=class{static{t(this,"DefectSummary");}action;endorsement;lastUpdate;sgnfcanceReason;updateUserId;fiftyPercentRuleMarker;overallProhibitionSeverity;maintenanceFailureMarker;shortReason;deviationDefectCount;cat99DefectCount};r([classValidator.IsOptional()],v.prototype,"action",2),r([classValidator.IsOptional()],v.prototype,"endorsement",2),r([m({groups:["createEncounter"]}),classValidator.IsOptional()],v.prototype,"lastUpdate",2),r([classValidator.IsOptional()],v.prototype,"sgnfcanceReason",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>f)],v.prototype,"updateUserId",2),r([classValidator.IsOptional()],v.prototype,"fiftyPercentRuleMarker",2),r([classValidator.IsOptional()],v.prototype,"overallProhibitionSeverity",2),r([classValidator.IsOptional()],v.prototype,"maintenanceFailureMarker",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>q)],v.prototype,"shortReason",2),r([classValidator.IsOptional()],v.prototype,"deviationDefectCount",2),r([classValidator.IsOptional()],v.prototype,"cat99DefectCount",2);var G=class{static{t(this,"AxlesWeight");}axleNumber;actualWghtAmount;permittedWeight;designWeight;offsideWeight;nearsideWeight;cmpnstngAxleCode};r([n({level:4},{groups:["createEncounter"]})],G.prototype,"axleNumber",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],G.prototype,"actualWghtAmount",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],G.prototype,"permittedWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],G.prototype,"designWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],G.prototype,"offsideWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],G.prototype,"nearsideWeight",2),r([classValidator.IsOptional()],G.prototype,"cmpnstngAxleCode",2);var er=class{static{t(this,"CommonDeletion");}description;deletionMarker};r([n({level:4},{groups:["createEncounter"]})],er.prototype,"description",2),r([n({level:4},{groups:["createEncounter"]})],er.prototype,"deletionMarker",2);var c=class extends er{static{t(this,"CommonData");}sequenceNumber};r([n({level:4},{groups:["createEncounter"]})],c.prototype,"sequenceNumber",2);var Rr=class extends c{static{t(this,"Laden");}code};r([n({level:4},{groups:["createEncounter"]})],Rr.prototype,"code",2);var $=class extends c{static{t(this,"RoadsideVehicleType");}vehicleType;key;tractorIndicator;dcaPart;useOffenceFlow};r([n({level:4},{groups:["createEncounter"]})],$.prototype,"vehicleType",2),r([n({level:4},{groups:["createEncounter"]})],$.prototype,"key",2),r([n({level:4},{groups:["createEncounter"]})],$.prototype,"tractorIndicator",2),r([n({level:4},{groups:["createEncounter"]})],$.prototype,"dcaPart",2),r([n({level:4},{groups:["createEncounter"]})],$.prototype,"useOffenceFlow",2);var H=class extends c{static{t(this,"VehicleIdType");}shortCode;code;vehicleTrailerIndicator};r([n({level:4},{groups:["createEncounter"]})],H.prototype,"shortCode",2),r([n({level:4},{groups:["createEncounter"]})],H.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],H.prototype,"vehicleTrailerIndicator",2);function jr(o){return e=>{classValidator.registerDecorator({name:"ValidateCloseProhibitionsNotice",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let i=u.object;return i?i.noticeStatus?.toUpperCase?.()==="C":false},defaultMessage(l){return "Notices noticeStatus must be 'C'."}}});}}t(jr,"ValidateCloseProhibitionsNotice");function zr(o){return e=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterNotice",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let i=u.object;if(!i)return false;let N=i.noticeType?.code!=null,x=i.noticeStatus?.toUpperCase?.()==="W",F=i.issueDate!=null,j=i.inputDate!=null;return N&&x&&F&&j},defaultMessage(l){return ["Notices noticeType.code must not be null.","Notices noticeStatus must be 'W'.","Notices issueDate must not be null.","Notices inputDate must not be null."].join(" ")}}});}}t(zr,"ValidateDeleteEncounterNotice");var O=class{static{t(this,"ExemptionConditionBaseType");}expiryDate;ntyCode;locationFrom;locationTo;noLoadIndicator;noTrailerIndictr;otherConditions;rgdTowBarIndictr;speedRestriction;speedUnit;susTowFrtIndctr;susTowRrIndctr;visibilityIndctr};r([classValidator.IsOptional(),m({groups:["createEncounter"]})],O.prototype,"expiryDate",2),r([classValidator.IsOptional()],O.prototype,"ntyCode",2),r([classValidator.IsOptional()],O.prototype,"locationFrom",2),r([classValidator.IsOptional()],O.prototype,"locationTo",2),r([classValidator.IsOptional()],O.prototype,"noLoadIndicator",2),r([classValidator.IsOptional()],O.prototype,"noTrailerIndictr",2),r([classValidator.IsOptional()],O.prototype,"otherConditions",2),r([classValidator.IsOptional()],O.prototype,"rgdTowBarIndictr",2),r([classValidator.IsOptional()],O.prototype,"speedRestriction",2),r([classValidator.IsOptional()],O.prototype,"speedUnit",2),r([classValidator.IsOptional()],O.prototype,"susTowFrtIndctr",2),r([classValidator.IsOptional()],O.prototype,"susTowRrIndctr",2),r([classValidator.IsOptional()],O.prototype,"visibilityIndctr",2);var or=class{static{t(this,"NoticeClosureBaseType");}text;motReference};r([classValidator.IsOptional()],or.prototype,"text",2),r([classValidator.IsOptional()],or.prototype,"motReference",2);var C=class{static{t(this,"NoticeType");}code;ntyDescription;currentCode;act;currentVersion;typeCode;ntyShortDescription;operatorCopy;driverRequired;translationAvailable;sequenceNumber;noticeTypeCategory;autoClosurePeriod;ntySummary;closeFlag;aevEventCodeClose;aevEventCodeClear;aevEventCodeReactivate;ettCode;notifiableFlag};r([classValidator.IsOptional()],C.prototype,"code",2),r([classValidator.IsOptional()],C.prototype,"ntyDescription",2),r([classValidator.IsOptional()],C.prototype,"currentCode",2),r([d()],C.prototype,"act",2),r([classValidator.IsOptional()],C.prototype,"currentVersion",2),r([classValidator.IsOptional()],C.prototype,"typeCode",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"ntyShortDescription",2),r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),n({level:4},{groups:["createEncounter"]})],C.prototype,"operatorCopy",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"driverRequired",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"translationAvailable",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"sequenceNumber",2),r([d()],C.prototype,"noticeTypeCategory",2),r([B()],C.prototype,"autoClosurePeriod",2),r([classValidator.IsOptional()],C.prototype,"ntySummary",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"closeFlag",2),r([B()],C.prototype,"aevEventCodeClose",2),r([B()],C.prototype,"aevEventCodeClear",2),r([B()],C.prototype,"aevEventCodeReactivate",2),r([d()],C.prototype,"ettCode",2),r([d()],C.prototype,"notifiableFlag",2);var h=class{static{t(this,"NoticeTypeDetail");}ntyCode;version;deletionMarker;updateUserId;lastUpdate;actDetail;actMsg1;actMsg2;actMsg3};r([classValidator.IsOptional()],h.prototype,"ntyCode",2),r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),classValidator.IsOptional()],h.prototype,"version",2),r([classValidator.IsOptional()],h.prototype,"deletionMarker",2),r([classValidator.IsOptional()],h.prototype,"updateUserId",2),r([classValidator.IsOptional()],h.prototype,"lastUpdate",2),r([classValidator.IsOptional()],h.prototype,"actDetail",2),r([d()],h.prototype,"actMsg1",2),r([d()],h.prototype,"actMsg2",2),r([d()],h.prototype,"actMsg3",2);var ur=class extends c{static{t(this,"CommonVersion");}code;version};r([n({level:4},{groups:["createEncounter"]})],ur.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],ur.prototype,"version",2);var U=class extends ur{static{t(this,"OffenceBaseType");}ukMarker;sequenceNum;name;ostCode;ofgCode;effectiveFromDate;effectiveToDate;otyCode;osbCode;hazchemRisk;hazchemReason;endorsableFlag;descriptionWelsh};r([classValidator.IsOptional()],U.prototype,"ukMarker",2),r([classValidator.IsOptional()],U.prototype,"sequenceNum",2),r([classValidator.IsOptional()],U.prototype,"name",2),r([classValidator.IsOptional()],U.prototype,"ostCode",2),r([classValidator.IsOptional()],U.prototype,"ofgCode",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],U.prototype,"effectiveFromDate",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],U.prototype,"effectiveToDate",2),r([classValidator.IsOptional()],U.prototype,"otyCode",2),r([classValidator.IsOptional()],U.prototype,"osbCode",2),r([classValidator.IsOptional()],U.prototype,"hazchemRisk",2),r([classValidator.IsOptional()],U.prototype,"hazchemReason",2),r([classValidator.IsOptional()],U.prototype,"endorsableFlag",2),r([classValidator.IsOptional()],U.prototype,"descriptionWelsh",2);function cr(){return classTransformer.Transform(({value:o})=>{if(typeof o!="string")return o;let e=luxon.DateTime.fromFormat(o,"dd/MM/yyyy HH:mm:ss",{zone:"Europe/London"});return e.isValid?e.toFormat("yyyy-MM-dd HH:mm:ss"):o})}t(cr,"TransformUKDateTime");var A=class extends c{static{t(this,"CommonOffence");}code;version;ukMarker;name;ostCode;ofgCode;fkOgpCode;fkOgpVersion;effectiveFromDate;effectiveToDate;otyCode;osbCode;hazchemRisk;hazchemReason;descriptionWelsh};r([n({level:4},{groups:["createEncounter"]})],A.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],A.prototype,"version",2),r([n({level:4},{groups:["createEncounter"]})],A.prototype,"ukMarker",2),r([n({level:4},{groups:["createEncounter"]})],A.prototype,"name",2),r([n({level:4},{groups:["createEncounter"]})],A.prototype,"ostCode",2),r([classValidator.IsOptional()],A.prototype,"ofgCode",2),r([classValidator.IsOptional()],A.prototype,"fkOgpCode",2),r([classValidator.IsOptional()],A.prototype,"fkOgpVersion",2),r([n({level:4},{groups:["createEncounter"]}),cr()],A.prototype,"effectiveFromDate",2),r([classValidator.IsOptional(),cr()],A.prototype,"effectiveToDate",2),r([n({level:4},{groups:["createEncounter"]})],A.prototype,"otyCode",2),r([classValidator.IsOptional()],A.prototype,"osbCode",2),r([classValidator.IsOptional()],A.prototype,"hazchemRisk",2),r([classValidator.IsOptional()],A.prototype,"hazchemReason",2),r([classValidator.IsOptional()],A.prototype,"descriptionWelsh",2);var fr=class extends A{static{t(this,"Offences");}endorsableFlag};r([classValidator.IsOptional()],fr.prototype,"endorsableFlag",2);function $r(o){return e=>{classValidator.registerDecorator({name:"ValidatePnoGeneratedNumber",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let i=u.object;if(!i)return false;let N=i.pnoGeneratedNumber,F=i.noticeRefSource?.toUpperCase?.()==="GEN";return !(N==null||F&&!/^[A-Za-z0-9]+$/.test(N)||F&&!vn(N))},defaultMessage(l){return "pnoGeneratedNumber is invalid or does not match the check digit."}}});}}t($r,"ValidatePnoGeneratedNumber");function vn(o){if(!o||o.length<2)return false;let l=o.charAt(o.length-1).charCodeAt(0)-48,i=o.slice(0,-1).toUpperCase().split(""),N=0;for(let j=0;j<i.length;j++)N+=i[j].charCodeAt(0)*(j+1);let F=48+N%10;return l===F-48}t(vn,"calculateCheckDigit");var Er=class extends c{static{t(this,"PenaltyNoticeStatus");}code;usageInd};r([n({level:4},{groups:["createEncounter"]})],Er.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],Er.prototype,"usageInd",2);var g=class{venGeneratedNumber;noticeRefSource;referenceNumber;driverForename;driverSurname;driverLicenceNumber;drivingLicenseStatus;driverType;amount;points;paymentDueDate;referredDate;penaltyNoticeStatus;lastUpdatedDate;lastUpdatedBy;pnoGeneratedNumber;odrGeneratedNumber};t(g,"PenaltyNotice"),r([classValidator.IsOptional()],g.prototype,"venGeneratedNumber",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"noticeRefSource",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"referenceNumber",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"driverForename",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"driverSurname",2),r([n({level:4,allowEmpty:true},{groups:["createEncounter"]})],g.prototype,"driverLicenceNumber",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"drivingLicenseStatus",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"driverType",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"amount",2),r([n({level:4},{groups:["createEncounter"]})],g.prototype,"points",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],g.prototype,"paymentDueDate",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],g.prototype,"referredDate",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Er),n({level:4},{groups:["createEncounter"]})],g.prototype,"penaltyNoticeStatus",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],g.prototype,"lastUpdatedDate",2),r([classValidator.IsOptional()],g.prototype,"lastUpdatedBy",2),r([classValidator.IsOptional()],g.prototype,"pnoGeneratedNumber",2),r([classValidator.IsOptional()],g.prototype,"odrGeneratedNumber",2),g=r([$r({groups:["createEncounter"]})],g);var K=class{static{t(this,"ProhibitionClosureReasonBaseType");}code;description;sequenceNumber;deletionMarker;manualInd};r([classValidator.IsOptional()],K.prototype,"code",2),r([classValidator.IsOptional()],K.prototype,"description",2),r([classValidator.IsOptional()],K.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],K.prototype,"deletionMarker",2),r([classValidator.IsOptional()],K.prototype,"manualInd",2);var ar=class{static{t(this,"CommonDescription");}code;description};r([d()],ar.prototype,"code",2),r([d()],ar.prototype,"description",2);var pr=class extends ar{static{t(this,"RemovalInstruction");}sequenceNumber;deletionMarker};r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),n({level:4},{groups:["createEncounter"]})],pr.prototype,"sequenceNumber",2),r([n({level:4},{groups:["createEncounter"]})],pr.prototype,"deletionMarker",2);var s=class{odrGeneratedNumber;noticeType;penaltyNotice;ordGeneratedNumber;closureLastUserId;oliLicenceNumber;noticeReferenceNumber;inForceDate;inForceTime;issueDate;issueTime;inputDate;issueOffFname;issueOffSname;issueOfficerType;noticeStatus;pcrCode;rceivedByForenme;rceivedBySurname;restHours;rteVehId;rteVehIdType;sMarked;translationMkr;updateTimestamp;dangerGoodsDeferralPeriod;noticeTypeDetail;ifkOpLicenceNum;ifkTestCertNum;immediateInd;offences;removalInstr;policeOfficerNum;policeStation;testStationInd;towingVehId;updateUserId;clearanceDate;closureLastTime;closureReason;filedAt;tachoLastCalibrationDate;tachoInspectionDueDate;dangerousGoodsDirection;dangerGoodsImmProhInd;exemptionConditions;noticeClosure;offencesList;opCopyPrinted;orginalIssueDate;otherLocation;linkedNoticeId};t(s,"NoticeBase"),r([classValidator.IsOptional()],s.prototype,"odrGeneratedNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>C),n({level:4},{groups:["createEncounter"]})],s.prototype,"noticeType",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.ValidateNested(),classTransformer.Type(()=>g),classValidator.IsOptional()],s.prototype,"penaltyNotice",2),r([classValidator.IsOptional()],s.prototype,"ordGeneratedNumber",2),r([classValidator.IsOptional()],s.prototype,"closureLastUserId",2),r([classValidator.IsOptional()],s.prototype,"oliLicenceNumber",2),r([classValidator.IsOptional()],s.prototype,"noticeReferenceNumber",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"inForceDate",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"inForceTime",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],s.prototype,"issueDate",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],s.prototype,"issueTime",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],s.prototype,"inputDate",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"issueOffFname",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"issueOffSname",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"issueOfficerType",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"noticeStatus",2),r([classValidator.IsOptional()],s.prototype,"pcrCode",2),r([z(),n({level:4},{groups:["createEncounter"]})],s.prototype,"rceivedByForenme",2),r([z(),n({level:4},{groups:["createEncounter"]})],s.prototype,"rceivedBySurname",2),r([classValidator.Max(45,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],s.prototype,"restHours",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"rteVehId",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>H),n({level:4},{groups:["createEncounter"]})],s.prototype,"rteVehIdType",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"sMarked",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"translationMkr",2),r([m({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],s.prototype,"updateTimestamp",2),r([n({level:4},{groups:["createEncounter"]})],s.prototype,"dangerGoodsDeferralPeriod",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>h)],s.prototype,"noticeTypeDetail",2),r([classValidator.IsOptional()],s.prototype,"ifkOpLicenceNum",2),r([classValidator.IsOptional()],s.prototype,"ifkTestCertNum",2),r([d()],s.prototype,"immediateInd",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>fr)],s.prototype,"offences",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>pr)],s.prototype,"removalInstr",2),r([classValidator.IsOptional()],s.prototype,"policeOfficerNum",2),r([classValidator.IsOptional()],s.prototype,"policeStation",2),r([classValidator.IsOptional()],s.prototype,"testStationInd",2),r([d()],s.prototype,"towingVehId",2),r([classValidator.IsOptional()],s.prototype,"updateUserId",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"clearanceDate",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"closureLastTime",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>K)],s.prototype,"closureReason",2),r([classValidator.IsOptional()],s.prototype,"filedAt",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"tachoLastCalibrationDate",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"tachoInspectionDueDate",2),r([classValidator.IsOptional()],s.prototype,"dangerousGoodsDirection",2),r([classValidator.IsOptional()],s.prototype,"dangerGoodsImmProhInd",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>O)],s.prototype,"exemptionConditions",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>or)],s.prototype,"noticeClosure",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>U)],s.prototype,"offencesList",2),r([classValidator.IsOptional()],s.prototype,"opCopyPrinted",2),r([classValidator.IsOptional(),m({groups:["createEncounter"]})],s.prototype,"orginalIssueDate",2),r([classValidator.IsOptional(),classValidator.Length(0,30,{groups:["createEncounter"]}),classValidator.Matches(/^(?!-|\s)(?!.*[&()!#@‘’',.\-/]{2})[A-Za-z0-9][A-Za-z0-9&()!#@’',.:;£ \-/]{0,29}$/,{groups:["createEncounter"]})],s.prototype,"otherLocation",2),r([classValidator.IsOptional()],s.prototype,"linkedNoticeId",2),s=r([zr({groups:["deleteEncounter"]}),jr({groups:["closeProhibition"]})],s);exports.Trailer=class T extends Or{actionCode;venGeneratedNumber;vehicleId;srNumOfTyres;vehicleLivery;chassisNumber;defectsRecMkr;defects;notices;ministryPlateNumber;prevOpInspDate;sigMaintFailure;roadsideVehicleType;laden;vehicleIdType;axlesWeights;defectSummary;linkedNoticeID};t(exports.Trailer,"Trailer"),r([n({level:2},{groups:["createEncounter"]})],exports.Trailer.prototype,"actionCode",2),r([d()],exports.Trailer.prototype,"venGeneratedNumber",2),r([classValidator.IsOptional()],exports.Trailer.prototype,"vehicleId",2),r([classValidator.IsOptional()],exports.Trailer.prototype,"srNumOfTyres",2),r([classValidator.IsOptional()],exports.Trailer.prototype,"vehicleLivery",2),r([classValidator.IsOptional(),classValidator.Matches(/^(?!-)(?!.*[&‘’',.()!#@*-]{2})[A-z0-9 &‘’',.()!#@/*-]*$/,{groups:["createEncounter"]})],exports.Trailer.prototype,"chassisNumber",2),r([classValidator.IsOptional()],exports.Trailer.prototype,"defectsRecMkr",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>E)],exports.Trailer.prototype,"defects",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>s)],exports.Trailer.prototype,"notices",2),r([d()],exports.Trailer.prototype,"ministryPlateNumber",2),r([n({level:4},{groups:["createEncounter"]})],exports.Trailer.prototype,"prevOpInspDate",2),r([classValidator.IsOptional()],exports.Trailer.prototype,"sigMaintFailure",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>$),n({level:4},{groups:["createEncounter"]})],exports.Trailer.prototype,"roadsideVehicleType",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Rr)],exports.Trailer.prototype,"laden",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>H)],exports.Trailer.prototype,"vehicleIdType",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>G)],exports.Trailer.prototype,"axlesWeights",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>v)],exports.Trailer.prototype,"defectSummary",2),r([classValidator.IsOptional()],exports.Trailer.prototype,"linkedNoticeID",2),exports.Trailer=r([Vr({groups:["createEncounter"]}),hr({groups:["deleteEncounter"]})],exports.Trailer);