@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 12.5 kB
JavaScript
;var classTransformer=require('class-transformer'),classValidator=require('class-validator');var Z=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var r=(o,t)=>Z(o,"name",{value:t,configurable:true});var e=(o,t,n,s)=>{for(var u=s>1?void 0:s?te(t,n):t,m=o.length-1,I;m>=0;m--)(I=o[m])&&(u=(s?I(t,n,u):I(u))||u);return s&&u&&Z(t,n,u),u};var $=class o{static{r(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(t){this.level=t;}getExaminerOfficerType(){return this.officerType}setExaminerOfficerType(t){this.officerType=t;}getRequestType(){return this.requestType}setRequestType(t){this.requestType=t;}isDeletedEncounter(){return this.requestType==="D"}};var R=class{validate(t,n){let s=n.constraints[0],u=$.getInstance(),m=u.getEncounterType(),I=u.getExaminerOfficerType();return s.level===0||s.exceptions?.includes(m)||s.level!==void 0&&s.level>m||s.roles?.length&&!s.roles.includes(I)&&!s.roles.includes("ANY")?true:t==null?false:typeof t=="string"?s.allowEmpty?true:t.trim().length>0:Array.isArray(t)?t.length===0?false:t.every((x,_)=>x==null?false:Object.entries(x).every(([ee,F])=>typeof F=="string"?F.trim().length>0:F!=null)):true}};r(R,"MandatoryFieldConstraint"),R=e([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],R);function i(o,t){return (n,s)=>{classValidator.registerDecorator({name:"MandatoryField",target:n.constructor,propertyName:s,constraints:[o],options:t,validator:R});}}r(i,"MandatoryField");function P(o){return t=>{classValidator.registerDecorator({name:"ValidateOperatorObject",target:t,propertyName:void 0,options:o,validator:{validate(n,s){let u=s.object;if(!u)return false;let m=0,x=u.stateOfOpDisc?.licenceDiscType,_=u.odtOliLicenceNumber;return x?.toUpperCase()==="V"&&!_&&m++,_&&u.licenceTypeCode?.licenceTypeCode&&(u.licenceTypeCode.licenceTypeCode.toUpperCase()==="CA"?/^[^*?]*$/.test(_)||m++:/^([a-zA-Z]{2}[0-9]{0,23})$/.test(_)||m++),m===0},defaultMessage(n){return "odtOliLicenceNumber must exist if licenceDiscType is 'V'. If licenceTypeCode is 'CA', it must not contain * or ?. Otherwise, it must start with 2 letters followed by up to 23 digits."}}});}}r(P,"ValidateOperatorObject");var A=class{validate(t,n){return t==null?true:/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(t)}defaultMessage(t){return `${t.property} must match format YYYY-MM-DD HH:mm:ss`}};r(A,"UKDateFormatValidator"),A=e([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],A);function d(o){return (t,n)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:t.constructor,propertyName:n,options:o,validator:A});}}r(d,"ValidateUKDateFormat");function q(o){return (t,n)=>{classValidator.registerDecorator({name:"isNullableString",target:t.constructor,propertyName:n,options:o,validator:{validate(s,u){return s===null||typeof s=="string"},defaultMessage(s){return `${s.property} must be a string or null`}}});}}r(q,"IsNullableString");function p(){return classTransformer.Transform(({value:o})=>typeof o=="string"?o.toUpperCase():o)}r(p,"ToUpperCase");var b=class{static{r(this,"CommonPostAddress");}postTown;postcode};e([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"]}),p(),i({level:4},{groups:["createEncounter"]})],b.prototype,"postTown",2),e([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"]}),p()],b.prototype,"postcode",2);var c=class c extends b{static{r(this,"Address");}static REG_EX_ADDRESS_LINE=/^(?!-|\\s)(?!.*[&‘’',.-]{2})[A-Za-z0-9&‘’',. -]{0,60}$/;addressLine1;addressLine2;addressLine3;addressLine4;ukResident};e([classValidator.Matches(c.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"]}),p(),i({level:4},{groups:["createEncounter"]})],c.prototype,"addressLine1",2),e([classValidator.IsOptional(),classValidator.Matches(c.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"]}),p()],c.prototype,"addressLine2",2),e([classValidator.IsOptional(),classValidator.Matches(c.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"]}),p()],c.prototype,"addressLine3",2),e([classValidator.IsOptional(),classValidator.Matches(c.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"]}),p()],c.prototype,"addressLine4",2),e([classValidator.IsOptional(),p()],c.prototype,"ukResident",2);var k=c;var V=class{static{r(this,"CommonTradingAs");}tradingAs;address};e([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&@£#$¥,.:;\-]{2})[A-Za-z0-9&@£#$¥,.:; \-]*$/,{groups:["createEncounter"]}),p()],V.prototype,"tradingAs",2),e([classValidator.ValidateNested(),classTransformer.Type(()=>k),i({level:4},{groups:["createEncounter"]})],V.prototype,"address",2);var E=class{static{r(this,"Nationality");}drivingLicenceAuthority;irlCountry;vehicleIndicator;cardIssuingAuthorityInd;intelligenceSubjectInd;intRegNumberCode;nonVosa;irlCode;deletionMarker;foreignOpNationalityInd;inrNationalityInd};e([i({level:4},{groups:["createEncounter"]})],E.prototype,"drivingLicenceAuthority",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"irlCountry",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"vehicleIndicator",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"cardIssuingAuthorityInd",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"intelligenceSubjectInd",2),e([classValidator.IsOptional()],E.prototype,"intRegNumberCode",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"nonVosa",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"irlCode",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"deletionMarker",2),e([i({level:4},{groups:["createEncounter"]})],E.prototype,"foreignOpNationalityInd",2),e([classValidator.IsOptional()],E.prototype,"inrNationalityInd",2);var T=class{static{r(this,"ExistingTradingAs");}licenceNumber;name60;currentRecordInd;extractionDate;nameFirst15};e([classValidator.IsOptional()],T.prototype,"licenceNumber",2),e([classValidator.IsOptional()],T.prototype,"name60",2),e([classValidator.IsOptional()],T.prototype,"currentRecordInd",2),e([d({groups:["createEncounter"]}),classValidator.IsOptional()],T.prototype,"extractionDate",2),e([classValidator.IsOptional()],T.prototype,"nameFirst15",2);var y=class{static{r(this,"RecordType");}licenceStatusType;licenceStatusDescription;deletionMarker};e([classValidator.IsOptional()],y.prototype,"licenceStatusType",2),e([classValidator.IsOptional()],y.prototype,"licenceStatusDescription",2),e([classValidator.IsOptional()],y.prototype,"deletionMarker",2);var a=class{static{r(this,"ExistingOperatorDetail");}extractionDate;recordType;currentRecordInd;vehiclesAuthorised;vehiclesInPossession;trailersAuthorised;trailersInPossession;licenceStartDate;licenceReviewDate;name15;telephoneNumber;existingTradingAs};e([d({groups:["createEncounter"]}),i({level:4},{groups:["createEncounter"]})],a.prototype,"extractionDate",2),e([classValidator.ValidateIf((t,n)=>n!=null),classValidator.ValidateNested(),classTransformer.Type(()=>y),classValidator.IsOptional()],a.prototype,"recordType",2),e([classValidator.IsOptional()],a.prototype,"currentRecordInd",2),e([classValidator.IsOptional()],a.prototype,"vehiclesAuthorised",2),e([classValidator.IsOptional()],a.prototype,"vehiclesInPossession",2),e([classValidator.IsOptional()],a.prototype,"trailersAuthorised",2),e([classValidator.IsOptional()],a.prototype,"trailersInPossession",2),e([d({groups:["createEncounter"]}),i({level:4},{groups:["createEncounter"]})],a.prototype,"licenceStartDate",2),e([d({groups:["createEncounter"]}),i({level:4},{groups:["createEncounter"]})],a.prototype,"licenceReviewDate",2),e([classValidator.IsOptional()],a.prototype,"name15",2),e([classValidator.IsOptional()],a.prototype,"telephoneNumber",2),e([classValidator.ValidateIf((t,n)=>n!=null),classValidator.ValidateNested(),classTransformer.Type(()=>T),classValidator.IsOptional()],a.prototype,"existingTradingAs",2);var U=class{static{r(this,"LicenceTypeCode");}licenceTypeCode;licenceTypeDescription;deletionMarker};e([i({level:4},{groups:["createEncounter"]})],U.prototype,"licenceTypeCode",2),e([i({level:4},{groups:["createEncounter"]})],U.prototype,"licenceTypeDescription",2),e([i({level:4},{groups:["createEncounter"]})],U.prototype,"deletionMarker",2);var g=class{static{r(this,"OCRSOperatorSnapshots");}generatedNumber;encounterIdentifier;operatorIdentifier;nationality;scoreType;score;grade};e([classValidator.IsOptional()],g.prototype,"generatedNumber",2),e([classValidator.IsOptional()],g.prototype,"encounterIdentifier",2),e([classValidator.IsOptional()],g.prototype,"operatorIdentifier",2),e([classValidator.IsOptional()],g.prototype,"nationality",2),e([classValidator.IsOptional()],g.prototype,"scoreType",2),e([classValidator.IsOptional()],g.prototype,"score",2),e([classValidator.IsOptional()],g.prototype,"grade",2);var O=class{static{r(this,"StateOfOpDisc");}licenceDiscType;licenceDiscDescription;deletionMarker};e([classValidator.IsOptional()],O.prototype,"licenceDiscType",2),e([classValidator.IsOptional()],O.prototype,"licenceDiscDescription",2),e([classValidator.IsOptional()],O.prototype,"deletionMarker",2);exports.Operator=class l extends V{expiryDate;generatedNumber;lastUpdate;licenceTypeCode;oopName;serialNumber;golDataMismatch;odtOliLicenceNumber;existingOperatorDetail;ocrsOperatorSnapshots;foreignGeneratedNumber;observedOperatorUpdated;operatorCountry;stateOfOpDisc};r(exports.Operator,"Operator"),e([d({groups:["createEncounter"]}),classValidator.IsOptional()],exports.Operator.prototype,"expiryDate",2),e([classValidator.IsOptional()],exports.Operator.prototype,"generatedNumber",2),e([d({groups:["createEncounter"]}),classValidator.IsOptional()],exports.Operator.prototype,"lastUpdate",2),e([classValidator.ValidateIf((t,n)=>n!=null),classValidator.ValidateNested(),classTransformer.Type(()=>U),classValidator.IsOptional()],exports.Operator.prototype,"licenceTypeCode",2),e([i({level:4},{groups:["createEncounter"]})],exports.Operator.prototype,"oopName",2),e([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&‘’',.()\/\-]{2})[A-Za-z0-9 &‘’',.()\/\-]*$/,{groups:["createEncounter"]})],exports.Operator.prototype,"serialNumber",2),e([classValidator.IsOptional()],exports.Operator.prototype,"golDataMismatch",2),e([classValidator.Matches(/^(?!-|\s)(?!.*[&‘’',.()\/\-]{2})[A-Za-z0-9 &‘’',.()\/\-]*$/,{groups:["createEncounter"]}),classValidator.IsOptional()],exports.Operator.prototype,"odtOliLicenceNumber",2),e([classValidator.ValidateIf((t,n)=>n!=null),classValidator.ValidateNested(),classTransformer.Type(()=>a),classValidator.IsOptional()],exports.Operator.prototype,"existingOperatorDetail",2),e([classValidator.ValidateIf((t,n)=>n!=null),classValidator.IsOptional(),classValidator.ValidateNested({each:true}),classTransformer.Type(()=>g),classValidator.IsArray()],exports.Operator.prototype,"ocrsOperatorSnapshots",2),e([q()],exports.Operator.prototype,"foreignGeneratedNumber",2),e([q()],exports.Operator.prototype,"observedOperatorUpdated",2),e([classValidator.ValidateNested(),classTransformer.Type(()=>E),i({level:4},{groups:["createEncounter"]})],exports.Operator.prototype,"operatorCountry",2),e([classValidator.ValidateIf((t,n)=>n!=null),classValidator.ValidateNested(),classTransformer.Type(()=>O),classValidator.IsOptional()],exports.Operator.prototype,"stateOfOpDisc",2),exports.Operator=e([P({groups:["createEncounter"]})],exports.Operator);