ncs_mdes_warehouse 0.6.2 → 0.7.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 (416) hide show
  1. data/CHANGELOG.md +12 -0
  2. data/generated_models/ncs_navigator/warehouse/models/three_point_zero.rb +817 -0
  3. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/address.rb +101 -0
  4. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit.rb +365 -0
  5. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_2.rb +359 -0
  6. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_3.rb +368 -0
  7. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_baby_name.rb +47 -0
  8. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_baby_name_2.rb +50 -0
  9. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_baby_name_3.rb +50 -0
  10. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_decorate_room.rb +29 -0
  11. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_decorate_room_2.rb +32 -0
  12. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_decorate_room_3.rb +32 -0
  13. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_diagnose_2_3.rb +35 -0
  14. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_ethnic_origin_3.rb +29 -0
  15. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_household_3.rb +50 -0
  16. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li.rb +374 -0
  17. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li_baby_name.rb +50 -0
  18. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li_decorate_room.rb +32 -0
  19. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_li_renovate_room.rb +32 -0
  20. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_race_new_3.rb +32 -0
  21. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_renovate_room.rb +29 -0
  22. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_renovate_room_2.rb +32 -0
  23. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/birth_visit_renovate_room_3.rb +32 -0
  24. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/contact.rb +77 -0
  25. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/drf_therm_verification.rb +50 -0
  26. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/dwelling_unit.rb +53 -0
  27. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother.rb +350 -0
  28. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_2.rb +350 -0
  29. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_cond.rb +29 -0
  30. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_detail.rb +50 -0
  31. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_detail_2.rb +50 -0
  32. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_habits.rb +164 -0
  33. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_habits_2.rb +173 -0
  34. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_lice.rb +29 -0
  35. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_lice_2.rb +29 -0
  36. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_mold.rb +32 -0
  37. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_mold_2.rb +32 -0
  38. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_otc.rb +47 -0
  39. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_otc_2.rb +47 -0
  40. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_pet_type.rb +32 -0
  41. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_pet_type_2.rb +32 -0
  42. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_prescr.rb +47 -0
  43. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_prescr_2.rb +47 -0
  44. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_renovate_room.rb +32 -0
  45. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_renovate_room_2.rb +32 -0
  46. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_room_mold.rb +32 -0
  47. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_room_mold_2.rb +32 -0
  48. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_saq.rb +260 -0
  49. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_suppl.rb +47 -0
  50. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/eighteen_mth_mother_suppl_2.rb +47 -0
  51. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/email.rb +74 -0
  52. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/env_equipment.rb +47 -0
  53. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/env_equipment_prob_log.rb +50 -0
  54. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/event.rb +68 -0
  55. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1.rb +374 -0
  56. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_2.rb +380 -0
  57. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_cancer.rb +29 -0
  58. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_cancer_2.rb +29 -0
  59. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_educ.rb +29 -0
  60. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_race.rb +29 -0
  61. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/father_pv1_race_2.rb +32 -0
  62. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration.rb +239 -0
  63. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration_age_elig.rb +38 -0
  64. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration_hidden_du.rb +50 -0
  65. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_enumeration_pregnant.rb +38 -0
  66. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_inventory.rb +203 -0
  67. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_inventory_age.rb +35 -0
  68. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_inventory_age_elig.rb +35 -0
  69. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/household_unit.rb +53 -0
  70. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/incident.rb +98 -0
  71. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/incident_media.rb +35 -0
  72. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/incident_unanticipated.rb +29 -0
  73. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/institution.rb +68 -0
  74. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/instrument.rb +74 -0
  75. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/internet_usage.rb +92 -0
  76. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/internet_usage_participate.rb +29 -0
  77. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_contact.rb +41 -0
  78. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_household_dwelling.rb +38 -0
  79. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_household.rb +38 -0
  80. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_institute.rb +38 -0
  81. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_participant.rb +38 -0
  82. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/link_person_provider.rb +47 -0
  83. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/listing_unit.rb +38 -0
  84. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/low_high_script.rb +119 -0
  85. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/multi_mode.rb +62 -0
  86. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/nine_mth_mother.rb +65 -0
  87. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/nine_mth_mother_detail.rb +143 -0
  88. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_provider.rb +80 -0
  89. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_provider_refusal.rb +32 -0
  90. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_respondent.rb +152 -0
  91. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_respondent_influ.rb +32 -0
  92. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt.rb +128 -0
  93. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_dutype.rb +32 -0
  94. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_noaccess.rb +32 -0
  95. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_refusal.rb +32 -0
  96. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/non_interview_rpt_vacant.rb +32 -0
  97. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach.rb +98 -0
  98. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_eval.rb +32 -0
  99. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_lang2.rb +29 -0
  100. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_race.rb +32 -0
  101. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_staff.rb +29 -0
  102. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/outreach_target.rb +32 -0
  103. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant.rb +62 -0
  104. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_auth.rb +44 -0
  105. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_consent.rb +95 -0
  106. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_consent_reconsideration.rb +47 -0
  107. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_consent_sample.rb +35 -0
  108. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_rvis.rb +74 -0
  109. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_verif.rb +215 -0
  110. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_verif_child.rb +41 -0
  111. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_verif_diff.rb +29 -0
  112. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/participant_vis_consent.rb +53 -0
  113. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment.rb +275 -0
  114. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_2.rb +275 -0
  115. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_info_source.rb +32 -0
  116. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_info_source_2.rb +29 -0
  117. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_source.rb +32 -0
  118. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_source_2.rb +29 -0
  119. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_svc.rb +32 -0
  120. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_recruitment_prov_svc_2.rb +32 -0
  121. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pb_samp_frame.rb +299 -0
  122. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener.rb +293 -0
  123. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_day1.rb +29 -0
  124. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_day2.rb +29 -0
  125. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_employ.rb +32 -0
  126. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_ethnic_orig.rb +29 -0
  127. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_pr_office.rb +62 -0
  128. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_elig_screener_race.rb +32 -0
  129. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pbs_list.rb +89 -0
  130. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person.rb +119 -0
  131. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person_ethnic_origin.rb +29 -0
  132. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person_race.rb +32 -0
  133. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/person_race_new.rb +32 -0
  134. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_cati.rb +98 -0
  135. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_details.rb +41 -0
  136. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_saq.rb +92 -0
  137. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ppg_status_history.rb +47 -0
  138. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg.rb +422 -0
  139. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_cool.rb +32 -0
  140. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_heat2.rb +32 -0
  141. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_pdecorate_room.rb +32 -0
  142. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_prenovate_room.rb +32 -0
  143. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_room_mold.rb +32 -0
  144. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_saq.rb +116 -0
  145. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_preg_sp_race.rb +32 -0
  146. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/pre_screening_performed.rb +38 -0
  147. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/prec_therm_cert.rb +41 -0
  148. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh.rb +350 -0
  149. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_2.rb +362 -0
  150. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_know_ncs.rb +29 -0
  151. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_know_ncs_2.rb +32 -0
  152. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_race.rb +29 -0
  153. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_eh_race_2.rb +32 -0
  154. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi.rb +371 -0
  155. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_2.rb +380 -0
  156. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_know_ncs.rb +29 -0
  157. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_know_ncs_2.rb +32 -0
  158. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_race.rb +29 -0
  159. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_hi_race_2.rb +32 -0
  160. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb.rb +371 -0
  161. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_2.rb +380 -0
  162. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_know_ncs.rb +29 -0
  163. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_know_ncs_2.rb +32 -0
  164. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_race.rb +29 -0
  165. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_screen_pb_race_2.rb +32 -0
  166. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1.rb +521 -0
  167. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_2.rb +497 -0
  168. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_3.rb +422 -0
  169. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_commute.rb +29 -0
  170. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_commute_2.rb +32 -0
  171. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_commute_3.rb +32 -0
  172. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_cool.rb +29 -0
  173. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_cool_2.rb +32 -0
  174. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_cool_3.rb +32 -0
  175. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_diagnose_2.rb +29 -0
  176. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_diagnose_2_2.rb +29 -0
  177. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_ethnic_origin_3.rb +29 -0
  178. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_heat2.rb +29 -0
  179. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_heat2_2.rb +32 -0
  180. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_heat2_3.rb +32 -0
  181. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_local_trav.rb +29 -0
  182. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_local_trav_2.rb +32 -0
  183. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_local_trav_3.rb +32 -0
  184. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_nonenglish2_2.rb +32 -0
  185. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pdecorate_room.rb +29 -0
  186. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pdecorate_room_2.rb +32 -0
  187. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pdecorate_room_3.rb +32 -0
  188. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pet_type.rb +29 -0
  189. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pet_type_2.rb +32 -0
  190. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_pet_type_3.rb +32 -0
  191. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate2_room.rb +29 -0
  192. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate_room.rb +29 -0
  193. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate_room_2.rb +32 -0
  194. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_prenovate_room_3.rb +32 -0
  195. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_race_new_3.rb +32 -0
  196. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_room_mold.rb +29 -0
  197. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_room_mold_2.rb +32 -0
  198. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_room_mold_3.rb +32 -0
  199. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq.rb +188 -0
  200. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq_2.rb +236 -0
  201. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq_3.rb +236 -0
  202. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_saq_4.rb +227 -0
  203. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_ethnic_origin_3.rb +29 -0
  204. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_race.rb +29 -0
  205. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_race_2.rb +32 -0
  206. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_1_sp_race_new_3.rb +32 -0
  207. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2.rb +452 -0
  208. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_2.rb +440 -0
  209. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_3.rb +359 -0
  210. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_cool.rb +29 -0
  211. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_cool_2.rb +32 -0
  212. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_cool_3.rb +32 -0
  213. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_diagnose_2.rb +29 -0
  214. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_diagnose_2_2.rb +32 -0
  215. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_diagnose_2_3.rb +32 -0
  216. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_heat2.rb +29 -0
  217. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_heat2_2.rb +32 -0
  218. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_heat2_3.rb +32 -0
  219. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_pdecorate2_room.rb +29 -0
  220. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_pdecorate2_room_2.rb +32 -0
  221. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_pdecorate2_room_3.rb +32 -0
  222. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_prenovate_room.rb +29 -0
  223. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_prenovate_room_2.rb +32 -0
  224. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_prenovate_room_3.rb +32 -0
  225. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_room_mold.rb +29 -0
  226. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_room_mold_2.rb +32 -0
  227. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_room_mold_3.rb +32 -0
  228. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq.rb +116 -0
  229. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq_2.rb +116 -0
  230. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq_3.rb +116 -0
  231. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_2_saq_4.rb +110 -0
  232. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li.rb +350 -0
  233. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li_2.rb +350 -0
  234. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li_cool.rb +29 -0
  235. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/preg_visit_li_cool_2.rb +32 -0
  236. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider.rb +77 -0
  237. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider_logistics.rb +32 -0
  238. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider_role.rb +32 -0
  239. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/provider_role_pbs.rb +32 -0
  240. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/psu.rb +29 -0
  241. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ref_freezer_verification.rb +62 -0
  242. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_dist.rb +74 -0
  243. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_dist_samp.rb +50 -0
  244. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_receipt_confirm.rb +53 -0
  245. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_receipt_store.rb +65 -0
  246. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sample_shipping.rb +53 -0
  247. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/sampled_persons_ineligibility.rb +44 -0
  248. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_mother.rb +281 -0
  249. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_mother_detail.rb +266 -0
  250. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_mother_pet.rb +32 -0
  251. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq.rb +218 -0
  252. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_2.rb +221 -0
  253. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_3.rb +221 -0
  254. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_formula_type.rb +29 -0
  255. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_formula_type_2.rb +29 -0
  256. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_formula_type_3.rb +29 -0
  257. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_supp.rb +32 -0
  258. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_supp_2.rb +32 -0
  259. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_supp_3.rb +32 -0
  260. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_water.rb +29 -0
  261. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_water_2.rb +29 -0
  262. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/six_mth_saq_water_3.rb +29 -0
  263. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood.rb +194 -0
  264. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_2.rb +197 -0
  265. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_draw.rb +29 -0
  266. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_draw_2.rb +29 -0
  267. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_hemolyze.rb +29 -0
  268. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_hemolyze_2.rb +29 -0
  269. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube.rb +38 -0
  270. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube_2.rb +38 -0
  271. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube_comments.rb +29 -0
  272. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_blood_tube_comments_2.rb +29 -0
  273. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood.rb +110 -0
  274. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_2.rb +110 -0
  275. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_3.rb +122 -0
  276. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_specimen.rb +29 -0
  277. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_specimen_2.rb +35 -0
  278. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_cord_blood_specimen_3.rb +35 -0
  279. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_equipment.rb +38 -0
  280. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_pickup.rb +47 -0
  281. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_receipt.rb +80 -0
  282. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_shipping.rb +56 -0
  283. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_spsc_info.rb +26 -0
  284. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_storage.rb +62 -0
  285. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/spec_urine.rb +110 -0
  286. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/srsc_info.rb +26 -0
  287. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/ssu.rb +29 -0
  288. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff.rb +65 -0
  289. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_cert_training.rb +47 -0
  290. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_exp_data_cllctn_tasks.rb +44 -0
  291. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_exp_mngmnt_tasks.rb +38 -0
  292. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_language.rb +32 -0
  293. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_validation.rb +38 -0
  294. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/staff_weekly_expense.rb +44 -0
  295. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/study_center.rb +26 -0
  296. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/subsample_doc.rb +29 -0
  297. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf.rb +152 -0
  298. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_2.rb +155 -0
  299. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_blank_collected.rb +29 -0
  300. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_blank_collected_2.rb +29 -0
  301. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_collected.rb +29 -0
  302. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_collected_2.rb +29 -0
  303. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_filled.rb +29 -0
  304. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_dup_filled_2.rb +29 -0
  305. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_n_collected.rb +29 -0
  306. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_n_collected_2.rb +29 -0
  307. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled.rb +29 -0
  308. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled2.rb +29 -0
  309. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled2_2.rb +29 -0
  310. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_reason_filled_2.rb +29 -0
  311. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_sample.rb +32 -0
  312. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_sample_2.rb +32 -0
  313. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_saq.rb +98 -0
  314. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_saq_eat.rb +29 -0
  315. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_saq_prob.rb +32 -0
  316. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_subsamples.rb +29 -0
  317. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twf_subsamples_2.rb +29 -0
  318. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq.rb +143 -0
  319. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_2.rb +146 -0
  320. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_blank_collected.rb +29 -0
  321. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_blank_collected_2.rb +29 -0
  322. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_collected.rb +29 -0
  323. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_collected_2.rb +29 -0
  324. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_filled.rb +29 -0
  325. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_dup_filled_2.rb +29 -0
  326. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_n_collected.rb +29 -0
  327. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_n_collected_2.rb +29 -0
  328. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled.rb +29 -0
  329. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled2.rb +29 -0
  330. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled2_2.rb +29 -0
  331. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_reason_filled_2.rb +29 -0
  332. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_sample.rb +32 -0
  333. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_sample_2.rb +32 -0
  334. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_saq.rb +98 -0
  335. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_saq_prob.rb +32 -0
  336. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_subsamples.rb +29 -0
  337. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tap_water_twq_subsamples_2.rb +29 -0
  338. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/telephone.rb +83 -0
  339. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother.rb +92 -0
  340. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_2.rb +92 -0
  341. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_detail.rb +59 -0
  342. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_detail_2.rb +59 -0
  343. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_habits.rb +185 -0
  344. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_child_habits_2.rb +185 -0
  345. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_race.rb +32 -0
  346. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/three_mth_mother_race_2.rb +32 -0
  347. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tracing_int.rb +395 -0
  348. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/trh_meter_calibration.rb +77 -0
  349. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/tsu.rb +29 -0
  350. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother.rb +302 -0
  351. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_2.rb +305 -0
  352. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_detail.rb +302 -0
  353. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_detail_2.rb +302 -0
  354. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_lice.rb +29 -0
  355. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_lice_2.rb +29 -0
  356. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_renovate_room.rb +32 -0
  357. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_renovate_room_2.rb +32 -0
  358. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_room_mold.rb +32 -0
  359. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_mother_room_mold_2.rb +32 -0
  360. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq.rb +293 -0
  361. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_2.rb +296 -0
  362. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_brand.rb +32 -0
  363. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_brand_2.rb +32 -0
  364. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_type.rb +29 -0
  365. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_formula_type_2.rb +29 -0
  366. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_supplement.rb +32 -0
  367. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_supplement_2.rb +32 -0
  368. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_water.rb +29 -0
  369. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twelve_mth_saq_water_2.rb +32 -0
  370. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother.rb +350 -0
  371. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_2.rb +353 -0
  372. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_cond.rb +29 -0
  373. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_detail.rb +50 -0
  374. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_detail_2.rb +50 -0
  375. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_habits.rb +194 -0
  376. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_habits_2.rb +200 -0
  377. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_mold.rb +32 -0
  378. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_mold_2.rb +32 -0
  379. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_otc.rb +47 -0
  380. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_otc_2.rb +47 -0
  381. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_prescr.rb +47 -0
  382. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_prescr_2.rb +47 -0
  383. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_suppl.rb +47 -0
  384. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_mother_suppl_2.rb +47 -0
  385. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_pet_type.rb +32 -0
  386. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_pet_type_2.rb +32 -0
  387. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_renovate_room.rb +32 -0
  388. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_renovate_room_2.rb +32 -0
  389. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_room_mold.rb +32 -0
  390. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_room_mold_2.rb +32 -0
  391. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/twenty_four_mth_saq.rb +245 -0
  392. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag.rb +131 -0
  393. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_2.rb +137 -0
  394. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_outside.rb +32 -0
  395. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_outside_2.rb +32 -0
  396. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_saq.rb +89 -0
  397. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_saq_outside.rb +32 -0
  398. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/vacuum_bag_saq_prob.rb +32 -0
  399. data/generated_models/ncs_navigator/warehouse/models/three_point_zero/validation_ins.rb +233 -0
  400. data/lib/ncs_navigator/warehouse/configuration.rb +21 -0
  401. data/lib/ncs_navigator/warehouse/transformers.rb +2 -0
  402. data/lib/ncs_navigator/warehouse/transformers/enum_transformer.rb +130 -29
  403. data/lib/ncs_navigator/warehouse/transformers/foreign_key_index.rb +126 -0
  404. data/lib/ncs_navigator/warehouse/transformers/foreign_key_index/database_key_provider.rb +16 -0
  405. data/lib/ncs_navigator/warehouse/transformers/foreign_key_index/static_key_provider.rb +20 -0
  406. data/lib/ncs_navigator/warehouse/transformers/sql/sql_statements.treetop +27 -0
  407. data/lib/ncs_navigator/warehouse/transformers/sql_transformer.rb +107 -0
  408. data/lib/ncs_navigator/warehouse/version.rb +1 -1
  409. data/ncs_mdes_warehouse.gemspec +3 -1
  410. data/spec/ncs_navigator/warehouse/configuration_spec.rb +13 -0
  411. data/spec/ncs_navigator/warehouse/transformers/enum_transformer_spec.rb +160 -9
  412. data/spec/ncs_navigator/warehouse/transformers/foreign_key_index/database_key_provider_spec.rb +18 -0
  413. data/spec/ncs_navigator/warehouse/transformers/foreign_key_index_spec.rb +115 -0
  414. data/spec/ncs_navigator/warehouse/transformers/sql_transformer_spec.rb +157 -0
  415. data/spec/spec_helper.rb +1 -0
  416. metadata +431 -12
