udp-schema 2.15.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/onboarding-config.d.ts.map +1 -1
  6. package/dist/onboarding-config.js +28 -7
  7. package/dist/onboarding-config.js.map +1 -1
  8. package/dist/onboarding-form.d.ts +4 -1
  9. package/dist/onboarding-form.d.ts.map +1 -1
  10. package/dist/profile-fields/06-education.d.ts.map +1 -1
  11. package/dist/profile-fields/06-education.js +34 -4
  12. package/dist/profile-fields/06-education.js.map +1 -1
  13. package/dist/profile-fields/07-employment.d.ts +2 -2
  14. package/dist/profile-fields/07-employment.js +2 -2
  15. package/dist/profile-fields/07-employment.js.map +1 -1
  16. package/dist/profile-fields/08-neurodiversity.d.ts +262 -75
  17. package/dist/profile-fields/08-neurodiversity.d.ts.map +1 -1
  18. package/dist/profile-fields/08-neurodiversity.js +400 -100
  19. package/dist/profile-fields/08-neurodiversity.js.map +1 -1
  20. package/dist/profile-fields/09-health.d.ts +25 -4
  21. package/dist/profile-fields/09-health.d.ts.map +1 -1
  22. package/dist/profile-fields/09-health.js +14 -14
  23. package/dist/profile-fields/09-health.js.map +1 -1
  24. package/dist/profile-fields/12-household.d.ts +2 -2
  25. package/dist/profile-fields/12-household.js +2 -2
  26. package/dist/profile-fields/12-household.js.map +1 -1
  27. package/dist/profile-fields/index.d.ts +1 -1
  28. package/dist/profile-fields/index.d.ts.map +1 -1
  29. package/dist/profile-fields/index.js +1 -1
  30. package/dist/profile-fields/index.js.map +1 -1
  31. package/dist/progress-fields.d.ts.map +1 -1
  32. package/dist/progress-fields.js +4 -1
  33. package/dist/progress-fields.js.map +1 -1
  34. package/dist/step-08.schema.d.ts +10 -8
  35. package/dist/step-08.schema.d.ts.map +1 -1
  36. package/dist/step-08.schema.js +17 -13
  37. package/dist/step-08.schema.js.map +1 -1
  38. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"progress-fields.js","sourceRoot":"","sources":["../src/progress-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UDP Progress Fields — Single source of truth for step progress counting.\n *\n * Used by both frontend (stepper UI) and backend (computeStepProgressCounts).\n * Each step lists the curated fields that determine filled/total progress.\n *\n * Dot-paths (e.g., \"currentAddress.state\") resolve nested subdocument fields.\n * Only these fields count toward progress — extra fields in the schema are ignored.\n */\n\nexport const UDP_PROGRESS_FIELDS: Record<number, readonly string[]> = {\n 1: [\n // 'fullName' is a synthetic key — counts as filled if ANY of\n // firstName / middleName / lastName is set. See UDP_PROGRESS_SYNTHETIC.\n 'fullName',\n 'gender',\n 'dateOfBirth',\n 'whatsappNumber',\n 'primaryLanguage',\n 'secondaryLanguages',\n 'familyReligion',\n 'personalReligion',\n 'reservationStatus',\n 'minorityStatus',\n ],\n 2: [\n 'politicalSpectrum',\n 'selfPartyAssociation',\n 'partyAssociationRole',\n 'familyPartyAssociation',\n 'relativesInPolitics',\n 'publicOfficeAndElections',\n 'networkAndCivicEngagement',\n ],\n 3: [\n 'epicNumber',\n 'willVoteThisTime',\n 'didVoteLastTime',\n 'votingFrequency',\n 'primaryVotingIssues',\n ],\n 4: [\n 'participateInRevolution',\n 'desiredPoliticalPosition',\n 'leadershipSkillset',\n 'politicalExposure',\n 'comfortWithVisibility',\n 'socialInfluenceLevel',\n 'pastExperience',\n 'changesYouWantToBring',\n ],\n 5: ['mbtiType', 'oceanScores'],\n 6: [\n 'highestQualification',\n // Class 10\n 'education10th.board',\n 'education10th.schoolName',\n 'education10th.yearOfPassing',\n 'education10th.subjects',\n 'education10th.marksObtained',\n // Class 12\n 'education12th.institutionName',\n 'education12th.boardOrUniversity',\n 'education12th.yearOfPassing',\n 'education12th.courseOrStream',\n 'education12th.subjects',\n 'education12th.marksOrGrade',\n // Degree repeaters + certificates + notes\n 'diplomas',\n 'graduations',\n 'postGraduations',\n 'doctorates',\n 'postDoctorates',\n 'otherCertificates',\n 'educationNotes',\n ],\n 7: [\n 'employmentStatus',\n 'occupation',\n 'workShift',\n 'comfortableWithShift',\n 'desiredShift',\n 'incomeRange',\n 'dreamOccupation',\n ],\n 8: [\n 'neurodiverseIdentity',\n 'conditions',\n 'ageOfRealization',\n 'sensoryProfile',\n 'cognitiveStrengths',\n 'executiveFunctionChallenges',\n 'learningStyle',\n 'communicationPreference',\n 'supportAndAccommodations',\n 'maskingAndBurnout',\n 'impactOnLife',\n ],\n 9: [\n 'disabilityStatus',\n 'generalHealth',\n 'healthInsurance',\n 'diet',\n 'physicalActivity',\n 'sleepQuality',\n 'substanceUse',\n 'stressLevel',\n ],\n 10: [\n 'viewOnAnimalCruelty',\n 'viewOnLgbtqStatements',\n 'viewOnLgbtqOpinion',\n 'viewOnTransgenderInclusion',\n 'viewOnTransgenderOpinion',\n 'facingCasteDiscrimination',\n 'casteDiscriminationPlaces',\n 'viewOnGenderEquality',\n ],\n 11: [\n 'currentAddress.state',\n 'currentAddress.district',\n 'currentAddress.village',\n 'permanentAddress.state',\n 'permanentAddress.district',\n 'permanentAddress.village',\n 'homeNativePlace.state',\n 'homeNativePlace.district',\n 'ancestralPlace.state',\n 'ancestralPlace.district',\n ],\n 12: [\n 'maritalStatus',\n 'familyMembers',\n 'numberOfDependents',\n 'housingType',\n 'householdIncome',\n 'bplCard',\n 'digitalAccess',\n 'migrationStatus',\n 'landOwnership',\n 'primaryIncomeSource',\n ],\n} as const;\n\n/** Total number of UDP steps */\nexport const UDP_TOTAL_STEPS = 12;\n\n/**\n * Synthetic progress keys — keys that aren't real fields but represent\n * a group of underlying fields. Counted as \"filled\" if ANY underlying\n * field is filled. Used for UI sub-steps that collect multiple fields\n * at once (e.g. the fullName sub-step that saves firstName, middleName,\n * and lastName).\n */\nexport const UDP_PROGRESS_SYNTHETIC: Record<string, readonly string[]> = {\n fullName: ['firstName', 'middleName', 'lastName'],\n} as const;\n\n/**\n * Resolve a dot-path (e.g., \"currentAddress.state\") against a data object.\n * Works with both plain objects and Mongoose subdocuments.\n */\nexport function getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n\n/** Determine if a field value counts as \"filled\" for progress */\nexport function isFieldFilled(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string') return value.trim().length > 0;\n if (typeof value === 'number') return true;\n if (typeof value === 'boolean') return true;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === 'object') {\n // Area entity ref - check for name\n if ('name' in value && typeof (value as Record<string, unknown>).name === 'string') {\n return (value as Record<string, unknown>).name !== '';\n }\n return Object.keys(value).length > 0;\n }\n return false;\n}\n\n/**\n * Calculate progress for a single step.\n * Shared between frontend (stepper UI) and backend (API response).\n */\nexport function calculateStepProgress(\n stepNumber: number,\n formData: Record<string, unknown> | undefined | null,\n): { filled: number; total: number } {\n const fields = UDP_PROGRESS_FIELDS[stepNumber];\n if (!fields) return { filled: 0, total: 0 };\n\n const total = fields.length;\n if (!formData || total === 0) return { filled: 0, total };\n\n let filled = 0;\n for (const fieldPath of fields) {\n // Synthetic keys (e.g., \"fullName\") — filled if ANY underlying field is filled.\n const syntheticPaths = UDP_PROGRESS_SYNTHETIC[fieldPath];\n if (syntheticPaths) {\n if (syntheticPaths.some((p) => isFieldFilled(getNestedValue(formData, p)))) {\n filled++;\n }\n continue;\n }\n if (isFieldFilled(getNestedValue(formData, fieldPath))) {\n filled++;\n }\n }\n\n return { filled, total };\n}\n\n/**\n * Calculate overall progress across all steps.\n * Returns per-step breakdown + overall percentage.\n *\n * Mirrors dating-schema's calculateDatingOverallProgress().\n *\n * @param stepData - Map of step number → form data (e.g., { 1: {...}, 2: {...} })\n */\nexport function calculateOverallProgress(\n stepData: Record<number, Record<string, unknown> | undefined | null>,\n): {\n steps: { stepNumber: number; filled: number; total: number }[];\n totalFilled: number;\n totalFields: number;\n percent: number;\n} {\n const steps: { stepNumber: number; filled: number; total: number }[] = [];\n let totalFilled = 0;\n let totalFields = 0;\n\n for (let stepNumber = 1; stepNumber <= UDP_TOTAL_STEPS; stepNumber++) {\n const { filled, total } = calculateStepProgress(stepNumber, stepData[stepNumber]);\n steps.push({ stepNumber, filled, total });\n totalFilled += filled;\n totalFields += total;\n }\n\n const percent = totalFields > 0 ? Math.round((totalFilled / totalFields) * 100) : 0;\n\n return { steps, totalFilled, totalFields, percent };\n}\n"]}
