|
20 | 20 | <!-- EVENT TYPE DEFINITIONS --> |
21 | 21 | <!-- ═══════════════════════════════════════════════════════════════════════ --> |
22 | 22 |
|
| 23 | + <!-- Health Visit Event Type (compliance tracking) --> |
| 24 | + <record id="event_type_health_visit" model="spp.event.type"> |
| 25 | + <field name="name">Health Visit</field> |
| 26 | + <field name="code">health_visit</field> |
| 27 | + <field |
| 28 | + name="description" |
| 29 | + >Health checkup visits for children under 5, required for Conditional Child Grant compliance. Tracks immunization and growth monitoring.</field> |
| 30 | + <field name="category">visit</field> |
| 31 | + <field name="target_type">both</field> |
| 32 | + <field name="source_type">internal</field> |
| 33 | + <field name="sequence">5</field> |
| 34 | + </record> |
| 35 | + |
23 | 36 | <!-- Training Event Type --> |
24 | 37 | <record id="event_type_training" model="spp.event.type"> |
25 | 38 | <field name="name">Training Session</field> |
26 | 39 | <field name="code">training</field> |
27 | | - <field name="description">Training sessions for beneficiaries including agricultural practices, financial literacy, and program orientation.</field> |
| 40 | + <field |
| 41 | + name="description" |
| 42 | + >Training sessions for beneficiaries including agricultural practices, financial literacy, and program orientation.</field> |
28 | 43 | <field name="category">visit</field> |
29 | 44 | <field name="target_type">both</field> |
30 | 45 | <field name="source_type">internal</field> |
|
35 | 50 | <record id="event_type_extension_visit" model="spp.event.type"> |
36 | 51 | <field name="name">Extension Visit</field> |
37 | 52 | <field name="code">extension_visit</field> |
38 | | - <field name="description">Field extension visits by agricultural officers to provide technical assistance and monitor progress.</field> |
| 53 | + <field |
| 54 | + name="description" |
| 55 | + >Field extension visits by agricultural officers to provide technical assistance and monitor progress.</field> |
39 | 56 | <field name="category">visit</field> |
40 | 57 | <field name="target_type">both</field> |
41 | 58 | <field name="source_type">internal</field> |
|
46 | 63 | <record id="event_type_verification" model="spp.event.type"> |
47 | 64 | <field name="name">Verification Visit</field> |
48 | 65 | <field name="code">verification</field> |
49 | | - <field name="description">Field verification visits to confirm eligibility and registration information.</field> |
| 66 | + <field |
| 67 | + name="description" |
| 68 | + >Field verification visits to confirm eligibility and registration information.</field> |
50 | 69 | <field name="category">visit</field> |
51 | 70 | <field name="target_type">both</field> |
52 | 71 | <field name="source_type">internal</field> |
|
57 | 76 | <record id="event_type_vulnerability_assessment" model="spp.event.type"> |
58 | 77 | <field name="name">Vulnerability Assessment</field> |
59 | 78 | <field name="code">vulnerability_assessment</field> |
60 | | - <field name="description">Assessment to determine vulnerability level and eligibility for targeted programs.</field> |
| 79 | + <field |
| 80 | + name="description" |
| 81 | + >Assessment to determine vulnerability level and eligibility for targeted programs.</field> |
61 | 82 | <field name="category">survey</field> |
62 | 83 | <field name="target_type">both</field> |
63 | 84 | <field name="source_type">odk</field> |
|
82 | 103 |
|
83 | 104 | <!-- Direct mapping: Registrant ID --> |
84 | 105 | <record id="mapping_vuln_registrant_id" model="spp.event.type.mapping"> |
85 | | - <field name="event_type_id" ref="event_type_vulnerability_assessment"/> |
| 106 | + <field name="event_type_id" ref="event_type_vulnerability_assessment" /> |
86 | 107 | <field name="sequence">10</field> |
87 | 108 | <field name="external_field">beneficiary_id</field> |
88 | 109 | <field name="internal_field">registrant_id</field> |
|
91 | 112 |
|
92 | 113 | <!-- Date parsing: Assessment date --> |
93 | 114 | <record id="mapping_vuln_assessment_date" model="spp.event.type.mapping"> |
94 | | - <field name="event_type_id" ref="event_type_vulnerability_assessment"/> |
| 115 | + <field name="event_type_id" ref="event_type_vulnerability_assessment" /> |
95 | 116 | <field name="sequence">20</field> |
96 | 117 | <field name="external_field">survey_date</field> |
97 | 118 | <field name="internal_field">event_date</field> |
|
102 | 123 | Formula: (income_score * 0.3) + (housing_score * 0.25) + (health_score * 0.25) + (education_score * 0.2) |
103 | 124 | Demonstrates: arithmetic operations, weighted averages --> |
104 | 125 | <record id="mapping_vuln_score_calculated" model="spp.event.type.mapping"> |
105 | | - <field name="event_type_id" ref="event_type_vulnerability_assessment"/> |
| 126 | + <field name="event_type_id" ref="event_type_vulnerability_assessment" /> |
106 | 127 | <field name="sequence">30</field> |
107 | | - <field name="external_field">income_score,housing_score,health_score,education_score</field> |
| 128 | + <field |
| 129 | + name="external_field" |
| 130 | + >income_score,housing_score,health_score,education_score</field> |
108 | 131 | <field name="internal_field">vulnerability_score</field> |
109 | 132 | <field name="transform">expression</field> |
110 | | - <field name="transform_expression">(int(income_score) * 0.3) + (int(housing_score) * 0.25) + (int(health_score) * 0.25) + (int(education_score) * 0.2)</field> |
| 133 | + <field |
| 134 | + name="transform_expression" |
| 135 | + >(int(income_score) * 0.3) + (int(housing_score) * 0.25) + (int(health_score) * 0.25) + (int(education_score) * 0.2)</field> |
111 | 136 | </record> |
112 | 137 |
|
113 | 138 | <!-- CEL Expression: Determine vulnerability category based on score |
114 | 139 | Demonstrates: conditional expressions (ternary), threshold comparisons --> |
115 | 140 | <record id="mapping_vuln_category" model="spp.event.type.mapping"> |
116 | | - <field name="event_type_id" ref="event_type_vulnerability_assessment"/> |
| 141 | + <field name="event_type_id" ref="event_type_vulnerability_assessment" /> |
117 | 142 | <field name="sequence">40</field> |
118 | 143 | <field name="external_field">vulnerability_score</field> |
119 | 144 | <field name="internal_field">vulnerability_category</field> |
120 | 145 | <field name="transform">expression</field> |
121 | | - <field name="transform_expression">int(vulnerability_score) >= 75 ? 'critical' : (int(vulnerability_score) >= 50 ? 'high' : (int(vulnerability_score) >= 25 ? 'medium' : 'low'))</field> |
| 146 | + <field |
| 147 | + name="transform_expression" |
| 148 | + >int(vulnerability_score) >= 75 ? 'critical' : (int(vulnerability_score) >= 50 ? 'high' : (int(vulnerability_score) >= 25 ? 'medium' : 'low'))</field> |
122 | 149 | </record> |
123 | 150 |
|
124 | 151 | <!-- CEL Expression: Check program eligibility based on multiple criteria |
125 | 152 | Demonstrates: boolean logic, compound conditions --> |
126 | 153 | <record id="mapping_vuln_eligibility" model="spp.event.type.mapping"> |
127 | | - <field name="event_type_id" ref="event_type_vulnerability_assessment"/> |
| 154 | + <field name="event_type_id" ref="event_type_vulnerability_assessment" /> |
128 | 155 | <field name="sequence">50</field> |
129 | | - <field name="external_field">vulnerability_score,household_size,has_children</field> |
| 156 | + <field |
| 157 | + name="external_field" |
| 158 | + >vulnerability_score,household_size,has_children</field> |
130 | 159 | <field name="internal_field">is_eligible</field> |
131 | 160 | <field name="transform">expression</field> |
132 | | - <field name="transform_expression">(int(vulnerability_score) >= 50) || (int(household_size) >= 5 && has_children == 'yes')</field> |
| 161 | + <field |
| 162 | + name="transform_expression" |
| 163 | + >(int(vulnerability_score) >= 50) || (int(household_size) >= 5 && has_children == 'yes')</field> |
133 | 164 | </record> |
134 | 165 |
|
135 | 166 | <!-- Direct mapping: Assessor notes --> |
136 | 167 | <record id="mapping_vuln_notes" model="spp.event.type.mapping"> |
137 | | - <field name="event_type_id" ref="event_type_vulnerability_assessment"/> |
| 168 | + <field name="event_type_id" ref="event_type_vulnerability_assessment" /> |
138 | 169 | <field name="sequence">60</field> |
139 | 170 | <field name="external_field">assessor_notes</field> |
140 | 171 | <field name="internal_field">notes</field> |
|
149 | 180 |
|
150 | 181 | <!-- Direct mapping: Training topic --> |
151 | 182 | <record id="mapping_training_topic" model="spp.event.type.mapping"> |
152 | | - <field name="event_type_id" ref="event_type_training"/> |
| 183 | + <field name="event_type_id" ref="event_type_training" /> |
153 | 184 | <field name="sequence">10</field> |
154 | 185 | <field name="external_field">training_topic</field> |
155 | 186 | <field name="internal_field">topic</field> |
|
159 | 190 | <!-- CEL Expression: Calculate training completion score |
160 | 191 | Demonstrates: attendance weighting, score normalization --> |
161 | 192 | <record id="mapping_training_score" model="spp.event.type.mapping"> |
162 | | - <field name="event_type_id" ref="event_type_training"/> |
| 193 | + <field name="event_type_id" ref="event_type_training" /> |
163 | 194 | <field name="sequence">20</field> |
164 | | - <field name="external_field">pre_test_score,post_test_score,attendance_days,total_days</field> |
| 195 | + <field |
| 196 | + name="external_field" |
| 197 | + >pre_test_score,post_test_score,attendance_days,total_days</field> |
165 | 198 | <field name="internal_field">completion_score</field> |
166 | 199 | <field name="transform">expression</field> |
167 | | - <field name="transform_expression">((int(post_test_score) - int(pre_test_score)) * 0.6) + ((int(attendance_days) / int(total_days)) * 40.0)</field> |
| 200 | + <field |
| 201 | + name="transform_expression" |
| 202 | + >((int(post_test_score) - int(pre_test_score)) * 0.6) + ((int(attendance_days) / int(total_days)) * 40.0)</field> |
168 | 203 | </record> |
169 | 204 |
|
170 | 205 | <!-- CEL Expression: Determine if participant passed training |
171 | 206 | Demonstrates: threshold check with multiple conditions --> |
172 | 207 | <record id="mapping_training_passed" model="spp.event.type.mapping"> |
173 | | - <field name="event_type_id" ref="event_type_training"/> |
| 208 | + <field name="event_type_id" ref="event_type_training" /> |
174 | 209 | <field name="sequence">30</field> |
175 | 210 | <field name="external_field">post_test_score,attendance_days,total_days</field> |
176 | 211 | <field name="internal_field">is_passed</field> |
177 | 212 | <field name="transform">expression</field> |
178 | | - <field name="transform_expression">int(post_test_score) >= 60 && (int(attendance_days) / int(total_days)) >= 0.8</field> |
| 213 | + <field |
| 214 | + name="transform_expression" |
| 215 | + >int(post_test_score) >= 60 && (int(attendance_days) / int(total_days)) >= 0.8</field> |
179 | 216 | </record> |
180 | 217 |
|
181 | 218 | <!-- |
|
187 | 224 | <!-- CEL Expression: Calculate visit quality score |
188 | 225 | Based on: completeness of data, farm conditions, recommendations made --> |
189 | 226 | <record id="mapping_extension_quality" model="spp.event.type.mapping"> |
190 | | - <field name="event_type_id" ref="event_type_extension_visit"/> |
| 227 | + <field name="event_type_id" ref="event_type_extension_visit" /> |
191 | 228 | <field name="sequence">10</field> |
192 | | - <field name="external_field">data_completeness,farm_condition_score,recommendations_count</field> |
| 229 | + <field |
| 230 | + name="external_field" |
| 231 | + >data_completeness,farm_condition_score,recommendations_count</field> |
193 | 232 | <field name="internal_field">visit_quality_score</field> |
194 | 233 | <field name="transform">expression</field> |
195 | | - <field name="transform_expression">(int(data_completeness) * 0.4) + (int(farm_condition_score) * 0.4) + (int(recommendations_count) * 2.0)</field> |
| 234 | + <field |
| 235 | + name="transform_expression" |
| 236 | + >(int(data_completeness) * 0.4) + (int(farm_condition_score) * 0.4) + (int(recommendations_count) * 2.0)</field> |
196 | 237 | </record> |
197 | 238 |
|
198 | 239 | <!-- CEL Expression: Determine if follow-up visit needed |
199 | 240 | Demonstrates: complex boolean logic for decision making --> |
200 | 241 | <record id="mapping_extension_followup" model="spp.event.type.mapping"> |
201 | | - <field name="event_type_id" ref="event_type_extension_visit"/> |
| 242 | + <field name="event_type_id" ref="event_type_extension_visit" /> |
202 | 243 | <field name="sequence">20</field> |
203 | | - <field name="external_field">farm_condition_score,issues_identified,recommendations_count</field> |
| 244 | + <field |
| 245 | + name="external_field" |
| 246 | + >farm_condition_score,issues_identified,recommendations_count</field> |
204 | 247 | <field name="internal_field">needs_followup</field> |
205 | 248 | <field name="transform">expression</field> |
206 | | - <field name="transform_expression">int(farm_condition_score) < 50 || int(issues_identified) > 3 || int(recommendations_count) > 5</field> |
| 249 | + <field |
| 250 | + name="transform_expression" |
| 251 | + >int(farm_condition_score) < 50 || int(issues_identified) > 3 || int(recommendations_count) > 5</field> |
207 | 252 | </record> |
208 | 253 |
|
209 | 254 | <!-- |
|
215 | 260 | <!-- CEL Expression: Calculate verification confidence score |
216 | 261 | Based on: document verification, interview score, observation score --> |
217 | 262 | <record id="mapping_verification_confidence" model="spp.event.type.mapping"> |
218 | | - <field name="event_type_id" ref="event_type_verification"/> |
| 263 | + <field name="event_type_id" ref="event_type_verification" /> |
219 | 264 | <field name="sequence">10</field> |
220 | | - <field name="external_field">document_score,interview_score,observation_score</field> |
| 265 | + <field |
| 266 | + name="external_field" |
| 267 | + >document_score,interview_score,observation_score</field> |
221 | 268 | <field name="internal_field">confidence_score</field> |
222 | 269 | <field name="transform">expression</field> |
223 | | - <field name="transform_expression">(int(document_score) * 0.4) + (int(interview_score) * 0.35) + (int(observation_score) * 0.25)</field> |
| 270 | + <field |
| 271 | + name="transform_expression" |
| 272 | + >(int(document_score) * 0.4) + (int(interview_score) * 0.35) + (int(observation_score) * 0.25)</field> |
224 | 273 | </record> |
225 | 274 |
|
226 | 275 | <!-- CEL Expression: Determine verification status |
227 | 276 | Demonstrates: multi-level conditional --> |
228 | 277 | <record id="mapping_verification_status" model="spp.event.type.mapping"> |
229 | | - <field name="event_type_id" ref="event_type_verification"/> |
| 278 | + <field name="event_type_id" ref="event_type_verification" /> |
230 | 279 | <field name="sequence">20</field> |
231 | 280 | <field name="external_field">confidence_score,discrepancies_found</field> |
232 | 281 | <field name="internal_field">verification_status</field> |
233 | 282 | <field name="transform">expression</field> |
234 | | - <field name="transform_expression">int(discrepancies_found) > 2 ? 'rejected' : (int(confidence_score) >= 80 ? 'verified' : 'pending_review')</field> |
| 283 | + <field |
| 284 | + name="transform_expression" |
| 285 | + >int(discrepancies_found) > 2 ? 'rejected' : (int(confidence_score) >= 80 ? 'verified' : 'pending_review')</field> |
235 | 286 | </record> |
236 | | - |
237 | 287 | </odoo> |
0 commit comments