@@ -82,6 +82,27 @@ module NcsNavigator::Warehouse
82
82
  end
83
83
  end
84
84
 
85
+ ##
86
+ # The foreign key index used during an ETL run. The default value
87
+ # is correct for virtually any case.
88
+ #
89
+ # @return [Object]
90
+ def foreign_key_index
91
+ @foreign_key_index ||= Transformers::ForeignKeyIndex.new
92
+ end
93
+
94
+ ##
95
+ # Specify a different foreign key index implementation to
96
+ # use. This will only rarely be necessary or useful. The default
97
+ # value is correct for virtually any case.
98
+ #
99
+ # @return [void]
100
+ # @param [#record_and_verify,#report_errors] index the replacement
101
+ # foreign key index implementation.
102
+ def foreign_key_index=(index)
103
+ @foreign_key_index = index
104
+ end
105
+
85
106
  ####
86
107
  #### Hooks
87
108
  ####
@@ -17,10 +17,12 @@ module NcsNavigator::Warehouse
17
17
  autoload :EnumTransformer, 'ncs_navigator/warehouse/transformers/enum_transformer'
18
18
  autoload :EventStartFromContactTransformer, 'ncs_navigator/warehouse/transformers/event_start_from_contact_transformer'
19
19
  autoload :Filters, 'ncs_navigator/warehouse/transformers/filters'