1
+ {"version":3,"file":"progress-fields.js","sourceRoot":"","sources":["../src/progress-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UDP Progress Fields — Single source of truth for step progress counting.\n *\n * Used by both frontend (stepper UI) and backend (computeStepProgressCounts).\n * Each step lists the curated fields that determine filled/total progress.\n *\n * Dot-paths (e.g., \"currentAddress.state\") resolve nested subdocument fields.\n * Only these fields count toward progress — extra fields in the schema are ignored.\n */\n\nexport const UDP_PROGRESS_FIELDS: Record<number, readonly string[]> = {\n 1: [\n // 'fullName' is a synthetic key — counts as filled if ANY of\n // firstName / middleName / lastName is set. See UDP_PROGRESS_SYNTHETIC.\n 'fullName',\n 'gender',\n 'dateOfBirth',\n 'whatsappNumber',\n 'primaryLanguage',\n 'secondaryLanguages',\n 'familyReligion',\n 'personalReligion',\n 'reservationStatus',\n 'minorityStatus',\n ],\n 2: [\n 'politicalSpectrum',\n 'selfPartyAssociation',\n 'partyAssociationRole',\n 'familyPartyAssociation',\n 'relativesInPolitics',\n 'publicOfficeAndElections',\n 'networkAndCivicEngagement',\n ],\n 3: [\n 'epicNumber',\n 'willVoteThisTime',\n 'didVoteLastTime',\n 'votingFrequency',\n 'primaryVotingIssues',\n ],\n 4: [\n 'participateInRevolution',\n 'desiredPoliticalPosition',\n 'leadershipSkillset',\n 'politicalExposure',\n 'comfortWithVisibility',\n 'socialInfluenceLevel',\n 'pastExperience',\n 'changesYouWantToBring',\n ],\n 5: ['mbtiType', 'oceanScores'],\n 6: [\n 'highestQualification',\n // Class 10\n 'education10th.board',\n 'education10th.schoolName',\n 'education10th.yearOfPassing',\n 'education10th.subjects',\n 'education10th.marksObtained',\n // Class 12\n 'education12th.institutionName',\n 'education12th.boardOrUniversity',\n 'education12th.yearOfPassing',\n 'education12th.courseOrStream',\n 'education12th.subjects',\n 'education12th.marksOrGrade',\n // Degree repeaters + certificates + notes\n 'diplomas',\n 'graduations',\n 'postGraduations',\n 'doctorates',\n 'postDoctorates',\n 'otherCertificates',\n 'educationNotes',\n ],\n 7: [\n 'employmentStatus',\n 'occupation',\n 'workShift',\n 'comfortableWithShift',\n 'desiredShift',\n 'incomeRange',\n 'dreamOccupation',\n ],\n 8: [\n 'neurodiverseIdentity',\n 'neurodevelopmentalConditions',\n 'mentalHealthConditions',\n 'personalityPatterns',\n 'neurologicalChronicConditions',\n 'ageOfRealization',\n 'sensoryProfile',\n 'cognitiveStrengths',\n 'executiveFunctionChallenges',\n 'learningStyle',\n 'communicationPreference',\n 'supportAndAccommodations',\n 'maskingAndBurnout',\n 'impactOnLife',\n ],\n 9: [\n 'disabilityStatus',\n 'generalHealth',\n 'healthInsurance',\n 'diet',\n 'physicalActivity',\n 'sleepQuality',\n 'substanceUse',\n 'stressLevel',\n ],\n 10: [\n 'viewOnAnimalCruelty',\n 'viewOnLgbtqStatements',\n 'viewOnLgbtqOpinion',\n 'viewOnTransgenderInclusion',\n 'viewOnTransgenderOpinion',\n 'facingCasteDiscrimination',\n 'casteDiscriminationPlaces',\n 'viewOnGenderEquality',\n ],\n 11: [\n 'currentAddress.state',\n 'currentAddress.district',\n 'currentAddress.village',\n 'permanentAddress.state',\n 'permanentAddress.district',\n 'permanentAddress.village',\n 'homeNativePlace.state',\n 'homeNativePlace.district',\n 'ancestralPlace.state',\n 'ancestralPlace.district',\n ],\n 12: [\n 'maritalStatus',\n 'familyMembers',\n 'numberOfDependents',\n 'housingType',\n 'householdIncome',\n 'bplCard',\n 'digitalAccess',\n 'migrationStatus',\n 'landOwnership',\n 'primaryIncomeSource',\n ],\n} as const;\n\n/** Total number of UDP steps */\nexport const UDP_TOTAL_STEPS = 12;\n\n/**\n * Synthetic progress keys — keys that aren't real fields but represent\n * a group of underlying fields. Counted as \"filled\" if ANY underlying\n * field is filled. Used for UI sub-steps that collect multiple fields\n * at once (e.g. the fullName sub-step that saves firstName, middleName,\n * and lastName).\n */\nexport const UDP_PROGRESS_SYNTHETIC: Record<string, readonly string[]> = {\n fullName: ['firstName', 'middleName', 'lastName'],\n} as const;\n\n/**\n * Resolve a dot-path (e.g., \"currentAddress.state\") against a data object.\n * Works with both plain objects and Mongoose subdocuments.\n */\nexport function getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.split('.');\n let current: unknown = obj;\n\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n\n/** Determine if a field value counts as \"filled\" for progress */\nexport function isFieldFilled(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string') return value.trim().length > 0;\n if (typeof value === 'number') return true;\n if (typeof value === 'boolean') return true;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === 'object') {\n // Area entity ref - check for name\n if ('name' in value && typeof (value as Record<string, unknown>).name === 'string') {\n return (value as Record<string, unknown>).name !== '';\n }\n return Object.keys(value).length > 0;\n }\n return false;\n}\n\n/**\n * Calculate progress for a single step.\n * Shared between frontend (stepper UI) and backend (API response).\n */\nexport function calculateStepProgress(\n stepNumber: number,\n formData: Record<string, unknown> | undefined | null,\n): { filled: number; total: number } {\n const fields = UDP_PROGRESS_FIELDS[stepNumber];\n if (!fields) return { filled: 0, total: 0 };\n\n const total = fields.length;\n if (!formData || total === 0) return { filled: 0, total };\n\n let filled = 0;\n for (const fieldPath of fields) {\n // Synthetic keys (e.g., \"fullName\") — filled if ANY underlying field is filled.\n const syntheticPaths = UDP_PROGRESS_SYNTHETIC[fieldPath];\n if (syntheticPaths) {\n if (syntheticPaths.some((p) => isFieldFilled(getNestedValue(formData, p)))) {\n filled++;\n }\n continue;\n }\n if (isFieldFilled(getNestedValue(formData, fieldPath))) {\n filled++;\n }\n }\n\n return { filled, total };\n}\n\n/**\n * Calculate overall progress across all steps.\n * Returns per-step breakdown + overall percentage.\n *\n * Mirrors dating-schema's calculateDatingOverallProgress().\n *\n * @param stepData - Map of step number → form data (e.g., { 1: {...}, 2: {...} })\n */\nexport function calculateOverallProgress(\n stepData: Record<number, Record<string, unknown> | undefined | null>,\n): {\n steps: { stepNumber: number; filled: number; total: number }[];\n totalFilled: number;\n totalFields: number;\n percent: number;\n} {\n const steps: { stepNumber: number; filled: number; total: number }[] = [];\n let totalFilled = 0;\n let totalFields = 0;\n\n for (let stepNumber = 1; stepNumber <= UDP_TOTAL_STEPS; stepNumber++) {\n const { filled, total } = calculateStepProgress(stepNumber, stepData[stepNumber]);\n steps.push({ stepNumber, filled, total });\n totalFilled += filled;\n totalFields += total;\n }\n\n const percent = totalFields > 0 ? Math.round((totalFilled / totalFields) * 100) : 0;\n\n return { steps, totalFilled, totalFields, percent };\n}\n"]}
@@ -1,13 +1,12 @@
1
1
  /**
2
- * Step 08 — Neurodiversity (rebuilt 2026-04)
2
+ * Step 08 — Mental Health & Neurodiversity
3
3
  *
4
- * Exhaustive 11-field profile covering identity, conditions, age of
5
- * realization, sensory profile, cognitive strengths, executive function
6
- * challenges, learning style, communication preference, support needs,
7
- * masking & burnout, and impact on daily life.
4
+ * 14 sub-steps: identity, 4 condition categories (neurodevelopmental,
5
+ * mental health, personality, neurological/chronic), age of realization,
6
+ * sensory, cognitive, executive function, learning, communication,
7
+ * support, masking, impact.
8
8
  *
9
- * All fields optional (UDP philosophy). Multi-selects store arrays of
10
- * option-value strings defined in profile-fields/08-neurodiversity.ts.
9
+ * All fields optional. Multi-selects store arrays of option-value strings.
11
10
  *
12
11
  * @module udp-schema/step-08
13
12
  */
