UNPKG

@dvsa/smc-encounter-schema

Version:

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

1 lines 39.9 kB
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator'),luxon=require('luxon');var Dr=Object.defineProperty;var rn=Object.getOwnPropertyDescriptor;var t=(o,e)=>Dr(o,"name",{value:e,configurable:true});var r=(o,e,l,u)=>{for(var s=u>1?void 0:u?rn(e,l):e,b=o.length-1,h;b>=0;b--)(h=o[b])&&(s=(u?h(e,l,s):h(s))||s);return u&&s&&Dr(e,l,s),s};var Q=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 nr=class{validate(e,l){let u=l.constraints[0],s=Q.getInstance(),b=s.getEncounterType(),h=s.getExaminerOfficerType();return u.level===0||u.exceptions?.includes(b)||u.level!==void 0&&u.level>b||u.roles?.length&&!u.roles.includes(h)&&!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((x,G)=>x==null?false:Object.entries(x).every(([Vr,Nr])=>typeof Nr=="string"?Nr.trim().length>0:Nr!=null)):true}};t(nr,"MandatoryFieldConstraint"),nr=r([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],nr);function n(o,e){return (l,u)=>{classValidator.registerDecorator({name:"MandatoryField",target:l.constructor,propertyName:u,constraints:[o],options:e,validator:nr});}}t(n,"MandatoryField");function Mr(o){return e=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterMotor",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let s=u.object;return s?s.vehicleId!=null:false},defaultMessage(l){return "Motor vehicleId must not be null."}}});}}t(Mr,"ValidateDeleteEncounterMotor");function Sr(o){return e=>{classValidator.registerDecorator({name:"ValidateMotorObject",target:e,propertyName:"motor",options:o,validator:{validate(l,u){let s=u.object;if(!s)return false;let b=!!s.nationality,h=!!s.vehicleIdType,x=!!s.roadsideVehicleType;if(!s.vehicleId||!b||!s.nationality?.irlCode||!h||!s.vehicleIdType?.shortCode||!x)return false;let G=s.vehicleId.toLowerCase(),Vr=s.vehicleIdType.shortCode.toLowerCase();s.nationality.irlCode.toLowerCase();let Br=s.roadsideVehicleType.tractorIndicator?.toUpperCase()==="N",Er=0,Fr=Q.getInstance().getEncounterType();return ["vrm","vin"].includes(Vr)||Er++,Fr!==2&&s.odometerReading==null&&Er++,(Fr===2||s.actionCode?.toUpperCase()==="C")&&s.odometerReadingUnit==null&&Er++,Br&&Er++,/^[a-z0-9]+$/i.test(G)||Er++,Er===0},defaultMessage(l){return "Motor requires VehicleId, Nationality, VehicleIdType and RoadsideVehicleType. Odometer or format may also be invalid."}}});}}t(Sr,"ValidateMotorObject");var tr=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(tr,"UKDateFormatValidator"),tr=r([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],tr);function g(o){return (e,l)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:e.constructor,propertyName:l,options:o,validator:tr});}}t(g,"ValidateUKDateFormat");function Gr(o){return e=>{classValidator.registerDecorator({name:"ValidateBodyType",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let s=u.object;if(!s)return false;let h=s.roadsideVehicleType?.description,x=Q.getInstance().getEncounterType();if(!h)return false;let G=h.toLowerCase()==="category t",Vr=x===2;return !(!G&&!Vr&&s.bodyType==null)},defaultMessage(l){return 'bodyType must not be null unless body type is "category T" or encounter level is SIFT'}}});}}t(Gr,"ValidateBodyType");function T(o){return (e,l)=>{classValidator.registerDecorator({name:"isNullableString",target:e.constructor,propertyName:l,options:o,validator:{validate(u,s){return u===null||typeof u=="string"},defaultMessage(u){return `${u.property} must be a string or null`}}});}}t(T,"IsNullableString");function _(){return classTransformer.Transform(({value:o})=>typeof o=="string"?o.toUpperCase():o)}t(_,"ToUpperCase");var v=class{static{t(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};r([n({level:4},{groups:["createEncounter"]})],v.prototype,"drivingLicenceAuthority",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"irlCountry",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"vehicleIndicator",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"cardIssuingAuthorityInd",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"intelligenceSubjectInd",2),r([classValidator.IsOptional()],v.prototype,"intRegNumberCode",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"nonVosa",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"irlCode",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"deletionMarker",2),r([n({level:4},{groups:["createEncounter"]})],v.prototype,"foreignOpNationalityInd",2),r([classValidator.IsOptional()],v.prototype,"inrNationalityInd",2);var lr=class{static{t(this,"PoliceDefect");}sequenceNumber;imNumber;defectSeverity};r([classValidator.IsOptional()],lr.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],lr.prototype,"imNumber",2),r([classValidator.IsOptional()],lr.prototype,"defectSeverity",2);var er=class{static{t(this,"CommonVehicleWeights");}actGrossWeight;permGrossWeight;designGrossWeight};r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],er.prototype,"actGrossWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(999999,{groups:["createEncounter"]})],er.prototype,"permGrossWeight",2),r([classValidator.IsOptional()],er.prototype,"designGrossWeight",2);var k=class k extends er{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"]})],k.prototype,"vehicleAxles",2),r([T()],k.prototype,"vehicleColour",2),r([classValidator.IsOptional(),classValidator.Matches(k.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),_()],k.prototype,"vehicleModel",2),r([classValidator.Matches(k.REGEX_MODEL_MAKE,{groups:["createEncounter"]}),_(),n({level:1},{groups:["createEncounter"]})],k.prototype,"vehicleMake",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>v),n({level:4},{groups:["createEncounter"]})],k.prototype,"nationality",2),r([classTransformer.Type(()=>lr)],k.prototype,"policeDefects",2),r([n({level:4},{groups:["createEncounter"]})],k.prototype,"nationalitySummary",2);var hr=k;var or=class{static{t(this,"Part");}internalNumber;partMake;deletionMarker};r([classValidator.IsOptional()],or.prototype,"internalNumber",2),r([classValidator.IsOptional()],or.prototype,"partMake",2),r([classValidator.IsOptional()],or.prototype,"deletionMarker",2);var Nn=/^(?!^%)(?!-|\s)(?!.*[&@£#$()'*,.:;+-]{4})[A-Za-z0-9\/&@£#$%()'*,.:;+ -]*$/,a=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()],a.prototype,"action",2),r([classValidator.IsOptional(),classValidator.Matches(Nn,{groups:["createEncounter"],message:"Invalid format"}),classValidator.MaxLength(254,{groups:["createEncounter"],message:"Must be no more than 254 characters in length"})],a.prototype,"additionalText",2),r([classValidator.IsOptional()],a.prototype,"clearanceDate",2),r([classValidator.IsOptional()],a.prototype,"deviationComment",2),r([classValidator.IsOptional()],a.prototype,"adeEnd",2),r([classValidator.IsOptional()],a.prototype,"nonCmplnceRsn",2),r([classValidator.IsOptional()],a.prototype,"positionOnAxle",2),r([classValidator.IsOptional()],a.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],a.prototype,"serialNumber",2),r([classValidator.IsOptional()],a.prototype,"side",2),r([classValidator.IsOptional()],a.prototype,"adeSize",2),r([classValidator.IsOptional()],a.prototype,"verticalPosition",2),r([classValidator.IsOptional()],a.prototype,"make",2),r([classValidator.IsOptional()],a.prototype,"actualAction",2),r([classValidator.IsOptional()],a.prototype,"axleNumber",2),r([classValidator.IsOptional()],a.prototype,"mechDefctIndictr",2),r([classValidator.IsOptional()],a.prototype,"sigMntncFailure",2),r([classValidator.IsOptional()],a.prototype,"status",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.ValidateNested(),classTransformer.Type(()=>or),classValidator.IsOptional()],a.prototype,"part",2),r([classValidator.IsOptional()],a.prototype,"maintenance",2),r([classValidator.IsOptional()],a.prototype,"defectCatDetailDescription",2),r([classValidator.IsOptional()],a.prototype,"defectSectionDetailDescription",2),r([classValidator.IsOptional()],a.prototype,"defectSubDetailDescription",2),r([classValidator.IsOptional()],a.prototype,"defectDetailDescription",2),r([classValidator.IsOptional()],a.prototype,"defectSubDescription",2),r([classValidator.IsOptional()],a.prototype,"severityOfDefectDescription",2),r([classValidator.IsOptional()],a.prototype,"dudGenNum",2),r([classValidator.IsOptional()],a.prototype,"sodGeneratedNumber",2),r([classValidator.IsOptional()],a.prototype,"partNumber",2),r([classValidator.IsOptional()],a.prototype,"sectionNumber",2);function ir(o){return (e,l)=>{classValidator.registerDecorator({name:"isNullableNumber",target:e.constructor,propertyName:l,options:o,validator:{validate(u,s){return u===null||typeof u=="number"},defaultMessage(u){return `${u.property} must be a number or null`}}});}}t(ir,"IsNullableNumber");var pr=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"]}),_(),n({level:4},{groups:["createEncounter"]})],pr.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"]}),_()],pr.prototype,"postcode",2);var S=class extends pr{static{t(this,"RteArea");}code;areaDescription;address1;address2;address3;address4;email;enforcementArea};r([classValidator.IsOptional()],S.prototype,"code",2),r([classValidator.IsOptional()],S.prototype,"areaDescription",2),r([classValidator.IsOptional()],S.prototype,"address1",2),r([classValidator.IsOptional()],S.prototype,"address2",2),r([classValidator.IsOptional()],S.prototype,"address3",2),r([classValidator.IsOptional()],S.prototype,"address4",2),r([classValidator.IsOptional()],S.prototype,"email",2),r([classValidator.IsOptional()],S.prototype,"enforcementArea",2);var O=class{static{t(this,"GenericContact");}manager;costCentre;csiGeneratedNumber;userId;firstName;surname;email;rarCode;status;gvtsMarker;examinerType;ehrEmployeeId;workTelephone;mobileTelephone;version;rteArea};r([classValidator.IsOptional()],O.prototype,"manager",2),r([classValidator.IsOptional()],O.prototype,"costCentre",2),r([classValidator.IsOptional()],O.prototype,"csiGeneratedNumber",2),r([classValidator.IsOptional()],O.prototype,"userId",2),r([classValidator.IsOptional()],O.prototype,"firstName",2),r([classValidator.IsOptional()],O.prototype,"surname",2),r([classValidator.IsOptional()],O.prototype,"email",2),r([ir()],O.prototype,"rarCode",2),r([T()],O.prototype,"status",2),r([T()],O.prototype,"gvtsMarker",2),r([classValidator.IsOptional()],O.prototype,"examinerType",2),r([classValidator.IsOptional()],O.prototype,"ehrEmployeeId",2),r([classValidator.IsOptional()],O.prototype,"workTelephone",2),r([classValidator.IsOptional()],O.prototype,"mobileTelephone",2),r([T()],O.prototype,"version",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.ValidateNested(),classTransformer.Type(()=>S)],O.prototype,"rteArea",2);var K=class{static{t(this,"SignificanceReason");}generatedNumber;fullReason;shortReason;effectiveFrom;effectiveTo};r([classValidator.IsOptional()],K.prototype,"generatedNumber",2),r([classValidator.IsOptional()],K.prototype,"fullReason",2),r([classValidator.IsOptional()],K.prototype,"shortReason",2),r([g(),classValidator.IsOptional()],K.prototype,"effectiveFrom",2),r([g(),classValidator.IsOptional()],K.prototype,"effectiveTo",2);var I=class{static{t(this,"DefectSummary");}action;endorsement;lastUpdate;sgnfcanceReason;updateUserId;fiftyPercentRuleMarker;overallProhibitionSeverity;maintenanceFailureMarker;shortReason;deviationDefectCount;cat99DefectCount};r([classValidator.IsOptional()],I.prototype,"action",2),r([classValidator.IsOptional()],I.prototype,"endorsement",2),r([g({groups:["createEncounter"]}),classValidator.IsOptional()],I.prototype,"lastUpdate",2),r([classValidator.IsOptional()],I.prototype,"sgnfcanceReason",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>O)],I.prototype,"updateUserId",2),r([classValidator.IsOptional()],I.prototype,"fiftyPercentRuleMarker",2),r([classValidator.IsOptional()],I.prototype,"overallProhibitionSeverity",2),r([classValidator.IsOptional()],I.prototype,"maintenanceFailureMarker",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>K)],I.prototype,"shortReason",2),r([classValidator.IsOptional()],I.prototype,"deviationDefectCount",2),r([classValidator.IsOptional()],I.prototype,"cat99DefectCount",2);function sr(){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(sr,"TransformUKDateTime");var $=class{static{t(this,"FuelTypeBase");}fuelCode;description;otherTestInd;displayOrder;deletionMarker};r([classValidator.IsOptional()],$.prototype,"fuelCode",2),r([classValidator.IsOptional()],$.prototype,"description",2),r([classValidator.IsOptional()],$.prototype,"otherTestInd",2),r([classValidator.IsOptional()],$.prototype,"displayOrder",2),r([classValidator.IsOptional()],$.prototype,"deletionMarker",2);var d=class{static{t(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()],d.prototype,"engineHot",2),r([classValidator.IsOptional()],d.prototype,"ambientTemprature",2),r([classValidator.IsOptional()],d.prototype,"petrolCo",2),r([classValidator.IsOptional()],d.prototype,"dieselKValue",2),r([classValidator.IsOptional()],d.prototype,"dieselOilTemp",2),r([classValidator.IsOptional()],d.prototype,"catalystLambda",2),r([classValidator.IsOptional()],d.prototype,"catalystOilTemp",2),r([classValidator.IsOptional()],d.prototype,"catalystNormalCo",2),r([classValidator.IsOptional()],d.prototype,"catalystFastCo",2),r([classValidator.IsOptional()],d.prototype,"catalystNormalRpm",2),r([classValidator.IsOptional()],d.prototype,"catalystFastRpm",2),r([classValidator.IsOptional()],d.prototype,"catalystHc",2),r([classValidator.IsOptional()],d.prototype,"petrolHc",2),r([classValidator.IsOptional(),sr()],d.prototype,"petrolClbrtnDate",2),r([classValidator.IsOptional(),sr()],d.prototype,"dieselClbrtnDate",2),r([classValidator.IsOptional()],d.prototype,"dieselSerialNum",2),r([classValidator.IsOptional()],d.prototype,"petrolSerialNum",2),r([classValidator.IsOptional()],d.prototype,"testType",2),r([classValidator.ValidateIf((e,l)=>l!=null,{groups:["createEncounter"]}),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>$)],d.prototype,"fuelType",2),r([classValidator.IsOptional()],d.prototype,"otherSerialNum",2),r([classValidator.IsOptional(),sr()],d.prototype,"otherClbrtnDate",2),r([classValidator.IsOptional()],d.prototype,"clearIndicator",2);function Wr(o){return e=>{classValidator.registerDecorator({name:"ValidateCloseProhibitionsNotice",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let s=u.object;return s?s.noticeStatus?.toUpperCase?.()==="C":false},defaultMessage(l){return "Notices noticeStatus must be 'C'."}}});}}t(Wr,"ValidateCloseProhibitionsNotice");function Xr(o){return e=>{classValidator.registerDecorator({name:"ValidateDeleteEncounterNotice",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let s=u.object;if(!s)return false;let b=s.noticeType?.code!=null,h=s.noticeStatus?.toUpperCase?.()==="W",x=s.issueDate!=null,G=s.inputDate!=null;return b&&h&&x&&G},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(Xr,"ValidateDeleteEncounterNotice");var mr=class{static{t(this,"CommonDeletion");}description;deletionMarker};r([n({level:4},{groups:["createEncounter"]})],mr.prototype,"description",2),r([n({level:4},{groups:["createEncounter"]})],mr.prototype,"deletionMarker",2);var V=class extends mr{static{t(this,"CommonData");}sequenceNumber};r([n({level:4},{groups:["createEncounter"]})],V.prototype,"sequenceNumber",2);var Y=class extends V{static{t(this,"VehicleIdType");}shortCode;code;vehicleTrailerIndicator};r([n({level:4},{groups:["createEncounter"]})],Y.prototype,"shortCode",2),r([n({level:4},{groups:["createEncounter"]})],Y.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],Y.prototype,"vehicleTrailerIndicator",2);var c=class{static{t(this,"ExemptionConditionBaseType");}expiryDate;ntyCode;locationFrom;locationTo;noLoadIndicator;noTrailerIndictr;otherConditions;rgdTowBarIndictr;speedRestriction;speedUnit;susTowFrtIndctr;susTowRrIndctr;visibilityIndctr};r([classValidator.IsOptional(),g({groups:["createEncounter"]})],c.prototype,"expiryDate",2),r([classValidator.IsOptional()],c.prototype,"ntyCode",2),r([classValidator.IsOptional()],c.prototype,"locationFrom",2),r([classValidator.IsOptional()],c.prototype,"locationTo",2),r([classValidator.IsOptional()],c.prototype,"noLoadIndicator",2),r([classValidator.IsOptional()],c.prototype,"noTrailerIndictr",2),r([classValidator.IsOptional()],c.prototype,"otherConditions",2),r([classValidator.IsOptional()],c.prototype,"rgdTowBarIndictr",2),r([classValidator.IsOptional()],c.prototype,"speedRestriction",2),r([classValidator.IsOptional()],c.prototype,"speedUnit",2),r([classValidator.IsOptional()],c.prototype,"susTowFrtIndctr",2),r([classValidator.IsOptional()],c.prototype,"susTowRrIndctr",2),r([classValidator.IsOptional()],c.prototype,"visibilityIndctr",2);var gr=class{static{t(this,"NoticeClosureBaseType");}text;motReference};r([classValidator.IsOptional()],gr.prototype,"text",2),r([classValidator.IsOptional()],gr.prototype,"motReference",2);var f=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()],f.prototype,"code",2),r([classValidator.IsOptional()],f.prototype,"ntyDescription",2),r([classValidator.IsOptional()],f.prototype,"currentCode",2),r([T()],f.prototype,"act",2),r([classValidator.IsOptional()],f.prototype,"currentVersion",2),r([classValidator.IsOptional()],f.prototype,"typeCode",2),r([n({level:4},{groups:["createEncounter"]})],f.prototype,"ntyShortDescription",2),r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),n({level:4},{groups:["createEncounter"]})],f.prototype,"operatorCopy",2),r([n({level:4},{groups:["createEncounter"]})],f.prototype,"driverRequired",2),r([n({level:4},{groups:["createEncounter"]})],f.prototype,"translationAvailable",2),r([n({level:4},{groups:["createEncounter"]})],f.prototype,"sequenceNumber",2),r([T()],f.prototype,"noticeTypeCategory",2),r([ir()],f.prototype,"autoClosurePeriod",2),r([classValidator.IsOptional()],f.prototype,"ntySummary",2),r([n({level:4},{groups:["createEncounter"]})],f.prototype,"closeFlag",2),r([ir()],f.prototype,"aevEventCodeClose",2),r([ir()],f.prototype,"aevEventCodeClear",2),r([ir()],f.prototype,"aevEventCodeReactivate",2),r([T()],f.prototype,"ettCode",2),r([T()],f.prototype,"notifiableFlag",2);var D=class{static{t(this,"NoticeTypeDetail");}ntyCode;version;deletionMarker;updateUserId;lastUpdate;actDetail;actMsg1;actMsg2;actMsg3};r([classValidator.IsOptional()],D.prototype,"ntyCode",2),r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),classValidator.IsOptional()],D.prototype,"version",2),r([classValidator.IsOptional()],D.prototype,"deletionMarker",2),r([classValidator.IsOptional()],D.prototype,"updateUserId",2),r([classValidator.IsOptional()],D.prototype,"lastUpdate",2),r([classValidator.IsOptional()],D.prototype,"actDetail",2),r([T()],D.prototype,"actMsg1",2),r([T()],D.prototype,"actMsg2",2),r([T()],D.prototype,"actMsg3",2);var B=class extends V{static{t(this,"CommonVersion");}code;version};r([n({level:4},{groups:["createEncounter"]})],B.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],B.prototype,"version",2);var U=class extends B{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(),g({groups:["createEncounter"]})],U.prototype,"effectiveFromDate",2),r([classValidator.IsOptional(),g({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);var L=class extends V{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"]})],L.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],L.prototype,"version",2),r([n({level:4},{groups:["createEncounter"]})],L.prototype,"ukMarker",2),r([n({level:4},{groups:["createEncounter"]})],L.prototype,"name",2),r([n({level:4},{groups:["createEncounter"]})],L.prototype,"ostCode",2),r([classValidator.IsOptional()],L.prototype,"ofgCode",2),r([classValidator.IsOptional()],L.prototype,"fkOgpCode",2),r([classValidator.IsOptional()],L.prototype,"fkOgpVersion",2),r([n({level:4},{groups:["createEncounter"]}),sr()],L.prototype,"effectiveFromDate",2),r([classValidator.IsOptional(),sr()],L.prototype,"effectiveToDate",2),r([n({level:4},{groups:["createEncounter"]})],L.prototype,"otyCode",2),r([classValidator.IsOptional()],L.prototype,"osbCode",2),r([classValidator.IsOptional()],L.prototype,"hazchemRisk",2),r([classValidator.IsOptional()],L.prototype,"hazchemReason",2),r([classValidator.IsOptional()],L.prototype,"descriptionWelsh",2);var br=class extends L{static{t(this,"Offences");}endorsableFlag};r([classValidator.IsOptional()],br.prototype,"endorsableFlag",2);function Qr(o){return e=>{classValidator.registerDecorator({name:"ValidatePnoGeneratedNumber",target:e,propertyName:void 0,options:o,validator:{validate(l,u){let s=u.object;if(!s)return false;let b=s.pnoGeneratedNumber,x=s.noticeRefSource?.toUpperCase?.()==="GEN";return !(b==null||x&&!/^[A-Za-z0-9]+$/.test(b)||x&&!Gn(b))},defaultMessage(l){return "pnoGeneratedNumber is invalid or does not match the check digit."}}});}}t(Qr,"ValidatePnoGeneratedNumber");function Gn(o){if(!o||o.length<2)return false;let l=o.charAt(o.length-1).charCodeAt(0)-48,s=o.slice(0,-1).toUpperCase().split(""),b=0;for(let G=0;G<s.length;G++)b+=s[G].charCodeAt(0)*(G+1);let x=48+b%10;return l===x-48}t(Gn,"calculateCheckDigit");var Cr=class extends V{static{t(this,"PenaltyNoticeStatus");}code;usageInd};r([n({level:4},{groups:["createEncounter"]})],Cr.prototype,"code",2),r([n({level:4},{groups:["createEncounter"]})],Cr.prototype,"usageInd",2);var C=class{venGeneratedNumber;noticeRefSource;referenceNumber;driverForename;driverSurname;driverLicenceNumber;drivingLicenseStatus;driverType;amount;points;paymentDueDate;referredDate;penaltyNoticeStatus;lastUpdatedDate;lastUpdatedBy;pnoGeneratedNumber;odrGeneratedNumber};t(C,"PenaltyNotice"),r([classValidator.IsOptional()],C.prototype,"venGeneratedNumber",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"noticeRefSource",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"referenceNumber",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"driverForename",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"driverSurname",2),r([n({level:4,allowEmpty:true},{groups:["createEncounter"]})],C.prototype,"driverLicenceNumber",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"drivingLicenseStatus",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"driverType",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"amount",2),r([n({level:4},{groups:["createEncounter"]})],C.prototype,"points",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],C.prototype,"paymentDueDate",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],C.prototype,"referredDate",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Cr),n({level:4},{groups:["createEncounter"]})],C.prototype,"penaltyNoticeStatus",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],C.prototype,"lastUpdatedDate",2),r([classValidator.IsOptional()],C.prototype,"lastUpdatedBy",2),r([classValidator.IsOptional()],C.prototype,"pnoGeneratedNumber",2),r([classValidator.IsOptional()],C.prototype,"odrGeneratedNumber",2),C=r([Qr({groups:["createEncounter"]})],C);var Z=class{static{t(this,"ProhibitionClosureReasonBaseType");}code;description;sequenceNumber;deletionMarker;manualInd};r([classValidator.IsOptional()],Z.prototype,"code",2),r([classValidator.IsOptional()],Z.prototype,"description",2),r([classValidator.IsOptional()],Z.prototype,"sequenceNumber",2),r([classValidator.IsOptional()],Z.prototype,"deletionMarker",2),r([classValidator.IsOptional()],Z.prototype,"manualInd",2);var fr=class{static{t(this,"CommonDescription");}code;description};r([T()],fr.prototype,"code",2),r([T()],fr.prototype,"description",2);var Rr=class extends fr{static{t(this,"RemovalInstruction");}sequenceNumber;deletionMarker};r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),n({level:4},{groups:["createEncounter"]})],Rr.prototype,"sequenceNumber",2),r([n({level:4},{groups:["createEncounter"]})],Rr.prototype,"deletionMarker",2);var i=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(i,"NoticeBase"),r([classValidator.IsOptional()],i.prototype,"odrGeneratedNumber",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>f),n({level:4},{groups:["createEncounter"]})],i.prototype,"noticeType",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.ValidateNested(),classTransformer.Type(()=>C),classValidator.IsOptional()],i.prototype,"penaltyNotice",2),r([classValidator.IsOptional()],i.prototype,"ordGeneratedNumber",2),r([classValidator.IsOptional()],i.prototype,"closureLastUserId",2),r([classValidator.IsOptional()],i.prototype,"oliLicenceNumber",2),r([classValidator.IsOptional()],i.prototype,"noticeReferenceNumber",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.prototype,"inForceDate",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.prototype,"inForceTime",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],i.prototype,"issueDate",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],i.prototype,"issueTime",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],i.prototype,"inputDate",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"issueOffFname",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"issueOffSname",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"issueOfficerType",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"noticeStatus",2),r([classValidator.IsOptional()],i.prototype,"pcrCode",2),r([_(),n({level:4},{groups:["createEncounter"]})],i.prototype,"rceivedByForenme",2),r([_(),n({level:4},{groups:["createEncounter"]})],i.prototype,"rceivedBySurname",2),r([classValidator.Max(45,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],i.prototype,"restHours",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"rteVehId",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Y),n({level:4},{groups:["createEncounter"]})],i.prototype,"rteVehIdType",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"sMarked",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"translationMkr",2),r([g({groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],i.prototype,"updateTimestamp",2),r([n({level:4},{groups:["createEncounter"]})],i.prototype,"dangerGoodsDeferralPeriod",2),r([classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>D)],i.prototype,"noticeTypeDetail",2),r([classValidator.IsOptional()],i.prototype,"ifkOpLicenceNum",2),r([classValidator.IsOptional()],i.prototype,"ifkTestCertNum",2),r([T()],i.prototype,"immediateInd",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>br)],i.prototype,"offences",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Rr)],i.prototype,"removalInstr",2),r([classValidator.IsOptional()],i.prototype,"policeOfficerNum",2),r([classValidator.IsOptional()],i.prototype,"policeStation",2),r([classValidator.IsOptional()],i.prototype,"testStationInd",2),r([T()],i.prototype,"towingVehId",2),r([classValidator.IsOptional()],i.prototype,"updateUserId",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.prototype,"clearanceDate",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.prototype,"closureLastTime",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Z)],i.prototype,"closureReason",2),r([classValidator.IsOptional()],i.prototype,"filedAt",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.prototype,"tachoLastCalibrationDate",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.prototype,"tachoInspectionDueDate",2),r([classValidator.IsOptional()],i.prototype,"dangerousGoodsDirection",2),r([classValidator.IsOptional()],i.prototype,"dangerGoodsImmProhInd",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>c)],i.prototype,"exemptionConditions",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>gr)],i.prototype,"noticeClosure",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>U)],i.prototype,"offencesList",2),r([classValidator.IsOptional()],i.prototype,"opCopyPrinted",2),r([classValidator.IsOptional(),g({groups:["createEncounter"]})],i.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"]})],i.prototype,"otherLocation",2),r([classValidator.IsOptional()],i.prototype,"linkedNoticeId",2),i=r([Xr({groups:["deleteEncounter"]}),Wr({groups:["closeProhibition"]})],i);var q=class{static{t(this,"AxlesWeight");}axleNumber;actualWghtAmount;permittedWeight;designWeight;offsideWeight;nearsideWeight;cmpnstngAxleCode};r([n({level:4},{groups:["createEncounter"]})],q.prototype,"axleNumber",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],q.prototype,"actualWghtAmount",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],q.prototype,"permittedWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],q.prototype,"designWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],q.prototype,"offsideWeight",2),r([classValidator.Min(0,{groups:["createEncounter"]}),classValidator.Max(99999,{groups:["createEncounter"]}),n({level:4},{groups:["createEncounter"]})],q.prototype,"nearsideWeight",2),r([classValidator.IsOptional()],q.prototype,"cmpnstngAxleCode",2);var Ar=class extends B{static{t(this,"BodyType");}applicability;name};r([n({level:4},{groups:["createEncounter"]})],Ar.prototype,"applicability",2),r([n({level:4},{groups:["createEncounter"]})],Ar.prototype,"name",2);var Ir=class extends V{static{t(this,"Laden");}code};r([n({level:4},{groups:["createEncounter"]})],Ir.prototype,"code",2);var W=class extends V{static{t(this,"RoadsideVehicleType");}vehicleType;key;tractorIndicator;dcaPart;useOffenceFlow};r([n({level:4},{groups:["createEncounter"]})],W.prototype,"vehicleType",2),r([n({level:4},{groups:["createEncounter"]})],W.prototype,"key",2),r([n({level:4},{groups:["createEncounter"]})],W.prototype,"tractorIndicator",2),r([n({level:4},{groups:["createEncounter"]})],W.prototype,"dcaPart",2),r([n({level:4},{groups:["createEncounter"]})],W.prototype,"useOffenceFlow",2);exports.Motor=class m extends hr{venGeneratedNumber;vehicleId;vehicleIdType;vehicleType;roadsideVehicleType;actionCode;sigMaintFailure;vehicleLivery;ministryPlateNumber;odometerReading;odometerReadingUnit;chassisNumber;laden;axlesWeights;bodyType;seatingCapacity;notices;speedLimiterChecked;prevOpInspDate;srNumOfTyres;defectsRecMkr;defectSummary;defects;emissionCheck};t(exports.Motor,"Motor"),r([T()],exports.Motor.prototype,"venGeneratedNumber",2),r([_(),n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"vehicleId",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>Y),n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"vehicleIdType",2),r([classValidator.IsOptional()],exports.Motor.prototype,"vehicleType",2),r([classValidator.ValidateNested(),classTransformer.Type(()=>W),n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"roadsideVehicleType",2),r([n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"actionCode",2),r([classValidator.IsOptional()],exports.Motor.prototype,"sigMaintFailure",2),r([T()],exports.Motor.prototype,"vehicleLivery",2),r([T(),_()],exports.Motor.prototype,"ministryPlateNumber",2),r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),classValidator.IsOptional(),classValidator.Max(9999999,{groups:["createEncounter"]})],exports.Motor.prototype,"odometerReading",2),r([classValidator.IsOptional()],exports.Motor.prototype,"odometerReadingUnit",2),r([classValidator.IsOptional(),_()],exports.Motor.prototype,"chassisNumber",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Ir)],exports.Motor.prototype,"laden",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>q)],exports.Motor.prototype,"axlesWeights",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>Ar)],exports.Motor.prototype,"bodyType",2),r([classTransformer.Transform(({value:e})=>e!==null?Number.parseInt(e,10):null),classValidator.IsOptional()],exports.Motor.prototype,"seatingCapacity",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>i)],exports.Motor.prototype,"notices",2),r([n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"speedLimiterChecked",2),r([g({groups:["createEncounter"]}),n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"prevOpInspDate",2),r([n({level:2},{groups:["createEncounter"]})],exports.Motor.prototype,"srNumOfTyres",2),r([classValidator.IsOptional()],exports.Motor.prototype,"defectsRecMkr",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>I)],exports.Motor.prototype,"defectSummary",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>a)],exports.Motor.prototype,"defects",2),r([classValidator.ValidateIf((e,l)=>l!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>d)],exports.Motor.prototype,"emissionCheck",2),exports.Motor=r([Sr({groups:["createEncounter"]}),Gr({groups:["createEncounter"]}),Mr({groups:["deleteEncounter"]})],exports.Motor);