20
+ autoload :ForeignKeyIndex, 'ncs_navigator/warehouse/transformers/foreign_key_index'
20
21
  autoload :NoBlankForeignKeysFilter, 'ncs_navigator/warehouse/transformers/no_blank_foreign_keys_filter'
21
22
  autoload :NoSsuOutreachAllSsusFilter, 'ncs_navigator/warehouse/transformers/no_ssu_outreach_all_ssus_filter'
22
23
  autoload :NoSsuOutreachPlaceholderFilter, 'ncs_navigator/warehouse/transformers/no_ssu_outreach_placeholder_filter'
23
24
  autoload :SamplingUnits, 'ncs_navigator/warehouse/transformers/sampling_units'
25
+ autoload :SqlTransformer, 'ncs_navigator/warehouse/transformers/sql_transformer'
24
26
  autoload :SubprocessTransformer, 'ncs_navigator/warehouse/transformers/subprocess_transformer'
25
27
  autoload :VdrXml, 'ncs_navigator/warehouse/transformers/vdr_xml'
26
28
  end
@@ -35,7 +35,12 @@ module NcsNavigator::Warehouse::Transformers
35
35
  # @return [Filters] the filters in use on this transformer.
36
36
  attr_reader :filters
37
37
 
38
- def_delegators :@configuration, :log, :shell
38
+ ##
39
+ # @return [Symbol] the name of the duplicates mode in use on this
40
+ # transformer.
41
+ attr_reader :duplicates
42
+
43
+ def_delegators :@configuration, :log, :shell, :foreign_key_index
39
44
 