@@ -20,7 +19,10 @@ export declare const step08NeurodiversitySchema: z.ZodObject<{
20
19
  exploring: "exploring";
21
20
  no_neurotypical: "no_neurotypical";
22
21
  }>>;
23
- conditions: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ neurodevelopmentalConditions: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ mentalHealthConditions: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
+ personalityPatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ neurologicalChronicConditions: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
26
  ageOfRealization: z.ZodOptional<z.ZodEnum<{
25
27
  prefer_not_to_say: "prefer_not_to_say";
26
28
  childhood: "childhood";
@@ -1 +1 @@
1
- {"version":3,"file":"step-08.schema.d.ts","sourceRoot":"","sources":["../src/step-08.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+ErC,CAAC;AAIH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
1
+ {"version":3,"file":"step-08.schema.d.ts","sourceRoot":"","sources":["../src/step-08.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwFrC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -1,20 +1,18 @@
1
1
  /**
2
- * Step 08 — Neurodiversity (rebuilt 2026-04)
2
+ * Step 08 — Mental Health & Neurodiversity
3
3
  *
4
- * Exhaustive 11-field profile covering identity, conditions, age of
5
- * realization, sensory profile, cognitive strengths, executive function
6
- * challenges, learning style, communication preference, support needs,
7
- * masking & burnout, and impact on daily life.
4
+ * 14 sub-steps: identity, 4 condition categories (neurodevelopmental,
5
+ * mental health, personality, neurological/chronic), age of realization,
6
+ * sensory, cognitive, executive function, learning, communication,
7
+ * support, masking, impact.
8
8
  *
9
- * All fields optional (UDP philosophy). Multi-selects store arrays of
10
- * option-value strings defined in profile-fields/08-neurodiversity.ts.
9
+ * All fields optional. Multi-selects store arrays of option-value strings.
11
10
  *
12
11
  * @module udp-schema/step-08
13
12
  */
14
13
  import { z } from 'zod';
15
- // ─── Main Step 08 Schema ────────────────────────────────────────────────────
16
14
  export const step08NeurodiversitySchema = z.object({
17
- /** Identity + diagnosis status merged into one field. */
15
+ /** Identity + diagnosis status. */
18
16
  neurodiverseIdentity: z
19
17
  .enum([
20
18
  'yes_diagnosed',
@@ -24,8 +22,14 @@ export const step08NeurodiversitySchema = z.object({
24
22
  'prefer_not_to_say',
25
23
  ])
26
24
  .optional(),
27
- /** Specific ND conditions free strings matching neurodiversityConditionOptions values. */
28
- conditions: z.array(z.string().trim()).optional(),
25
+ /** Neurodevelopmental conditions (core ND). */
26
+ neurodevelopmentalConditions: z.array(z.string().trim()).optional(),
27
+ /** Mental health & mood conditions. */
28
+ mentalHealthConditions: z.array(z.string().trim()).optional(),
29
+ /** Personality patterns (DSM-5 Cluster A/B/C). */
30
+ personalityPatterns: z.array(z.string().trim()).optional(),
31
+ /** Neurological & chronic conditions. */
32
+ neurologicalChronicConditions: z.array(z.string().trim()).optional(),
29
33
  /** When the respondent realized they were neurodivergent. */
30
34
  ageOfRealization: z
31
35
  .enum([
@@ -74,11 +78,11 @@ export const step08NeurodiversitySchema = z.object({
74
78
  .optional(),
75
79
  /** Support & accommodations that help. */
76
80
  supportAndAccommodations: z.array(z.string().trim()).optional(),
77
- /** How often / how much the respondent masks in public. */
81
+ /** Masking frequency. */
78
82
  maskingAndBurnout: z
79
83
  .enum(['frequently', 'sometimes', 'rarely', 'never', 'not_sure', 'prefer_not_to_say'])
80
84
  .optional(),
81
- /** Overall impact of neurodivergence on daily life. */
85
+ /** Impact on daily life. */
82
86
  impactOnLife: z
83
87
  .enum(['significant', 'moderate', 'mild', 'minimal', 'varies', 'prefer_not_to_say'])
84
88
  .optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"step-08.schema.js","sourceRoot":"","sources":["../src/step-08.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,yDAAyD;IACzD,oBAAoB,EAAE,CAAC;SACpB,IAAI,CAAC;QACJ,eAAe;QACf,qBAAqB;QACrB,WAAW;QACX,iBAAiB;QACjB,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,4FAA4F;IAC5F,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEjD,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC;SAChB,IAAI,CAAC;QACJ,WAAW;QACX,MAAM;QACN,aAAa;QACb,OAAO;QACP,YAAY;QACZ,iBAAiB;QACjB,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,kEAAkE;IAClE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAErD,yCAAyC;IACzC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEzD,qCAAqC;IACrC,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAElE,gCAAgC;IAChC,aAAa,EAAE,CAAC;SACb,IAAI,CAAC;QACJ,QAAQ;QACR,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,YAAY;QACZ,kBAAkB;QAClB,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,qCAAqC;IACrC,uBAAuB,EAAE,CAAC;SACvB,IAAI,CAAC;QACJ,cAAc;QACd,SAAS;QACT,OAAO;QACP,OAAO;QACP,cAAc;QACd,YAAY;QACZ,aAAa;QACb,OAAO;QACP,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,0CAA0C;IAC1C,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE/D,2DAA2D;IAC3D,iBAAiB,EAAE,CAAC;SACjB,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;SACrF,QAAQ,EAAE;IAEb,uDAAuD;IACvD,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;SACnF,QAAQ,EAAE;CACd,CAAC,CAAC","sourcesContent":["/**\n * Step 08 — Neurodiversity (rebuilt 2026-04)\n *\n * Exhaustive 11-field profile covering identity, conditions, age of\n * realization, sensory profile, cognitive strengths, executive function\n * challenges, learning style, communication preference, support needs,\n * masking & burnout, and impact on daily life.\n *\n * All fields optional (UDP philosophy). Multi-selects store arrays of\n * option-value strings defined in profile-fields/08-neurodiversity.ts.\n *\n * @module udp-schema/step-08\n */\n\nimport { z } from 'zod';\n\n// ─── Main Step 08 Schema ────────────────────────────────────────────────────\n\nexport const step08NeurodiversitySchema = z.object({\n /** Identity + diagnosis status merged into one field. */\n neurodiverseIdentity: z\n .enum([\n 'yes_diagnosed',\n 'yes_self_identified',\n 'exploring',\n 'no_neurotypical',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Specific ND conditions free strings matching neurodiversityConditionOptions values. */\n conditions: z.array(z.string().trim()).optional(),\n\n /** When the respondent realized they were neurodivergent. */\n ageOfRealization: z\n .enum([\n 'childhood',\n 'teen',\n 'young_adult',\n 'adult',\n 'later_life',\n 'still_exploring',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Sensory profile (hyper/hypo per sense, seeking, overwhelm). */\n sensoryProfile: z.array(z.string().trim()).optional(),\n\n /** ND-associated cognitive strengths. */\n cognitiveStrengths: z.array(z.string().trim()).optional(),\n\n /** Executive function challenges. */\n executiveFunctionChallenges: z.array(z.string().trim()).optional(),\n\n /** Preferred learning style. */\n learningStyle: z\n .enum([\n 'visual',\n 'auditory',\n 'kinesthetic',\n 'reading_writing',\n 'multimodal',\n 'needs_repetition',\n 'needs_structure',\n 'prefers_autonomy',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Preferred communication style. */\n communicationPreference: z\n .enum([\n 'face_to_face',\n 'written',\n 'phone',\n 'video',\n 'small_groups',\n 'one_on_one',\n 'visual_aids',\n 'async',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Support & accommodations that help. */\n supportAndAccommodations: z.array(z.string().trim()).optional(),\n\n /** How often / how much the respondent masks in public. */\n maskingAndBurnout: z\n .enum(['frequently', 'sometimes', 'rarely', 'never', 'not_sure', 'prefer_not_to_say'])\n .optional(),\n\n /** Overall impact of neurodivergence on daily life. */\n impactOnLife: z\n .enum(['significant', 'moderate', 'mild', 'minimal', 'varies', 'prefer_not_to_say'])\n .optional(),\n});\n\n// ─── Inferred types ─────────────────────────────────────────────────────────\n\nexport type Step08NeurodiversityInput = z.infer<typeof step08NeurodiversitySchema>;\n"]}
1
+ {"version":3,"file":"step-08.schema.js","sourceRoot":"","sources":["../src/step-08.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,mCAAmC;IACnC,oBAAoB,EAAE,CAAC;SACpB,IAAI,CAAC;QACJ,eAAe;QACf,qBAAqB;QACrB,WAAW;QACX,iBAAiB;QACjB,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,+CAA+C;IAC/C,4BAA4B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEnE,uCAAuC;IACvC,sBAAsB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE7D,kDAAkD;IAClD,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE1D,yCAAyC;IACzC,6BAA6B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEpE,6DAA6D;IAC7D,gBAAgB,EAAE,CAAC;SAChB,IAAI,CAAC;QACJ,WAAW;QACX,MAAM;QACN,aAAa;QACb,OAAO;QACP,YAAY;QACZ,iBAAiB;QACjB,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,kEAAkE;IAClE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAErD,yCAAyC;IACzC,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEzD,qCAAqC;IACrC,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAElE,gCAAgC;IAChC,aAAa,EAAE,CAAC;SACb,IAAI,CAAC;QACJ,QAAQ;QACR,UAAU;QACV,aAAa;QACb,iBAAiB;QACjB,YAAY;QACZ,kBAAkB;QAClB,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,qCAAqC;IACrC,uBAAuB,EAAE,CAAC;SACvB,IAAI,CAAC;QACJ,cAAc;QACd,SAAS;QACT,OAAO;QACP,OAAO;QACP,cAAc;QACd,YAAY;QACZ,aAAa;QACb,OAAO;QACP,mBAAmB;KACpB,CAAC;SACD,QAAQ,EAAE;IAEb,0CAA0C;IAC1C,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE/D,yBAAyB;IACzB,iBAAiB,EAAE,CAAC;SACjB,IAAI,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;SACrF,QAAQ,EAAE;IAEb,4BAA4B;IAC5B,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;SACnF,QAAQ,EAAE;CACd,CAAC,CAAC","sourcesContent":["/**\n * Step 08 — Mental Health & Neurodiversity\n *\n * 14 sub-steps: identity, 4 condition categories (neurodevelopmental,\n * mental health, personality, neurological/chronic), age of realization,\n * sensory, cognitive, executive function, learning, communication,\n * support, masking, impact.\n *\n * All fields optional. Multi-selects store arrays of option-value strings.\n *\n * @module udp-schema/step-08\n */\n\nimport { z } from 'zod';\n\nexport const step08NeurodiversitySchema = z.object({\n /** Identity + diagnosis status. */\n neurodiverseIdentity: z\n .enum([\n 'yes_diagnosed',\n 'yes_self_identified',\n 'exploring',\n 'no_neurotypical',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Neurodevelopmental conditions (core ND). */\n neurodevelopmentalConditions: z.array(z.string().trim()).optional(),\n\n /** Mental health & mood conditions. */\n mentalHealthConditions: z.array(z.string().trim()).optional(),\n\n /** Personality patterns (DSM-5 Cluster A/B/C). */\n personalityPatterns: z.array(z.string().trim()).optional(),\n\n /** Neurological & chronic conditions. */\n neurologicalChronicConditions: z.array(z.string().trim()).optional(),\n\n /** When the respondent realized they were neurodivergent. */\n ageOfRealization: z\n .enum([\n 'childhood',\n 'teen',\n 'young_adult',\n 'adult',\n 'later_life',\n 'still_exploring',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Sensory profile (hyper/hypo per sense, seeking, overwhelm). */\n sensoryProfile: z.array(z.string().trim()).optional(),\n\n /** ND-associated cognitive strengths. */\n cognitiveStrengths: z.array(z.string().trim()).optional(),\n\n /** Executive function challenges. */\n executiveFunctionChallenges: z.array(z.string().trim()).optional(),\n\n /** Preferred learning style. */\n learningStyle: z\n .enum([\n 'visual',\n 'auditory',\n 'kinesthetic',\n 'reading_writing',\n 'multimodal',\n 'needs_repetition',\n 'needs_structure',\n 'prefers_autonomy',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Preferred communication style. */\n communicationPreference: z\n .enum([\n 'face_to_face',\n 'written',\n 'phone',\n 'video',\n 'small_groups',\n 'one_on_one',\n 'visual_aids',\n 'async',\n 'prefer_not_to_say',\n ])\n .optional(),\n\n /** Support & accommodations that help. */\n supportAndAccommodations: z.array(z.string().trim()).optional(),\n\n /** Masking frequency. */\n maskingAndBurnout: z\n .enum(['frequently', 'sometimes', 'rarely', 'never', 'not_sure', 'prefer_not_to_say'])\n .optional(),\n\n /** Impact on daily life. */\n impactOnLife: z\n .enum(['significant', 'moderate', 'mild', 'minimal', 'varies', 'prefer_not_to_say'])\n .optional(),\n});\n\nexport type Step08NeurodiversityInput = z.infer<typeof step08NeurodiversitySchema>;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "udp-schema",
3
- "version": "2.15.0",
3
+ "version": "2.17.0",
4
4
  "description": "Shared Zod schemas for User Detailed Profile (frontend + backend).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",