UNPKG

@dvsa/smc-encounter-schema

Version:

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

1 lines 7.91 kB
'use strict';var classTransformer=require('class-transformer'),classValidator=require('class-validator');var I=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var s=(n,r)=>I(n,"name",{value:r,configurable:true});var e=(n,r,i,t)=>{for(var u=t>1?void 0:t?S(r,i):r,g=n.length-1,d;g>=0;g--)(d=n[g])&&(u=(t?d(r,i,u):d(u))||u);return t&&u&&I(r,i,u),u};var c=class n{static{s(this,"CurrentEncounterLevel");}static instance;level;officerType;requestType;constructor(){this.level=1,this.officerType="ANY",this.requestType="C";}static getInstance(){return n.instance||(n.instance=new n),n.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 f=class{validate(r,i){let t=i.constraints[0],u=c.getInstance(),g=u.getEncounterType(),d=u.getExaminerOfficerType();return t.level===0||t.exceptions?.includes(g)||t.level!==void 0&&t.level>g||t.roles?.length&&!t.roles.includes(d)&&!t.roles.includes("ANY")?true:r==null?false:typeof r=="string"?t.allowEmpty?true:r.trim().length>0:Array.isArray(r)?r.length===0?false:r.every((b,W)=>b==null?false:Object.entries(b).every(([X,C])=>typeof C=="string"?C.trim().length>0:C!=null)):true}};s(f,"MandatoryFieldConstraint"),f=e([classValidator.ValidatorConstraint({name:"MandatoryField",async:false})],f);function p(n,r){return (i,t)=>{classValidator.registerDecorator({name:"MandatoryField",target:i.constructor,propertyName:t,constraints:[n],options:r,validator:f});}}s(p,"MandatoryField");function V(n){return r=>{classValidator.registerDecorator({name:"ValidateSetupUserInput",target:r,propertyName:void 0,options:n,validator:{validate(i,t){let u=t.object;if(!u)return false;let g=u.csiType?.toUpperCase?.()==="P",d=u.setupUser!==null&&u.setupUser!==void 0;return g||d},defaultMessage(i){return 'setupUser must be present when csiType is not "P"'}}});}}s(V,"ValidateSetupUserInput");var N=class{validate(r,i){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`}};s(N,"UKDateFormatValidator"),N=e([classValidator.ValidatorConstraint({name:"ValidateUKDateFormat",async:false})],N);function h(n){return (r,i)=>{classValidator.registerDecorator({name:"ValidateUKDateFormat",target:r.constructor,propertyName:i,options:n,validator:N});}}s(h,"ValidateUKDateFormat");function x(n){return (r,i)=>{classValidator.registerDecorator({name:"isNullableNumber",target:r.constructor,propertyName:i,options:n,validator:{validate(t,u){return t===null||typeof t=="number"},defaultMessage(t){return `${t.property} must be a number or null`}}});}}s(x,"IsNullableNumber");function y(n){return (r,i)=>{classValidator.registerDecorator({name:"isNullableString",target:r.constructor,propertyName:i,options:n,validator:{validate(t,u){return t===null||typeof t=="string"},defaultMessage(t){return `${t.property} must be a string or null`}}});}}s(y,"IsNullableString");function U(){return classTransformer.Transform(({value:n})=>typeof n=="string"?n.toUpperCase():n)}s(U,"ToUpperCase");var O=class{static{s(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"]}),U(),p({level:4},{groups:["createEncounter"]})],O.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"]}),U()],O.prototype,"postcode",2);var a=class extends O{static{s(this,"RteArea");}code;areaDescription;address1;address2;address3;address4;email;enforcementArea};e([classValidator.IsOptional()],a.prototype,"code",2),e([classValidator.IsOptional()],a.prototype,"areaDescription",2),e([classValidator.IsOptional()],a.prototype,"address1",2),e([classValidator.IsOptional()],a.prototype,"address2",2),e([classValidator.IsOptional()],a.prototype,"address3",2),e([classValidator.IsOptional()],a.prototype,"address4",2),e([classValidator.IsOptional()],a.prototype,"email",2),e([classValidator.IsOptional()],a.prototype,"enforcementArea",2);var l=class{static{s(this,"GenericContact");}manager;costCentre;csiGeneratedNumber;userId;firstName;surname;email;rarCode;status;gvtsMarker;examinerType;ehrEmployeeId;workTelephone;mobileTelephone;version;rteArea};e([classValidator.IsOptional()],l.prototype,"manager",2),e([classValidator.IsOptional()],l.prototype,"costCentre",2),e([classValidator.IsOptional()],l.prototype,"csiGeneratedNumber",2),e([classValidator.IsOptional()],l.prototype,"userId",2),e([classValidator.IsOptional()],l.prototype,"firstName",2),e([classValidator.IsOptional()],l.prototype,"surname",2),e([classValidator.IsOptional()],l.prototype,"email",2),e([x()],l.prototype,"rarCode",2),e([y()],l.prototype,"status",2),e([y()],l.prototype,"gvtsMarker",2),e([classValidator.IsOptional()],l.prototype,"examinerType",2),e([classValidator.IsOptional()],l.prototype,"ehrEmployeeId",2),e([classValidator.IsOptional()],l.prototype,"workTelephone",2),e([classValidator.IsOptional()],l.prototype,"mobileTelephone",2),e([y()],l.prototype,"version",2),e([classValidator.ValidateIf((r,i)=>i!=null),classValidator.ValidateNested(),classTransformer.Type(()=>a)],l.prototype,"rteArea",2);exports.Location=class o{rclCsiGeneratedNumber;checkSiteType;csiType;csiName;road;direction;townOrVillage;couDescription;rarCode;ifkSetupEmpId;setupUser;lastUpdate;clientGuid;deletionMarker};s(exports.Location,"Location"),e([classValidator.IsOptional(),classValidator.MaxLength(10,{groups:["createEncounter"]})],exports.Location.prototype,"rclCsiGeneratedNumber",2),e([classValidator.MaxLength(3,{groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"checkSiteType",2),e([classValidator.MaxLength(1,{groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"csiType",2),e([classValidator.MaxLength(60,{groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"csiName",2),e([classValidator.MaxLength(15,{groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"road",2),e([classValidator.IsOptional(),classValidator.MaxLength(3,{groups:["createEncounter"]})],exports.Location.prototype,"direction",2),e([classValidator.MaxLength(60,{groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"townOrVillage",2),e([classValidator.IsOptional(),classValidator.MaxLength(60,{groups:["createEncounter"]})],exports.Location.prototype,"couDescription",2),e([p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"rarCode",2),e([classValidator.IsOptional(),classValidator.MaxLength(30,{groups:["createEncounter"]})],exports.Location.prototype,"ifkSetupEmpId",2),e([classValidator.ValidateIf((r,i)=>i!=null),classValidator.IsOptional(),classValidator.ValidateNested(),classTransformer.Type(()=>l)],exports.Location.prototype,"setupUser",2),e([h({groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"lastUpdate",2),e([classValidator.IsOptional(),classValidator.MaxLength(36,{groups:["createEncounter"]})],exports.Location.prototype,"clientGuid",2),e([classValidator.MaxLength(1,{groups:["createEncounter"]}),p({level:2},{groups:["createEncounter"]})],exports.Location.prototype,"deletionMarker",2),exports.Location=e([V({groups:["createEncounter"]})],exports.Location);