40
45
  ##
41
46
  # @param [Configuration] configuration
@@ -43,6 +48,11 @@ module NcsNavigator::Warehouse::Transformers
43
48
  # @param [Hash<Symbol, Object>] options
44
49
  # @option options [Array<#call>,#call] :filters a list of
45
50
  # filters to use for this transformer
51
+ # @option options [:error,:ignore,:replace] the desired behavior when this
52
+ # transformer encounters a record with the same PK as one already seen.
53
+ # `:error` means blindly save (and let the database error out).
54
+ # `:ignore` means do not attempt to save the duplicate.
55
+ # `:replace` means substitute the duplicate for the existing record.
46
56
  #
47
57
  # @see Filters
48
58
  def initialize(configuration, enum, options={})
@@ -50,6 +60,8 @@ module NcsNavigator::Warehouse::Transformers
50
60
  @enum = enum
51
61
  filter_list = options.delete(:filters)
52
62
  @filters = Filters.new(filter_list ? [*filter_list].compact : [])
63
+ @duplicates = options.delete(:duplicates) || :error
64
+ @duplicates_strategy = select_duplicates_strategy
53
65
  end
54
66
 
55
67
  ##
@@ -90,45 +102,62 @@ module NcsNavigator::Warehouse::Transformers
90
102
  receive_transform_error(record, status)
