This repository was archived by the owner on Sep 19, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathvalidation.js
453 lines (352 loc) · 17 KB
/
validation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
import { SF86 } from 'constants/formTypes'
import * as sections from 'constants/sections'
import * as formConfig from 'config/forms'
import { validateModel } from 'models/validate'
import {
requireRelationshipMaritalForeignBornDocExpiration,
requireRelationshipMaritalDivorcePhoneNumber,
requireRelationshipRelativesForeignBornDoc,
requireRelationshipRelativesUSResidenceDoc,
requireMultipleCitizenshipRenounced,
requireForeignMilitaryMaintainsContact,
requireForeignCounterIntelligence,
requireForeignExcessiveKnowledge,
requireForeignSensitiveInformation,
requireForeignThreatened,
requireFinancialCardDisciplinaryDate,
requireFinancialDelinquentName,
requireFinancialDelinquentInfraction,
requireDrugWhileSafety,
requireDrugWithClearance,
requireDrugInFuture,
requireAlcoholOrderedCounselingParty,
requireLegalOffenseInvolvements,
requireLegalOffenseSentenced,
requireLegalOffenseIncarcerated,
requireLegalPoliceFirearms,
requireLegalPoliceDrugs,
requireLegalInvestigationClearanceGranted,
} from 'helpers/branches'
// IDENTIFICATION
import identificationName from 'models/sections/identificationName'
import identificationDateOfBirth from 'models/sections/identificationDateOfBirth'
import identificationPlaceOfBirth from 'models/sections/identificationPlaceOfBirth'
import identificationSSN from 'models/sections/identificationSSN'
import identificationOtherNames from 'models/sections/identificationOtherNames'
import identificationContactInfo from 'models/sections/identificationContactInfo'
import identificationPhysical from 'models/sections/identificationPhysical'
// HISTORY
import historyResidence from 'models/sections/historyResidence'
import historyEmployment from 'models/sections/historyEmployment'
import historyEducation from 'models/sections/historyEducation'
import historyFederal from 'models/sections/historyFederalService'
// RELATIONSHIPS
import relationshipsMaritalModel from 'models/sections/relationshipsMarital'
import relationshipsCohabitantsModel from 'models/sections/relationshipsCohabitants'
import relationshipsPeopleModel from 'models/sections/relationshipsPeople'
import relationshipsRelativesModel from 'models/sections/relationshipsRelatives'
// CITIZENSHIP
import usPassport from 'models/usPassport'
import citizenshipStatus from 'models/citizenshipStatus'
import citizenshipMultiple from 'models/sections/citizenshipMultiple'
import citizenshipPassports from 'models/sections/citizenshipPassports'
// MILITARY
import selectiveService from 'models/selectiveService'
import militaryHistory from 'models/militaryHistory'
import militaryDisciplinary from 'models/sections/militaryDisciplinary'
import militaryForeign from 'models/sections/militaryForeign'
// FOREIGN
import foreignContacts from 'models/sections/foreignContacts'
import foreignDirectActivity from 'models/sections/foreignDirectActivity'
import foreignIndirectActivity from 'models/sections/foreignIndirectActivity'
import foreignRealEstateActivity from 'models/sections/foreignRealEstateActivity'
import foreignBenefitActivity from 'models/sections/foreignBenefitActivity'
import foreignSupport from 'models/sections/foreignSupport'
import foreignBusinessAdvice from 'models/sections/foreignBusinessAdvice'
import foreignBusinessFamily from 'models/sections/foreignBusinessFamily'
import foreignBusinessEmployment from 'models/sections/foreignBusinessEmployment'
import foreignBusinessVentures from 'models/sections/foreignBusinessVentures'
import foreignBusinessConferences from 'models/sections/foreignBusinessConferences'
import foreignBusinessContact from 'models/sections/foreignBusinessContact'
import foreignBusinessSponsorship from 'models/sections/foreignBusinessSponsorship'
import foreignBusinessPolitical from 'models/sections/foreignBusinessPolitical'
import foreignBusinessVoting from 'models/sections/foreignBusinessVoting'
import foreignTravel from 'models/sections/foreignTravel'
// FINANCIAL
import financialBankruptcy from 'models/sections/financialBankruptcy'
import financialGambling from 'models/sections/financialGambling'
import financialTaxes from 'models/sections/financialTaxes'
import financialCardAbuse from 'models/sections/financialCardAbuse'
import financialCredit from 'models/sections/financialCredit'
import financialDelinquent from 'models/sections/financialDelinquent'
import financialNonPayment from 'models/sections/financialNonPayment'
// SUBSTANCE
import substanceDrugUsesModel from 'models/sections/substanceDrugUses'
import substanceDrugInvolvementsModel from 'models/sections/substanceDrugInvolvements'
import substanceDrugClearanceUsesModel from 'models/sections/substanceDrugClearanceUses'
import substanceDrugPublicSafetyUsesModel from 'models/sections/substanceDrugPublicSafetyUses'
import substanceDrugPrescriptionUsesModel from 'models/sections/substanceDrugPrescriptionUses'
import substanceDrugOrderedTreatmentsModel from 'models/sections/substanceDrugOrderedTreatments'
import substanceDrugVoluntaryTreatmentsModel from 'models/sections/substanceDrugVoluntaryTreatments'
import substanceAlcoholNegativeImpactsModel from 'models/sections/substanceAlcoholNegativeImpacts'
import substanceAlcoholOrderedCounselingModel from 'models/sections/substanceAlcoholOrderedCounseling'
import substanceAlcoholVoluntaryCounselingModel from 'models/sections/substanceAlcoholVoluntaryCounseling'
import substanceAlcoholReceivedCounselingModel from 'models/sections/substanceAlcoholReceivedCounseling'
// LEGAL
import legalPoliceOffenses from 'models/sections/legalPoliceOffenses'
import legalPoliceOtherOffenses from 'models/sections/legalPoliceOtherOffenses'
import legalDomesticViolence from 'models/sections/legalDomesticViolence'
import legalInvestigationsHistory from 'models/sections/legalInvestigationsHistory'
import legalInvestigationsRevoked from 'models/sections/legalInvestigationsRevoked'
import legalInvestigationsDebarred from 'models/sections/legalInvestigationsDebarred'
import legalNonCriminalCourtActions from 'models/sections/legalNonCriminalCourtActions'
import legalTechnologyUnauthorized from 'models/sections/legalTechnologyUnauthorized'
import legalTechnologyManipulating from 'models/sections/legalTechnologyManipulating'
import legalTechnologyUnlawful from 'models/sections/legalTechnologyUnlawful'
import legalAssociationsTerrorist from 'models/sections/legalAssociationsTerrorist'
import legalAssociationsEngaged from 'models/sections/legalAssociationsEngaged'
import legalAssociationsAdvocating from 'models/sections/legalAssociationsAdvocating'
import legalAssociationsOverthrow from 'models/sections/legalAssociationsOverthrow'
import legalAssociationsViolence from 'models/sections/legalAssociationsViolence'
import legalAssociationsActivities from 'models/sections/legalAssociationsActivities'
import terrorism from 'models/terrorism'
// PSYCHOLOGICAL
import competence from 'models/competence'
import consultation from 'models/consultation'
import hospitalization from 'models/sections/hospitalization'
import diagnoses from 'models/diagnoses'
import existingConditions from 'models/existingConditions'
// PACKAGE
import packageComments from 'models/sections/packageComments'
// Map sections to their validator classes (temporary)
export const getValidatorForSection = (section) => {
switch (section) {
case sections.IDENTIFICATION_NAME:
return identificationName
case sections.IDENTIFICATION_BIRTH_DATE:
return identificationDateOfBirth
case sections.IDENTIFICATION_BIRTH_PLACE:
return identificationPlaceOfBirth
case sections.IDENTIFICATION_SSN:
return identificationSSN
case sections.IDENTIFICATION_OTHER_NAMES:
return identificationOtherNames
case sections.IDENTIFICATION_CONTACTS:
return identificationContactInfo
case sections.IDENTIFICATION_PHYSICAL:
return identificationPhysical
case sections.HISTORY_RESIDENCE:
return historyResidence
case sections.HISTORY_EMPLOYMENT:
return historyEmployment
case sections.HISTORY_EDUCATION:
return historyEducation
case sections.HISTORY_FEDERAL:
return historyFederal
case sections.RELATIONSHIPS_STATUS_MARITAL:
return relationshipsMaritalModel
case sections.RELATIONSHIPS_STATUS_COHABITANTS:
return relationshipsCohabitantsModel
case sections.RELATIONSHIPS_PEOPLE:
return relationshipsPeopleModel
case sections.RELATIONSHIPS_RELATIVES:
return relationshipsRelativesModel
case sections.CITIZENSHIP_US_PASSPORT:
return usPassport
case sections.CITIZENSHIP_STATUS:
return citizenshipStatus
case sections.CITIZENSHIP_MULTIPLE:
return citizenshipMultiple
case sections.CITIZENSHIP_PASSPORTS:
return citizenshipPassports
case sections.MILITARY_SELECTIVE:
return selectiveService
case sections.MILITARY_HISTORY:
return militaryHistory
case sections.MILITARY_DISCIPLINARY:
return militaryDisciplinary
case sections.MILITARY_FOREIGN:
return militaryForeign
case sections.FOREIGN_CONTACTS:
return foreignContacts
case sections.FOREIGN_ACTIVITIES_DIRECT:
return foreignDirectActivity
case sections.FOREIGN_ACTIVITIES_INDIRECT:
return foreignIndirectActivity
case sections.FOREIGN_ACTIVITIES_REAL_ESTATE:
return foreignRealEstateActivity
case sections.FOREIGN_ACTIVITIES_BENEFITS:
return foreignBenefitActivity
case sections.FOREIGN_ACTIVITIES_SUPPORT:
return foreignSupport
case sections.FOREIGN_BUSINESS_ADVICE:
return foreignBusinessAdvice
case sections.FOREIGN_BUSINESS_FAMILY:
return foreignBusinessFamily
case sections.FOREIGN_BUSINESS_EMPLOYMENT:
return foreignBusinessEmployment
case sections.FOREIGN_BUSINESS_VENTURES:
return foreignBusinessVentures
case sections.FOREIGN_BUSINESS_CONFERENCES:
return foreignBusinessConferences
case sections.FOREIGN_BUSINESS_CONTACT:
return foreignBusinessContact
case sections.FOREIGN_BUSINESS_SPONSORSHIP:
return foreignBusinessSponsorship
case sections.FOREIGN_BUSINESS_POLITICAL:
return foreignBusinessPolitical
case sections.FOREIGN_BUSINESS_VOTING:
return foreignBusinessVoting
case sections.FOREIGN_TRAVEL:
return foreignTravel
case sections.FINANCIAL_BANKRUPTCY:
return financialBankruptcy
case sections.FINANCIAL_GAMBLING:
return financialGambling
case sections.FINANCIAL_TAXES:
return financialTaxes
case sections.FINANCIAL_CARD:
return financialCardAbuse
case sections.FINANCIAL_CREDIT:
return financialCredit
case sections.FINANCIAL_DELINQUENT:
return financialDelinquent
case sections.FINANCIAL_NONPAYMENT:
return financialNonPayment
case sections.SUBSTANCE_USE_DRUGS_USAGE:
return substanceDrugUsesModel
case sections.SUBSTANCE_USE_DRUGS_PURCHASE:
return substanceDrugInvolvementsModel
case sections.SUBSTANCE_USE_DRUGS_CLEARANCE:
return substanceDrugClearanceUsesModel
case sections.SUBSTANCE_USE_DRUGS_PUBLIC_SAFETY:
return substanceDrugPublicSafetyUsesModel
case sections.SUBSTANCE_USE_DRUGS_MISUSE:
return substanceDrugPrescriptionUsesModel
case sections.SUBSTANCE_USE_DRUGS_ORDERED:
return substanceDrugOrderedTreatmentsModel
case sections.SUBSTANCE_USE_DRUGS_VOLUNTARY:
return substanceDrugVoluntaryTreatmentsModel
case sections.SUBSTANCE_USE_ALCOHOL_NEGATIVE:
return substanceAlcoholNegativeImpactsModel
case sections.SUBSTANCE_USE_ALCOHOL_ORDERED:
return substanceAlcoholOrderedCounselingModel
case sections.SUBSTANCE_USE_ALCOHOL_VOLUNTARY:
return substanceAlcoholVoluntaryCounselingModel
case sections.SUBSTANCE_USE_ALCOHOL_ADDITIONAL:
return substanceAlcoholReceivedCounselingModel
case sections.LEGAL_POLICE_OFFENSES:
return legalPoliceOffenses
case sections.LEGAL_POLICE_ADDITIONAL_OFFENSES:
return legalPoliceOtherOffenses
case sections.LEGAL_POLICE_DOMESTIC_VIOLENCE:
return legalDomesticViolence
case sections.LEGAL_INVESTIGATIONS_HISTORY:
return legalInvestigationsHistory
case sections.LEGAL_INVESTIGATIONS_REVOKED:
return legalInvestigationsRevoked
case sections.LEGAL_INVESTIGATIONS_DEBARRED:
return legalInvestigationsDebarred
case sections.LEGAL_COURT:
return legalNonCriminalCourtActions
case sections.LEGAL_TECHNOLOGY_UNAUTHORIZED:
return legalTechnologyUnauthorized
case sections.LEGAL_TECHNOLOGY_MANIPULATING:
return legalTechnologyManipulating
case sections.LEGAL_TECHNOLOGY_UNLAWFUL:
return legalTechnologyUnlawful
case sections.LEGAL_ASSOCIATIONS_TERRORIST_ORGANIZATION:
return legalAssociationsTerrorist
case sections.LEGAL_ASSOCIATIONS_ENGAGED_IN_TERRORISM:
return legalAssociationsEngaged
case sections.LEGAL_ASSOCIATIONS_ADVOCATING:
return legalAssociationsAdvocating
case sections.LEGAL_ASSOCIATIONS_MEMBERSHIP_OVERTHROW:
return legalAssociationsOverthrow
case sections.LEGAL_ASSOCIATIONS_MEMBERSHIP_VIOLENCE:
return legalAssociationsViolence
case sections.LEGAL_ASSOCIATIONS_ACTIVITIES_TO_OVERTHROW:
return legalAssociationsActivities
case sections.LEGAL_ASSOCIATIONS_TERRORISM_ASSOCIATION:
return terrorism
case sections.PSYCHOLOGICAL_COMPETENCE:
return competence
case sections.PSYCHOLOGICAL_CONSULTATIONS:
return consultation
case sections.PSYCHOLOGICAL_HOSPITALIZATIONS:
return hospitalization
case sections.PSYCHOLOGICAL_DIAGNOSES:
return diagnoses
case sections.PSYCHOLOGICAL_CONDITIONS:
return existingConditions
case sections.REVIEW_AND_SUBMIT_COMMENTS:
return packageComments
default:
console.warn(`Validator for ${section} section not found`)
return null
}
}
export const getValidationOptionsForForm = (formType, key, options) => {
const validatorOptions = {
requireForeignBornDocExpiration: requireRelationshipMaritalForeignBornDocExpiration(formType),
requireRelationshipMaritalDivorcePhoneNumber:
requireRelationshipMaritalDivorcePhoneNumber(formType),
requireRelationshipRelativesForeignBornDoc:
requireRelationshipRelativesForeignBornDoc(formType),
requireRelationshipRelativesUSResidenceDoc:
requireRelationshipRelativesUSResidenceDoc(formType),
requireForeignBornDocumentation: !options.hasValidUSPassport,
requireCitizenshipRenounced: requireMultipleCitizenshipRenounced(formType),
requireForeignMilitaryMaintainsContact: requireForeignMilitaryMaintainsContact(formType),
requireForeignCounterIntelligence: requireForeignCounterIntelligence(formType),
requireForeignExcessiveKnowledge: requireForeignExcessiveKnowledge(formType),
requireForeignSensitiveInformation: requireForeignSensitiveInformation(formType),
requireForeignThreatened: requireForeignThreatened(formType),
requireFinancialCardDisciplinaryDate: requireFinancialCardDisciplinaryDate(formType),
requireFinancialDelinquentName: requireFinancialDelinquentName(formType),
requireFinancialDelinquentInfraction: requireFinancialDelinquentInfraction(formType),
requireUseWhileEmployed: requireDrugWhileSafety(formType),
requireUseWithClearance: requireDrugWithClearance(formType),
requireUseInFuture: requireDrugInFuture(formType),
requireInvolvementWhileEmployed: requireDrugWhileSafety(formType),
requireInvolvementWithClearance: requireDrugWithClearance(formType),
requireInvolvementInFuture: requireDrugInFuture(formType),
requireAlcoholOrderedCounselingParty: requireAlcoholOrderedCounselingParty(formType),
requireLegalOffenseInvolvements: requireLegalOffenseInvolvements(formType),
requireLegalOffenseSentenced: requireLegalOffenseSentenced(formType),
requireLegalOffenseIncarcerated: requireLegalOffenseIncarcerated(formType),
requireLegalPoliceFirearms: requireLegalPoliceFirearms(formType),
requireLegalPoliceDrugs: requireLegalPoliceDrugs(formType),
requireLegalInvestigationClearanceGranted: requireLegalInvestigationClearanceGranted(formType),
}
if (key === sections.HISTORY_RESIDENCE) {
validatorOptions.requireYears = formConfig[formType].HISTORY_RESIDENCE_YEARS
} else if (key === sections.HISTORY_EMPLOYMENT) {
validatorOptions.requireYears = formConfig[formType].HISTORY_EMPLOYMENT_YEARS
}
return validatorOptions
}
export const validateSection = ({ key = '', data = {}, options = {} }, formType = SF86) => {
const validationModel = getValidatorForSection(key)
const formOptions = getValidationOptionsForForm(formType, key, options)
if (validationModel) {
try {
return validateModel(data, validationModel, { ...formOptions, ...options })
} catch (e) {
console.warn(`Invalid validator for section ${key}`, e)
}
}
return false
}
export const sectionIsValid = (formSections = []) => (
formSections.every((s) => {
if (s.subsections) return sectionIsValid(s.subsections)
return s.isValid === true
})
)
export const sectionIsInvalid = (formSections = []) => (
formSections.some((s) => {
if (s.subsections) return sectionIsInvalid(s.subsections)
return s.isValid === false
})
)