@codeforamerica/safety-net-openapi-california 1.0.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 (211) hide show
  1. package/dist/applications/client/client.gen.d.ts +2 -0
  2. package/dist/applications/client/client.gen.js +128 -0
  3. package/dist/applications/client/index.d.ts +8 -0
  4. package/dist/applications/client/index.js +6 -0
  5. package/dist/applications/client/types.gen.d.ts +88 -0
  6. package/dist/applications/client/types.gen.js +2 -0
  7. package/dist/applications/client/utils.gen.d.ts +14 -0
  8. package/dist/applications/client/utils.gen.js +171 -0
  9. package/dist/applications/client.gen.d.ts +12 -0
  10. package/dist/applications/client.gen.js +3 -0
  11. package/dist/applications/core/auth.gen.d.ts +18 -0
  12. package/dist/applications/core/auth.gen.js +14 -0
  13. package/dist/applications/core/bodySerializer.gen.d.ts +25 -0
  14. package/dist/applications/core/bodySerializer.gen.js +57 -0
  15. package/dist/applications/core/params.gen.d.ts +43 -0
  16. package/dist/applications/core/params.gen.js +100 -0
  17. package/dist/applications/core/pathSerializer.gen.d.ts +33 -0
  18. package/dist/applications/core/pathSerializer.gen.js +114 -0
  19. package/dist/applications/core/queryKeySerializer.gen.d.ts +18 -0
  20. package/dist/applications/core/queryKeySerializer.gen.js +99 -0
  21. package/dist/applications/core/serverSentEvents.gen.d.ts +71 -0
  22. package/dist/applications/core/serverSentEvents.gen.js +137 -0
  23. package/dist/applications/core/types.gen.d.ts +78 -0
  24. package/dist/applications/core/types.gen.js +2 -0
  25. package/dist/applications/core/utils.gen.d.ts +19 -0
  26. package/dist/applications/core/utils.gen.js +87 -0
  27. package/dist/applications/index.d.ts +2 -0
  28. package/dist/applications/index.js +2 -0
  29. package/dist/applications/sdk.gen.d.ts +45 -0
  30. package/dist/applications/sdk.gen.js +70 -0
  31. package/dist/applications/types.gen.d.ts +34007 -0
  32. package/dist/applications/types.gen.js +2 -0
  33. package/dist/applications/zod.gen.d.ts +17374 -0
  34. package/dist/applications/zod.gen.js +16857 -0
  35. package/dist/households/client/client.gen.d.ts +2 -0
  36. package/dist/households/client/client.gen.js +128 -0
  37. package/dist/households/client/index.d.ts +8 -0
  38. package/dist/households/client/index.js +6 -0
  39. package/dist/households/client/types.gen.d.ts +88 -0
  40. package/dist/households/client/types.gen.js +2 -0
  41. package/dist/households/client/utils.gen.d.ts +14 -0
  42. package/dist/households/client/utils.gen.js +171 -0
  43. package/dist/households/client.gen.d.ts +12 -0
  44. package/dist/households/client.gen.js +3 -0
  45. package/dist/households/core/auth.gen.d.ts +18 -0
  46. package/dist/households/core/auth.gen.js +14 -0
  47. package/dist/households/core/bodySerializer.gen.d.ts +25 -0
  48. package/dist/households/core/bodySerializer.gen.js +57 -0
  49. package/dist/households/core/params.gen.d.ts +43 -0
  50. package/dist/households/core/params.gen.js +100 -0
  51. package/dist/households/core/pathSerializer.gen.d.ts +33 -0
  52. package/dist/households/core/pathSerializer.gen.js +114 -0
  53. package/dist/households/core/queryKeySerializer.gen.d.ts +18 -0
  54. package/dist/households/core/queryKeySerializer.gen.js +99 -0
  55. package/dist/households/core/serverSentEvents.gen.d.ts +71 -0
  56. package/dist/households/core/serverSentEvents.gen.js +137 -0
  57. package/dist/households/core/types.gen.d.ts +78 -0
  58. package/dist/households/core/types.gen.js +2 -0
  59. package/dist/households/core/utils.gen.d.ts +19 -0
  60. package/dist/households/core/utils.gen.js +87 -0
  61. package/dist/households/index.d.ts +2 -0
  62. package/dist/households/index.js +2 -0
  63. package/dist/households/sdk.gen.d.ts +45 -0
  64. package/dist/households/sdk.gen.js +70 -0
  65. package/dist/households/types.gen.d.ts +1693 -0
  66. package/dist/households/types.gen.js +2 -0
  67. package/dist/households/zod.gen.d.ts +624 -0
  68. package/dist/households/zod.gen.js +625 -0
  69. package/dist/incomes/client/client.gen.d.ts +2 -0
  70. package/dist/incomes/client/client.gen.js +128 -0
  71. package/dist/incomes/client/index.d.ts +8 -0
  72. package/dist/incomes/client/index.js +6 -0
  73. package/dist/incomes/client/types.gen.d.ts +88 -0
  74. package/dist/incomes/client/types.gen.js +2 -0
  75. package/dist/incomes/client/utils.gen.d.ts +14 -0
  76. package/dist/incomes/client/utils.gen.js +171 -0
  77. package/dist/incomes/client.gen.d.ts +12 -0
  78. package/dist/incomes/client.gen.js +3 -0
  79. package/dist/incomes/core/auth.gen.d.ts +18 -0
  80. package/dist/incomes/core/auth.gen.js +14 -0
  81. package/dist/incomes/core/bodySerializer.gen.d.ts +25 -0
  82. package/dist/incomes/core/bodySerializer.gen.js +57 -0
  83. package/dist/incomes/core/params.gen.d.ts +43 -0
  84. package/dist/incomes/core/params.gen.js +100 -0
  85. package/dist/incomes/core/pathSerializer.gen.d.ts +33 -0
  86. package/dist/incomes/core/pathSerializer.gen.js +114 -0
  87. package/dist/incomes/core/queryKeySerializer.gen.d.ts +18 -0
  88. package/dist/incomes/core/queryKeySerializer.gen.js +99 -0
  89. package/dist/incomes/core/serverSentEvents.gen.d.ts +71 -0
  90. package/dist/incomes/core/serverSentEvents.gen.js +137 -0
  91. package/dist/incomes/core/types.gen.d.ts +78 -0
  92. package/dist/incomes/core/types.gen.js +2 -0
  93. package/dist/incomes/core/utils.gen.d.ts +19 -0
  94. package/dist/incomes/core/utils.gen.js +87 -0
  95. package/dist/incomes/index.d.ts +2 -0
  96. package/dist/incomes/index.js +2 -0
  97. package/dist/incomes/sdk.gen.d.ts +47 -0
  98. package/dist/incomes/sdk.gen.js +72 -0
  99. package/dist/incomes/types.gen.d.ts +1425 -0
  100. package/dist/incomes/types.gen.js +2 -0
  101. package/dist/incomes/zod.gen.d.ts +961 -0
  102. package/dist/incomes/zod.gen.js +920 -0
  103. package/dist/index.d.ts +5 -0
  104. package/dist/index.js +5 -0
  105. package/dist/persons/client/client.gen.d.ts +2 -0
  106. package/dist/persons/client/client.gen.js +128 -0
  107. package/dist/persons/client/index.d.ts +8 -0
  108. package/dist/persons/client/index.js +6 -0
  109. package/dist/persons/client/types.gen.d.ts +88 -0
  110. package/dist/persons/client/types.gen.js +2 -0
  111. package/dist/persons/client/utils.gen.d.ts +14 -0
  112. package/dist/persons/client/utils.gen.js +171 -0
  113. package/dist/persons/client.gen.d.ts +12 -0
  114. package/dist/persons/client.gen.js +3 -0
  115. package/dist/persons/core/auth.gen.d.ts +18 -0
  116. package/dist/persons/core/auth.gen.js +14 -0
  117. package/dist/persons/core/bodySerializer.gen.d.ts +25 -0
  118. package/dist/persons/core/bodySerializer.gen.js +57 -0
  119. package/dist/persons/core/params.gen.d.ts +43 -0
  120. package/dist/persons/core/params.gen.js +100 -0
  121. package/dist/persons/core/pathSerializer.gen.d.ts +33 -0
  122. package/dist/persons/core/pathSerializer.gen.js +114 -0
  123. package/dist/persons/core/queryKeySerializer.gen.d.ts +18 -0
  124. package/dist/persons/core/queryKeySerializer.gen.js +99 -0
  125. package/dist/persons/core/serverSentEvents.gen.d.ts +71 -0
  126. package/dist/persons/core/serverSentEvents.gen.js +137 -0
  127. package/dist/persons/core/types.gen.d.ts +78 -0
  128. package/dist/persons/core/types.gen.js +2 -0
  129. package/dist/persons/core/utils.gen.d.ts +19 -0
  130. package/dist/persons/core/utils.gen.js +87 -0
  131. package/dist/persons/index.d.ts +2 -0
  132. package/dist/persons/index.js +2 -0
  133. package/dist/persons/sdk.gen.d.ts +45 -0
  134. package/dist/persons/sdk.gen.js +70 -0
  135. package/dist/persons/types.gen.d.ts +7595 -0
  136. package/dist/persons/types.gen.js +2 -0
  137. package/dist/persons/zod.gen.d.ts +3578 -0
  138. package/dist/persons/zod.gen.js +3579 -0
  139. package/dist/search-helpers.d.ts +242 -0
  140. package/dist/search-helpers.js +244 -0
  141. package/package.json +95 -0
  142. package/src/applications/client/client.gen.ts +166 -0
  143. package/src/applications/client/index.ts +23 -0
  144. package/src/applications/client/types.gen.ts +197 -0
  145. package/src/applications/client/utils.gen.ts +213 -0
  146. package/src/applications/client.gen.ts +16 -0
  147. package/src/applications/core/auth.gen.ts +42 -0
  148. package/src/applications/core/bodySerializer.gen.ts +100 -0
  149. package/src/applications/core/params.gen.ts +176 -0
  150. package/src/applications/core/pathSerializer.gen.ts +181 -0
  151. package/src/applications/core/queryKeySerializer.gen.ts +136 -0
  152. package/src/applications/core/serverSentEvents.gen.ts +266 -0
  153. package/src/applications/core/types.gen.ts +118 -0
  154. package/src/applications/core/utils.gen.ts +143 -0
  155. package/src/applications/index.ts +4 -0
  156. package/src/applications/sdk.gen.ts +92 -0
  157. package/src/applications/types.gen.ts +34043 -0
  158. package/src/applications/zod.gen.ts +16877 -0
  159. package/src/households/client/client.gen.ts +166 -0
  160. package/src/households/client/index.ts +23 -0
  161. package/src/households/client/types.gen.ts +197 -0
  162. package/src/households/client/utils.gen.ts +213 -0
  163. package/src/households/client.gen.ts +16 -0
  164. package/src/households/core/auth.gen.ts +42 -0
  165. package/src/households/core/bodySerializer.gen.ts +100 -0
  166. package/src/households/core/params.gen.ts +176 -0
  167. package/src/households/core/pathSerializer.gen.ts +181 -0
  168. package/src/households/core/queryKeySerializer.gen.ts +136 -0
  169. package/src/households/core/serverSentEvents.gen.ts +266 -0
  170. package/src/households/core/types.gen.ts +118 -0
  171. package/src/households/core/utils.gen.ts +143 -0
  172. package/src/households/index.ts +4 -0
  173. package/src/households/sdk.gen.ts +92 -0
  174. package/src/households/types.gen.ts +1729 -0
  175. package/src/households/zod.gen.ts +645 -0
  176. package/src/incomes/client/client.gen.ts +166 -0
  177. package/src/incomes/client/index.ts +23 -0
  178. package/src/incomes/client/types.gen.ts +197 -0
  179. package/src/incomes/client/utils.gen.ts +213 -0
  180. package/src/incomes/client.gen.ts +16 -0
  181. package/src/incomes/core/auth.gen.ts +42 -0
  182. package/src/incomes/core/bodySerializer.gen.ts +100 -0
  183. package/src/incomes/core/params.gen.ts +176 -0
  184. package/src/incomes/core/pathSerializer.gen.ts +181 -0
  185. package/src/incomes/core/queryKeySerializer.gen.ts +136 -0
  186. package/src/incomes/core/serverSentEvents.gen.ts +266 -0
  187. package/src/incomes/core/types.gen.ts +118 -0
  188. package/src/incomes/core/utils.gen.ts +143 -0
  189. package/src/incomes/index.ts +4 -0
  190. package/src/incomes/sdk.gen.ts +94 -0
  191. package/src/incomes/types.gen.ts +1460 -0
  192. package/src/incomes/zod.gen.ts +939 -0
  193. package/src/index.ts +5 -0
  194. package/src/persons/client/client.gen.ts +166 -0
  195. package/src/persons/client/index.ts +23 -0
  196. package/src/persons/client/types.gen.ts +197 -0
  197. package/src/persons/client/utils.gen.ts +213 -0
  198. package/src/persons/client.gen.ts +16 -0
  199. package/src/persons/core/auth.gen.ts +42 -0
  200. package/src/persons/core/bodySerializer.gen.ts +100 -0
  201. package/src/persons/core/params.gen.ts +176 -0
  202. package/src/persons/core/pathSerializer.gen.ts +181 -0
  203. package/src/persons/core/queryKeySerializer.gen.ts +136 -0
  204. package/src/persons/core/serverSentEvents.gen.ts +266 -0
  205. package/src/persons/core/types.gen.ts +118 -0
  206. package/src/persons/core/utils.gen.ts +143 -0
  207. package/src/persons/index.ts +4 -0
  208. package/src/persons/sdk.gen.ts +92 -0
  209. package/src/persons/types.gen.ts +7631 -0
  210. package/src/persons/zod.gen.ts +3599 -0
  211. package/src/search-helpers.ts +264 -0