91
103
  else
92
104
  filters.call([record]).each do |filtered_record|
93
- save_model_instance(filtered_record, status)
105
+ saved_record = save_model_instance(filtered_record, status)
106
+ foreign_key_index.record_and_verify(saved_record) if saved_record
94
107
  end
95
108
  end
96
109
  end
110
+ foreign_key_index.report_errors(status)
97
111
  end
98
112
 
99
- def save_model_instance(record, status)
100
- if !has_valid_psu?(record)
101
- msg = "Invalid PSU ID. The list of valid PSU IDs for this Study Center is #{@configuration.navigator.psus.collect(&:id).inspect}."
102
- log.error "#{record_ident record}: #{msg}"
103
- status.unsuccessful_record(record, msg,
104
- :attribute_name => 'psu_id',
105
- :attribute_value => record.psu_id.inspect)
106
- elsif record.valid?
107
- log.debug("Saving valid record #{record_ident record}.")
108
- begin
109
- unless record.save
110
- msg = "Could not save valid record #{record.inspect}. #{record_messages(record).join(' ')}"
113
+ def save_model_instance(incoming_record, status)
114
+ record = process_duplicate_if_appropriate(incoming_record)
115
+ unless record
116
+ log.info("Ignoring duplicate record #{record_ident incoming_record}.")
117
+ status.record_count += 1
118
+ return
119
+ end
120
+
121
+ saved_record =
122
+ if !has_valid_psu?(record)
123
+ msg = "Invalid PSU ID. The list of valid PSU IDs for this Study Center is #{@configuration.navigator.psus.collect(&:id).inspect}."
124
+ log.error "#{record_ident record}: #{msg}"
125
+ status.unsuccessful_record(record, msg,
126
+ :attribute_name => 'psu_id',
127
+ :attribute_value => record.psu_id.inspect)
128
+ nil
129
+ elsif record.valid?
130
+ log.debug("Saving valid record #{record_ident record}.")
131
+ begin
132
+ if record.save
133
+ record
134
+ else
135
+ msg = "Could not save valid record #{record.inspect}. #{record_messages(record).join(' ')}"
136
+ log.error msg
137
+ status.unsuccessful_record(record, msg)
138
+ nil
139
+ end
140
+ rescue => e
141
+ msg = "Error on save. #{e.class}: #{e}."
111
142
  log.error msg
