UNPKG

@dvsa/smc-encounter-schema

Version:

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

1 lines 2.62 kB
'use strict';var classValidator=require('class-validator');var I=Object.defineProperty;var i=(n,r)=>I(n,"name",{value:r,configurable:true});var f=class n{static{i(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"}};function X(n){return r=>{classValidator.registerDecorator({name:"ValidateFixedPenalty",target:r,propertyName:void 0,options:n,validator:{validate(M,A){let o=A.object;if(!o||f.getInstance().isDeletedEncounter())return true;let F=o.motor?.notices??[],D=o.trailer1?.notices??[],R=o.trailer2?.notices??[],d=[...F,...D,...R],x=["BFPN01","FFPN01","FDEN01"],N=d.filter(e=>e.noticeType?.code&&x.includes(e.noticeType.code)),a=d.filter(e=>e.noticeType?.code==="FFPN01"),s=d.filter(e=>e.noticeType?.code==="FDEN01"),h=N.filter(e=>e.noticeStatus==="W"),m="NO IMMEDIATE PAYMENT",C="FP WITHDRAWAL REASON";function c(e){return (o.encounterTexts??[]).some(t=>t.textType?.name?.trim().toUpperCase()===e)}i(c,"encounterTextCorrect");function l(e){return e.every(t=>["P","W"].includes(t.penaltyNotice?.penaltyNoticeStatus?.code??""))}i(l,"allNoticesPaid");function g(e,t){return e.some(u=>t.some(p=>u.penaltyNotice?.driverType&&p.penaltyNotice?.driverType&&u.penaltyNotice.driverType===p.penaltyNotice.driverType))}i(g,"sameDriver");let y=a.some(e=>e.noticeStatus!=="W"),E=s.some(e=>e.noticeStatus!=="W");if(y&&!E&&!l(a)&&!c(m)||E&&!y&&!l(s)&&!c(m)||y&&E&&!g(a,s)&&(!l(a)||!l(s))&&!c(m)||h.length>0&&!c(C))return false;let v=o.drivers??[],S=v.flatMap(e=>e.actualPayments??[]),L=["C","Y","N"],T="R";for(let e of S){let t=e.paymentStatus?.code;if(!e.paymentDate||!e.inputDate||!e.amount||!e.paymentMethod||!e.recorder||!e.clientGuid||t&&L.includes(t)&&e.reversalDate||t===T&&!e.reversalDate||e.reversalDate&&t!==T||!e.reversalDate&&t===T)return false}for(let e of v){let t=e.driverType,u=N.filter(P=>P.penaltyNotice?.driverType===t&&P.penaltyNotice?.penaltyNoticeStatus?.code==="P"),p=e.actualPayments&&e.actualPayments.length>0;if(u.length>0&&!p)return false}return true},defaultMessage(){return "Invalid fixed penalty data: Please check notices, actual payments, and related rules."}}});}}i(X,"ValidateFixedPenalty");exports.ValidateFixedPenalty=X;