@dvsa/smc-encounter-schema
Version:
Schemas required for Encounter submission as well as custom validators ## Developing ### Pre-requisites
1 lines • 7.59 kB
JavaScript
;var classTransformer=require('class-transformer'),classValidator=require('class-validator');var b=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var o=(t,r)=>b(t,"name",{value:r,configurable:true});var e=(t,r,l,n)=>{for(var s=n>1?void 0:n?S(r,l):r,m=t.length-1,g;m>=0;m--)(g=t[m])&&(s=(n?g(r,l,s):g(s))||s);return n&&s&&b(r,l,s),s};var f=class t{static{o(this,"CurrentEncounterLevel");}static instance;level;officerType;requestType;constructor(){this.level=1,this.officerType="ANY",this.requestType="C";}static getInstance(){return t.instance||(t.instance=new t),t.instance}getEncounterType(){return this.level}setEncounterType(r){this.level=r;}getExaminerOfficerType(){return this.officerType}setExaminerOfficerType(r){this.officerType=r;}getRequestType(){return this.requestType}setRequestType(r){this.requestType=r;}isDeletedEncounter(){return this.requestType==="D"}};var c=class{validate(r,l){let n=l.constraints[0],s=f.getInstance(),m=s.getEncounterType(),g=s.getExaminerOfficerType();return n.level===0||n.exceptions?.includes(m)||n.level!==void 0&&n.level>m||n.roles?.length&&!n.roles.includes(g)&&!n.roles.includes("ANY")?true:r==null?false:typeof r=="string"?n.allowEmpty?true:r.trim().length>0:Array.isArray(r)?r.length===0?false:r.every((d,V)=>d==null?false:Object.entries(d).every(([W,h])=>typeof h=="string"?h.trim().length>0:h!=null)):true}};o(c,"MandatoryFieldConstraint"),c=e([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],c);function i(t,r){return (l,n)=>{classValidator.registerDecorator({name:"MandatoryField",target:l.constructor,propertyName:n,constraints:[t],options:r,validator:c});}}o(i,"MandatoryField");var T=class{validate(r,l){return r==null?true:/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(r)}defaultMessage(r){return `${r.property} must match format YYYY-MM-DD HH:mm:ss`}};o(T,"UKDateFormatValidator"),T=e([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],T);function v(t){return (r,l)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:r.constructor,propertyName:l,options:t,validator:T});}}o(v,"ValidateUKDateFormat");function I(t){return r=>{classValidator.registerDecorator({name:"ValidateContact",target:r,propertyName:void 0,options:t,validator:{validate(l,n){let s=n.object;if(!s)return false;let m=f.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$",g=new RegExp(m),d=true;return s.forename!=null&&(g.test(s.forename)||(d=false)),s.surname!=null&&(g.test(s.surname)||(d=false)),d},defaultMessage(l){return `forename and surname must match ${f.getInstance().isDeletedEncounter()?"^(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$":"^(?!-|\\s)(?!.*[\u2018\u2019',.-]{2})[A-Za-z\u2018\u2019',. -]*$"}`}}});}}o(I,"ValidateContact");function R(t){return (r,l)=>{classValidator.registerDecorator({name:"isNullableString",target:r.constructor,propertyName:l,options:t,validator:{validate(n,s){return n===null||typeof n=="string"},defaultMessage(n){return `${n.property} must be a string or null`}}});}}o(R,"IsNullableString");function E(){return classTransformer.Transform(({value:t})=>typeof t=="string"?t.toUpperCase():t)}o(E,"ToUpperCase");var A=class{static{o(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"]}),E(),i({level:4},{groups:["createEncounter"]})],A.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"]}),E()],A.prototype,"postcode",2);var p=class p extends A{static{o(this,"Address");}static REG_EX_ADDRESS_LINE=/^(?!-|\\s)(?!.*[&‘’',.-]{2})[A-Za-z0-9&‘’',. -]{0,60}$/;addressLine1;addressLine2;addressLine3;addressLine4;ukResident};e([classValidator.Matches(p.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"]}),E(),i({level:4},{groups:["createEncounter"]})],p.prototype,"addressLine1",2),e([classValidator.IsOptional(),classValidator.Matches(p.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"]}),E()],p.prototype,"addressLine2",2),e([classValidator.IsOptional(),classValidator.Matches(p.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"]}),E()],p.prototype,"addressLine3",2),e([classValidator.IsOptional(),classValidator.Matches(p.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"]}),E()],p.prototype,"addressLine4",2),e([classValidator.IsOptional(),E()],p.prototype,"ukResident",2);var x=p;var O=class{static{o(this,"CommonTradingAs");}tradingAs;address};e([classValidator.IsOptional(),classValidator.Matches(/^(?!-|\s)(?!.*[&@£#$¥,.:;\-]{2})[A-Za-z0-9&@£#$¥,.:; \-]*$/,{groups:["createEncounter"]}),E()],O.prototype,"tradingAs",2),e([classValidator.ValidateNested(),classTransformer.Type(()=>x),i({level:4},{groups:["createEncounter"]})],O.prototype,"address",2);var u=class{static{o(this,"ContactType");}ctyNumber;ctyDescription;deletionMarker;updateInd;multipleInd;sortSequence};e([i({level:4},{groups:["createEncounter"]})],u.prototype,"ctyNumber",2),e([i({level:4},{groups:["createEncounter"]})],u.prototype,"ctyDescription",2),e([i({level:4},{groups:["createEncounter"]})],u.prototype,"deletionMarker",2),e([i({level:4},{groups:["createEncounter"]})],u.prototype,"updateInd",2),e([i({level:4},{groups:["createEncounter"]})],u.prototype,"multipleInd",2),e([i({level:4},{groups:["createEncounter"]})],u.prototype,"sortSequence",2);exports.Contact=class a extends O{generatedNumber;farePaid;contactType;forename;dateOfBirth;contactOnNotice;conComment;occupation;phoneNumber;lastUpdate;surname};o(exports.Contact,"Contact"),e([R()],exports.Contact.prototype,"generatedNumber",2),e([i({level:4},{groups:["createEncounter"]})],exports.Contact.prototype,"farePaid",2),e([classValidator.ValidateNested(),classTransformer.Type(()=>u),i({level:4},{groups:["createEncounter"]})],exports.Contact.prototype,"contactType",2),e([classValidator.IsOptional(),E()],exports.Contact.prototype,"forename",2),e([classValidator.IsOptional(),v({groups:["createEncounter"]})],exports.Contact.prototype,"dateOfBirth",2),e([R()],exports.Contact.prototype,"contactOnNotice",2),e([R()],exports.Contact.prototype,"conComment",2),e([R()],exports.Contact.prototype,"occupation",2),e([classValidator.IsOptional(),classValidator.Length(0,35,{groups:["createEncounter"],message:"Must be no more than 35 characters in length"})],exports.Contact.prototype,"phoneNumber",2),e([i({level:4},{groups:["createEncounter"]}),v({groups:["createEncounter"]})],exports.Contact.prototype,"lastUpdate",2),e([R(),E()],exports.Contact.prototype,"surname",2),exports.Contact=e([I({groups:["createEncounter"]})],exports.Contact);