112
143
  status.unsuccessful_record(record, msg)
144
+ nil
113
145
  end
114
- rescue => e
115
- msg = "Error on save. #{e.class}: #{e}."
116
- log.error msg
117
- status.unsuccessful_record(record, msg)
118
- end
119
- else
120
- log.error "Invalid record. #{record_messages(record).join(' ')}"
121
- record.errors.keys.each do |prop|
122
- record.errors[prop].each do |e|
123
- status.unsuccessful_record(
124
- record, "Invalid: #{e}.",
125
- :attribute_name => prop,
126
- :attribute_value => record.send(prop).inspect
127
- )
146
+ else
147
+ log.error "Invalid record. #{record_messages(record).join(' ')}"
148
+ record.errors.keys.each do |prop|
149
+ record.errors[prop].each do |e|
150
+ status.unsuccessful_record(
151
+ record, "Invalid: #{e}.",
152
+ :attribute_name => prop,
153
+ :attribute_value => record.send(prop).inspect
154
+ )
155
+ end
128
156
  end
157
+ nil
129
158
  end
130
- end
131
159
  status.record_count += 1
160
+ saved_record
132
161
  end
133
162
 
134
163
  def receive_transform_error(error, status)
@@ -163,5 +192,77 @@ module NcsNavigator::Warehouse::Transformers
163
192
  true
164
193
  end
165
194
  end
195
+
196
+ def process_duplicate_if_appropriate(record)
197
+ if @duplicates_strategy.duplicate?(record)
198
+ @duplicates_strategy.to_save(record)
199
+ else
200
+ record
201
+ end
202
+ end
203
+
204
+ def select_duplicates_strategy
205
+ case duplicates
206
+ when :error
207
+ ErrorDuplicatesStrategy.new
208
+ when :ignore
209
+ IgnoreDuplicatesStrategy.new(@configuration)
210
+ when :replace
211
+ ReplaceDuplicatesStrategy.new(@configuration)
212
+ else
213
+ fail "Unknown duplicates mode #{duplicates.inspect}."
214
+ end
215
+ end
216
+
217
+ ##
218
+ # @private
219
+ class ErrorDuplicatesStrategy
220
+ def duplicate?(record)
221
+ false
222
+ end
223
+
224
+ # to_save will never be called for this strategy
225
+ end
226
+
227
+ ##
228
+ # @private
229
+ class AbstractDoSomethingWithDuplicatesStrategy
230
+ extend Forwardable
231
+
232
+ def_delegators :@configuration, :log
233
+
234
+ def initialize(configuration)
235
+ @configuration = configuration
236
+ @fk_index = configuration.foreign_key_index
237
+ end
238
+
239
+ def duplicate?(record)
240
+ @fk_index.seen?(record.class, record.key.first)
241
+ end
242
+ end
243
+
244
+ ##
245
+ # @private
246
+ class IgnoreDuplicatesStrategy < AbstractDoSomethingWithDuplicatesStrategy
247
+ def to_save(duplicate_record)
248
+ nil
249
+ end
250
+ end
251
+
252
+ ##
253
+ # @private
254
+ class ReplaceDuplicatesStrategy < AbstractDoSomethingWithDuplicatesStrategy
255
+ def to_save(duplicate_record)
256
+ log.info "Updating duplicate record #{duplicate_record.class}##{duplicate_record.key.first}"
257
+
258
+ reloaded = duplicate_record.class.get(*duplicate_record.key)
259
+
260
+ duplicate_record.class.properties.each do |prop|
261
+ reloaded[prop.name] = duplicate_record[prop.name]
262
+ end
263
+
264
+ reloaded
265
+ end
266
+ end
166
267
  end
167
268
  end