@@ -0,0 +1,3599 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+
3
+ import { z } from 'zod';
4
+
5
+ export const zPerson = z.object({
6
+ name: z.optional(z.object({
7
+ firstName: z.string().min(1).max(100),
8
+ middleInitial: z.optional(z.string().max(1)),
9
+ middleName: z.optional(z.string().max(100)),
10
+ lastName: z.string().min(1).max(100),
11
+ maidenName: z.optional(z.string().max(100)),
12
+ suffix: z.optional(z.string().max(20))
13
+ })),
14
+ dateOfBirth: z.optional(z.iso.date()),
15
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
16
+ address: z.optional(z.object({
17
+ addressLine1: z.string().min(1).max(150),
18
+ addressLine2: z.optional(z.string().max(150)),
19
+ city: z.string().min(1).max(100),
20
+ stateProvince: z.string().min(1).max(100),
21
+ postalCode: z.string().min(3).max(20),
22
+ county: z.optional(z.string().max(100))
23
+ })),
24
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
25
+ email: z.optional(z.email().max(320))
26
+ }).and(z.object({
27
+ id: z.optional(z.uuid()),
28
+ demographicInfo: z.optional(z.object({
29
+ sex: z.optional(z.enum([
30
+ 'male',
31
+ 'female',
32
+ 'unknown'
33
+ ])),
34
+ maritalStatus: z.optional(z.enum([
35
+ 'single',
36
+ 'married',
37
+ 'divorced',
38
+ 'separated',
39
+ 'widowed',
40
+ 'civil_union',
41
+ 'domestic_partnership'
42
+ ])),
43
+ isHispanicOrLatino: z.optional(z.boolean()),
44
+ race: z.optional(z.array(z.enum([
45
+ 'american_indian_alaskan_native',
46
+ 'asian',
47
+ 'black_african_american',
48
+ 'native_hawaiian_pacific_islander',
49
+ 'white'
50
+ ]))),
51
+ gender: z.optional(z.enum([
52
+ 'male',
53
+ 'female',
54
+ 'nonbinary',
55
+ 'unknown'
56
+ ]))
57
+ })),
58
+ citizenshipInfo: z.optional(z.object({
59
+ status: z.optional(z.enum([
60
+ 'us_citizen',
61
+ 'lawful_permanent_resident',
62
+ 'qualified_alien',
63
+ 'prucol',
64
+ 'undocumented',
65
+ 'other'
66
+ ])),
67
+ certificateNumber: z.optional(z.string().max(50)),
68
+ immigrationInfo: z.optional(z.object({
69
+ status: z.optional(z.string().max(100)),
70
+ documentType: z.optional(z.string().max(100)),
71
+ documentNumber: z.optional(z.string().max(100)),
72
+ alienOrI94Number: z.optional(z.string().max(100)),
73
+ documentExpirationDate: z.optional(z.iso.date()),
74
+ countryOfIssuance: z.optional(z.string().max(100)),
75
+ hasSponsor: z.optional(z.boolean()),
76
+ sponsor: z.optional(z.object({
77
+ name: z.optional(z.object({
78
+ firstName: z.string().min(1).max(100),
79
+ middleInitial: z.optional(z.string().max(1)),
80
+ middleName: z.optional(z.string().max(100)),
81
+ lastName: z.string().min(1).max(100),
82
+ maidenName: z.optional(z.string().max(100)),
83
+ suffix: z.optional(z.string().max(20))
84
+ })),
85
+ dateOfBirth: z.optional(z.iso.date()),
86
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
87
+ address: z.optional(z.object({
88
+ addressLine1: z.string().min(1).max(150),
89
+ addressLine2: z.optional(z.string().max(150)),
90
+ city: z.string().min(1).max(100),
91
+ stateProvince: z.string().min(1).max(100),
92
+ postalCode: z.string().min(3).max(20),
93
+ county: z.optional(z.string().max(100))
94
+ })),
95
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
96
+ email: z.optional(z.email().max(320))
97
+ }).and(z.object({
98
+ spouse: z.optional(z.object({
99
+ name: z.optional(z.object({
100
+ firstName: z.string().min(1).max(100),
101
+ middleInitial: z.optional(z.string().max(1)),
102
+ middleName: z.optional(z.string().max(100)),
103
+ lastName: z.string().min(1).max(100),
104
+ maidenName: z.optional(z.string().max(100)),
105
+ suffix: z.optional(z.string().max(20))
106
+ })),
107
+ dateOfBirth: z.optional(z.iso.date()),
108
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
109
+ address: z.optional(z.object({
110
+ addressLine1: z.string().min(1).max(150),
111
+ addressLine2: z.optional(z.string().max(150)),
112
+ city: z.string().min(1).max(100),
113
+ stateProvince: z.string().min(1).max(100),
114
+ postalCode: z.string().min(3).max(20),
115
+ county: z.optional(z.string().max(100))
116
+ })),
117
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
118
+ email: z.optional(z.email().max(320))
119
+ })),
120
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
121
+ })))
122
+ }))
123
+ })),
124
+ contactInfo: z.optional(z.object({
125
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
126
+ mailingAddress: z.optional(z.object({
127
+ addressLine1: z.string().min(1).max(150),
128
+ addressLine2: z.optional(z.string().max(150)),
129
+ city: z.string().min(1).max(100),
130
+ stateProvince: z.string().min(1).max(100),
131
+ postalCode: z.string().min(3).max(20),
132
+ county: z.optional(z.string().max(100))
133
+ })),
134
+ isHomeless: z.optional(z.boolean()),
135
+ preferredNoticeMethod: z.optional(z.enum([
136
+ 'paper',
137
+ 'email',
138
+ 'both'
139
+ ])),
140
+ languagePreference: z.optional(z.object({
141
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
142
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
143
+ })),
144
+ preferredContactMethod: z.optional(z.enum([
145
+ 'phone',
146
+ 'email',
147
+ 'mail',
148
+ 'sms'
149
+ ]))
150
+ })),
151
+ employmentInfo: z.optional(z.object({
152
+ jobs: z.optional(z.array(z.object({
153
+ employer: z.optional(z.object({
154
+ name: z.optional(z.string().max(200)),
155
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
156
+ address: z.optional(z.object({
157
+ addressLine1: z.string().min(1).max(150),
158
+ addressLine2: z.optional(z.string().max(150)),
159
+ city: z.string().min(1).max(100),
160
+ stateProvince: z.string().min(1).max(100),
161
+ postalCode: z.string().min(3).max(20),
162
+ county: z.optional(z.string().max(100))
163
+ })),
164
+ identificationNumber: z.optional(z.string().max(50))
165
+ })),
166
+ startDate: z.optional(z.iso.date()),
167
+ endDate: z.optional(z.iso.date())
168
+ })))
169
+ })),
170
+ educationInfo: z.optional(z.object({
171
+ lastGradeCompleted: z.optional(z.string().max(50)),
172
+ isCurrentlyEnrolled: z.optional(z.boolean()),
173
+ schoolName: z.optional(z.string().max(200)),
174
+ startDate: z.optional(z.iso.date()),
175
+ isFullTimeStudent: z.optional(z.boolean()),
176
+ expectedGraduationDate: z.optional(z.iso.date())
177
+ })),
178
+ militaryInfo: z.optional(z.object({
179
+ isMilitaryServiceMember: z.optional(z.boolean()),
180
+ veteranStatus: z.optional(z.boolean())
181
+ })),
182
+ tribalInfo: z.optional(z.object({
183
+ tribeName: z.optional(z.string().max(200)),
184
+ tribeState: z.optional(z.string().max(100)),
185
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
186
+ isEligibleForIndianHealthService: z.optional(z.boolean())
187
+ })),
188
+ consentToShareInformation: z.optional(z.boolean()),
189
+ createdAt: z.optional(z.iso.datetime().readonly()),
190
+ updatedAt: z.optional(z.iso.datetime().readonly()),
191
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
192
+ countyName: z.optional(z.enum([
193
+ 'Alameda',
194
+ 'Alpine',
195
+ 'Amador',
196
+ 'Butte',
197
+ 'Calaveras',
198
+ 'Colusa',
199
+ 'Contra Costa',
200
+ 'Del Norte',
201
+ 'El Dorado',
202
+ 'Fresno',
203
+ 'Glenn',
204
+ 'Humboldt',
205
+ 'Imperial',
206
+ 'Inyo',
207
+ 'Kern',
208
+ 'Kings',
209
+ 'Lake',
210
+ 'Lassen',
211
+ 'Los Angeles',
212
+ 'Madera',
213
+ 'Marin',
214
+ 'Mariposa',
215
+ 'Mendocino',
216
+ 'Merced',
217
+ 'Modoc',
218
+ 'Mono',
219
+ 'Monterey',
220
+ 'Napa',
221
+ 'Nevada',
222
+ 'Orange',
223
+ 'Placer',
224
+ 'Plumas',
225
+ 'Riverside',
226
+ 'Sacramento',
227
+ 'San Benito',
228
+ 'San Bernardino',
229
+ 'San Diego',
230
+ 'San Francisco',
231
+ 'San Joaquin',
232
+ 'San Luis Obispo',
233
+ 'San Mateo',
234
+ 'Santa Barbara',
235
+ 'Santa Clara',
236
+ 'Santa Cruz',
237
+ 'Shasta',
238
+ 'Sierra',
239
+ 'Siskiyou',
240
+ 'Solano',
241
+ 'Sonoma',
242
+ 'Stanislaus',
243
+ 'Sutter',
244
+ 'Tehama',
245
+ 'Trinity',
246
+ 'Tulare',
247
+ 'Tuolumne',
248
+ 'Ventura',
249
+ 'Yolo',
250
+ 'Yuba'
251
+ ])),
252
+ calworksEligible: z.optional(z.boolean()),
253
+ calfreshEligible: z.optional(z.boolean()),
254
+ medicalEligible: z.optional(z.boolean())
255
+ }));
256
+
257
+ export const zPersonCreate = z.object({
258
+ name: z.optional(z.object({
259
+ firstName: z.string().min(1).max(100),
260
+ middleInitial: z.optional(z.string().max(1)),
261
+ middleName: z.optional(z.string().max(100)),
262
+ lastName: z.string().min(1).max(100),
263
+ maidenName: z.optional(z.string().max(100)),
264
+ suffix: z.optional(z.string().max(20))
265
+ })),
266
+ dateOfBirth: z.optional(z.iso.date()),
267
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
268
+ address: z.optional(z.object({
269
+ addressLine1: z.string().min(1).max(150),
270
+ addressLine2: z.optional(z.string().max(150)),
271
+ city: z.string().min(1).max(100),
272
+ stateProvince: z.string().min(1).max(100),
273
+ postalCode: z.string().min(3).max(20),
274
+ county: z.optional(z.string().max(100))
275
+ })),
276
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
277
+ email: z.optional(z.email().max(320))
278
+ }).and(z.object({
279
+ id: z.optional(z.uuid()),
280
+ demographicInfo: z.optional(z.object({
281
+ sex: z.optional(z.enum([
282
+ 'male',
283
+ 'female',
284
+ 'unknown'
285
+ ])),
286
+ maritalStatus: z.optional(z.enum([
287
+ 'single',
288
+ 'married',
289
+ 'divorced',
290
+ 'separated',
291
+ 'widowed',
292
+ 'civil_union',
293
+ 'domestic_partnership'
294
+ ])),
295
+ isHispanicOrLatino: z.optional(z.boolean()),
296
+ race: z.optional(z.array(z.enum([
297
+ 'american_indian_alaskan_native',
298
+ 'asian',
299
+ 'black_african_american',
300
+ 'native_hawaiian_pacific_islander',
301
+ 'white'
302
+ ]))),
303
+ gender: z.optional(z.enum([
304
+ 'male',
305
+ 'female',
306
+ 'nonbinary',
307
+ 'unknown'
308
+ ]))
309
+ })),
310
+ citizenshipInfo: z.optional(z.object({
311
+ status: z.optional(z.enum([
312
+ 'us_citizen',
313
+ 'lawful_permanent_resident',
314
+ 'qualified_alien',
315
+ 'prucol',
316
+ 'undocumented',
317
+ 'other'
318
+ ])),
319
+ certificateNumber: z.optional(z.string().max(50)),
320
+ immigrationInfo: z.optional(z.object({
321
+ status: z.optional(z.string().max(100)),
322
+ documentType: z.optional(z.string().max(100)),
323
+ documentNumber: z.optional(z.string().max(100)),
324
+ alienOrI94Number: z.optional(z.string().max(100)),
325
+ documentExpirationDate: z.optional(z.iso.date()),
326
+ countryOfIssuance: z.optional(z.string().max(100)),
327
+ hasSponsor: z.optional(z.boolean()),
328
+ sponsor: z.optional(z.object({
329
+ name: z.optional(z.object({
330
+ firstName: z.string().min(1).max(100),
331
+ middleInitial: z.optional(z.string().max(1)),
332
+ middleName: z.optional(z.string().max(100)),
333
+ lastName: z.string().min(1).max(100),
334
+ maidenName: z.optional(z.string().max(100)),
335
+ suffix: z.optional(z.string().max(20))
336
+ })),
337
+ dateOfBirth: z.optional(z.iso.date()),
338
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
339
+ address: z.optional(z.object({
340
+ addressLine1: z.string().min(1).max(150),
341
+ addressLine2: z.optional(z.string().max(150)),
342
+ city: z.string().min(1).max(100),
343
+ stateProvince: z.string().min(1).max(100),
344
+ postalCode: z.string().min(3).max(20),
345
+ county: z.optional(z.string().max(100))
346
+ })),
347
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
348
+ email: z.optional(z.email().max(320))
349
+ }).and(z.object({
350
+ spouse: z.optional(z.object({
351
+ name: z.optional(z.object({
352
+ firstName: z.string().min(1).max(100),
353
+ middleInitial: z.optional(z.string().max(1)),
354
+ middleName: z.optional(z.string().max(100)),
355
+ lastName: z.string().min(1).max(100),
356
+ maidenName: z.optional(z.string().max(100)),
357
+ suffix: z.optional(z.string().max(20))
358
+ })),
359
+ dateOfBirth: z.optional(z.iso.date()),
360
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
361
+ address: z.optional(z.object({
362
+ addressLine1: z.string().min(1).max(150),
363
+ addressLine2: z.optional(z.string().max(150)),
364
+ city: z.string().min(1).max(100),
365
+ stateProvince: z.string().min(1).max(100),
366
+ postalCode: z.string().min(3).max(20),
367
+ county: z.optional(z.string().max(100))
368
+ })),
369
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
370
+ email: z.optional(z.email().max(320))
371
+ })),
372
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
373
+ })))
374
+ }))
375
+ })),
376
+ contactInfo: z.optional(z.object({
377
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
378
+ mailingAddress: z.optional(z.object({
379
+ addressLine1: z.string().min(1).max(150),
380
+ addressLine2: z.optional(z.string().max(150)),
381
+ city: z.string().min(1).max(100),
382
+ stateProvince: z.string().min(1).max(100),
383
+ postalCode: z.string().min(3).max(20),
384
+ county: z.optional(z.string().max(100))
385
+ })),
386
+ isHomeless: z.optional(z.boolean()),
387
+ preferredNoticeMethod: z.optional(z.enum([
388
+ 'paper',
389
+ 'email',
390
+ 'both'
391
+ ])),
392
+ languagePreference: z.optional(z.object({
393
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
394
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
395
+ })),
396
+ preferredContactMethod: z.optional(z.enum([
397
+ 'phone',
398
+ 'email',
399
+ 'mail',
400
+ 'sms'
401
+ ]))
402
+ })),
403
+ employmentInfo: z.optional(z.object({
404
+ jobs: z.optional(z.array(z.object({
405
+ employer: z.optional(z.object({
406
+ name: z.optional(z.string().max(200)),
407
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
408
+ address: z.optional(z.object({
409
+ addressLine1: z.string().min(1).max(150),
410
+ addressLine2: z.optional(z.string().max(150)),
411
+ city: z.string().min(1).max(100),
412
+ stateProvince: z.string().min(1).max(100),
413
+ postalCode: z.string().min(3).max(20),
414
+ county: z.optional(z.string().max(100))
415
+ })),
416
+ identificationNumber: z.optional(z.string().max(50))
417
+ })),
418
+ startDate: z.optional(z.iso.date()),
419
+ endDate: z.optional(z.iso.date())
420
+ })))
421
+ })),
422
+ educationInfo: z.optional(z.object({
423
+ lastGradeCompleted: z.optional(z.string().max(50)),
424
+ isCurrentlyEnrolled: z.optional(z.boolean()),
425
+ schoolName: z.optional(z.string().max(200)),
426
+ startDate: z.optional(z.iso.date()),
427
+ isFullTimeStudent: z.optional(z.boolean()),
428
+ expectedGraduationDate: z.optional(z.iso.date())
429
+ })),
430
+ militaryInfo: z.optional(z.object({
431
+ isMilitaryServiceMember: z.optional(z.boolean()),
432
+ veteranStatus: z.optional(z.boolean())
433
+ })),
434
+ tribalInfo: z.optional(z.object({
435
+ tribeName: z.optional(z.string().max(200)),
436
+ tribeState: z.optional(z.string().max(100)),
437
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
438
+ isEligibleForIndianHealthService: z.optional(z.boolean())
439
+ })),
440
+ consentToShareInformation: z.optional(z.boolean()),
441
+ createdAt: z.optional(z.iso.datetime().readonly()),
442
+ updatedAt: z.optional(z.iso.datetime().readonly()),
443
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
444
+ countyName: z.optional(z.enum([
445
+ 'Alameda',
446
+ 'Alpine',
447
+ 'Amador',
448
+ 'Butte',
449
+ 'Calaveras',
450
+ 'Colusa',
451
+ 'Contra Costa',
452
+ 'Del Norte',
453
+ 'El Dorado',
454
+ 'Fresno',
455
+ 'Glenn',
456
+ 'Humboldt',
457
+ 'Imperial',
458
+ 'Inyo',
459
+ 'Kern',
460
+ 'Kings',
461
+ 'Lake',
462
+ 'Lassen',
463
+ 'Los Angeles',
464
+ 'Madera',
465
+ 'Marin',
466
+ 'Mariposa',
467
+ 'Mendocino',
468
+ 'Merced',
469
+ 'Modoc',
470
+ 'Mono',
471
+ 'Monterey',
472
+ 'Napa',
473
+ 'Nevada',
474
+ 'Orange',
475
+ 'Placer',
476
+ 'Plumas',
477
+ 'Riverside',
478
+ 'Sacramento',
479
+ 'San Benito',
480
+ 'San Bernardino',
481
+ 'San Diego',
482
+ 'San Francisco',
483
+ 'San Joaquin',
484
+ 'San Luis Obispo',
485
+ 'San Mateo',
486
+ 'Santa Barbara',
487
+ 'Santa Clara',
488
+ 'Santa Cruz',
489
+ 'Shasta',
490
+ 'Sierra',
491
+ 'Siskiyou',
492
+ 'Solano',
493
+ 'Sonoma',
494
+ 'Stanislaus',
495
+ 'Sutter',
496
+ 'Tehama',
497
+ 'Trinity',
498
+ 'Tulare',
499
+ 'Tuolumne',
500
+ 'Ventura',
501
+ 'Yolo',
502
+ 'Yuba'
503
+ ])),
504
+ calworksEligible: z.optional(z.boolean()),
505
+ calfreshEligible: z.optional(z.boolean()),
506
+ medicalEligible: z.optional(z.boolean())
507
+ }));
508
+
509
+ export const zPersonUpdate = z.object({
510
+ name: z.optional(z.object({
511
+ firstName: z.string().min(1).max(100),
512
+ middleInitial: z.optional(z.string().max(1)),
513
+ middleName: z.optional(z.string().max(100)),
514
+ lastName: z.string().min(1).max(100),
515
+ maidenName: z.optional(z.string().max(100)),
516
+ suffix: z.optional(z.string().max(20))
517
+ })),
518
+ dateOfBirth: z.optional(z.iso.date()),
519
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
520
+ address: z.optional(z.object({
521
+ addressLine1: z.string().min(1).max(150),
522
+ addressLine2: z.optional(z.string().max(150)),
523
+ city: z.string().min(1).max(100),
524
+ stateProvince: z.string().min(1).max(100),
525
+ postalCode: z.string().min(3).max(20),
526
+ county: z.optional(z.string().max(100))
527
+ })),
528
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
529
+ email: z.optional(z.email().max(320))
530
+ }).and(z.object({
531
+ id: z.optional(z.uuid()),
532
+ demographicInfo: z.optional(z.object({
533
+ sex: z.optional(z.enum([
534
+ 'male',
535
+ 'female',
536
+ 'unknown'
537
+ ])),
538
+ maritalStatus: z.optional(z.enum([
539
+ 'single',
540
+ 'married',
541
+ 'divorced',
542
+ 'separated',
543
+ 'widowed',
544
+ 'civil_union',
545
+ 'domestic_partnership'
546
+ ])),
547
+ isHispanicOrLatino: z.optional(z.boolean()),
548
+ race: z.optional(z.array(z.enum([
549
+ 'american_indian_alaskan_native',
550
+ 'asian',
551
+ 'black_african_american',
552
+ 'native_hawaiian_pacific_islander',
553
+ 'white'
554
+ ]))),
555
+ gender: z.optional(z.enum([
556
+ 'male',
557
+ 'female',
558
+ 'nonbinary',
559
+ 'unknown'
560
+ ]))
561
+ })),
562
+ citizenshipInfo: z.optional(z.object({
563
+ status: z.optional(z.enum([
564
+ 'us_citizen',
565
+ 'lawful_permanent_resident',
566
+ 'qualified_alien',
567
+ 'prucol',
568
+ 'undocumented',
569
+ 'other'
570
+ ])),
571
+ certificateNumber: z.optional(z.string().max(50)),
572
+ immigrationInfo: z.optional(z.object({
573
+ status: z.optional(z.string().max(100)),
574
+ documentType: z.optional(z.string().max(100)),
575
+ documentNumber: z.optional(z.string().max(100)),
576
+ alienOrI94Number: z.optional(z.string().max(100)),
577
+ documentExpirationDate: z.optional(z.iso.date()),
578
+ countryOfIssuance: z.optional(z.string().max(100)),
579
+ hasSponsor: z.optional(z.boolean()),
580
+ sponsor: z.optional(z.object({
581
+ name: z.optional(z.object({
582
+ firstName: z.string().min(1).max(100),
583
+ middleInitial: z.optional(z.string().max(1)),
584
+ middleName: z.optional(z.string().max(100)),
585
+ lastName: z.string().min(1).max(100),
586
+ maidenName: z.optional(z.string().max(100)),
587
+ suffix: z.optional(z.string().max(20))
588
+ })),
589
+ dateOfBirth: z.optional(z.iso.date()),
590
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
591
+ address: z.optional(z.object({
592
+ addressLine1: z.string().min(1).max(150),
593
+ addressLine2: z.optional(z.string().max(150)),
594
+ city: z.string().min(1).max(100),
595
+ stateProvince: z.string().min(1).max(100),
596
+ postalCode: z.string().min(3).max(20),
597
+ county: z.optional(z.string().max(100))
598
+ })),
599
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
600
+ email: z.optional(z.email().max(320))
601
+ }).and(z.object({
602
+ spouse: z.optional(z.object({
603
+ name: z.optional(z.object({
604
+ firstName: z.string().min(1).max(100),
605
+ middleInitial: z.optional(z.string().max(1)),
606
+ middleName: z.optional(z.string().max(100)),
607
+ lastName: z.string().min(1).max(100),
608
+ maidenName: z.optional(z.string().max(100)),
609
+ suffix: z.optional(z.string().max(20))
610
+ })),
611
+ dateOfBirth: z.optional(z.iso.date()),
612
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
613
+ address: z.optional(z.object({
614
+ addressLine1: z.string().min(1).max(150),
615
+ addressLine2: z.optional(z.string().max(150)),
616
+ city: z.string().min(1).max(100),
617
+ stateProvince: z.string().min(1).max(100),
618
+ postalCode: z.string().min(3).max(20),
619
+ county: z.optional(z.string().max(100))
620
+ })),
621
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
622
+ email: z.optional(z.email().max(320))
623
+ })),
624
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
625
+ })))
626
+ }))
627
+ })),
628
+ contactInfo: z.optional(z.object({
629
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
630
+ mailingAddress: z.optional(z.object({
631
+ addressLine1: z.string().min(1).max(150),
632
+ addressLine2: z.optional(z.string().max(150)),
633
+ city: z.string().min(1).max(100),
634
+ stateProvince: z.string().min(1).max(100),
635
+ postalCode: z.string().min(3).max(20),
636
+ county: z.optional(z.string().max(100))
637
+ })),
638
+ isHomeless: z.optional(z.boolean()),
639
+ preferredNoticeMethod: z.optional(z.enum([
640
+ 'paper',
641
+ 'email',
642
+ 'both'
643
+ ])),
644
+ languagePreference: z.optional(z.object({
645
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
646
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
647
+ })),
648
+ preferredContactMethod: z.optional(z.enum([
649
+ 'phone',
650
+ 'email',
651
+ 'mail',
652
+ 'sms'
653
+ ]))
654
+ })),
655
+ employmentInfo: z.optional(z.object({
656
+ jobs: z.optional(z.array(z.object({
657
+ employer: z.optional(z.object({
658
+ name: z.optional(z.string().max(200)),
659
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
660
+ address: z.optional(z.object({
661
+ addressLine1: z.string().min(1).max(150),
662
+ addressLine2: z.optional(z.string().max(150)),
663
+ city: z.string().min(1).max(100),
664
+ stateProvince: z.string().min(1).max(100),
665
+ postalCode: z.string().min(3).max(20),
666
+ county: z.optional(z.string().max(100))
667
+ })),
668
+ identificationNumber: z.optional(z.string().max(50))
669
+ })),
670
+ startDate: z.optional(z.iso.date()),
671
+ endDate: z.optional(z.iso.date())
672
+ })))
673
+ })),
674
+ educationInfo: z.optional(z.object({
675
+ lastGradeCompleted: z.optional(z.string().max(50)),
676
+ isCurrentlyEnrolled: z.optional(z.boolean()),
677
+ schoolName: z.optional(z.string().max(200)),
678
+ startDate: z.optional(z.iso.date()),
679
+ isFullTimeStudent: z.optional(z.boolean()),
680
+ expectedGraduationDate: z.optional(z.iso.date())
681
+ })),
682
+ militaryInfo: z.optional(z.object({
683
+ isMilitaryServiceMember: z.optional(z.boolean()),
684
+ veteranStatus: z.optional(z.boolean())
685
+ })),
686
+ tribalInfo: z.optional(z.object({
687
+ tribeName: z.optional(z.string().max(200)),
688
+ tribeState: z.optional(z.string().max(100)),
689
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
690
+ isEligibleForIndianHealthService: z.optional(z.boolean())
691
+ })),
692
+ consentToShareInformation: z.optional(z.boolean()),
693
+ createdAt: z.optional(z.iso.datetime().readonly()),
694
+ updatedAt: z.optional(z.iso.datetime().readonly()),
695
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
696
+ countyName: z.optional(z.enum([
697
+ 'Alameda',
698
+ 'Alpine',
699
+ 'Amador',
700
+ 'Butte',
701
+ 'Calaveras',
702
+ 'Colusa',
703
+ 'Contra Costa',
704
+ 'Del Norte',
705
+ 'El Dorado',
706
+ 'Fresno',
707
+ 'Glenn',
708
+ 'Humboldt',
709
+ 'Imperial',
710
+ 'Inyo',
711
+ 'Kern',
712
+ 'Kings',
713
+ 'Lake',
714
+ 'Lassen',
715
+ 'Los Angeles',
716
+ 'Madera',
717
+ 'Marin',
718
+ 'Mariposa',
719
+ 'Mendocino',
720
+ 'Merced',
721
+ 'Modoc',
722
+ 'Mono',
723
+ 'Monterey',
724
+ 'Napa',
725
+ 'Nevada',
726
+ 'Orange',
727
+ 'Placer',
728
+ 'Plumas',
729
+ 'Riverside',
730
+ 'Sacramento',
731
+ 'San Benito',
732
+ 'San Bernardino',
733
+ 'San Diego',
734
+ 'San Francisco',
735
+ 'San Joaquin',
736
+ 'San Luis Obispo',
737
+ 'San Mateo',
738
+ 'Santa Barbara',
739
+ 'Santa Clara',
740
+ 'Santa Cruz',
741
+ 'Shasta',
742
+ 'Sierra',
743
+ 'Siskiyou',
744
+ 'Solano',
745
+ 'Sonoma',
746
+ 'Stanislaus',
747
+ 'Sutter',
748
+ 'Tehama',
749
+ 'Trinity',
750
+ 'Tulare',
751
+ 'Tuolumne',
752
+ 'Ventura',
753
+ 'Yolo',
754
+ 'Yuba'
755
+ ])),
756
+ calworksEligible: z.optional(z.boolean()),
757
+ calfreshEligible: z.optional(z.boolean()),
758
+ medicalEligible: z.optional(z.boolean())
759
+ }));
760
+
761
+ export const zPersonList = z.object({
762
+ items: z.array(z.object({
763
+ name: z.optional(z.object({
764
+ firstName: z.string().min(1).max(100),
765
+ middleInitial: z.optional(z.string().max(1)),
766
+ middleName: z.optional(z.string().max(100)),
767
+ lastName: z.string().min(1).max(100),
768
+ maidenName: z.optional(z.string().max(100)),
769
+ suffix: z.optional(z.string().max(20))
770
+ })),
771
+ dateOfBirth: z.optional(z.iso.date()),
772
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
773
+ address: z.optional(z.object({
774
+ addressLine1: z.string().min(1).max(150),
775
+ addressLine2: z.optional(z.string().max(150)),
776
+ city: z.string().min(1).max(100),
777
+ stateProvince: z.string().min(1).max(100),
778
+ postalCode: z.string().min(3).max(20),
779
+ county: z.optional(z.string().max(100))
780
+ })),
781
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
782
+ email: z.optional(z.email().max(320))
783
+ }).and(z.object({
784
+ id: z.optional(z.uuid()),
785
+ demographicInfo: z.optional(z.object({
786
+ sex: z.optional(z.enum([
787
+ 'male',
788
+ 'female',
789
+ 'unknown'
790
+ ])),
791
+ maritalStatus: z.optional(z.enum([
792
+ 'single',
793
+ 'married',
794
+ 'divorced',
795
+ 'separated',
796
+ 'widowed',
797
+ 'civil_union',
798
+ 'domestic_partnership'
799
+ ])),
800
+ isHispanicOrLatino: z.optional(z.boolean()),
801
+ race: z.optional(z.array(z.enum([
802
+ 'american_indian_alaskan_native',
803
+ 'asian',
804
+ 'black_african_american',
805
+ 'native_hawaiian_pacific_islander',
806
+ 'white'
807
+ ]))),
808
+ gender: z.optional(z.enum([
809
+ 'male',
810
+ 'female',
811
+ 'nonbinary',
812
+ 'unknown'
813
+ ]))
814
+ })),
815
+ citizenshipInfo: z.optional(z.object({
816
+ status: z.optional(z.enum([
817
+ 'us_citizen',
818
+ 'lawful_permanent_resident',
819
+ 'qualified_alien',
820
+ 'prucol',
821
+ 'undocumented',
822
+ 'other'
823
+ ])),
824
+ certificateNumber: z.optional(z.string().max(50)),
825
+ immigrationInfo: z.optional(z.object({
826
+ status: z.optional(z.string().max(100)),
827
+ documentType: z.optional(z.string().max(100)),
828
+ documentNumber: z.optional(z.string().max(100)),
829
+ alienOrI94Number: z.optional(z.string().max(100)),
830
+ documentExpirationDate: z.optional(z.iso.date()),
831
+ countryOfIssuance: z.optional(z.string().max(100)),
832
+ hasSponsor: z.optional(z.boolean()),
833
+ sponsor: z.optional(z.object({
834
+ name: z.optional(z.object({
835
+ firstName: z.string().min(1).max(100),
836
+ middleInitial: z.optional(z.string().max(1)),
837
+ middleName: z.optional(z.string().max(100)),
838
+ lastName: z.string().min(1).max(100),
839
+ maidenName: z.optional(z.string().max(100)),
840
+ suffix: z.optional(z.string().max(20))
841
+ })),
842
+ dateOfBirth: z.optional(z.iso.date()),
843
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
844
+ address: z.optional(z.object({
845
+ addressLine1: z.string().min(1).max(150),
846
+ addressLine2: z.optional(z.string().max(150)),
847
+ city: z.string().min(1).max(100),
848
+ stateProvince: z.string().min(1).max(100),
849
+ postalCode: z.string().min(3).max(20),
850
+ county: z.optional(z.string().max(100))
851
+ })),
852
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
853
+ email: z.optional(z.email().max(320))
854
+ }).and(z.object({
855
+ spouse: z.optional(z.object({
856
+ name: z.optional(z.object({
857
+ firstName: z.string().min(1).max(100),
858
+ middleInitial: z.optional(z.string().max(1)),
859
+ middleName: z.optional(z.string().max(100)),
860
+ lastName: z.string().min(1).max(100),
861
+ maidenName: z.optional(z.string().max(100)),
862
+ suffix: z.optional(z.string().max(20))
863
+ })),
864
+ dateOfBirth: z.optional(z.iso.date()),
865
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
866
+ address: z.optional(z.object({
867
+ addressLine1: z.string().min(1).max(150),
868
+ addressLine2: z.optional(z.string().max(150)),
869
+ city: z.string().min(1).max(100),
870
+ stateProvince: z.string().min(1).max(100),
871
+ postalCode: z.string().min(3).max(20),
872
+ county: z.optional(z.string().max(100))
873
+ })),
874
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
875
+ email: z.optional(z.email().max(320))
876
+ })),
877
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
878
+ })))
879
+ }))
880
+ })),
881
+ contactInfo: z.optional(z.object({
882
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
883
+ mailingAddress: z.optional(z.object({
884
+ addressLine1: z.string().min(1).max(150),
885
+ addressLine2: z.optional(z.string().max(150)),
886
+ city: z.string().min(1).max(100),
887
+ stateProvince: z.string().min(1).max(100),
888
+ postalCode: z.string().min(3).max(20),
889
+ county: z.optional(z.string().max(100))
890
+ })),
891
+ isHomeless: z.optional(z.boolean()),
892
+ preferredNoticeMethod: z.optional(z.enum([
893
+ 'paper',
894
+ 'email',
895
+ 'both'
896
+ ])),
897
+ languagePreference: z.optional(z.object({
898
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
899
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
900
+ })),
901
+ preferredContactMethod: z.optional(z.enum([
902
+ 'phone',
903
+ 'email',
904
+ 'mail',
905
+ 'sms'
906
+ ]))
907
+ })),
908
+ employmentInfo: z.optional(z.object({
909
+ jobs: z.optional(z.array(z.object({
910
+ employer: z.optional(z.object({
911
+ name: z.optional(z.string().max(200)),
912
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
913
+ address: z.optional(z.object({
914
+ addressLine1: z.string().min(1).max(150),
915
+ addressLine2: z.optional(z.string().max(150)),
916
+ city: z.string().min(1).max(100),
917
+ stateProvince: z.string().min(1).max(100),
918
+ postalCode: z.string().min(3).max(20),
919
+ county: z.optional(z.string().max(100))
920
+ })),
921
+ identificationNumber: z.optional(z.string().max(50))
922
+ })),
923
+ startDate: z.optional(z.iso.date()),
924
+ endDate: z.optional(z.iso.date())
925
+ })))
926
+ })),
927
+ educationInfo: z.optional(z.object({
928
+ lastGradeCompleted: z.optional(z.string().max(50)),
929
+ isCurrentlyEnrolled: z.optional(z.boolean()),
930
+ schoolName: z.optional(z.string().max(200)),
931
+ startDate: z.optional(z.iso.date()),
932
+ isFullTimeStudent: z.optional(z.boolean()),
933
+ expectedGraduationDate: z.optional(z.iso.date())
934
+ })),
935
+ militaryInfo: z.optional(z.object({
936
+ isMilitaryServiceMember: z.optional(z.boolean()),
937
+ veteranStatus: z.optional(z.boolean())
938
+ })),
939
+ tribalInfo: z.optional(z.object({
940
+ tribeName: z.optional(z.string().max(200)),
941
+ tribeState: z.optional(z.string().max(100)),
942
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
943
+ isEligibleForIndianHealthService: z.optional(z.boolean())
944
+ })),
945
+ consentToShareInformation: z.optional(z.boolean()),
946
+ createdAt: z.optional(z.iso.datetime().readonly()),
947
+ updatedAt: z.optional(z.iso.datetime().readonly()),
948
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
949
+ countyName: z.optional(z.enum([
950
+ 'Alameda',
951
+ 'Alpine',
952
+ 'Amador',
953
+ 'Butte',
954
+ 'Calaveras',
955
+ 'Colusa',
956
+ 'Contra Costa',
957
+ 'Del Norte',
958
+ 'El Dorado',
959
+ 'Fresno',
960
+ 'Glenn',
961
+ 'Humboldt',
962
+ 'Imperial',
963
+ 'Inyo',
964
+ 'Kern',
965
+ 'Kings',
966
+ 'Lake',
967
+ 'Lassen',
968
+ 'Los Angeles',
969
+ 'Madera',
970
+ 'Marin',
971
+ 'Mariposa',
972
+ 'Mendocino',
973
+ 'Merced',
974
+ 'Modoc',
975
+ 'Mono',
976
+ 'Monterey',
977
+ 'Napa',
978
+ 'Nevada',
979
+ 'Orange',
980
+ 'Placer',
981
+ 'Plumas',
982
+ 'Riverside',
983
+ 'Sacramento',
984
+ 'San Benito',
985
+ 'San Bernardino',
986
+ 'San Diego',
987
+ 'San Francisco',
988
+ 'San Joaquin',
989
+ 'San Luis Obispo',
990
+ 'San Mateo',
991
+ 'Santa Barbara',
992
+ 'Santa Clara',
993
+ 'Santa Cruz',
994
+ 'Shasta',
995
+ 'Sierra',
996
+ 'Siskiyou',
997
+ 'Solano',
998
+ 'Sonoma',
999
+ 'Stanislaus',
1000
+ 'Sutter',
1001
+ 'Tehama',
1002
+ 'Trinity',
1003
+ 'Tulare',
1004
+ 'Tuolumne',
1005
+ 'Ventura',
1006
+ 'Yolo',
1007
+ 'Yuba'
1008
+ ])),
1009
+ calworksEligible: z.optional(z.boolean()),
1010
+ calfreshEligible: z.optional(z.boolean()),
1011
+ medicalEligible: z.optional(z.boolean())
1012
+ }))),
1013
+ total: z.int().gte(0),
1014
+ limit: z.int().gte(1).lte(100),
1015
+ offset: z.int().gte(0),
1016
+ hasNext: z.optional(z.boolean())
1017
+ });
1018
+
1019
+ export const zPersonWritable = z.object({
1020
+ name: z.optional(z.object({
1021
+ firstName: z.string().min(1).max(100),
1022
+ middleInitial: z.optional(z.string().max(1)),
1023
+ middleName: z.optional(z.string().max(100)),
1024
+ lastName: z.string().min(1).max(100),
1025
+ maidenName: z.optional(z.string().max(100)),
1026
+ suffix: z.optional(z.string().max(20))
1027
+ })),
1028
+ dateOfBirth: z.optional(z.iso.date()),
1029
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1030
+ address: z.optional(z.object({
1031
+ addressLine1: z.string().min(1).max(150),
1032
+ addressLine2: z.optional(z.string().max(150)),
1033
+ city: z.string().min(1).max(100),
1034
+ stateProvince: z.string().min(1).max(100),
1035
+ postalCode: z.string().min(3).max(20),
1036
+ county: z.optional(z.string().max(100))
1037
+ })),
1038
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1039
+ email: z.optional(z.email().max(320))
1040
+ }).and(z.object({
1041
+ id: z.optional(z.uuid()),
1042
+ demographicInfo: z.optional(z.object({
1043
+ sex: z.optional(z.enum([
1044
+ 'male',
1045
+ 'female',
1046
+ 'unknown'
1047
+ ])),
1048
+ maritalStatus: z.optional(z.enum([
1049
+ 'single',
1050
+ 'married',
1051
+ 'divorced',
1052
+ 'separated',
1053
+ 'widowed',
1054
+ 'civil_union',
1055
+ 'domestic_partnership'
1056
+ ])),
1057
+ isHispanicOrLatino: z.optional(z.boolean()),
1058
+ race: z.optional(z.array(z.enum([
1059
+ 'american_indian_alaskan_native',
1060
+ 'asian',
1061
+ 'black_african_american',
1062
+ 'native_hawaiian_pacific_islander',
1063
+ 'white'
1064
+ ]))),
1065
+ gender: z.optional(z.enum([
1066
+ 'male',
1067
+ 'female',
1068
+ 'nonbinary',
1069
+ 'unknown'
1070
+ ]))
1071
+ })),
1072
+ citizenshipInfo: z.optional(z.object({
1073
+ status: z.optional(z.enum([
1074
+ 'us_citizen',
1075
+ 'lawful_permanent_resident',
1076
+ 'qualified_alien',
1077
+ 'prucol',
1078
+ 'undocumented',
1079
+ 'other'
1080
+ ])),
1081
+ certificateNumber: z.optional(z.string().max(50)),
1082
+ immigrationInfo: z.optional(z.object({
1083
+ status: z.optional(z.string().max(100)),
1084
+ documentType: z.optional(z.string().max(100)),
1085
+ documentNumber: z.optional(z.string().max(100)),
1086
+ alienOrI94Number: z.optional(z.string().max(100)),
1087
+ documentExpirationDate: z.optional(z.iso.date()),
1088
+ countryOfIssuance: z.optional(z.string().max(100)),
1089
+ hasSponsor: z.optional(z.boolean()),
1090
+ sponsor: z.optional(z.object({
1091
+ name: z.optional(z.object({
1092
+ firstName: z.string().min(1).max(100),
1093
+ middleInitial: z.optional(z.string().max(1)),
1094
+ middleName: z.optional(z.string().max(100)),
1095
+ lastName: z.string().min(1).max(100),
1096
+ maidenName: z.optional(z.string().max(100)),
1097
+ suffix: z.optional(z.string().max(20))
1098
+ })),
1099
+ dateOfBirth: z.optional(z.iso.date()),
1100
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1101
+ address: z.optional(z.object({
1102
+ addressLine1: z.string().min(1).max(150),
1103
+ addressLine2: z.optional(z.string().max(150)),
1104
+ city: z.string().min(1).max(100),
1105
+ stateProvince: z.string().min(1).max(100),
1106
+ postalCode: z.string().min(3).max(20),
1107
+ county: z.optional(z.string().max(100))
1108
+ })),
1109
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1110
+ email: z.optional(z.email().max(320))
1111
+ }).and(z.object({
1112
+ spouse: z.optional(z.object({
1113
+ name: z.optional(z.object({
1114
+ firstName: z.string().min(1).max(100),
1115
+ middleInitial: z.optional(z.string().max(1)),
1116
+ middleName: z.optional(z.string().max(100)),
1117
+ lastName: z.string().min(1).max(100),
1118
+ maidenName: z.optional(z.string().max(100)),
1119
+ suffix: z.optional(z.string().max(20))
1120
+ })),
1121
+ dateOfBirth: z.optional(z.iso.date()),
1122
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1123
+ address: z.optional(z.object({
1124
+ addressLine1: z.string().min(1).max(150),
1125
+ addressLine2: z.optional(z.string().max(150)),
1126
+ city: z.string().min(1).max(100),
1127
+ stateProvince: z.string().min(1).max(100),
1128
+ postalCode: z.string().min(3).max(20),
1129
+ county: z.optional(z.string().max(100))
1130
+ })),
1131
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1132
+ email: z.optional(z.email().max(320))
1133
+ })),
1134
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
1135
+ })))
1136
+ }))
1137
+ })),
1138
+ contactInfo: z.optional(z.object({
1139
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1140
+ mailingAddress: z.optional(z.object({
1141
+ addressLine1: z.string().min(1).max(150),
1142
+ addressLine2: z.optional(z.string().max(150)),
1143
+ city: z.string().min(1).max(100),
1144
+ stateProvince: z.string().min(1).max(100),
1145
+ postalCode: z.string().min(3).max(20),
1146
+ county: z.optional(z.string().max(100))
1147
+ })),
1148
+ isHomeless: z.optional(z.boolean()),
1149
+ preferredNoticeMethod: z.optional(z.enum([
1150
+ 'paper',
1151
+ 'email',
1152
+ 'both'
1153
+ ])),
1154
+ languagePreference: z.optional(z.object({
1155
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
1156
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
1157
+ })),
1158
+ preferredContactMethod: z.optional(z.enum([
1159
+ 'phone',
1160
+ 'email',
1161
+ 'mail',
1162
+ 'sms'
1163
+ ]))
1164
+ })),
1165
+ employmentInfo: z.optional(z.object({
1166
+ jobs: z.optional(z.array(z.object({
1167
+ employer: z.optional(z.object({
1168
+ name: z.optional(z.string().max(200)),
1169
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1170
+ address: z.optional(z.object({
1171
+ addressLine1: z.string().min(1).max(150),
1172
+ addressLine2: z.optional(z.string().max(150)),
1173
+ city: z.string().min(1).max(100),
1174
+ stateProvince: z.string().min(1).max(100),
1175
+ postalCode: z.string().min(3).max(20),
1176
+ county: z.optional(z.string().max(100))
1177
+ })),
1178
+ identificationNumber: z.optional(z.string().max(50))
1179
+ })),
1180
+ startDate: z.optional(z.iso.date()),
1181
+ endDate: z.optional(z.iso.date())
1182
+ })))
1183
+ })),
1184
+ educationInfo: z.optional(z.object({
1185
+ lastGradeCompleted: z.optional(z.string().max(50)),
1186
+ isCurrentlyEnrolled: z.optional(z.boolean()),
1187
+ schoolName: z.optional(z.string().max(200)),
1188
+ startDate: z.optional(z.iso.date()),
1189
+ isFullTimeStudent: z.optional(z.boolean()),
1190
+ expectedGraduationDate: z.optional(z.iso.date())
1191
+ })),
1192
+ militaryInfo: z.optional(z.object({
1193
+ isMilitaryServiceMember: z.optional(z.boolean()),
1194
+ veteranStatus: z.optional(z.boolean())
1195
+ })),
1196
+ tribalInfo: z.optional(z.object({
1197
+ tribeName: z.optional(z.string().max(200)),
1198
+ tribeState: z.optional(z.string().max(100)),
1199
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
1200
+ isEligibleForIndianHealthService: z.optional(z.boolean())
1201
+ })),
1202
+ consentToShareInformation: z.optional(z.boolean()),
1203
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
1204
+ countyName: z.optional(z.enum([
1205
+ 'Alameda',
1206
+ 'Alpine',
1207
+ 'Amador',
1208
+ 'Butte',
1209
+ 'Calaveras',
1210
+ 'Colusa',
1211
+ 'Contra Costa',
1212
+ 'Del Norte',
1213
+ 'El Dorado',
1214
+ 'Fresno',
1215
+ 'Glenn',
1216
+ 'Humboldt',
1217
+ 'Imperial',
1218
+ 'Inyo',
1219
+ 'Kern',
1220
+ 'Kings',
1221
+ 'Lake',
1222
+ 'Lassen',
1223
+ 'Los Angeles',
1224
+ 'Madera',
1225
+ 'Marin',
1226
+ 'Mariposa',
1227
+ 'Mendocino',
1228
+ 'Merced',
1229
+ 'Modoc',
1230
+ 'Mono',
1231
+ 'Monterey',
1232
+ 'Napa',
1233
+ 'Nevada',
1234
+ 'Orange',
1235
+ 'Placer',
1236
+ 'Plumas',
1237
+ 'Riverside',
1238
+ 'Sacramento',
1239
+ 'San Benito',
1240
+ 'San Bernardino',
1241
+ 'San Diego',
1242
+ 'San Francisco',
1243
+ 'San Joaquin',
1244
+ 'San Luis Obispo',
1245
+ 'San Mateo',
1246
+ 'Santa Barbara',
1247
+ 'Santa Clara',
1248
+ 'Santa Cruz',
1249
+ 'Shasta',
1250
+ 'Sierra',
1251
+ 'Siskiyou',
1252
+ 'Solano',
1253
+ 'Sonoma',
1254
+ 'Stanislaus',
1255
+ 'Sutter',
1256
+ 'Tehama',
1257
+ 'Trinity',
1258
+ 'Tulare',
1259
+ 'Tuolumne',
1260
+ 'Ventura',
1261
+ 'Yolo',
1262
+ 'Yuba'
1263
+ ])),
1264
+ calworksEligible: z.optional(z.boolean()),
1265
+ calfreshEligible: z.optional(z.boolean()),
1266
+ medicalEligible: z.optional(z.boolean())
1267
+ }));
1268
+
1269
+ export const zPersonCreateWritable = z.object({
1270
+ name: z.optional(z.object({
1271
+ firstName: z.string().min(1).max(100),
1272
+ middleInitial: z.optional(z.string().max(1)),
1273
+ middleName: z.optional(z.string().max(100)),
1274
+ lastName: z.string().min(1).max(100),
1275
+ maidenName: z.optional(z.string().max(100)),
1276
+ suffix: z.optional(z.string().max(20))
1277
+ })),
1278
+ dateOfBirth: z.optional(z.iso.date()),
1279
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1280
+ address: z.optional(z.object({
1281
+ addressLine1: z.string().min(1).max(150),
1282
+ addressLine2: z.optional(z.string().max(150)),
1283
+ city: z.string().min(1).max(100),
1284
+ stateProvince: z.string().min(1).max(100),
1285
+ postalCode: z.string().min(3).max(20),
1286
+ county: z.optional(z.string().max(100))
1287
+ })),
1288
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1289
+ email: z.optional(z.email().max(320))
1290
+ }).and(z.object({
1291
+ id: z.optional(z.uuid()),
1292
+ demographicInfo: z.optional(z.object({
1293
+ sex: z.optional(z.enum([
1294
+ 'male',
1295
+ 'female',
1296
+ 'unknown'
1297
+ ])),
1298
+ maritalStatus: z.optional(z.enum([
1299
+ 'single',
1300
+ 'married',
1301
+ 'divorced',
1302
+ 'separated',
1303
+ 'widowed',
1304
+ 'civil_union',
1305
+ 'domestic_partnership'
1306
+ ])),
1307
+ isHispanicOrLatino: z.optional(z.boolean()),
1308
+ race: z.optional(z.array(z.enum([
1309
+ 'american_indian_alaskan_native',
1310
+ 'asian',
1311
+ 'black_african_american',
1312
+ 'native_hawaiian_pacific_islander',
1313
+ 'white'
1314
+ ]))),
1315
+ gender: z.optional(z.enum([
1316
+ 'male',
1317
+ 'female',
1318
+ 'nonbinary',
1319
+ 'unknown'
1320
+ ]))
1321
+ })),
1322
+ citizenshipInfo: z.optional(z.object({
1323
+ status: z.optional(z.enum([
1324
+ 'us_citizen',
1325
+ 'lawful_permanent_resident',
1326
+ 'qualified_alien',
1327
+ 'prucol',
1328
+ 'undocumented',
1329
+ 'other'
1330
+ ])),
1331
+ certificateNumber: z.optional(z.string().max(50)),
1332
+ immigrationInfo: z.optional(z.object({
1333
+ status: z.optional(z.string().max(100)),
1334
+ documentType: z.optional(z.string().max(100)),
1335
+ documentNumber: z.optional(z.string().max(100)),
1336
+ alienOrI94Number: z.optional(z.string().max(100)),
1337
+ documentExpirationDate: z.optional(z.iso.date()),
1338
+ countryOfIssuance: z.optional(z.string().max(100)),
1339
+ hasSponsor: z.optional(z.boolean()),
1340
+ sponsor: z.optional(z.object({
1341
+ name: z.optional(z.object({
1342
+ firstName: z.string().min(1).max(100),
1343
+ middleInitial: z.optional(z.string().max(1)),
1344
+ middleName: z.optional(z.string().max(100)),
1345
+ lastName: z.string().min(1).max(100),
1346
+ maidenName: z.optional(z.string().max(100)),
1347
+ suffix: z.optional(z.string().max(20))
1348
+ })),
1349
+ dateOfBirth: z.optional(z.iso.date()),
1350
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1351
+ address: z.optional(z.object({
1352
+ addressLine1: z.string().min(1).max(150),
1353
+ addressLine2: z.optional(z.string().max(150)),
1354
+ city: z.string().min(1).max(100),
1355
+ stateProvince: z.string().min(1).max(100),
1356
+ postalCode: z.string().min(3).max(20),
1357
+ county: z.optional(z.string().max(100))
1358
+ })),
1359
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1360
+ email: z.optional(z.email().max(320))
1361
+ }).and(z.object({
1362
+ spouse: z.optional(z.object({
1363
+ name: z.optional(z.object({
1364
+ firstName: z.string().min(1).max(100),
1365
+ middleInitial: z.optional(z.string().max(1)),
1366
+ middleName: z.optional(z.string().max(100)),
1367
+ lastName: z.string().min(1).max(100),
1368
+ maidenName: z.optional(z.string().max(100)),
1369
+ suffix: z.optional(z.string().max(20))
1370
+ })),
1371
+ dateOfBirth: z.optional(z.iso.date()),
1372
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1373
+ address: z.optional(z.object({
1374
+ addressLine1: z.string().min(1).max(150),
1375
+ addressLine2: z.optional(z.string().max(150)),
1376
+ city: z.string().min(1).max(100),
1377
+ stateProvince: z.string().min(1).max(100),
1378
+ postalCode: z.string().min(3).max(20),
1379
+ county: z.optional(z.string().max(100))
1380
+ })),
1381
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1382
+ email: z.optional(z.email().max(320))
1383
+ })),
1384
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
1385
+ })))
1386
+ }))
1387
+ })),
1388
+ contactInfo: z.optional(z.object({
1389
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1390
+ mailingAddress: z.optional(z.object({
1391
+ addressLine1: z.string().min(1).max(150),
1392
+ addressLine2: z.optional(z.string().max(150)),
1393
+ city: z.string().min(1).max(100),
1394
+ stateProvince: z.string().min(1).max(100),
1395
+ postalCode: z.string().min(3).max(20),
1396
+ county: z.optional(z.string().max(100))
1397
+ })),
1398
+ isHomeless: z.optional(z.boolean()),
1399
+ preferredNoticeMethod: z.optional(z.enum([
1400
+ 'paper',
1401
+ 'email',
1402
+ 'both'
1403
+ ])),
1404
+ languagePreference: z.optional(z.object({
1405
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
1406
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
1407
+ })),
1408
+ preferredContactMethod: z.optional(z.enum([
1409
+ 'phone',
1410
+ 'email',
1411
+ 'mail',
1412
+ 'sms'
1413
+ ]))
1414
+ })),
1415
+ employmentInfo: z.optional(z.object({
1416
+ jobs: z.optional(z.array(z.object({
1417
+ employer: z.optional(z.object({
1418
+ name: z.optional(z.string().max(200)),
1419
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1420
+ address: z.optional(z.object({
1421
+ addressLine1: z.string().min(1).max(150),
1422
+ addressLine2: z.optional(z.string().max(150)),
1423
+ city: z.string().min(1).max(100),
1424
+ stateProvince: z.string().min(1).max(100),
1425
+ postalCode: z.string().min(3).max(20),
1426
+ county: z.optional(z.string().max(100))
1427
+ })),
1428
+ identificationNumber: z.optional(z.string().max(50))
1429
+ })),
1430
+ startDate: z.optional(z.iso.date()),
1431
+ endDate: z.optional(z.iso.date())
1432
+ })))
1433
+ })),
1434
+ educationInfo: z.optional(z.object({
1435
+ lastGradeCompleted: z.optional(z.string().max(50)),
1436
+ isCurrentlyEnrolled: z.optional(z.boolean()),
1437
+ schoolName: z.optional(z.string().max(200)),
1438
+ startDate: z.optional(z.iso.date()),
1439
+ isFullTimeStudent: z.optional(z.boolean()),
1440
+ expectedGraduationDate: z.optional(z.iso.date())
1441
+ })),
1442
+ militaryInfo: z.optional(z.object({
1443
+ isMilitaryServiceMember: z.optional(z.boolean()),
1444
+ veteranStatus: z.optional(z.boolean())
1445
+ })),
1446
+ tribalInfo: z.optional(z.object({
1447
+ tribeName: z.optional(z.string().max(200)),
1448
+ tribeState: z.optional(z.string().max(100)),
1449
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
1450
+ isEligibleForIndianHealthService: z.optional(z.boolean())
1451
+ })),
1452
+ consentToShareInformation: z.optional(z.boolean()),
1453
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
1454
+ countyName: z.optional(z.enum([
1455
+ 'Alameda',
1456
+ 'Alpine',
1457
+ 'Amador',
1458
+ 'Butte',
1459
+ 'Calaveras',
1460
+ 'Colusa',
1461
+ 'Contra Costa',
1462
+ 'Del Norte',
1463
+ 'El Dorado',
1464
+ 'Fresno',
1465
+ 'Glenn',
1466
+ 'Humboldt',
1467
+ 'Imperial',
1468
+ 'Inyo',
1469
+ 'Kern',
1470
+ 'Kings',
1471
+ 'Lake',
1472
+ 'Lassen',
1473
+ 'Los Angeles',
1474
+ 'Madera',
1475
+ 'Marin',
1476
+ 'Mariposa',
1477
+ 'Mendocino',
1478
+ 'Merced',
1479
+ 'Modoc',
1480
+ 'Mono',
1481
+ 'Monterey',
1482
+ 'Napa',
1483
+ 'Nevada',
1484
+ 'Orange',
1485
+ 'Placer',
1486
+ 'Plumas',
1487
+ 'Riverside',
1488
+ 'Sacramento',
1489
+ 'San Benito',
1490
+ 'San Bernardino',
1491
+ 'San Diego',
1492
+ 'San Francisco',
1493
+ 'San Joaquin',
1494
+ 'San Luis Obispo',
1495
+ 'San Mateo',
1496
+ 'Santa Barbara',
1497
+ 'Santa Clara',
1498
+ 'Santa Cruz',
1499
+ 'Shasta',
1500
+ 'Sierra',
1501
+ 'Siskiyou',
1502
+ 'Solano',
1503
+ 'Sonoma',
1504
+ 'Stanislaus',
1505
+ 'Sutter',
1506
+ 'Tehama',
1507
+ 'Trinity',
1508
+ 'Tulare',
1509
+ 'Tuolumne',
1510
+ 'Ventura',
1511
+ 'Yolo',
1512
+ 'Yuba'
1513
+ ])),
1514
+ calworksEligible: z.optional(z.boolean()),
1515
+ calfreshEligible: z.optional(z.boolean()),
1516
+ medicalEligible: z.optional(z.boolean())
1517
+ }));
1518
+
1519
+ export const zPersonUpdateWritable = z.object({
1520
+ name: z.optional(z.object({
1521
+ firstName: z.string().min(1).max(100),
1522
+ middleInitial: z.optional(z.string().max(1)),
1523
+ middleName: z.optional(z.string().max(100)),
1524
+ lastName: z.string().min(1).max(100),
1525
+ maidenName: z.optional(z.string().max(100)),
1526
+ suffix: z.optional(z.string().max(20))
1527
+ })),
1528
+ dateOfBirth: z.optional(z.iso.date()),
1529
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1530
+ address: z.optional(z.object({
1531
+ addressLine1: z.string().min(1).max(150),
1532
+ addressLine2: z.optional(z.string().max(150)),
1533
+ city: z.string().min(1).max(100),
1534
+ stateProvince: z.string().min(1).max(100),
1535
+ postalCode: z.string().min(3).max(20),
1536
+ county: z.optional(z.string().max(100))
1537
+ })),
1538
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1539
+ email: z.optional(z.email().max(320))
1540
+ }).and(z.object({
1541
+ id: z.optional(z.uuid()),
1542
+ demographicInfo: z.optional(z.object({
1543
+ sex: z.optional(z.enum([
1544
+ 'male',
1545
+ 'female',
1546
+ 'unknown'
1547
+ ])),
1548
+ maritalStatus: z.optional(z.enum([
1549
+ 'single',
1550
+ 'married',
1551
+ 'divorced',
1552
+ 'separated',
1553
+ 'widowed',
1554
+ 'civil_union',
1555
+ 'domestic_partnership'
1556
+ ])),
1557
+ isHispanicOrLatino: z.optional(z.boolean()),
1558
+ race: z.optional(z.array(z.enum([
1559
+ 'american_indian_alaskan_native',
1560
+ 'asian',
1561
+ 'black_african_american',
1562
+ 'native_hawaiian_pacific_islander',
1563
+ 'white'
1564
+ ]))),
1565
+ gender: z.optional(z.enum([
1566
+ 'male',
1567
+ 'female',
1568
+ 'nonbinary',
1569
+ 'unknown'
1570
+ ]))
1571
+ })),
1572
+ citizenshipInfo: z.optional(z.object({
1573
+ status: z.optional(z.enum([
1574
+ 'us_citizen',
1575
+ 'lawful_permanent_resident',
1576
+ 'qualified_alien',
1577
+ 'prucol',
1578
+ 'undocumented',
1579
+ 'other'
1580
+ ])),
1581
+ certificateNumber: z.optional(z.string().max(50)),
1582
+ immigrationInfo: z.optional(z.object({
1583
+ status: z.optional(z.string().max(100)),
1584
+ documentType: z.optional(z.string().max(100)),
1585
+ documentNumber: z.optional(z.string().max(100)),
1586
+ alienOrI94Number: z.optional(z.string().max(100)),
1587
+ documentExpirationDate: z.optional(z.iso.date()),
1588
+ countryOfIssuance: z.optional(z.string().max(100)),
1589
+ hasSponsor: z.optional(z.boolean()),
1590
+ sponsor: z.optional(z.object({
1591
+ name: z.optional(z.object({
1592
+ firstName: z.string().min(1).max(100),
1593
+ middleInitial: z.optional(z.string().max(1)),
1594
+ middleName: z.optional(z.string().max(100)),
1595
+ lastName: z.string().min(1).max(100),
1596
+ maidenName: z.optional(z.string().max(100)),
1597
+ suffix: z.optional(z.string().max(20))
1598
+ })),
1599
+ dateOfBirth: z.optional(z.iso.date()),
1600
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1601
+ address: z.optional(z.object({
1602
+ addressLine1: z.string().min(1).max(150),
1603
+ addressLine2: z.optional(z.string().max(150)),
1604
+ city: z.string().min(1).max(100),
1605
+ stateProvince: z.string().min(1).max(100),
1606
+ postalCode: z.string().min(3).max(20),
1607
+ county: z.optional(z.string().max(100))
1608
+ })),
1609
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1610
+ email: z.optional(z.email().max(320))
1611
+ }).and(z.object({
1612
+ spouse: z.optional(z.object({
1613
+ name: z.optional(z.object({
1614
+ firstName: z.string().min(1).max(100),
1615
+ middleInitial: z.optional(z.string().max(1)),
1616
+ middleName: z.optional(z.string().max(100)),
1617
+ lastName: z.string().min(1).max(100),
1618
+ maidenName: z.optional(z.string().max(100)),
1619
+ suffix: z.optional(z.string().max(20))
1620
+ })),
1621
+ dateOfBirth: z.optional(z.iso.date()),
1622
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1623
+ address: z.optional(z.object({
1624
+ addressLine1: z.string().min(1).max(150),
1625
+ addressLine2: z.optional(z.string().max(150)),
1626
+ city: z.string().min(1).max(100),
1627
+ stateProvince: z.string().min(1).max(100),
1628
+ postalCode: z.string().min(3).max(20),
1629
+ county: z.optional(z.string().max(100))
1630
+ })),
1631
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1632
+ email: z.optional(z.email().max(320))
1633
+ })),
1634
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
1635
+ })))
1636
+ }))
1637
+ })),
1638
+ contactInfo: z.optional(z.object({
1639
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1640
+ mailingAddress: z.optional(z.object({
1641
+ addressLine1: z.string().min(1).max(150),
1642
+ addressLine2: z.optional(z.string().max(150)),
1643
+ city: z.string().min(1).max(100),
1644
+ stateProvince: z.string().min(1).max(100),
1645
+ postalCode: z.string().min(3).max(20),
1646
+ county: z.optional(z.string().max(100))
1647
+ })),
1648
+ isHomeless: z.optional(z.boolean()),
1649
+ preferredNoticeMethod: z.optional(z.enum([
1650
+ 'paper',
1651
+ 'email',
1652
+ 'both'
1653
+ ])),
1654
+ languagePreference: z.optional(z.object({
1655
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
1656
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
1657
+ })),
1658
+ preferredContactMethod: z.optional(z.enum([
1659
+ 'phone',
1660
+ 'email',
1661
+ 'mail',
1662
+ 'sms'
1663
+ ]))
1664
+ })),
1665
+ employmentInfo: z.optional(z.object({
1666
+ jobs: z.optional(z.array(z.object({
1667
+ employer: z.optional(z.object({
1668
+ name: z.optional(z.string().max(200)),
1669
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1670
+ address: z.optional(z.object({
1671
+ addressLine1: z.string().min(1).max(150),
1672
+ addressLine2: z.optional(z.string().max(150)),
1673
+ city: z.string().min(1).max(100),
1674
+ stateProvince: z.string().min(1).max(100),
1675
+ postalCode: z.string().min(3).max(20),
1676
+ county: z.optional(z.string().max(100))
1677
+ })),
1678
+ identificationNumber: z.optional(z.string().max(50))
1679
+ })),
1680
+ startDate: z.optional(z.iso.date()),
1681
+ endDate: z.optional(z.iso.date())
1682
+ })))
1683
+ })),
1684
+ educationInfo: z.optional(z.object({
1685
+ lastGradeCompleted: z.optional(z.string().max(50)),
1686
+ isCurrentlyEnrolled: z.optional(z.boolean()),
1687
+ schoolName: z.optional(z.string().max(200)),
1688
+ startDate: z.optional(z.iso.date()),
1689
+ isFullTimeStudent: z.optional(z.boolean()),
1690
+ expectedGraduationDate: z.optional(z.iso.date())
1691
+ })),
1692
+ militaryInfo: z.optional(z.object({
1693
+ isMilitaryServiceMember: z.optional(z.boolean()),
1694
+ veteranStatus: z.optional(z.boolean())
1695
+ })),
1696
+ tribalInfo: z.optional(z.object({
1697
+ tribeName: z.optional(z.string().max(200)),
1698
+ tribeState: z.optional(z.string().max(100)),
1699
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
1700
+ isEligibleForIndianHealthService: z.optional(z.boolean())
1701
+ })),
1702
+ consentToShareInformation: z.optional(z.boolean()),
1703
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
1704
+ countyName: z.optional(z.enum([
1705
+ 'Alameda',
1706
+ 'Alpine',
1707
+ 'Amador',
1708
+ 'Butte',
1709
+ 'Calaveras',
1710
+ 'Colusa',
1711
+ 'Contra Costa',
1712
+ 'Del Norte',
1713
+ 'El Dorado',
1714
+ 'Fresno',
1715
+ 'Glenn',
1716
+ 'Humboldt',
1717
+ 'Imperial',
1718
+ 'Inyo',
1719
+ 'Kern',
1720
+ 'Kings',
1721
+ 'Lake',
1722
+ 'Lassen',
1723
+ 'Los Angeles',
1724
+ 'Madera',
1725
+ 'Marin',
1726
+ 'Mariposa',
1727
+ 'Mendocino',
1728
+ 'Merced',
1729
+ 'Modoc',
1730
+ 'Mono',
1731
+ 'Monterey',
1732
+ 'Napa',
1733
+ 'Nevada',
1734
+ 'Orange',
1735
+ 'Placer',
1736
+ 'Plumas',
1737
+ 'Riverside',
1738
+ 'Sacramento',
1739
+ 'San Benito',
1740
+ 'San Bernardino',
1741
+ 'San Diego',
1742
+ 'San Francisco',
1743
+ 'San Joaquin',
1744
+ 'San Luis Obispo',
1745
+ 'San Mateo',
1746
+ 'Santa Barbara',
1747
+ 'Santa Clara',
1748
+ 'Santa Cruz',
1749
+ 'Shasta',
1750
+ 'Sierra',
1751
+ 'Siskiyou',
1752
+ 'Solano',
1753
+ 'Sonoma',
1754
+ 'Stanislaus',
1755
+ 'Sutter',
1756
+ 'Tehama',
1757
+ 'Trinity',
1758
+ 'Tulare',
1759
+ 'Tuolumne',
1760
+ 'Ventura',
1761
+ 'Yolo',
1762
+ 'Yuba'
1763
+ ])),
1764
+ calworksEligible: z.optional(z.boolean()),
1765
+ calfreshEligible: z.optional(z.boolean()),
1766
+ medicalEligible: z.optional(z.boolean())
1767
+ }));
1768
+
1769
+ export const zPersonListWritable = z.object({
1770
+ items: z.array(z.object({
1771
+ name: z.optional(z.object({
1772
+ firstName: z.string().min(1).max(100),
1773
+ middleInitial: z.optional(z.string().max(1)),
1774
+ middleName: z.optional(z.string().max(100)),
1775
+ lastName: z.string().min(1).max(100),
1776
+ maidenName: z.optional(z.string().max(100)),
1777
+ suffix: z.optional(z.string().max(20))
1778
+ })),
1779
+ dateOfBirth: z.optional(z.iso.date()),
1780
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1781
+ address: z.optional(z.object({
1782
+ addressLine1: z.string().min(1).max(150),
1783
+ addressLine2: z.optional(z.string().max(150)),
1784
+ city: z.string().min(1).max(100),
1785
+ stateProvince: z.string().min(1).max(100),
1786
+ postalCode: z.string().min(3).max(20),
1787
+ county: z.optional(z.string().max(100))
1788
+ })),
1789
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1790
+ email: z.optional(z.email().max(320))
1791
+ }).and(z.object({
1792
+ id: z.optional(z.uuid()),
1793
+ demographicInfo: z.optional(z.object({
1794
+ sex: z.optional(z.enum([
1795
+ 'male',
1796
+ 'female',
1797
+ 'unknown'
1798
+ ])),
1799
+ maritalStatus: z.optional(z.enum([
1800
+ 'single',
1801
+ 'married',
1802
+ 'divorced',
1803
+ 'separated',
1804
+ 'widowed',
1805
+ 'civil_union',
1806
+ 'domestic_partnership'
1807
+ ])),
1808
+ isHispanicOrLatino: z.optional(z.boolean()),
1809
+ race: z.optional(z.array(z.enum([
1810
+ 'american_indian_alaskan_native',
1811
+ 'asian',
1812
+ 'black_african_american',
1813
+ 'native_hawaiian_pacific_islander',
1814
+ 'white'
1815
+ ]))),
1816
+ gender: z.optional(z.enum([
1817
+ 'male',
1818
+ 'female',
1819
+ 'nonbinary',
1820
+ 'unknown'
1821
+ ]))
1822
+ })),
1823
+ citizenshipInfo: z.optional(z.object({
1824
+ status: z.optional(z.enum([
1825
+ 'us_citizen',
1826
+ 'lawful_permanent_resident',
1827
+ 'qualified_alien',
1828
+ 'prucol',
1829
+ 'undocumented',
1830
+ 'other'
1831
+ ])),
1832
+ certificateNumber: z.optional(z.string().max(50)),
1833
+ immigrationInfo: z.optional(z.object({
1834
+ status: z.optional(z.string().max(100)),
1835
+ documentType: z.optional(z.string().max(100)),
1836
+ documentNumber: z.optional(z.string().max(100)),
1837
+ alienOrI94Number: z.optional(z.string().max(100)),
1838
+ documentExpirationDate: z.optional(z.iso.date()),
1839
+ countryOfIssuance: z.optional(z.string().max(100)),
1840
+ hasSponsor: z.optional(z.boolean()),
1841
+ sponsor: z.optional(z.object({
1842
+ name: z.optional(z.object({
1843
+ firstName: z.string().min(1).max(100),
1844
+ middleInitial: z.optional(z.string().max(1)),
1845
+ middleName: z.optional(z.string().max(100)),
1846
+ lastName: z.string().min(1).max(100),
1847
+ maidenName: z.optional(z.string().max(100)),
1848
+ suffix: z.optional(z.string().max(20))
1849
+ })),
1850
+ dateOfBirth: z.optional(z.iso.date()),
1851
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1852
+ address: z.optional(z.object({
1853
+ addressLine1: z.string().min(1).max(150),
1854
+ addressLine2: z.optional(z.string().max(150)),
1855
+ city: z.string().min(1).max(100),
1856
+ stateProvince: z.string().min(1).max(100),
1857
+ postalCode: z.string().min(3).max(20),
1858
+ county: z.optional(z.string().max(100))
1859
+ })),
1860
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1861
+ email: z.optional(z.email().max(320))
1862
+ }).and(z.object({
1863
+ spouse: z.optional(z.object({
1864
+ name: z.optional(z.object({
1865
+ firstName: z.string().min(1).max(100),
1866
+ middleInitial: z.optional(z.string().max(1)),
1867
+ middleName: z.optional(z.string().max(100)),
1868
+ lastName: z.string().min(1).max(100),
1869
+ maidenName: z.optional(z.string().max(100)),
1870
+ suffix: z.optional(z.string().max(20))
1871
+ })),
1872
+ dateOfBirth: z.optional(z.iso.date()),
1873
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
1874
+ address: z.optional(z.object({
1875
+ addressLine1: z.string().min(1).max(150),
1876
+ addressLine2: z.optional(z.string().max(150)),
1877
+ city: z.string().min(1).max(100),
1878
+ stateProvince: z.string().min(1).max(100),
1879
+ postalCode: z.string().min(3).max(20),
1880
+ county: z.optional(z.string().max(100))
1881
+ })),
1882
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1883
+ email: z.optional(z.email().max(320))
1884
+ })),
1885
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
1886
+ })))
1887
+ }))
1888
+ })),
1889
+ contactInfo: z.optional(z.object({
1890
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1891
+ mailingAddress: z.optional(z.object({
1892
+ addressLine1: z.string().min(1).max(150),
1893
+ addressLine2: z.optional(z.string().max(150)),
1894
+ city: z.string().min(1).max(100),
1895
+ stateProvince: z.string().min(1).max(100),
1896
+ postalCode: z.string().min(3).max(20),
1897
+ county: z.optional(z.string().max(100))
1898
+ })),
1899
+ isHomeless: z.optional(z.boolean()),
1900
+ preferredNoticeMethod: z.optional(z.enum([
1901
+ 'paper',
1902
+ 'email',
1903
+ 'both'
1904
+ ])),
1905
+ languagePreference: z.optional(z.object({
1906
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
1907
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
1908
+ })),
1909
+ preferredContactMethod: z.optional(z.enum([
1910
+ 'phone',
1911
+ 'email',
1912
+ 'mail',
1913
+ 'sms'
1914
+ ]))
1915
+ })),
1916
+ employmentInfo: z.optional(z.object({
1917
+ jobs: z.optional(z.array(z.object({
1918
+ employer: z.optional(z.object({
1919
+ name: z.optional(z.string().max(200)),
1920
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
1921
+ address: z.optional(z.object({
1922
+ addressLine1: z.string().min(1).max(150),
1923
+ addressLine2: z.optional(z.string().max(150)),
1924
+ city: z.string().min(1).max(100),
1925
+ stateProvince: z.string().min(1).max(100),
1926
+ postalCode: z.string().min(3).max(20),
1927
+ county: z.optional(z.string().max(100))
1928
+ })),
1929
+ identificationNumber: z.optional(z.string().max(50))
1930
+ })),
1931
+ startDate: z.optional(z.iso.date()),
1932
+ endDate: z.optional(z.iso.date())
1933
+ })))
1934
+ })),
1935
+ educationInfo: z.optional(z.object({
1936
+ lastGradeCompleted: z.optional(z.string().max(50)),
1937
+ isCurrentlyEnrolled: z.optional(z.boolean()),
1938
+ schoolName: z.optional(z.string().max(200)),
1939
+ startDate: z.optional(z.iso.date()),
1940
+ isFullTimeStudent: z.optional(z.boolean()),
1941
+ expectedGraduationDate: z.optional(z.iso.date())
1942
+ })),
1943
+ militaryInfo: z.optional(z.object({
1944
+ isMilitaryServiceMember: z.optional(z.boolean()),
1945
+ veteranStatus: z.optional(z.boolean())
1946
+ })),
1947
+ tribalInfo: z.optional(z.object({
1948
+ tribeName: z.optional(z.string().max(200)),
1949
+ tribeState: z.optional(z.string().max(100)),
1950
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
1951
+ isEligibleForIndianHealthService: z.optional(z.boolean())
1952
+ })),
1953
+ consentToShareInformation: z.optional(z.boolean()),
1954
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
1955
+ countyName: z.optional(z.enum([
1956
+ 'Alameda',
1957
+ 'Alpine',
1958
+ 'Amador',
1959
+ 'Butte',
1960
+ 'Calaveras',
1961
+ 'Colusa',
1962
+ 'Contra Costa',
1963
+ 'Del Norte',
1964
+ 'El Dorado',
1965
+ 'Fresno',
1966
+ 'Glenn',
1967
+ 'Humboldt',
1968
+ 'Imperial',
1969
+ 'Inyo',
1970
+ 'Kern',
1971
+ 'Kings',
1972
+ 'Lake',
1973
+ 'Lassen',
1974
+ 'Los Angeles',
1975
+ 'Madera',
1976
+ 'Marin',
1977
+ 'Mariposa',
1978
+ 'Mendocino',
1979
+ 'Merced',
1980
+ 'Modoc',
1981
+ 'Mono',
1982
+ 'Monterey',
1983
+ 'Napa',
1984
+ 'Nevada',
1985
+ 'Orange',
1986
+ 'Placer',
1987
+ 'Plumas',
1988
+ 'Riverside',
1989
+ 'Sacramento',
1990
+ 'San Benito',
1991
+ 'San Bernardino',
1992
+ 'San Diego',
1993
+ 'San Francisco',
1994
+ 'San Joaquin',
1995
+ 'San Luis Obispo',
1996
+ 'San Mateo',
1997
+ 'Santa Barbara',
1998
+ 'Santa Clara',
1999
+ 'Santa Cruz',
2000
+ 'Shasta',
2001
+ 'Sierra',
2002
+ 'Siskiyou',
2003
+ 'Solano',
2004
+ 'Sonoma',
2005
+ 'Stanislaus',
2006
+ 'Sutter',
2007
+ 'Tehama',
2008
+ 'Trinity',
2009
+ 'Tulare',
2010
+ 'Tuolumne',
2011
+ 'Ventura',
2012
+ 'Yolo',
2013
+ 'Yuba'
2014
+ ])),
2015
+ calworksEligible: z.optional(z.boolean()),
2016
+ calfreshEligible: z.optional(z.boolean()),
2017
+ medicalEligible: z.optional(z.boolean())
2018
+ }))),
2019
+ total: z.int().gte(0),
2020
+ limit: z.int().gte(1).lte(100),
2021
+ offset: z.int().gte(0),
2022
+ hasNext: z.optional(z.boolean())
2023
+ });
2024
+
2025
+ /**
2026
+ * Unique identifier of the person.
2027
+ */
2028
+ export const zPersonIdParam = z.uuid();
2029
+
2030
+ export const zListPersonsData = z.object({
2031
+ body: z.optional(z.never()),
2032
+ path: z.optional(z.never()),
2033
+ query: z.optional(z.object({
2034
+ q: z.optional(z.string()),
2035
+ limit: z.optional(z.int().gte(1).lte(100)).default(25),
2036
+ offset: z.optional(z.int().gte(0)).default(0)
2037
+ }))
2038
+ });
2039
+
2040
+ /**
2041
+ * A paginated collection of persons.
2042
+ */
2043
+ export const zListPersonsResponse = z.object({
2044
+ items: z.array(z.object({
2045
+ name: z.optional(z.object({
2046
+ firstName: z.string().min(1).max(100),
2047
+ middleInitial: z.optional(z.string().max(1)),
2048
+ middleName: z.optional(z.string().max(100)),
2049
+ lastName: z.string().min(1).max(100),
2050
+ maidenName: z.optional(z.string().max(100)),
2051
+ suffix: z.optional(z.string().max(20))
2052
+ })),
2053
+ dateOfBirth: z.optional(z.iso.date()),
2054
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2055
+ address: z.optional(z.object({
2056
+ addressLine1: z.string().min(1).max(150),
2057
+ addressLine2: z.optional(z.string().max(150)),
2058
+ city: z.string().min(1).max(100),
2059
+ stateProvince: z.string().min(1).max(100),
2060
+ postalCode: z.string().min(3).max(20),
2061
+ county: z.optional(z.string().max(100))
2062
+ })),
2063
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2064
+ email: z.optional(z.email().max(320))
2065
+ }).and(z.object({
2066
+ id: z.optional(z.uuid()),
2067
+ demographicInfo: z.optional(z.object({
2068
+ sex: z.optional(z.enum([
2069
+ 'male',
2070
+ 'female',
2071
+ 'unknown'
2072
+ ])),
2073
+ maritalStatus: z.optional(z.enum([
2074
+ 'single',
2075
+ 'married',
2076
+ 'divorced',
2077
+ 'separated',
2078
+ 'widowed',
2079
+ 'civil_union',
2080
+ 'domestic_partnership'
2081
+ ])),
2082
+ isHispanicOrLatino: z.optional(z.boolean()),
2083
+ race: z.optional(z.array(z.enum([
2084
+ 'american_indian_alaskan_native',
2085
+ 'asian',
2086
+ 'black_african_american',
2087
+ 'native_hawaiian_pacific_islander',
2088
+ 'white'
2089
+ ]))),
2090
+ gender: z.optional(z.enum([
2091
+ 'male',
2092
+ 'female',
2093
+ 'nonbinary',
2094
+ 'unknown'
2095
+ ]))
2096
+ })),
2097
+ citizenshipInfo: z.optional(z.object({
2098
+ status: z.optional(z.enum([
2099
+ 'us_citizen',
2100
+ 'lawful_permanent_resident',
2101
+ 'qualified_alien',
2102
+ 'prucol',
2103
+ 'undocumented',
2104
+ 'other'
2105
+ ])),
2106
+ certificateNumber: z.optional(z.string().max(50)),
2107
+ immigrationInfo: z.optional(z.object({
2108
+ status: z.optional(z.string().max(100)),
2109
+ documentType: z.optional(z.string().max(100)),
2110
+ documentNumber: z.optional(z.string().max(100)),
2111
+ alienOrI94Number: z.optional(z.string().max(100)),
2112
+ documentExpirationDate: z.optional(z.iso.date()),
2113
+ countryOfIssuance: z.optional(z.string().max(100)),
2114
+ hasSponsor: z.optional(z.boolean()),
2115
+ sponsor: z.optional(z.object({
2116
+ name: z.optional(z.object({
2117
+ firstName: z.string().min(1).max(100),
2118
+ middleInitial: z.optional(z.string().max(1)),
2119
+ middleName: z.optional(z.string().max(100)),
2120
+ lastName: z.string().min(1).max(100),
2121
+ maidenName: z.optional(z.string().max(100)),
2122
+ suffix: z.optional(z.string().max(20))
2123
+ })),
2124
+ dateOfBirth: z.optional(z.iso.date()),
2125
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2126
+ address: z.optional(z.object({
2127
+ addressLine1: z.string().min(1).max(150),
2128
+ addressLine2: z.optional(z.string().max(150)),
2129
+ city: z.string().min(1).max(100),
2130
+ stateProvince: z.string().min(1).max(100),
2131
+ postalCode: z.string().min(3).max(20),
2132
+ county: z.optional(z.string().max(100))
2133
+ })),
2134
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2135
+ email: z.optional(z.email().max(320))
2136
+ }).and(z.object({
2137
+ spouse: z.optional(z.object({
2138
+ name: z.optional(z.object({
2139
+ firstName: z.string().min(1).max(100),
2140
+ middleInitial: z.optional(z.string().max(1)),
2141
+ middleName: z.optional(z.string().max(100)),
2142
+ lastName: z.string().min(1).max(100),
2143
+ maidenName: z.optional(z.string().max(100)),
2144
+ suffix: z.optional(z.string().max(20))
2145
+ })),
2146
+ dateOfBirth: z.optional(z.iso.date()),
2147
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2148
+ address: z.optional(z.object({
2149
+ addressLine1: z.string().min(1).max(150),
2150
+ addressLine2: z.optional(z.string().max(150)),
2151
+ city: z.string().min(1).max(100),
2152
+ stateProvince: z.string().min(1).max(100),
2153
+ postalCode: z.string().min(3).max(20),
2154
+ county: z.optional(z.string().max(100))
2155
+ })),
2156
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2157
+ email: z.optional(z.email().max(320))
2158
+ })),
2159
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
2160
+ })))
2161
+ }))
2162
+ })),
2163
+ contactInfo: z.optional(z.object({
2164
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2165
+ mailingAddress: z.optional(z.object({
2166
+ addressLine1: z.string().min(1).max(150),
2167
+ addressLine2: z.optional(z.string().max(150)),
2168
+ city: z.string().min(1).max(100),
2169
+ stateProvince: z.string().min(1).max(100),
2170
+ postalCode: z.string().min(3).max(20),
2171
+ county: z.optional(z.string().max(100))
2172
+ })),
2173
+ isHomeless: z.optional(z.boolean()),
2174
+ preferredNoticeMethod: z.optional(z.enum([
2175
+ 'paper',
2176
+ 'email',
2177
+ 'both'
2178
+ ])),
2179
+ languagePreference: z.optional(z.object({
2180
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
2181
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
2182
+ })),
2183
+ preferredContactMethod: z.optional(z.enum([
2184
+ 'phone',
2185
+ 'email',
2186
+ 'mail',
2187
+ 'sms'
2188
+ ]))
2189
+ })),
2190
+ employmentInfo: z.optional(z.object({
2191
+ jobs: z.optional(z.array(z.object({
2192
+ employer: z.optional(z.object({
2193
+ name: z.optional(z.string().max(200)),
2194
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2195
+ address: z.optional(z.object({
2196
+ addressLine1: z.string().min(1).max(150),
2197
+ addressLine2: z.optional(z.string().max(150)),
2198
+ city: z.string().min(1).max(100),
2199
+ stateProvince: z.string().min(1).max(100),
2200
+ postalCode: z.string().min(3).max(20),
2201
+ county: z.optional(z.string().max(100))
2202
+ })),
2203
+ identificationNumber: z.optional(z.string().max(50))
2204
+ })),
2205
+ startDate: z.optional(z.iso.date()),
2206
+ endDate: z.optional(z.iso.date())
2207
+ })))
2208
+ })),
2209
+ educationInfo: z.optional(z.object({
2210
+ lastGradeCompleted: z.optional(z.string().max(50)),
2211
+ isCurrentlyEnrolled: z.optional(z.boolean()),
2212
+ schoolName: z.optional(z.string().max(200)),
2213
+ startDate: z.optional(z.iso.date()),
2214
+ isFullTimeStudent: z.optional(z.boolean()),
2215
+ expectedGraduationDate: z.optional(z.iso.date())
2216
+ })),
2217
+ militaryInfo: z.optional(z.object({
2218
+ isMilitaryServiceMember: z.optional(z.boolean()),
2219
+ veteranStatus: z.optional(z.boolean())
2220
+ })),
2221
+ tribalInfo: z.optional(z.object({
2222
+ tribeName: z.optional(z.string().max(200)),
2223
+ tribeState: z.optional(z.string().max(100)),
2224
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
2225
+ isEligibleForIndianHealthService: z.optional(z.boolean())
2226
+ })),
2227
+ consentToShareInformation: z.optional(z.boolean()),
2228
+ createdAt: z.optional(z.iso.datetime().readonly()),
2229
+ updatedAt: z.optional(z.iso.datetime().readonly()),
2230
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
2231
+ countyName: z.optional(z.enum([
2232
+ 'Alameda',
2233
+ 'Alpine',
2234
+ 'Amador',
2235
+ 'Butte',
2236
+ 'Calaveras',
2237
+ 'Colusa',
2238
+ 'Contra Costa',
2239
+ 'Del Norte',
2240
+ 'El Dorado',
2241
+ 'Fresno',
2242
+ 'Glenn',
2243
+ 'Humboldt',
2244
+ 'Imperial',
2245
+ 'Inyo',
2246
+ 'Kern',
2247
+ 'Kings',
2248
+ 'Lake',
2249
+ 'Lassen',
2250
+ 'Los Angeles',
2251
+ 'Madera',
2252
+ 'Marin',
2253
+ 'Mariposa',
2254
+ 'Mendocino',
2255
+ 'Merced',
2256
+ 'Modoc',
2257
+ 'Mono',
2258
+ 'Monterey',
2259
+ 'Napa',
2260
+ 'Nevada',
2261
+ 'Orange',
2262
+ 'Placer',
2263
+ 'Plumas',
2264
+ 'Riverside',
2265
+ 'Sacramento',
2266
+ 'San Benito',
2267
+ 'San Bernardino',
2268
+ 'San Diego',
2269
+ 'San Francisco',
2270
+ 'San Joaquin',
2271
+ 'San Luis Obispo',
2272
+ 'San Mateo',
2273
+ 'Santa Barbara',
2274
+ 'Santa Clara',
2275
+ 'Santa Cruz',
2276
+ 'Shasta',
2277
+ 'Sierra',
2278
+ 'Siskiyou',
2279
+ 'Solano',
2280
+ 'Sonoma',
2281
+ 'Stanislaus',
2282
+ 'Sutter',
2283
+ 'Tehama',
2284
+ 'Trinity',
2285
+ 'Tulare',
2286
+ 'Tuolumne',
2287
+ 'Ventura',
2288
+ 'Yolo',
2289
+ 'Yuba'
2290
+ ])),
2291
+ calworksEligible: z.optional(z.boolean()),
2292
+ calfreshEligible: z.optional(z.boolean()),
2293
+ medicalEligible: z.optional(z.boolean())
2294
+ }))),
2295
+ total: z.int().gte(0),
2296
+ limit: z.int().gte(1).lte(100),
2297
+ offset: z.int().gte(0),
2298
+ hasNext: z.optional(z.boolean())
2299
+ });
2300
+
2301
+ export const zCreatePersonData = z.object({
2302
+ body: z.object({
2303
+ name: z.optional(z.object({
2304
+ firstName: z.string().min(1).max(100),
2305
+ middleInitial: z.optional(z.string().max(1)),
2306
+ middleName: z.optional(z.string().max(100)),
2307
+ lastName: z.string().min(1).max(100),
2308
+ maidenName: z.optional(z.string().max(100)),
2309
+ suffix: z.optional(z.string().max(20))
2310
+ })),
2311
+ dateOfBirth: z.optional(z.iso.date()),
2312
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2313
+ address: z.optional(z.object({
2314
+ addressLine1: z.string().min(1).max(150),
2315
+ addressLine2: z.optional(z.string().max(150)),
2316
+ city: z.string().min(1).max(100),
2317
+ stateProvince: z.string().min(1).max(100),
2318
+ postalCode: z.string().min(3).max(20),
2319
+ county: z.optional(z.string().max(100))
2320
+ })),
2321
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2322
+ email: z.optional(z.email().max(320))
2323
+ }).and(z.object({
2324
+ id: z.optional(z.uuid()),
2325
+ demographicInfo: z.optional(z.object({
2326
+ sex: z.optional(z.enum([
2327
+ 'male',
2328
+ 'female',
2329
+ 'unknown'
2330
+ ])),
2331
+ maritalStatus: z.optional(z.enum([
2332
+ 'single',
2333
+ 'married',
2334
+ 'divorced',
2335
+ 'separated',
2336
+ 'widowed',
2337
+ 'civil_union',
2338
+ 'domestic_partnership'
2339
+ ])),
2340
+ isHispanicOrLatino: z.optional(z.boolean()),
2341
+ race: z.optional(z.array(z.enum([
2342
+ 'american_indian_alaskan_native',
2343
+ 'asian',
2344
+ 'black_african_american',
2345
+ 'native_hawaiian_pacific_islander',
2346
+ 'white'
2347
+ ]))),
2348
+ gender: z.optional(z.enum([
2349
+ 'male',
2350
+ 'female',
2351
+ 'nonbinary',
2352
+ 'unknown'
2353
+ ]))
2354
+ })),
2355
+ citizenshipInfo: z.optional(z.object({
2356
+ status: z.optional(z.enum([
2357
+ 'us_citizen',
2358
+ 'lawful_permanent_resident',
2359
+ 'qualified_alien',
2360
+ 'prucol',
2361
+ 'undocumented',
2362
+ 'other'
2363
+ ])),
2364
+ certificateNumber: z.optional(z.string().max(50)),
2365
+ immigrationInfo: z.optional(z.object({
2366
+ status: z.optional(z.string().max(100)),
2367
+ documentType: z.optional(z.string().max(100)),
2368
+ documentNumber: z.optional(z.string().max(100)),
2369
+ alienOrI94Number: z.optional(z.string().max(100)),
2370
+ documentExpirationDate: z.optional(z.iso.date()),
2371
+ countryOfIssuance: z.optional(z.string().max(100)),
2372
+ hasSponsor: z.optional(z.boolean()),
2373
+ sponsor: z.optional(z.object({
2374
+ name: z.optional(z.object({
2375
+ firstName: z.string().min(1).max(100),
2376
+ middleInitial: z.optional(z.string().max(1)),
2377
+ middleName: z.optional(z.string().max(100)),
2378
+ lastName: z.string().min(1).max(100),
2379
+ maidenName: z.optional(z.string().max(100)),
2380
+ suffix: z.optional(z.string().max(20))
2381
+ })),
2382
+ dateOfBirth: z.optional(z.iso.date()),
2383
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2384
+ address: z.optional(z.object({
2385
+ addressLine1: z.string().min(1).max(150),
2386
+ addressLine2: z.optional(z.string().max(150)),
2387
+ city: z.string().min(1).max(100),
2388
+ stateProvince: z.string().min(1).max(100),
2389
+ postalCode: z.string().min(3).max(20),
2390
+ county: z.optional(z.string().max(100))
2391
+ })),
2392
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2393
+ email: z.optional(z.email().max(320))
2394
+ }).and(z.object({
2395
+ spouse: z.optional(z.object({
2396
+ name: z.optional(z.object({
2397
+ firstName: z.string().min(1).max(100),
2398
+ middleInitial: z.optional(z.string().max(1)),
2399
+ middleName: z.optional(z.string().max(100)),
2400
+ lastName: z.string().min(1).max(100),
2401
+ maidenName: z.optional(z.string().max(100)),
2402
+ suffix: z.optional(z.string().max(20))
2403
+ })),
2404
+ dateOfBirth: z.optional(z.iso.date()),
2405
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2406
+ address: z.optional(z.object({
2407
+ addressLine1: z.string().min(1).max(150),
2408
+ addressLine2: z.optional(z.string().max(150)),
2409
+ city: z.string().min(1).max(100),
2410
+ stateProvince: z.string().min(1).max(100),
2411
+ postalCode: z.string().min(3).max(20),
2412
+ county: z.optional(z.string().max(100))
2413
+ })),
2414
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2415
+ email: z.optional(z.email().max(320))
2416
+ })),
2417
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
2418
+ })))
2419
+ }))
2420
+ })),
2421
+ contactInfo: z.optional(z.object({
2422
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2423
+ mailingAddress: z.optional(z.object({
2424
+ addressLine1: z.string().min(1).max(150),
2425
+ addressLine2: z.optional(z.string().max(150)),
2426
+ city: z.string().min(1).max(100),
2427
+ stateProvince: z.string().min(1).max(100),
2428
+ postalCode: z.string().min(3).max(20),
2429
+ county: z.optional(z.string().max(100))
2430
+ })),
2431
+ isHomeless: z.optional(z.boolean()),
2432
+ preferredNoticeMethod: z.optional(z.enum([
2433
+ 'paper',
2434
+ 'email',
2435
+ 'both'
2436
+ ])),
2437
+ languagePreference: z.optional(z.object({
2438
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
2439
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
2440
+ })),
2441
+ preferredContactMethod: z.optional(z.enum([
2442
+ 'phone',
2443
+ 'email',
2444
+ 'mail',
2445
+ 'sms'
2446
+ ]))
2447
+ })),
2448
+ employmentInfo: z.optional(z.object({
2449
+ jobs: z.optional(z.array(z.object({
2450
+ employer: z.optional(z.object({
2451
+ name: z.optional(z.string().max(200)),
2452
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2453
+ address: z.optional(z.object({
2454
+ addressLine1: z.string().min(1).max(150),
2455
+ addressLine2: z.optional(z.string().max(150)),
2456
+ city: z.string().min(1).max(100),
2457
+ stateProvince: z.string().min(1).max(100),
2458
+ postalCode: z.string().min(3).max(20),
2459
+ county: z.optional(z.string().max(100))
2460
+ })),
2461
+ identificationNumber: z.optional(z.string().max(50))
2462
+ })),
2463
+ startDate: z.optional(z.iso.date()),
2464
+ endDate: z.optional(z.iso.date())
2465
+ })))
2466
+ })),
2467
+ educationInfo: z.optional(z.object({
2468
+ lastGradeCompleted: z.optional(z.string().max(50)),
2469
+ isCurrentlyEnrolled: z.optional(z.boolean()),
2470
+ schoolName: z.optional(z.string().max(200)),
2471
+ startDate: z.optional(z.iso.date()),
2472
+ isFullTimeStudent: z.optional(z.boolean()),
2473
+ expectedGraduationDate: z.optional(z.iso.date())
2474
+ })),
2475
+ militaryInfo: z.optional(z.object({
2476
+ isMilitaryServiceMember: z.optional(z.boolean()),
2477
+ veteranStatus: z.optional(z.boolean())
2478
+ })),
2479
+ tribalInfo: z.optional(z.object({
2480
+ tribeName: z.optional(z.string().max(200)),
2481
+ tribeState: z.optional(z.string().max(100)),
2482
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
2483
+ isEligibleForIndianHealthService: z.optional(z.boolean())
2484
+ })),
2485
+ consentToShareInformation: z.optional(z.boolean()),
2486
+ createdAt: z.optional(z.iso.datetime().readonly()),
2487
+ updatedAt: z.optional(z.iso.datetime().readonly()),
2488
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
2489
+ countyName: z.optional(z.enum([
2490
+ 'Alameda',
2491
+ 'Alpine',
2492
+ 'Amador',
2493
+ 'Butte',
2494
+ 'Calaveras',
2495
+ 'Colusa',
2496
+ 'Contra Costa',
2497
+ 'Del Norte',
2498
+ 'El Dorado',
2499
+ 'Fresno',
2500
+ 'Glenn',
2501
+ 'Humboldt',
2502
+ 'Imperial',
2503
+ 'Inyo',
2504
+ 'Kern',
2505
+ 'Kings',
2506
+ 'Lake',
2507
+ 'Lassen',
2508
+ 'Los Angeles',
2509
+ 'Madera',
2510
+ 'Marin',
2511
+ 'Mariposa',
2512
+ 'Mendocino',
2513
+ 'Merced',
2514
+ 'Modoc',
2515
+ 'Mono',
2516
+ 'Monterey',
2517
+ 'Napa',
2518
+ 'Nevada',
2519
+ 'Orange',
2520
+ 'Placer',
2521
+ 'Plumas',
2522
+ 'Riverside',
2523
+ 'Sacramento',
2524
+ 'San Benito',
2525
+ 'San Bernardino',
2526
+ 'San Diego',
2527
+ 'San Francisco',
2528
+ 'San Joaquin',
2529
+ 'San Luis Obispo',
2530
+ 'San Mateo',
2531
+ 'Santa Barbara',
2532
+ 'Santa Clara',
2533
+ 'Santa Cruz',
2534
+ 'Shasta',
2535
+ 'Sierra',
2536
+ 'Siskiyou',
2537
+ 'Solano',
2538
+ 'Sonoma',
2539
+ 'Stanislaus',
2540
+ 'Sutter',
2541
+ 'Tehama',
2542
+ 'Trinity',
2543
+ 'Tulare',
2544
+ 'Tuolumne',
2545
+ 'Ventura',
2546
+ 'Yolo',
2547
+ 'Yuba'
2548
+ ])),
2549
+ calworksEligible: z.optional(z.boolean()),
2550
+ calfreshEligible: z.optional(z.boolean()),
2551
+ medicalEligible: z.optional(z.boolean())
2552
+ })).and(z.record(z.string(), z.unknown())),
2553
+ path: z.optional(z.never()),
2554
+ query: z.optional(z.never())
2555
+ });
2556
+
2557
+ /**
2558
+ * Person created successfully.
2559
+ */
2560
+ export const zCreatePersonResponse = z.object({
2561
+ name: z.optional(z.object({
2562
+ firstName: z.string().min(1).max(100),
2563
+ middleInitial: z.optional(z.string().max(1)),
2564
+ middleName: z.optional(z.string().max(100)),
2565
+ lastName: z.string().min(1).max(100),
2566
+ maidenName: z.optional(z.string().max(100)),
2567
+ suffix: z.optional(z.string().max(20))
2568
+ })),
2569
+ dateOfBirth: z.optional(z.iso.date()),
2570
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2571
+ address: z.optional(z.object({
2572
+ addressLine1: z.string().min(1).max(150),
2573
+ addressLine2: z.optional(z.string().max(150)),
2574
+ city: z.string().min(1).max(100),
2575
+ stateProvince: z.string().min(1).max(100),
2576
+ postalCode: z.string().min(3).max(20),
2577
+ county: z.optional(z.string().max(100))
2578
+ })),
2579
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2580
+ email: z.optional(z.email().max(320))
2581
+ }).and(z.object({
2582
+ id: z.optional(z.uuid()),
2583
+ demographicInfo: z.optional(z.object({
2584
+ sex: z.optional(z.enum([
2585
+ 'male',
2586
+ 'female',
2587
+ 'unknown'
2588
+ ])),
2589
+ maritalStatus: z.optional(z.enum([
2590
+ 'single',
2591
+ 'married',
2592
+ 'divorced',
2593
+ 'separated',
2594
+ 'widowed',
2595
+ 'civil_union',
2596
+ 'domestic_partnership'
2597
+ ])),
2598
+ isHispanicOrLatino: z.optional(z.boolean()),
2599
+ race: z.optional(z.array(z.enum([
2600
+ 'american_indian_alaskan_native',
2601
+ 'asian',
2602
+ 'black_african_american',
2603
+ 'native_hawaiian_pacific_islander',
2604
+ 'white'
2605
+ ]))),
2606
+ gender: z.optional(z.enum([
2607
+ 'male',
2608
+ 'female',
2609
+ 'nonbinary',
2610
+ 'unknown'
2611
+ ]))
2612
+ })),
2613
+ citizenshipInfo: z.optional(z.object({
2614
+ status: z.optional(z.enum([
2615
+ 'us_citizen',
2616
+ 'lawful_permanent_resident',
2617
+ 'qualified_alien',
2618
+ 'prucol',
2619
+ 'undocumented',
2620
+ 'other'
2621
+ ])),
2622
+ certificateNumber: z.optional(z.string().max(50)),
2623
+ immigrationInfo: z.optional(z.object({
2624
+ status: z.optional(z.string().max(100)),
2625
+ documentType: z.optional(z.string().max(100)),
2626
+ documentNumber: z.optional(z.string().max(100)),
2627
+ alienOrI94Number: z.optional(z.string().max(100)),
2628
+ documentExpirationDate: z.optional(z.iso.date()),
2629
+ countryOfIssuance: z.optional(z.string().max(100)),
2630
+ hasSponsor: z.optional(z.boolean()),
2631
+ sponsor: z.optional(z.object({
2632
+ name: z.optional(z.object({
2633
+ firstName: z.string().min(1).max(100),
2634
+ middleInitial: z.optional(z.string().max(1)),
2635
+ middleName: z.optional(z.string().max(100)),
2636
+ lastName: z.string().min(1).max(100),
2637
+ maidenName: z.optional(z.string().max(100)),
2638
+ suffix: z.optional(z.string().max(20))
2639
+ })),
2640
+ dateOfBirth: z.optional(z.iso.date()),
2641
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2642
+ address: z.optional(z.object({
2643
+ addressLine1: z.string().min(1).max(150),
2644
+ addressLine2: z.optional(z.string().max(150)),
2645
+ city: z.string().min(1).max(100),
2646
+ stateProvince: z.string().min(1).max(100),
2647
+ postalCode: z.string().min(3).max(20),
2648
+ county: z.optional(z.string().max(100))
2649
+ })),
2650
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2651
+ email: z.optional(z.email().max(320))
2652
+ }).and(z.object({
2653
+ spouse: z.optional(z.object({
2654
+ name: z.optional(z.object({
2655
+ firstName: z.string().min(1).max(100),
2656
+ middleInitial: z.optional(z.string().max(1)),
2657
+ middleName: z.optional(z.string().max(100)),
2658
+ lastName: z.string().min(1).max(100),
2659
+ maidenName: z.optional(z.string().max(100)),
2660
+ suffix: z.optional(z.string().max(20))
2661
+ })),
2662
+ dateOfBirth: z.optional(z.iso.date()),
2663
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2664
+ address: z.optional(z.object({
2665
+ addressLine1: z.string().min(1).max(150),
2666
+ addressLine2: z.optional(z.string().max(150)),
2667
+ city: z.string().min(1).max(100),
2668
+ stateProvince: z.string().min(1).max(100),
2669
+ postalCode: z.string().min(3).max(20),
2670
+ county: z.optional(z.string().max(100))
2671
+ })),
2672
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2673
+ email: z.optional(z.email().max(320))
2674
+ })),
2675
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
2676
+ })))
2677
+ }))
2678
+ })),
2679
+ contactInfo: z.optional(z.object({
2680
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2681
+ mailingAddress: z.optional(z.object({
2682
+ addressLine1: z.string().min(1).max(150),
2683
+ addressLine2: z.optional(z.string().max(150)),
2684
+ city: z.string().min(1).max(100),
2685
+ stateProvince: z.string().min(1).max(100),
2686
+ postalCode: z.string().min(3).max(20),
2687
+ county: z.optional(z.string().max(100))
2688
+ })),
2689
+ isHomeless: z.optional(z.boolean()),
2690
+ preferredNoticeMethod: z.optional(z.enum([
2691
+ 'paper',
2692
+ 'email',
2693
+ 'both'
2694
+ ])),
2695
+ languagePreference: z.optional(z.object({
2696
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
2697
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
2698
+ })),
2699
+ preferredContactMethod: z.optional(z.enum([
2700
+ 'phone',
2701
+ 'email',
2702
+ 'mail',
2703
+ 'sms'
2704
+ ]))
2705
+ })),
2706
+ employmentInfo: z.optional(z.object({
2707
+ jobs: z.optional(z.array(z.object({
2708
+ employer: z.optional(z.object({
2709
+ name: z.optional(z.string().max(200)),
2710
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2711
+ address: z.optional(z.object({
2712
+ addressLine1: z.string().min(1).max(150),
2713
+ addressLine2: z.optional(z.string().max(150)),
2714
+ city: z.string().min(1).max(100),
2715
+ stateProvince: z.string().min(1).max(100),
2716
+ postalCode: z.string().min(3).max(20),
2717
+ county: z.optional(z.string().max(100))
2718
+ })),
2719
+ identificationNumber: z.optional(z.string().max(50))
2720
+ })),
2721
+ startDate: z.optional(z.iso.date()),
2722
+ endDate: z.optional(z.iso.date())
2723
+ })))
2724
+ })),
2725
+ educationInfo: z.optional(z.object({
2726
+ lastGradeCompleted: z.optional(z.string().max(50)),
2727
+ isCurrentlyEnrolled: z.optional(z.boolean()),
2728
+ schoolName: z.optional(z.string().max(200)),
2729
+ startDate: z.optional(z.iso.date()),
2730
+ isFullTimeStudent: z.optional(z.boolean()),
2731
+ expectedGraduationDate: z.optional(z.iso.date())
2732
+ })),
2733
+ militaryInfo: z.optional(z.object({
2734
+ isMilitaryServiceMember: z.optional(z.boolean()),
2735
+ veteranStatus: z.optional(z.boolean())
2736
+ })),
2737
+ tribalInfo: z.optional(z.object({
2738
+ tribeName: z.optional(z.string().max(200)),
2739
+ tribeState: z.optional(z.string().max(100)),
2740
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
2741
+ isEligibleForIndianHealthService: z.optional(z.boolean())
2742
+ })),
2743
+ consentToShareInformation: z.optional(z.boolean()),
2744
+ createdAt: z.optional(z.iso.datetime().readonly()),
2745
+ updatedAt: z.optional(z.iso.datetime().readonly()),
2746
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
2747
+ countyName: z.optional(z.enum([
2748
+ 'Alameda',
2749
+ 'Alpine',
2750
+ 'Amador',
2751
+ 'Butte',
2752
+ 'Calaveras',
2753
+ 'Colusa',
2754
+ 'Contra Costa',
2755
+ 'Del Norte',
2756
+ 'El Dorado',
2757
+ 'Fresno',
2758
+ 'Glenn',
2759
+ 'Humboldt',
2760
+ 'Imperial',
2761
+ 'Inyo',
2762
+ 'Kern',
2763
+ 'Kings',
2764
+ 'Lake',
2765
+ 'Lassen',
2766
+ 'Los Angeles',
2767
+ 'Madera',
2768
+ 'Marin',
2769
+ 'Mariposa',
2770
+ 'Mendocino',
2771
+ 'Merced',
2772
+ 'Modoc',
2773
+ 'Mono',
2774
+ 'Monterey',
2775
+ 'Napa',
2776
+ 'Nevada',
2777
+ 'Orange',
2778
+ 'Placer',
2779
+ 'Plumas',
2780
+ 'Riverside',
2781
+ 'Sacramento',
2782
+ 'San Benito',
2783
+ 'San Bernardino',
2784
+ 'San Diego',
2785
+ 'San Francisco',
2786
+ 'San Joaquin',
2787
+ 'San Luis Obispo',
2788
+ 'San Mateo',
2789
+ 'Santa Barbara',
2790
+ 'Santa Clara',
2791
+ 'Santa Cruz',
2792
+ 'Shasta',
2793
+ 'Sierra',
2794
+ 'Siskiyou',
2795
+ 'Solano',
2796
+ 'Sonoma',
2797
+ 'Stanislaus',
2798
+ 'Sutter',
2799
+ 'Tehama',
2800
+ 'Trinity',
2801
+ 'Tulare',
2802
+ 'Tuolumne',
2803
+ 'Ventura',
2804
+ 'Yolo',
2805
+ 'Yuba'
2806
+ ])),
2807
+ calworksEligible: z.optional(z.boolean()),
2808
+ calfreshEligible: z.optional(z.boolean()),
2809
+ medicalEligible: z.optional(z.boolean())
2810
+ }));
2811
+
2812
+ export const zDeletePersonData = z.object({
2813
+ body: z.optional(z.never()),
2814
+ path: z.object({
2815
+ personId: z.uuid()
2816
+ }),
2817
+ query: z.optional(z.never())
2818
+ });
2819
+
2820
+ /**
2821
+ * Person deleted successfully.
2822
+ */
2823
+ export const zDeletePersonResponse = z.void();
2824
+
2825
+ export const zGetPersonData = z.object({
2826
+ body: z.optional(z.never()),
2827
+ path: z.object({
2828
+ personId: z.uuid()
2829
+ }),
2830
+ query: z.optional(z.never())
2831
+ });
2832
+
2833
+ /**
2834
+ * Person retrieved successfully.
2835
+ */
2836
+ export const zGetPersonResponse = z.object({
2837
+ name: z.optional(z.object({
2838
+ firstName: z.string().min(1).max(100),
2839
+ middleInitial: z.optional(z.string().max(1)),
2840
+ middleName: z.optional(z.string().max(100)),
2841
+ lastName: z.string().min(1).max(100),
2842
+ maidenName: z.optional(z.string().max(100)),
2843
+ suffix: z.optional(z.string().max(20))
2844
+ })),
2845
+ dateOfBirth: z.optional(z.iso.date()),
2846
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2847
+ address: z.optional(z.object({
2848
+ addressLine1: z.string().min(1).max(150),
2849
+ addressLine2: z.optional(z.string().max(150)),
2850
+ city: z.string().min(1).max(100),
2851
+ stateProvince: z.string().min(1).max(100),
2852
+ postalCode: z.string().min(3).max(20),
2853
+ county: z.optional(z.string().max(100))
2854
+ })),
2855
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2856
+ email: z.optional(z.email().max(320))
2857
+ }).and(z.object({
2858
+ id: z.optional(z.uuid()),
2859
+ demographicInfo: z.optional(z.object({
2860
+ sex: z.optional(z.enum([
2861
+ 'male',
2862
+ 'female',
2863
+ 'unknown'
2864
+ ])),
2865
+ maritalStatus: z.optional(z.enum([
2866
+ 'single',
2867
+ 'married',
2868
+ 'divorced',
2869
+ 'separated',
2870
+ 'widowed',
2871
+ 'civil_union',
2872
+ 'domestic_partnership'
2873
+ ])),
2874
+ isHispanicOrLatino: z.optional(z.boolean()),
2875
+ race: z.optional(z.array(z.enum([
2876
+ 'american_indian_alaskan_native',
2877
+ 'asian',
2878
+ 'black_african_american',
2879
+ 'native_hawaiian_pacific_islander',
2880
+ 'white'
2881
+ ]))),
2882
+ gender: z.optional(z.enum([
2883
+ 'male',
2884
+ 'female',
2885
+ 'nonbinary',
2886
+ 'unknown'
2887
+ ]))
2888
+ })),
2889
+ citizenshipInfo: z.optional(z.object({
2890
+ status: z.optional(z.enum([
2891
+ 'us_citizen',
2892
+ 'lawful_permanent_resident',
2893
+ 'qualified_alien',
2894
+ 'prucol',
2895
+ 'undocumented',
2896
+ 'other'
2897
+ ])),
2898
+ certificateNumber: z.optional(z.string().max(50)),
2899
+ immigrationInfo: z.optional(z.object({
2900
+ status: z.optional(z.string().max(100)),
2901
+ documentType: z.optional(z.string().max(100)),
2902
+ documentNumber: z.optional(z.string().max(100)),
2903
+ alienOrI94Number: z.optional(z.string().max(100)),
2904
+ documentExpirationDate: z.optional(z.iso.date()),
2905
+ countryOfIssuance: z.optional(z.string().max(100)),
2906
+ hasSponsor: z.optional(z.boolean()),
2907
+ sponsor: z.optional(z.object({
2908
+ name: z.optional(z.object({
2909
+ firstName: z.string().min(1).max(100),
2910
+ middleInitial: z.optional(z.string().max(1)),
2911
+ middleName: z.optional(z.string().max(100)),
2912
+ lastName: z.string().min(1).max(100),
2913
+ maidenName: z.optional(z.string().max(100)),
2914
+ suffix: z.optional(z.string().max(20))
2915
+ })),
2916
+ dateOfBirth: z.optional(z.iso.date()),
2917
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2918
+ address: z.optional(z.object({
2919
+ addressLine1: z.string().min(1).max(150),
2920
+ addressLine2: z.optional(z.string().max(150)),
2921
+ city: z.string().min(1).max(100),
2922
+ stateProvince: z.string().min(1).max(100),
2923
+ postalCode: z.string().min(3).max(20),
2924
+ county: z.optional(z.string().max(100))
2925
+ })),
2926
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2927
+ email: z.optional(z.email().max(320))
2928
+ }).and(z.object({
2929
+ spouse: z.optional(z.object({
2930
+ name: z.optional(z.object({
2931
+ firstName: z.string().min(1).max(100),
2932
+ middleInitial: z.optional(z.string().max(1)),
2933
+ middleName: z.optional(z.string().max(100)),
2934
+ lastName: z.string().min(1).max(100),
2935
+ maidenName: z.optional(z.string().max(100)),
2936
+ suffix: z.optional(z.string().max(20))
2937
+ })),
2938
+ dateOfBirth: z.optional(z.iso.date()),
2939
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
2940
+ address: z.optional(z.object({
2941
+ addressLine1: z.string().min(1).max(150),
2942
+ addressLine2: z.optional(z.string().max(150)),
2943
+ city: z.string().min(1).max(100),
2944
+ stateProvince: z.string().min(1).max(100),
2945
+ postalCode: z.string().min(3).max(20),
2946
+ county: z.optional(z.string().max(100))
2947
+ })),
2948
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2949
+ email: z.optional(z.email().max(320))
2950
+ })),
2951
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
2952
+ })))
2953
+ }))
2954
+ })),
2955
+ contactInfo: z.optional(z.object({
2956
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2957
+ mailingAddress: z.optional(z.object({
2958
+ addressLine1: z.string().min(1).max(150),
2959
+ addressLine2: z.optional(z.string().max(150)),
2960
+ city: z.string().min(1).max(100),
2961
+ stateProvince: z.string().min(1).max(100),
2962
+ postalCode: z.string().min(3).max(20),
2963
+ county: z.optional(z.string().max(100))
2964
+ })),
2965
+ isHomeless: z.optional(z.boolean()),
2966
+ preferredNoticeMethod: z.optional(z.enum([
2967
+ 'paper',
2968
+ 'email',
2969
+ 'both'
2970
+ ])),
2971
+ languagePreference: z.optional(z.object({
2972
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
2973
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
2974
+ })),
2975
+ preferredContactMethod: z.optional(z.enum([
2976
+ 'phone',
2977
+ 'email',
2978
+ 'mail',
2979
+ 'sms'
2980
+ ]))
2981
+ })),
2982
+ employmentInfo: z.optional(z.object({
2983
+ jobs: z.optional(z.array(z.object({
2984
+ employer: z.optional(z.object({
2985
+ name: z.optional(z.string().max(200)),
2986
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
2987
+ address: z.optional(z.object({
2988
+ addressLine1: z.string().min(1).max(150),
2989
+ addressLine2: z.optional(z.string().max(150)),
2990
+ city: z.string().min(1).max(100),
2991
+ stateProvince: z.string().min(1).max(100),
2992
+ postalCode: z.string().min(3).max(20),
2993
+ county: z.optional(z.string().max(100))
2994
+ })),
2995
+ identificationNumber: z.optional(z.string().max(50))
2996
+ })),
2997
+ startDate: z.optional(z.iso.date()),
2998
+ endDate: z.optional(z.iso.date())
2999
+ })))
3000
+ })),
3001
+ educationInfo: z.optional(z.object({
3002
+ lastGradeCompleted: z.optional(z.string().max(50)),
3003
+ isCurrentlyEnrolled: z.optional(z.boolean()),
3004
+ schoolName: z.optional(z.string().max(200)),
3005
+ startDate: z.optional(z.iso.date()),
3006
+ isFullTimeStudent: z.optional(z.boolean()),
3007
+ expectedGraduationDate: z.optional(z.iso.date())
3008
+ })),
3009
+ militaryInfo: z.optional(z.object({
3010
+ isMilitaryServiceMember: z.optional(z.boolean()),
3011
+ veteranStatus: z.optional(z.boolean())
3012
+ })),
3013
+ tribalInfo: z.optional(z.object({
3014
+ tribeName: z.optional(z.string().max(200)),
3015
+ tribeState: z.optional(z.string().max(100)),
3016
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
3017
+ isEligibleForIndianHealthService: z.optional(z.boolean())
3018
+ })),
3019
+ consentToShareInformation: z.optional(z.boolean()),
3020
+ createdAt: z.optional(z.iso.datetime().readonly()),
3021
+ updatedAt: z.optional(z.iso.datetime().readonly()),
3022
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
3023
+ countyName: z.optional(z.enum([
3024
+ 'Alameda',
3025
+ 'Alpine',
3026
+ 'Amador',
3027
+ 'Butte',
3028
+ 'Calaveras',
3029
+ 'Colusa',
3030
+ 'Contra Costa',
3031
+ 'Del Norte',
3032
+ 'El Dorado',
3033
+ 'Fresno',
3034
+ 'Glenn',
3035
+ 'Humboldt',
3036
+ 'Imperial',
3037
+ 'Inyo',
3038
+ 'Kern',
3039
+ 'Kings',
3040
+ 'Lake',
3041
+ 'Lassen',
3042
+ 'Los Angeles',
3043
+ 'Madera',
3044
+ 'Marin',
3045
+ 'Mariposa',
3046
+ 'Mendocino',
3047
+ 'Merced',
3048
+ 'Modoc',
3049
+ 'Mono',
3050
+ 'Monterey',
3051
+ 'Napa',
3052
+ 'Nevada',
3053
+ 'Orange',
3054
+ 'Placer',
3055
+ 'Plumas',
3056
+ 'Riverside',
3057
+ 'Sacramento',
3058
+ 'San Benito',
3059
+ 'San Bernardino',
3060
+ 'San Diego',
3061
+ 'San Francisco',
3062
+ 'San Joaquin',
3063
+ 'San Luis Obispo',
3064
+ 'San Mateo',
3065
+ 'Santa Barbara',
3066
+ 'Santa Clara',
3067
+ 'Santa Cruz',
3068
+ 'Shasta',
3069
+ 'Sierra',
3070
+ 'Siskiyou',
3071
+ 'Solano',
3072
+ 'Sonoma',
3073
+ 'Stanislaus',
3074
+ 'Sutter',
3075
+ 'Tehama',
3076
+ 'Trinity',
3077
+ 'Tulare',
3078
+ 'Tuolumne',
3079
+ 'Ventura',
3080
+ 'Yolo',
3081
+ 'Yuba'
3082
+ ])),
3083
+ calworksEligible: z.optional(z.boolean()),
3084
+ calfreshEligible: z.optional(z.boolean()),
3085
+ medicalEligible: z.optional(z.boolean())
3086
+ }));
3087
+
3088
+ export const zUpdatePersonData = z.object({
3089
+ body: z.object({
3090
+ name: z.optional(z.object({
3091
+ firstName: z.string().min(1).max(100),
3092
+ middleInitial: z.optional(z.string().max(1)),
3093
+ middleName: z.optional(z.string().max(100)),
3094
+ lastName: z.string().min(1).max(100),
3095
+ maidenName: z.optional(z.string().max(100)),
3096
+ suffix: z.optional(z.string().max(20))
3097
+ })),
3098
+ dateOfBirth: z.optional(z.iso.date()),
3099
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
3100
+ address: z.optional(z.object({
3101
+ addressLine1: z.string().min(1).max(150),
3102
+ addressLine2: z.optional(z.string().max(150)),
3103
+ city: z.string().min(1).max(100),
3104
+ stateProvince: z.string().min(1).max(100),
3105
+ postalCode: z.string().min(3).max(20),
3106
+ county: z.optional(z.string().max(100))
3107
+ })),
3108
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3109
+ email: z.optional(z.email().max(320))
3110
+ }).and(z.object({
3111
+ id: z.optional(z.uuid()),
3112
+ demographicInfo: z.optional(z.object({
3113
+ sex: z.optional(z.enum([
3114
+ 'male',
3115
+ 'female',
3116
+ 'unknown'
3117
+ ])),
3118
+ maritalStatus: z.optional(z.enum([
3119
+ 'single',
3120
+ 'married',
3121
+ 'divorced',
3122
+ 'separated',
3123
+ 'widowed',
3124
+ 'civil_union',
3125
+ 'domestic_partnership'
3126
+ ])),
3127
+ isHispanicOrLatino: z.optional(z.boolean()),
3128
+ race: z.optional(z.array(z.enum([
3129
+ 'american_indian_alaskan_native',
3130
+ 'asian',
3131
+ 'black_african_american',
3132
+ 'native_hawaiian_pacific_islander',
3133
+ 'white'
3134
+ ]))),
3135
+ gender: z.optional(z.enum([
3136
+ 'male',
3137
+ 'female',
3138
+ 'nonbinary',
3139
+ 'unknown'
3140
+ ]))
3141
+ })),
3142
+ citizenshipInfo: z.optional(z.object({
3143
+ status: z.optional(z.enum([
3144
+ 'us_citizen',
3145
+ 'lawful_permanent_resident',
3146
+ 'qualified_alien',
3147
+ 'prucol',
3148
+ 'undocumented',
3149
+ 'other'
3150
+ ])),
3151
+ certificateNumber: z.optional(z.string().max(50)),
3152
+ immigrationInfo: z.optional(z.object({
3153
+ status: z.optional(z.string().max(100)),
3154
+ documentType: z.optional(z.string().max(100)),
3155
+ documentNumber: z.optional(z.string().max(100)),
3156
+ alienOrI94Number: z.optional(z.string().max(100)),
3157
+ documentExpirationDate: z.optional(z.iso.date()),
3158
+ countryOfIssuance: z.optional(z.string().max(100)),
3159
+ hasSponsor: z.optional(z.boolean()),
3160
+ sponsor: z.optional(z.object({
3161
+ name: z.optional(z.object({
3162
+ firstName: z.string().min(1).max(100),
3163
+ middleInitial: z.optional(z.string().max(1)),
3164
+ middleName: z.optional(z.string().max(100)),
3165
+ lastName: z.string().min(1).max(100),
3166
+ maidenName: z.optional(z.string().max(100)),
3167
+ suffix: z.optional(z.string().max(20))
3168
+ })),
3169
+ dateOfBirth: z.optional(z.iso.date()),
3170
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
3171
+ address: z.optional(z.object({
3172
+ addressLine1: z.string().min(1).max(150),
3173
+ addressLine2: z.optional(z.string().max(150)),
3174
+ city: z.string().min(1).max(100),
3175
+ stateProvince: z.string().min(1).max(100),
3176
+ postalCode: z.string().min(3).max(20),
3177
+ county: z.optional(z.string().max(100))
3178
+ })),
3179
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3180
+ email: z.optional(z.email().max(320))
3181
+ }).and(z.object({
3182
+ spouse: z.optional(z.object({
3183
+ name: z.optional(z.object({
3184
+ firstName: z.string().min(1).max(100),
3185
+ middleInitial: z.optional(z.string().max(1)),
3186
+ middleName: z.optional(z.string().max(100)),
3187
+ lastName: z.string().min(1).max(100),
3188
+ maidenName: z.optional(z.string().max(100)),
3189
+ suffix: z.optional(z.string().max(20))
3190
+ })),
3191
+ dateOfBirth: z.optional(z.iso.date()),
3192
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
3193
+ address: z.optional(z.object({
3194
+ addressLine1: z.string().min(1).max(150),
3195
+ addressLine2: z.optional(z.string().max(150)),
3196
+ city: z.string().min(1).max(100),
3197
+ stateProvince: z.string().min(1).max(100),
3198
+ postalCode: z.string().min(3).max(20),
3199
+ county: z.optional(z.string().max(100))
3200
+ })),
3201
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3202
+ email: z.optional(z.email().max(320))
3203
+ })),
3204
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
3205
+ })))
3206
+ }))
3207
+ })),
3208
+ contactInfo: z.optional(z.object({
3209
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3210
+ mailingAddress: z.optional(z.object({
3211
+ addressLine1: z.string().min(1).max(150),
3212
+ addressLine2: z.optional(z.string().max(150)),
3213
+ city: z.string().min(1).max(100),
3214
+ stateProvince: z.string().min(1).max(100),
3215
+ postalCode: z.string().min(3).max(20),
3216
+ county: z.optional(z.string().max(100))
3217
+ })),
3218
+ isHomeless: z.optional(z.boolean()),
3219
+ preferredNoticeMethod: z.optional(z.enum([
3220
+ 'paper',
3221
+ 'email',
3222
+ 'both'
3223
+ ])),
3224
+ languagePreference: z.optional(z.object({
3225
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
3226
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
3227
+ })),
3228
+ preferredContactMethod: z.optional(z.enum([
3229
+ 'phone',
3230
+ 'email',
3231
+ 'mail',
3232
+ 'sms'
3233
+ ]))
3234
+ })),
3235
+ employmentInfo: z.optional(z.object({
3236
+ jobs: z.optional(z.array(z.object({
3237
+ employer: z.optional(z.object({
3238
+ name: z.optional(z.string().max(200)),
3239
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3240
+ address: z.optional(z.object({
3241
+ addressLine1: z.string().min(1).max(150),
3242
+ addressLine2: z.optional(z.string().max(150)),
3243
+ city: z.string().min(1).max(100),
3244
+ stateProvince: z.string().min(1).max(100),
3245
+ postalCode: z.string().min(3).max(20),
3246
+ county: z.optional(z.string().max(100))
3247
+ })),
3248
+ identificationNumber: z.optional(z.string().max(50))
3249
+ })),
3250
+ startDate: z.optional(z.iso.date()),
3251
+ endDate: z.optional(z.iso.date())
3252
+ })))
3253
+ })),
3254
+ educationInfo: z.optional(z.object({
3255
+ lastGradeCompleted: z.optional(z.string().max(50)),
3256
+ isCurrentlyEnrolled: z.optional(z.boolean()),
3257
+ schoolName: z.optional(z.string().max(200)),
3258
+ startDate: z.optional(z.iso.date()),
3259
+ isFullTimeStudent: z.optional(z.boolean()),
3260
+ expectedGraduationDate: z.optional(z.iso.date())
3261
+ })),
3262
+ militaryInfo: z.optional(z.object({
3263
+ isMilitaryServiceMember: z.optional(z.boolean()),
3264
+ veteranStatus: z.optional(z.boolean())
3265
+ })),
3266
+ tribalInfo: z.optional(z.object({
3267
+ tribeName: z.optional(z.string().max(200)),
3268
+ tribeState: z.optional(z.string().max(100)),
3269
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
3270
+ isEligibleForIndianHealthService: z.optional(z.boolean())
3271
+ })),
3272
+ consentToShareInformation: z.optional(z.boolean()),
3273
+ createdAt: z.optional(z.iso.datetime().readonly()),
3274
+ updatedAt: z.optional(z.iso.datetime().readonly()),
3275
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
3276
+ countyName: z.optional(z.enum([
3277
+ 'Alameda',
3278
+ 'Alpine',
3279
+ 'Amador',
3280
+ 'Butte',
3281
+ 'Calaveras',
3282
+ 'Colusa',
3283
+ 'Contra Costa',
3284
+ 'Del Norte',
3285
+ 'El Dorado',
3286
+ 'Fresno',
3287
+ 'Glenn',
3288
+ 'Humboldt',
3289
+ 'Imperial',
3290
+ 'Inyo',
3291
+ 'Kern',
3292
+ 'Kings',
3293
+ 'Lake',
3294
+ 'Lassen',
3295
+ 'Los Angeles',
3296
+ 'Madera',
3297
+ 'Marin',
3298
+ 'Mariposa',
3299
+ 'Mendocino',
3300
+ 'Merced',
3301
+ 'Modoc',
3302
+ 'Mono',
3303
+ 'Monterey',
3304
+ 'Napa',
3305
+ 'Nevada',
3306
+ 'Orange',
3307
+ 'Placer',
3308
+ 'Plumas',
3309
+ 'Riverside',
3310
+ 'Sacramento',
3311
+ 'San Benito',
3312
+ 'San Bernardino',
3313
+ 'San Diego',
3314
+ 'San Francisco',
3315
+ 'San Joaquin',
3316
+ 'San Luis Obispo',
3317
+ 'San Mateo',
3318
+ 'Santa Barbara',
3319
+ 'Santa Clara',
3320
+ 'Santa Cruz',
3321
+ 'Shasta',
3322
+ 'Sierra',
3323
+ 'Siskiyou',
3324
+ 'Solano',
3325
+ 'Sonoma',
3326
+ 'Stanislaus',
3327
+ 'Sutter',
3328
+ 'Tehama',
3329
+ 'Trinity',
3330
+ 'Tulare',
3331
+ 'Tuolumne',
3332
+ 'Ventura',
3333
+ 'Yolo',
3334
+ 'Yuba'
3335
+ ])),
3336
+ calworksEligible: z.optional(z.boolean()),
3337
+ calfreshEligible: z.optional(z.boolean()),
3338
+ medicalEligible: z.optional(z.boolean())
3339
+ })).and(z.record(z.string(), z.unknown())),
3340
+ path: z.object({
3341
+ personId: z.uuid()
3342
+ }),
3343
+ query: z.optional(z.never())
3344
+ });
3345
+
3346
+ /**
3347
+ * Person updated successfully.
3348
+ */
3349
+ export const zUpdatePersonResponse = z.object({
3350
+ name: z.optional(z.object({
3351
+ firstName: z.string().min(1).max(100),
3352
+ middleInitial: z.optional(z.string().max(1)),
3353
+ middleName: z.optional(z.string().max(100)),
3354
+ lastName: z.string().min(1).max(100),
3355
+ maidenName: z.optional(z.string().max(100)),
3356
+ suffix: z.optional(z.string().max(20))
3357
+ })),
3358
+ dateOfBirth: z.optional(z.iso.date()),
3359
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
3360
+ address: z.optional(z.object({
3361
+ addressLine1: z.string().min(1).max(150),
3362
+ addressLine2: z.optional(z.string().max(150)),
3363
+ city: z.string().min(1).max(100),
3364
+ stateProvince: z.string().min(1).max(100),
3365
+ postalCode: z.string().min(3).max(20),
3366
+ county: z.optional(z.string().max(100))
3367
+ })),
3368
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3369
+ email: z.optional(z.email().max(320))
3370
+ }).and(z.object({
3371
+ id: z.optional(z.uuid()),
3372
+ demographicInfo: z.optional(z.object({
3373
+ sex: z.optional(z.enum([
3374
+ 'male',
3375
+ 'female',
3376
+ 'unknown'
3377
+ ])),
3378
+ maritalStatus: z.optional(z.enum([
3379
+ 'single',
3380
+ 'married',
3381
+ 'divorced',
3382
+ 'separated',
3383
+ 'widowed',
3384
+ 'civil_union',
3385
+ 'domestic_partnership'
3386
+ ])),
3387
+ isHispanicOrLatino: z.optional(z.boolean()),
3388
+ race: z.optional(z.array(z.enum([
3389
+ 'american_indian_alaskan_native',
3390
+ 'asian',
3391
+ 'black_african_american',
3392
+ 'native_hawaiian_pacific_islander',
3393
+ 'white'
3394
+ ]))),
3395
+ gender: z.optional(z.enum([
3396
+ 'male',
3397
+ 'female',
3398
+ 'nonbinary',
3399
+ 'unknown'
3400
+ ]))
3401
+ })),
3402
+ citizenshipInfo: z.optional(z.object({
3403
+ status: z.optional(z.enum([
3404
+ 'us_citizen',
3405
+ 'lawful_permanent_resident',
3406
+ 'qualified_alien',
3407
+ 'prucol',
3408
+ 'undocumented',
3409
+ 'other'
3410
+ ])),
3411
+ certificateNumber: z.optional(z.string().max(50)),
3412
+ immigrationInfo: z.optional(z.object({
3413
+ status: z.optional(z.string().max(100)),
3414
+ documentType: z.optional(z.string().max(100)),
3415
+ documentNumber: z.optional(z.string().max(100)),
3416
+ alienOrI94Number: z.optional(z.string().max(100)),
3417
+ documentExpirationDate: z.optional(z.iso.date()),
3418
+ countryOfIssuance: z.optional(z.string().max(100)),
3419
+ hasSponsor: z.optional(z.boolean()),
3420
+ sponsor: z.optional(z.object({
3421
+ name: z.optional(z.object({
3422
+ firstName: z.string().min(1).max(100),
3423
+ middleInitial: z.optional(z.string().max(1)),
3424
+ middleName: z.optional(z.string().max(100)),
3425
+ lastName: z.string().min(1).max(100),
3426
+ maidenName: z.optional(z.string().max(100)),
3427
+ suffix: z.optional(z.string().max(20))
3428
+ })),
3429
+ dateOfBirth: z.optional(z.iso.date()),
3430
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
3431
+ address: z.optional(z.object({
3432
+ addressLine1: z.string().min(1).max(150),
3433
+ addressLine2: z.optional(z.string().max(150)),
3434
+ city: z.string().min(1).max(100),
3435
+ stateProvince: z.string().min(1).max(100),
3436
+ postalCode: z.string().min(3).max(20),
3437
+ county: z.optional(z.string().max(100))
3438
+ })),
3439
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3440
+ email: z.optional(z.email().max(320))
3441
+ }).and(z.object({
3442
+ spouse: z.optional(z.object({
3443
+ name: z.optional(z.object({
3444
+ firstName: z.string().min(1).max(100),
3445
+ middleInitial: z.optional(z.string().max(1)),
3446
+ middleName: z.optional(z.string().max(100)),
3447
+ lastName: z.string().min(1).max(100),
3448
+ maidenName: z.optional(z.string().max(100)),
3449
+ suffix: z.optional(z.string().max(20))
3450
+ })),
3451
+ dateOfBirth: z.optional(z.iso.date()),
3452
+ socialSecurityNumber: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)),
3453
+ address: z.optional(z.object({
3454
+ addressLine1: z.string().min(1).max(150),
3455
+ addressLine2: z.optional(z.string().max(150)),
3456
+ city: z.string().min(1).max(100),
3457
+ stateProvince: z.string().min(1).max(100),
3458
+ postalCode: z.string().min(3).max(20),
3459
+ county: z.optional(z.string().max(100))
3460
+ })),
3461
+ phoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3462
+ email: z.optional(z.email().max(320))
3463
+ })),
3464
+ totalPeopleInHousehold: z.optional(z.int().gte(1))
3465
+ })))
3466
+ }))
3467
+ })),
3468
+ contactInfo: z.optional(z.object({
3469
+ otherPhoneNumber: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3470
+ mailingAddress: z.optional(z.object({
3471
+ addressLine1: z.string().min(1).max(150),
3472
+ addressLine2: z.optional(z.string().max(150)),
3473
+ city: z.string().min(1).max(100),
3474
+ stateProvince: z.string().min(1).max(100),
3475
+ postalCode: z.string().min(3).max(20),
3476
+ county: z.optional(z.string().max(100))
3477
+ })),
3478
+ isHomeless: z.optional(z.boolean()),
3479
+ preferredNoticeMethod: z.optional(z.enum([
3480
+ 'paper',
3481
+ 'email',
3482
+ 'both'
3483
+ ])),
3484
+ languagePreference: z.optional(z.object({
3485
+ written: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/)),
3486
+ spoken: z.optional(z.string().regex(/^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$/))
3487
+ })),
3488
+ preferredContactMethod: z.optional(z.enum([
3489
+ 'phone',
3490
+ 'email',
3491
+ 'mail',
3492
+ 'sms'
3493
+ ]))
3494
+ })),
3495
+ employmentInfo: z.optional(z.object({
3496
+ jobs: z.optional(z.array(z.object({
3497
+ employer: z.optional(z.object({
3498
+ name: z.optional(z.string().max(200)),
3499
+ phone: z.optional(z.string().regex(/^\+?[0-9 .\-()]{7,20}$/)),
3500
+ address: z.optional(z.object({
3501
+ addressLine1: z.string().min(1).max(150),
3502
+ addressLine2: z.optional(z.string().max(150)),
3503
+ city: z.string().min(1).max(100),
3504
+ stateProvince: z.string().min(1).max(100),
3505
+ postalCode: z.string().min(3).max(20),
3506
+ county: z.optional(z.string().max(100))
3507
+ })),
3508
+ identificationNumber: z.optional(z.string().max(50))
3509
+ })),
3510
+ startDate: z.optional(z.iso.date()),
3511
+ endDate: z.optional(z.iso.date())
3512
+ })))
3513
+ })),
3514
+ educationInfo: z.optional(z.object({
3515
+ lastGradeCompleted: z.optional(z.string().max(50)),
3516
+ isCurrentlyEnrolled: z.optional(z.boolean()),
3517
+ schoolName: z.optional(z.string().max(200)),
3518
+ startDate: z.optional(z.iso.date()),
3519
+ isFullTimeStudent: z.optional(z.boolean()),
3520
+ expectedGraduationDate: z.optional(z.iso.date())
3521
+ })),
3522
+ militaryInfo: z.optional(z.object({
3523
+ isMilitaryServiceMember: z.optional(z.boolean()),
3524
+ veteranStatus: z.optional(z.boolean())
3525
+ })),
3526
+ tribalInfo: z.optional(z.object({
3527
+ tribeName: z.optional(z.string().max(200)),
3528
+ tribeState: z.optional(z.string().max(100)),
3529
+ hasReceivedServiceFromIndianHealthService: z.optional(z.boolean()),
3530
+ isEligibleForIndianHealthService: z.optional(z.boolean())
3531
+ })),
3532
+ consentToShareInformation: z.optional(z.boolean()),
3533
+ createdAt: z.optional(z.iso.datetime().readonly()),
3534
+ updatedAt: z.optional(z.iso.datetime().readonly()),
3535
+ countyCode: z.optional(z.string().regex(/^[0-5][0-9]$/)),
3536
+ countyName: z.optional(z.enum([
3537
+ 'Alameda',
3538
+ 'Alpine',
3539
+ 'Amador',
3540
+ 'Butte',
3541
+ 'Calaveras',
3542
+ 'Colusa',
3543
+ 'Contra Costa',
3544
+ 'Del Norte',
3545
+ 'El Dorado',
3546
+ 'Fresno',
3547
+ 'Glenn',
3548
+ 'Humboldt',
3549
+ 'Imperial',
3550
+ 'Inyo',
3551
+ 'Kern',
3552
+ 'Kings',
3553
+ 'Lake',
3554
+ 'Lassen',
3555
+ 'Los Angeles',
3556
+ 'Madera',
3557
+ 'Marin',
3558
+ 'Mariposa',
3559
+ 'Mendocino',
3560
+ 'Merced',
3561
+ 'Modoc',
3562
+ 'Mono',
3563
+ 'Monterey',
3564
+ 'Napa',
3565
+ 'Nevada',
3566
+ 'Orange',
3567
+ 'Placer',
3568
+ 'Plumas',
3569
+ 'Riverside',
3570
+ 'Sacramento',
3571
+ 'San Benito',
3572
+ 'San Bernardino',
3573
+ 'San Diego',
3574
+ 'San Francisco',
3575
+ 'San Joaquin',
3576
+ 'San Luis Obispo',
3577
+ 'San Mateo',
3578
+ 'Santa Barbara',
3579
+ 'Santa Clara',
3580
+ 'Santa Cruz',
3581
+ 'Shasta',
3582
+ 'Sierra',
3583
+ 'Siskiyou',
3584
+ 'Solano',
3585
+ 'Sonoma',
3586
+ 'Stanislaus',
3587
+ 'Sutter',
3588
+ 'Tehama',
3589
+ 'Trinity',
3590
+ 'Tulare',
3591
+ 'Tuolumne',
3592
+ 'Ventura',
3593
+ 'Yolo',
3594
+ 'Yuba'
3595
+ ])),
3596
+ calworksEligible: z.optional(z.boolean()),
3597
+ calfreshEligible: z.optional(z.boolean()),
3598
+ medicalEligible: z.optional(z.boolean())
3599
+ }));