@@ -0,0 +1,126 @@
1
+ require 'ncs_navigator/warehouse'
2
+ require 'set'
3
+
4
+ module NcsNavigator::Warehouse::Transformers
5
+ ##
6
+ # Provides for in-memory reporting of foreign key violations during
7
+ # ETL runs.
8
+ #
9
+ # When FK constraint violations are delegated to the database, only
10
+ # one can be reported per ETL execution. This class (or one like it)
11
+ # allows for all foreign key violations to be reported across an
12
+ # entire run.
13
+ #
14
+ # @see Configuration#foreign_key_index
15
+ class ForeignKeyIndex
16
+ autoload :DatabaseKeyProvider, 'ncs_navigator/warehouse/transformers/foreign_key_index/database_key_provider'
17
+ autoload :StaticKeyProvider, 'ncs_navigator/warehouse/transformers/foreign_key_index/static_key_provider'
18
+
19
+ ##
20
+ # The object that will be used to pre-initialize the known keys list for
21
+ # a particular model. It has a single method (`existing_keys`) which takes
22
+ # a single argument, the model class for which keys should be provided, and
23
+ # returns an array of the known keys for that model.
24
+ #
25
+ # `existing_keys` will be called at most once for each model class. It will
26
+ # be called the first time either a record of the model's type is
27
+ # encountered or the first time a foreign key of the model's type is
28
+ # encountered.
29
+ #
30
+ # @return [#existing_keys]
31
+ attr_reader :existing_key_provider
32
+
33
+ ##
34
+ # @param [Hash<Symbol, Object>] options
35
+ # @option options [#existing_keys] :existing_key_provider (an instance of DatabaseKeyProvider)
36
+ # See {#existing_key_provider} for more information.
37
+ def initialize(options={})
38
+ @existing_key_provider = if options.has_key?(:existing_key_provider)
39
+ options[:existing_key_provider] || StaticKeyProvider.new # empty if nil
40
+ else
41
+ DatabaseKeyProvider.new
42
+ end
43
+ @seen_keys = {}
44
+ end
45
+
46
+ ##
47
+ # Records the key for this record in the index and verifies its
48
+ # foreign keys. If any are not satisfied, they will be stored for
49
+ # later evaluation.
50
+ #
51
+ # @param [DataMapper::Resource] record the record whose key we
52
+ # want to record and whose foreign references we want to verify.
53
+ # @return [void]
54
+ def record_and_verify(record)
55
+ seen_keys(record.class) << record.key.first # no CPKs in MDES
56
+
57
+ record.class.relationships.each do |belongs_to|
58
+ verify_relationship(record, belongs_to)
59
+ end
60
+ end
61
+
62
+ ##
63
+ # Reviews any references that initially failed against the final
64
+ # set of keys. If any are still unresolveable, it records errors
65
+ # against the provided transform status.
66
+ #
67
+ # Each failed reference will be reported by this method only
68
+ # once. This is so that it is safe to share a single instance of
69
+ # this class across multiple transformers, reporting only the
70
+ # newly encountered errors for each transform in turn.
71
+ #
72
+ # @return [void]
73
+ # @param [TransformStatus] transform_status
74
+ def report_errors(transform_status)
75
+ interim_unsatisfied.each do |relationship_instance|
76
+ if !seen?(relationship_instance.foreign_model, relationship_instance.reference_value)
77
+ transform_status.transform_errors << relationship_instance.create_error
78
+ end
79
+ end
80
+ interim_unsatisfied.clear
81
+ end
82
+
83
+ ##
84
+ # @return [Boolean] has the index seen a record of the given type with the
85
+ # given ID.
86
+ def seen?(model_class, id)
87
+ seen_keys(model_class).include?(id)
88
+ end
89
+
90
+ private
91
+
92
+ def verify_relationship(record, belongs_to)
93
+ reference_name = belongs_to.child_key.first.name
94
+ reference_value = record.send(reference_name)
95
+ foreign_model = belongs_to.parent_model.to_s
96
+
97
+ if reference_value && !seen?(foreign_model, reference_value)
98
+ interim_unsatisfied << RelationshipInstance.new(
99
+ record.id, record.class.to_s, foreign_model, reference_name, reference_value
100
+ )
101
+ end
102
+ end
103
+
104
+ def seen_keys(model_class)
105
+ @seen_keys[model_class.to_s] ||= begin
106
+ existing_keys = existing_key_provider.existing_keys(model_class) || []
107
+ Set.new(existing_keys)
108
+ end
109
+ end
110
+
111
+ def interim_unsatisfied
112
+ @interim_unsatisfied ||= []
113
+ end
114
+
115
+ ##
116
+ # @private
117
+ class RelationshipInstance < Struct.new(:record_id, :model_class, :foreign_model, :reference_key, :reference_value)
118
+ def create_error
119
+ NcsNavigator::Warehouse::TransformError.new(
120
+ :record_id => record_id, :model_class => model_class,
121
+ :message => "Unsatisfied foreign key #{reference_key}=#{reference_value} referencing #{foreign_model}."
122
+ )
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,16 @@
1
+ require 'ncs_navigator/warehouse'
2
+
3
+ module NcsNavigator::Warehouse::Transformers
4
+ class ForeignKeyIndex
5
+ ##
6
+ # Provides existing key lists out of the configured DataMapper "working"
7
+ # repo.
8
+ class DatabaseKeyProvider
9
+ def existing_keys(model_class)
10
+ ::DataMapper.repository(:mdes_warehouse_working).adapter.select(
11
+ "SELECT #{model_class.key.first.name} FROM #{model_class.mdes_table_name}"
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require 'ncs_navigator/warehouse'
2
+
3
+ module NcsNavigator::Warehouse::Transformers
4
+ class ForeignKeyIndex
5
+ ##
6
+ # An existing key provider for {ForeignKeyIndex} that uses a statically
7
+ # configured hash of keys.
8
+ class StaticKeyProvider
9
+ attr_accessor :known_keys
10
+
11
+ def initialize(known_keys={})
12
+ @known_keys = known_keys
13
+ end
14
+
15
+ def existing_keys(model_class)
16
+ known_keys[model_class.to_s]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ module NcsNavigator::Warehouse::Transformers::Sql
2
+ grammar SqlStatements
3
+ rule script
4
+ stmts:(stmt:statement ';')* last_stmt:statement? {
5
+ def statements
6
+ (stmts + [last_stmt]).collect { |s| s.text_value.strip }.reject { |s| s.empty? }
7
+ end
8
+
9
+ def stmts
10
+ super.elements.map { |e| e.stmt }
11
+ end
12
+ }
13
+ end
14
+
15
+ rule statement
16
+ (sql_string / other_expression)+
17
+ end
18
+
19
+ rule other_expression
20
+ [^';]+
21
+ end
22
+
23
+ rule sql_string
24
+ "'" (!"'" .)* "'"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,107 @@
1
+ require 'ncs_navigator/warehouse'
2
+
3
+ require 'forwardable'
4
+ require 'treetop'
5
+
6
+ module NcsNavigator::Warehouse::Transformers
7
+ ##
8
+ # A transformer that executes raw SQL (most likely INSERTs or UPDATEs) on the
9
+ # warehouse working database during ETL. It captures and reports affected
10
+ # record counts and errors.
11
+ class SqlTransformer
12
+ class << self
13
+ ##
14
+ # Splits a string into separate SQL statements on semicolons. It attempts
15
+ # to avoid splitting on semicolons that are in string literals, though it
16
+ # only currently supports standard SQL string literals completely. It will
17
+ # not properly handle PostgreSQL `E''` string literals that contain
18
+ # backslash-escaped single quotes.
19
+ def extract_statements(s)
20
+ Treetop.load File.expand_path('../sql/sql_statements.treetop', __FILE__)
21
+
22
+ parser = Sql::SqlStatementsParser.new
23
+ if result = parser.parse(s)
24
+ result.statements
25
+ else
26
+ fail "Parse failed: #{parser.failure_reason}"
27
+ end
28
+ end
29
+ end
30
+
31
+ extend Forwardable
32
+
33
+ def_delegators :@configuration, :shell, :log
34
+ attr_reader :statements, :name
35
+
36
+ ##
37
+ # Creates a new SqlTransformer. You must provide at exactly one of the
38
+ # `:statements`, `:file`, or `:script` options. If you provide more than one
39
+ # the behavior of this transformer is undefined.
40
+ #
41
+ # @param [Configuration] configuration
42
+ # @param [Hash<Symbol, Object>] options
43
+ #
44
+ # @option options :statements [Array<String>] a list of SQL statements
45
+ # already separated into strings. These strings will be sent as-is to the
46
+ # database (no further processing).
47
+ # @option options :file [String] the name of a file from which to read
48
+ # semicolon-separated SQL statements. The file will be separated into
49
+ # statements using {.extract_statements}.
50
+ # @option options :script [String] a string containing semicolon-separated
51
+ # SQL statements. The string will be separated into statements using
52
+ # {.extract_statements}.
53
+ # @option options :name [String] the name to use when describing this
54
+ # transformer. A default will be generated if not provided.
55
+ # @option options :adapter [a datamapper adapter object] the adapter
56
+ # against which to `execute` the statements. The default is nearly always
57
+ # fine; this option is provided for testing.
58
+ def initialize(configuration, options={})
59
+ @configuration = configuration
60
+ @statements = select_statements(options)
61
+ @name = options.delete(:name) ||
62
+ "SQL Transformer with #{statements.size} statement#{statements.size == 1 ? '' : 's'}"
63
+ @adapter = options.delete(:adapter) || ::DataMapper.repository(:mdes_warehouse_working).adapter
64
+ end
65
+
66
+ ##
67
+ # Executes the configured SQL statments, one at time, stopping at the first
68
+ # error.
69
+ #
70
+ # @return [void]
71
+ # @param [TransformStatus] transform_status
72
+ def transform(transform_status)
73
+ NcsNavigator::Warehouse::TransformStatus.transaction do |tx|
74
+ stmt_ct = statements.size
75
+ statements.each_with_index do |stmt, i|
76
+ log.debug("Executing SQL statement in SQL transformer: \n#{stmt}")
77
+ shell.clear_line_and_say("[#{name}] Executing statement #{i + 1}/#{stmt_ct}...")
78
+ begin
79
+ result = @adapter.execute(stmt)
80
+ transform_status.record_count += result.affected_rows
81
+ rescue Exception => e
82
+ transform_status.transform_errors << NcsNavigator::Warehouse::TransformError.
83
+ for_exception(e, "Exception while executing SQL statement \"#{stmt}\" (#{i + 1} of #{stmt_ct}).")
84
+ shell.clear_line_and_say("[#{name}] Failed on #{i + 1}/#{stmt_ct}.")
85
+ tx.rollback
86
+ return
87
+ end
88
+ end
89
+ shell.clear_line_and_say("[#{name}] Executed #{stmt_ct} SQL statement#{stmt_ct == 1 ? '' : 's'}.")
90
+ end
91
+ end
92
+
93
+ private
94
+
95
+ def select_statements(options)
96
+ if options[:statements]
97
+ options[:statements]
98
+ elsif options[:script]
99
+ self.class.extract_statements(options[:script])
100
+ elsif options[:file]
101
+ self.class.extract_statements(File.read(options[:file]))
102
+ else
103
+ fail "One of :file, :script, or :statements must be specified."
104
+ end
105
+ end
106
+ end
107
+ end