pvdgm_services 0.1.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 (256) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +29 -0
  3. data/Rakefile +40 -0
  4. data/app/contexts/services/accept_hl7_message_context.rb +32 -0
  5. data/app/contexts/services/application_mds_context.rb +21 -0
  6. data/app/contexts/services/complete_sltc_registration_process_context.rb +23 -0
  7. data/app/contexts/services/create_account_mapping_context.rb +23 -0
  8. data/app/contexts/services/create_configured_account_context.rb +26 -0
  9. data/app/contexts/services/create_configured_facility_context.rb +26 -0
  10. data/app/contexts/services/create_credential_context.rb +23 -0
  11. data/app/contexts/services/create_facility_mapping_context.rb +23 -0
  12. data/app/contexts/services/create_public_key_context.rb +22 -0
  13. data/app/contexts/services/create_service_context.rb +22 -0
  14. data/app/contexts/services/create_service_definition_context.rb +26 -0
  15. data/app/contexts/services/create_sltc_registration_context.rb +24 -0
  16. data/app/contexts/services/create_third_party_context.rb +22 -0
  17. data/app/contexts/services/hl7_message_trimming_context.rb +19 -0
  18. data/app/contexts/services/invoke_service_context.rb +21 -0
  19. data/app/contexts/services/list_sltc_providers_context.rb +22 -0
  20. data/app/contexts/services/mds_file_processing_context.rb +27 -0
  21. data/app/contexts/services/mds_file_upload_context.rb +25 -0
  22. data/app/contexts/services/mds_pull_context.rb +21 -0
  23. data/app/contexts/services/monthly_service_table_cleanup_context.rb +19 -0
  24. data/app/contexts/services/notify_new_registration_context.rb +22 -0
  25. data/app/contexts/services/notify_sltc_provider_change_context.rb +19 -0
  26. data/app/contexts/services/request_sltc_baseline_context.rb +23 -0
  27. data/app/contexts/services/update_account_mapping_context.rb +23 -0
  28. data/app/contexts/services/update_configured_account_context.rb +26 -0
  29. data/app/contexts/services/update_configured_facility_context.rb +26 -0
  30. data/app/contexts/services/update_credential_context.rb +23 -0
  31. data/app/contexts/services/update_facility_mapping_context.rb +23 -0
  32. data/app/contexts/services/update_public_key_context.rb +23 -0
  33. data/app/contexts/services/update_service_context.rb +23 -0
  34. data/app/contexts/services/update_service_definition_context.rb +26 -0
  35. data/app/contexts/services/update_third_party_context.rb +23 -0
  36. data/app/controllers/services/account_mappings_controller.rb +54 -0
  37. data/app/controllers/services/adts_controller.rb +35 -0
  38. data/app/controllers/services/application_controller.rb +17 -0
  39. data/app/controllers/services/assessment_requests_controller.rb +48 -0
  40. data/app/controllers/services/available_files_controller.rb +19 -0
  41. data/app/controllers/services/configured_account_base_controller.rb +17 -0
  42. data/app/controllers/services/configured_accounts_controller.rb +59 -0
  43. data/app/controllers/services/configured_facilities_controller.rb +65 -0
  44. data/app/controllers/services/facility_mappings_controller.rb +58 -0
  45. data/app/controllers/services/mds_files_controller.rb +75 -0
  46. data/app/controllers/services/mds_pull_accounts_controller.rb +57 -0
  47. data/app/controllers/services/public_keys_controller.rb +50 -0
  48. data/app/controllers/services/service_base_controller.rb +18 -0
  49. data/app/controllers/services/service_definition_base_controller.rb +31 -0
  50. data/app/controllers/services/service_definitions_controller.rb +59 -0
  51. data/app/controllers/services/services_controller.rb +56 -0
  52. data/app/controllers/services/sltc_providers_controller.rb +15 -0
  53. data/app/controllers/services/sltc_registrations_controller.rb +74 -0
  54. data/app/controllers/services/status_masking.rb +17 -0
  55. data/app/controllers/services/third_parties_controller.rb +47 -0
  56. data/app/controllers/services/third_party_base_controller.rb +17 -0
  57. data/app/controllers/services/validation_controller.rb +17 -0
  58. data/app/helpers/services/application_helper.rb +8 -0
  59. data/app/helpers/services/assessment_request_helper.rb +19 -0
  60. data/app/helpers/services/available_files_helper.rb +27 -0
  61. data/app/helpers/services/mds_pull_accounts_helper.rb +27 -0
  62. data/app/helpers/services/sltc_registrations_helper.rb +15 -0
  63. data/app/mailers/services_mailer.rb +57 -0
  64. data/app/models/services/abaqis_mds_push.rb +51 -0
  65. data/app/models/services/account_mapping.rb +10 -0
  66. data/app/models/services/application_api.rb +19 -0
  67. data/app/models/services/assessment_request.rb +18 -0
  68. data/app/models/services/available_file.rb +73 -0
  69. data/app/models/services/configured_account.rb +26 -0
  70. data/app/models/services/configured_facility.rb +16 -0
  71. data/app/models/services/credential.rb +9 -0
  72. data/app/models/services/facility_mapping.rb +12 -0
  73. data/app/models/services/ftp_server.rb +69 -0
  74. data/app/models/services/hl7_inbound_service.rb +47 -0
  75. data/app/models/services/hl7_message.rb +27 -0
  76. data/app/models/services/isc_code.rb +15 -0
  77. data/app/models/services/isc_code_lookup.rb +75 -0
  78. data/app/models/services/mds_assessment.rb +371 -0
  79. data/app/models/services/mds_content.rb +55 -0
  80. data/app/models/services/mds_pull.rb +41 -0
  81. data/app/models/services/mds_pull_account.rb +192 -0
  82. data/app/models/services/mds_push.rb +24 -0
  83. data/app/models/services/mds_upload.rb +64 -0
  84. data/app/models/services/mds_upload_content.rb +148 -0
  85. data/app/models/services/mds_ws_response.rb +21 -0
  86. data/app/models/services/mds_ws_response_handler.rb +31 -0
  87. data/app/models/services/pcc_mds_pull.rb +77 -0
  88. data/app/models/services/provider_change.rb +26 -0
  89. data/app/models/services/public_key.rb +11 -0
  90. data/app/models/services/service.rb +20 -0
  91. data/app/models/services/service_definition.rb +37 -0
  92. data/app/models/services/service_implementation.rb +29 -0
  93. data/app/models/services/sltc_api.rb +179 -0
  94. data/app/models/services/sltc_api_exception.rb +54 -0
  95. data/app/models/services/sltc_mds_pull.rb +230 -0
  96. data/app/models/services/sltc_registration.rb +23 -0
  97. data/app/models/services/third_party.rb +18 -0
  98. data/app/roles/services/account_mapping_creator.rb +13 -0
  99. data/app/roles/services/account_mapping_updator.rb +12 -0
  100. data/app/roles/services/configured_account_creator.rb +13 -0
  101. data/app/roles/services/configured_account_updater.rb +12 -0
  102. data/app/roles/services/configured_facility_creator.rb +13 -0
  103. data/app/roles/services/configured_facility_updater.rb +12 -0
  104. data/app/roles/services/credential_creator.rb +11 -0
  105. data/app/roles/services/credential_updater.rb +20 -0
  106. data/app/roles/services/facility_mapping_creator.rb +13 -0
  107. data/app/roles/services/facility_mapping_updater.rb +11 -0
  108. data/app/roles/services/hl7_adt_message_saver.rb +15 -0
  109. data/app/roles/services/hl7_message_trimmer.rb +14 -0
  110. data/app/roles/services/mds_assessment_categorizer.rb +71 -0
  111. data/app/roles/services/mds_file_processor.rb +86 -0
  112. data/app/roles/services/mds_notifications.rb +44 -0
  113. data/app/roles/services/monthly_service_table_cleaner.rb +19 -0
  114. data/app/roles/services/new_registration_notifier.rb +11 -0
  115. data/app/roles/services/public_key_creator.rb +14 -0
  116. data/app/roles/services/public_key_updater.rb +12 -0
  117. data/app/roles/services/service_creator.rb +13 -0
  118. data/app/roles/services/service_definition_creator.rb +13 -0
  119. data/app/roles/services/service_definition_updater.rb +12 -0
  120. data/app/roles/services/service_invoker.rb +25 -0
  121. data/app/roles/services/service_updater.rb +11 -0
  122. data/app/roles/services/sltc_baseline_requestor.rb +19 -0
  123. data/app/roles/services/sltc_provider_change_notifier.rb +25 -0
  124. data/app/roles/services/sltc_provider_lister.rb +13 -0
  125. data/app/roles/services/sltc_registration_completer.rb +81 -0
  126. data/app/roles/services/sltc_registration_saver.rb +13 -0
  127. data/app/roles/services/submit_mds_file_for_processing.rb +28 -0
  128. data/app/roles/services/third_party_creator.rb +13 -0
  129. data/app/roles/services/third_party_updater.rb +12 -0
  130. data/app/utils/services/file_upload_handler.rb +33 -0
  131. data/app/utils/services/mds_upload_filters.rb +26 -0
  132. data/app/utils/services/mds_xml_file_parser.rb +104 -0
  133. data/app/utils/services/upload_file.rb +13 -0
  134. data/app/validators/isc_code_validator.rb +42 -0
  135. data/app/validators/mds_birthdate_validator.rb +37 -0
  136. data/app/validators/mds_date_validator.rb +8 -0
  137. data/app/validators/mds_integer_validator.rb +15 -0
  138. data/app/validators/mds_version_validator.rb +16 -0
  139. data/app/validators/state_code_validator.rb +9 -0
  140. data/app/views/layouts/services/application.html.erb +14 -0
  141. data/app/views/services/account_mappings/index.json.jbuilder +9 -0
  142. data/app/views/services/account_mappings/show.json.jbuilder +7 -0
  143. data/app/views/services/assessment_requests/index.json.jbuilder +11 -0
  144. data/app/views/services/available_files/index.json.jbuilder +13 -0
  145. data/app/views/services/configured_accounts/index.json.jbuilder +13 -0
  146. data/app/views/services/configured_accounts/show.json.jbuilder +11 -0
  147. data/app/views/services/configured_facilities/index.json.jbuilder +13 -0
  148. data/app/views/services/configured_facilities/show.json.jbuilder +11 -0
  149. data/app/views/services/facility_mappings/index.json.jbuilder +10 -0
  150. data/app/views/services/facility_mappings/show.json.jbuilder +8 -0
  151. data/app/views/services/mds_files/create.builder +10 -0
  152. data/app/views/services/mds_pull_accounts/index.json.jbuilder +11 -0
  153. data/app/views/services/public_keys/index.json.jbuilder +8 -0
  154. data/app/views/services/public_keys/show.json.jbuilder +6 -0
  155. data/app/views/services/service_definitions/index.json.jbuilder +17 -0
  156. data/app/views/services/service_definitions/show.json.jbuilder +16 -0
  157. data/app/views/services/services/index.json.jbuilder +6 -0
  158. data/app/views/services/services/show.json.jbuilder +4 -0
  159. data/app/views/services/sltc_providers/index.json.jbuilder +10 -0
  160. data/app/views/services/sltc_registrations/index.json.jbuilder +10 -0
  161. data/app/views/services/third_parties/index.json.jbuilder +7 -0
  162. data/app/views/services/third_parties/show.json.jbuilder +5 -0
  163. data/app/views/services_mailer/burying_job.html.erb +20 -0
  164. data/app/views/services_mailer/delaying_job.html.erb +20 -0
  165. data/app/views/services_mailer/notify_sltc_client_registration.html.erb +39 -0
  166. data/app/views/services_mailer/notify_sltc_client_registration_invalid_request_type.html.erb +8 -0
  167. data/app/views/services_mailer/notify_sltc_client_registration_request_invalid.html.erb +10 -0
  168. data/app/views/services_mailer/notify_sltc_client_registration_validation_errors.html.erb +13 -0
  169. data/app/views/services_mailer/notify_sltc_provider_changes.html.erb +26 -0
  170. data/app/views/services_mailer/notify_support_about_no_mds_pull.html.erb +6 -0
  171. data/config/routes.rb +48 -0
  172. data/db/migrate/20140102000000_create_services_engine_tables.rb +131 -0
  173. data/db/migrate/20140517184450_new_services_columns.rb +24 -0
  174. data/db/migrate/20140525142842_new_configured_provider_table.rb +18 -0
  175. data/db/migrate/20140714172442_add_error_column_to_hl7_messages.rb +5 -0
  176. data/db/migrate/20140730164152_mds_upload_tables.rb +78 -0
  177. data/db/sql_data/service_data_setup.sql +24 -0
  178. data/lib/services/engine.rb +40 -0
  179. data/lib/services/version.rb +3 -0
  180. data/lib/services.rb +4 -0
  181. data/lib/tasks/services_tasks.rake +40 -0
  182. data/spec/dummy/README.rdoc +261 -0
  183. data/spec/dummy/Rakefile +7 -0
  184. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  185. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  186. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  187. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  188. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  189. data/spec/dummy/config/application.rb +60 -0
  190. data/spec/dummy/config/boot.rb +10 -0
  191. data/spec/dummy/config/database.yml +29 -0
  192. data/spec/dummy/config/environment.rb +5 -0
  193. data/spec/dummy/config/environments/development.rb +35 -0
  194. data/spec/dummy/config/environments/production.rb +68 -0
  195. data/spec/dummy/config/environments/test.rb +32 -0
  196. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  197. data/spec/dummy/config/initializers/email.rb +1 -0
  198. data/spec/dummy/config/initializers/inflections.rb +15 -0
  199. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  200. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  201. data/spec/dummy/config/initializers/session_store.rb +8 -0
  202. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  203. data/spec/dummy/config/locales/en.yml +5 -0
  204. data/spec/dummy/config/routes.rb +4 -0
  205. data/spec/dummy/config.ru +4 -0
  206. data/spec/dummy/db/schema.rb +237 -0
  207. data/spec/dummy/db/sql_data/services_isc_codes.sql +878 -0
  208. data/spec/dummy/log/test.log +3498 -0
  209. data/spec/dummy/public/404.html +26 -0
  210. data/spec/dummy/public/422.html +26 -0
  211. data/spec/dummy/public/500.html +25 -0
  212. data/spec/dummy/public/favicon.ico +0 -0
  213. data/spec/dummy/script/rails +6 -0
  214. data/spec/models/abaqis_mds_push_spec.rb +120 -0
  215. data/spec/models/available_file_spec.rb +234 -0
  216. data/spec/models/configured_account_spec.rb +39 -0
  217. data/spec/models/ftp_server_spec.rb +221 -0
  218. data/spec/models/isc_code_lookup_spec.rb +125 -0
  219. data/spec/models/isc_code_spec.rb +5 -0
  220. data/spec/models/mds_assessment_spec.rb +1070 -0
  221. data/spec/models/mds_pull_account_spec.rb +468 -0
  222. data/spec/models/mds_pull_spec.rb +48 -0
  223. data/spec/models/mds_push_spec.rb +43 -0
  224. data/spec/models/mds_ws_response_spec.rb +54 -0
  225. data/spec/models/pcc_mds_pull_spec.rb +273 -0
  226. data/spec/models/service_implementation_spec.rb +88 -0
  227. data/spec/models/sltc_api_exception_spec.rb +136 -0
  228. data/spec/models/sltc_api_spec.rb +192 -0
  229. data/spec/models/sltc_mds_pull_spec.rb +776 -0
  230. data/spec/roles/account_mapping_creator_spec.rb +40 -0
  231. data/spec/roles/account_mapping_updator_spec.rb +16 -0
  232. data/spec/roles/configured_account_creator_spec.rb +40 -0
  233. data/spec/roles/configured_account_updater_spec.rb +16 -0
  234. data/spec/roles/configured_facility_creator_spec.rb +40 -0
  235. data/spec/roles/configured_facility_updater_spec.rb +16 -0
  236. data/spec/roles/credential_creator_spec.rb +23 -0
  237. data/spec/roles/credential_updater_spec.rb +38 -0
  238. data/spec/roles/facility_mapping_creator_spec.rb +40 -0
  239. data/spec/roles/facility_mapping_updater_spec.rb +16 -0
  240. data/spec/roles/hl7_adt_message_saver_spec.rb +35 -0
  241. data/spec/roles/hl7_message_trimmer_spec.rb +31 -0
  242. data/spec/roles/monthly_service_table_cleaner_spec.rb +27 -0
  243. data/spec/roles/new_registration_notifier_spec.rb +18 -0
  244. data/spec/roles/service_ceator_spec.rb +34 -0
  245. data/spec/roles/service_definition_creator_spec.rb +40 -0
  246. data/spec/roles/service_definition_updater_spec.rb +16 -0
  247. data/spec/roles/service_invoker_spec.rb +22 -0
  248. data/spec/roles/service_updater_spec.rb +17 -0
  249. data/spec/roles/sltc_baseline_requestor_spec.rb +30 -0
  250. data/spec/roles/sltc_provider_lister_spec.rb +27 -0
  251. data/spec/roles/sltc_registration_completer_spec.rb +187 -0
  252. data/spec/roles/sltc_registration_saver_spec.rb +34 -0
  253. data/spec/roles/third_party_creator_spec.rb +34 -0
  254. data/spec/roles/third_party_updater_spec.rb +17 -0
  255. data/spec/spec_helper.rb +72 -0
  256. metadata +581 -0
@@ -0,0 +1,26 @@
1
+ module Services
2
+
3
+ class UpdateConfiguredFacilityContext
4
+
5
+ attr_accessor :configured_facility, :cf_params, :cred_params
6
+
7
+ def self.call(configured_facility, cf_params, cred_params)
8
+ UpdateConfiguredFacilityContext.new(configured_facility, cf_params, cred_params).call
9
+ end
10
+
11
+ def initialize(configured_facility, cf_params, cred_params)
12
+ @configured_facility = configured_facility
13
+ @cf_params = cf_params
14
+ @cred_params = cred_params
15
+ @configured_facility.extend Services::ConfiguredFacilityUpdater
16
+ end
17
+
18
+ def call
19
+ configured_facility.update(cf_params).tap do | configured_facility |
20
+ UpdateCredentialContext.call(configured_facility, cred_params)
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,23 @@
1
+ module Services
2
+
3
+ class UpdateCredentialContext
4
+
5
+ attr_accessor :credentialled_object, :params
6
+
7
+ def self.call(credentialled_object, params)
8
+ UpdateCredentialContext.new(credentialled_object, params).call
9
+ end
10
+
11
+ def initialize(credentialled_object, params)
12
+ @credentialled_object = credentialled_object
13
+ @params = params
14
+ @credentialled_object.extend Services::CredentialUpdater
15
+ end
16
+
17
+ def call
18
+ credentialled_object.update_credential(params)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ module Services
2
+
3
+ class UpdateFacilityMappingContext
4
+
5
+ attr_accessor :facility_mapping, :params
6
+
7
+ def self.call(facility_mapping, params)
8
+ UpdateFacilityMappingContext.new(facility_mapping, params).call
9
+ end
10
+
11
+ def initialize(facility_mapping, params)
12
+ @facility_mapping = facility_mapping
13
+ @params = params
14
+ @facility_mapping.extend Services::FacilityMappingUpdater
15
+ end
16
+
17
+ def call
18
+ facility_mapping.update(params)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ module Services
2
+
3
+ class UpdatePublicKeyContext
4
+
5
+ attr_accessor :public_key, :params
6
+
7
+ def self.call(public_key, params)
8
+ UpdatePublicKeyContext.new(public_key, params).call
9
+ end
10
+
11
+ def initialize(public_key, params)
12
+ @public_key = public_key
13
+ @params = params
14
+ @public_key.extend Services::PublicKeyUpdater
15
+ end
16
+
17
+ def call
18
+ public_key.update(params)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ module Services
2
+
3
+ class UpdateServiceContext
4
+
5
+ attr_accessor :service, :params
6
+
7
+ def self.call(service, params)
8
+ UpdateServiceContext.new(service, params).call
9
+ end
10
+
11
+ def initialize(service, params)
12
+ @service = service
13
+ @params = params
14
+ @service.extend Services::ServiceUpdater
15
+ end
16
+
17
+ def call
18
+ service.update(params)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,26 @@
1
+ module Services
2
+
3
+ class UpdateServiceDefinitionContext
4
+
5
+ attr_accessor :service_definition, :sd_params, :cred_params
6
+
7
+ def self.call(service_definition, sd_params, cred_params)
8
+ UpdateServiceDefinitionContext.new(service_definition, sd_params, cred_params).call
9
+ end
10
+
11
+ def initialize(service_definition, sd_params, cred_params)
12
+ @service_definition = service_definition
13
+ @sd_params = sd_params
14
+ @cred_params = cred_params
15
+ @service_definition.extend Services::ServiceDefinitionUpdater
16
+ end
17
+
18
+ def call
19
+ service_definition.update(sd_params).tap do | service_definition |
20
+ UpdateCredentialContext.call(service_definition, cred_params)
21
+ end
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,23 @@
1
+ module Services
2
+
3
+ class UpdateThirdPartyContext
4
+
5
+ attr_accessor :third_party, :params
6
+
7
+ def self.call(third_party, params)
8
+ UpdateThirdPartyContext.new(third_party, params).call
9
+ end
10
+
11
+ def initialize(third_party, params)
12
+ @third_party = third_party
13
+ @params = params
14
+ third_party.extend Services::ThirdPartyUpdater
15
+ end
16
+
17
+ def call
18
+ third_party.update(params)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,54 @@
1
+ module Services
2
+
3
+ class AccountMappingsController < Services::ThirdPartyBaseController
4
+ attr_reader :account_mapping
5
+
6
+ respond_to :json
7
+
8
+ before_filter :must_have_account_mapping, only: [ :show, :update, :destroy ]
9
+
10
+ def index
11
+ @account_mappings = third_party.account_mappings
12
+ end
13
+
14
+ def show
15
+ # Nothing to do
16
+ end
17
+
18
+ def create
19
+ am = CreateAccountMappingContext.call(third_party, safe_params)
20
+ if am.errors.empty?
21
+ render json: { id: am.id }
22
+ else
23
+ render json: { validation_error: am.errors.full_messages }, status: 403
24
+ end
25
+ end
26
+
27
+ def update
28
+ UpdateAccountMappingContext.call(account_mapping, safe_params)
29
+ if account_mapping.errors.empty?
30
+ render json: { id: account_mapping.id }
31
+ else
32
+ render json: { validation_error: account_mapping.errors.full_messages }, status: 403
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ account_mapping.destroy
38
+ render json: { id: account_mapping.id }
39
+ end
40
+
41
+ private
42
+
43
+ def safe_params
44
+ params.require(:account_mapping).permit(:account_id, :account_code)
45
+ end
46
+
47
+ def must_have_account_mapping
48
+ @account_mapping = third_party.account_mappings.where(id: params[:id]).first
49
+ render json: { error: "No account mapping with id: #{params[:id]}" }, status: 404 if @account_mapping.blank?
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,35 @@
1
+ module Services
2
+
3
+ class AdtsController < Services::ApplicationController
4
+
5
+ skip_before_action :restrict_access
6
+ before_action :verify_hl7_access
7
+
8
+ def create
9
+ request.body.rewind # Need this to deal with Rails 4 bug.
10
+
11
+ msg = AcceptHl7MessageContext.call(params[:messageType], request.body.read)
12
+
13
+ if msg.valid?
14
+ render json: { status: 'success' }, status: 200
15
+ else
16
+ render json: { status: 'error', errors: msg.errors.full_messages }, status: 400
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def verify_hl7_access
23
+ authenticate_or_request_with_http_token do |token, options|
24
+ # Authenticating through the service definition credential
25
+ tp = ThirdParty.where(key: ThirdParty::PROVIDIGM).first
26
+ svc = Service.where(key: Service::HL7_INBOUND).first
27
+ sd = ServiceDefinition.where(third_party_id: tp.id, service_id: svc.id).first
28
+ cred = sd.credentials.first
29
+ token == cred.token
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,17 @@
1
+ module Services
2
+ class ApplicationController < ActionController::Base
3
+
4
+ MAX_LIST_LENGTH = 50
5
+
6
+ before_action :restrict_access
7
+
8
+ private
9
+
10
+ def restrict_access
11
+ authenticate_or_request_with_http_token do | token, options |
12
+ @api_key = ApiKey.where(access_token: token).first
13
+ @api_key.present? && @api_key.authenticateable.id == 1 # Providigm account
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,48 @@
1
+ module Services
2
+
3
+ class AssessmentRequestsController < Services::ApplicationController
4
+ include StatusMasking
5
+
6
+ respond_to :json
7
+
8
+ def index
9
+ where_clause = build_where_clause
10
+
11
+ if where_clause.present?
12
+ @assessment_requests = AssessmentRequest.where(where_clause).order("created_at DESC").limit(MAX_LIST_LENGTH)
13
+ else
14
+ @assessment_requests = AssessmentRequest.order("created_at DESC").limit(MAX_LIST_LENGTH)
15
+ end
16
+ end
17
+
18
+ def create
19
+ ca = ConfiguredAccount.find params[:configured_account_id]
20
+
21
+ RequestSltcBaselineContext.call(ca, safe_params)
22
+
23
+ render :index
24
+ end
25
+
26
+ private
27
+
28
+ def build_where_clause
29
+ where = ''
30
+ provider_id = params[:provider_id] || -1
31
+ where = "facility_code = #{provider_id}" if provider_id.to_i > 0
32
+
33
+ status, operator = determine_status_operator(params[:status])
34
+
35
+ where += ' AND ' if status.present? && where.length > 0
36
+ where += "status #{operator} #{status}" if status.present?
37
+ where
38
+ end
39
+
40
+ def safe_params
41
+ params.permit(:configured_account_id, :provider_id, :uploaded_before, :uploaded_after)
42
+ end
43
+
44
+ end
45
+
46
+
47
+
48
+ end
@@ -0,0 +1,19 @@
1
+ module Services
2
+
3
+ class AvailableFilesController < Services::ConfiguredAccountBaseController
4
+ include StatusMasking
5
+
6
+ respond_to :json
7
+
8
+ def index
9
+ status, operator = determine_status_operator(params[:status])
10
+ if status.present?
11
+ @available_files = configured_account.available_files.where("status #{operator} ?", status).order("created_at DESC").limit(MAX_LIST_LENGTH)
12
+ else
13
+ @available_files = configured_account.available_files.order("created_at DESC").limit(MAX_LIST_LENGTH)
14
+ end
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,17 @@
1
+ module Services
2
+
3
+ class ConfiguredAccountBaseController < Services::ServiceDefinitionBaseController
4
+ attr_reader :configured_account
5
+
6
+ before_filter :must_have_configured_account
7
+
8
+ private
9
+
10
+ def must_have_configured_account
11
+ @configured_account = service_definition.configured_accounts.where(id: params[:configured_account_id]).first
12
+ render json: { error: "No configured account with id: #{params[:configured_account_id]}" }, status: 404 if @configured_account.blank?
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,59 @@
1
+ module Services
2
+
3
+ class ConfiguredAccountsController < Services::ServiceDefinitionBaseController
4
+ attr_reader :configured_account
5
+
6
+ respond_to :json
7
+
8
+ before_filter :must_have_configured_account, only: [ :show, :update, :destroy ]
9
+
10
+ def index
11
+ @configured_accounts = service_definition.configured_accounts.includes(:credentials)
12
+ end
13
+
14
+ def show
15
+ # nothing to do
16
+ end
17
+
18
+ def create
19
+ ca = CreateConfiguredAccountContext.call(service_definition, safe_ca_params, safe_cred_params)
20
+ if ca.errors.empty?
21
+ render json: { id: ca.id }
22
+ else
23
+ render json: { validation_error: ca.errors.full_messages }, status: 403
24
+ end
25
+ end
26
+
27
+ def update
28
+ UpdateConfiguredAccountContext.call(configured_account, safe_ca_params, safe_cred_params)
29
+ if configured_account.errors.empty?
30
+ render json: { id: configured_account.id }
31
+ else
32
+ render json: { validation_error: configured_account.errors.full_messages }, status: 403
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ configured_account.destroy
38
+ render json: { id: configured_account.id }
39
+ end
40
+
41
+ private
42
+
43
+ def safe_ca_params
44
+ params.require(:configured_account).permit(:account_id, :username, :enabled)
45
+ end
46
+
47
+ def safe_cred_params
48
+ return {} if params[:credential].blank?
49
+ params.require(:credential).permit(:password, :token)
50
+ end
51
+
52
+ def must_have_configured_account
53
+ @configured_account = service_definition.configured_accounts.includes(:credentials).where(id: params[:id]).first
54
+ render json: { error: "No configured account with id: #{params[:id]}" }, status: 404 if @configured_account.blank?
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,65 @@
1
+ module Services
2
+
3
+ class ConfiguredFacilitiesController < Services::ServiceDefinitionBaseController
4
+ attr_reader :configured_facility
5
+
6
+ respond_to :json
7
+
8
+ before_filter :must_have_configured_facility, only: [ :show, :update, :destroy ]
9
+
10
+ def index
11
+ if params[:configured_account_id]
12
+ configured_account = ConfiguredAccount.find params[:configured_account_id]
13
+ enabled_facility_ids = ApplicationApi.api_impl.enabled_facilities_for_account_id(configured_account.account_id).pluck(:id)
14
+ @configured_facilities = ConfiguredFacility.where(facility_id: enabled_facility_ids).includes(:credentials)
15
+ else
16
+ @configured_facilities = service_definition.configured_facilities.includes(:credentials)
17
+ end
18
+ end
19
+
20
+ def show
21
+ # nothing to do
22
+ end
23
+
24
+ def create
25
+ cf = CreateConfiguredFacilityContext.call(service_definition, safe_fac_params, safe_cred_params)
26
+ if cf.errors.empty?
27
+ render json: { id: cf.id }
28
+ else
29
+ render json: { validation_error: cf.errors.full_messages }, status: 403
30
+ end
31
+ end
32
+
33
+ def update
34
+ UpdateConfiguredFacilityContext.call(configured_facility, safe_fac_params, safe_cred_params)
35
+ if configured_facility.errors.empty?
36
+ render json: { id: configured_facility.id }
37
+ else
38
+ render json: { validation_error: configured_facility.errors.full_messages }, status: 403
39
+ end
40
+ end
41
+
42
+ def destroy
43
+ configured_facility.destroy
44
+ render json: { id: configured_facility.id }
45
+ end
46
+
47
+ private
48
+
49
+ def safe_fac_params
50
+ params.require(:configured_facility).permit(:facility_id, :username, :enabled)
51
+ end
52
+
53
+ def safe_cred_params
54
+ return {} if params[:credential].blank?
55
+ params.require(:credential).permit(:password, :token)
56
+ end
57
+
58
+ def must_have_configured_facility
59
+ @configured_facility = service_definition.configured_facilities.includes(:credentials).where(id: params[:id]).first
60
+ render json: { error: "No configured facility with id: #{params[:id]}" }, status: 404 if @configured_facility.blank?
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,58 @@
1
+ module Services
2
+
3
+ class FacilityMappingsController < Services::ThirdPartyBaseController
4
+ attr_reader :facility_mapping
5
+ respond_to :json
6
+
7
+ before_filter :must_have_facility_mapping, only: [ :show, :update, :destroy ]
8
+
9
+ def index
10
+ if params[:configured_account_id]
11
+ configured_account = ConfiguredAccount.find params[:configured_account_id]
12
+ enabled_facility_ids = ApplicationApi.api_impl.enabled_facilities_for_account_id(configured_account.account_id).pluck(:id)
13
+ @facility_mappings = FacilityMapping.where(facility_id: enabled_facility_ids).order("facility_code ASC")
14
+ else
15
+ @facility_mappings = third_party.facility_mappings
16
+ end
17
+ end
18
+
19
+ def show
20
+ # Nothing to do
21
+ end
22
+
23
+ def create
24
+ fm = CreateFacilityMappingContext.call(third_party, safe_params)
25
+ if fm.errors.empty?
26
+ render json: { id: fm.id }
27
+ else
28
+ render json: { validation_error: fm.errors.full_messages }, status: 403
29
+ end
30
+ end
31
+
32
+ def update
33
+ UpdateFacilityMappingContext.call(facility_mapping, safe_params)
34
+ if facility_mapping.errors.empty?
35
+ render json: { id: facility_mapping.id }
36
+ else
37
+ render json: { validation_error: facility_mapping.errors.full_messages }, status: 403
38
+ end
39
+ end
40
+
41
+ def destroy
42
+ facility_mapping.destroy
43
+ render json: { id: facility_mapping.id }
44
+ end
45
+
46
+ private
47
+
48
+ def safe_params
49
+ params.require(:facility_mapping).permit(:facility_id, :facility_code, :top_level)
50
+ end
51
+
52
+ def must_have_facility_mapping
53
+ @facility_mapping = third_party.facility_mappings.where(id: params[:id]).first
54
+ render json: { error: "No facility mapping with id: #{params[:id]}" }, status: 404 if @facility_mapping.blank?
55
+ end
56
+ end
57
+
58
+ end
@@ -0,0 +1,75 @@
1
+ module Services
2
+
3
+ class MdsFilesController < ApplicationController
4
+ include FileUploadHandler
5
+ include MdsUploadFilters
6
+
7
+ # This will scan through the parameters after the request is complete and close/delete
8
+ # any files uploaded in the request.
9
+ after_action :clear_temporary_files, only: [ :create ]
10
+ before_action :must_have_uploaded_file
11
+ before_action :must_be_valid_mds_file, only: [ :create ]
12
+
13
+ rescue_from Exception, :with => :catch_all_exceptions
14
+
15
+ def create
16
+ @errors = MdsFileUploadContext.call(@upload_account, nil, @uploaded_file)
17
+ end
18
+
19
+ private
20
+
21
+ #
22
+ # This overrides the 'restrict_access' method on the ApplicationController.
23
+ # The authentication mechanism for MDS submission is different from the
24
+ # other API authentication.
25
+ #
26
+ def restrict_access
27
+ account_id = request.headers["HTTP_ACCOUNT_ID"]
28
+ account_password = request.headers['HTTP_ACCOUNT_PASSWORD']
29
+
30
+ @upload_account = Account.where("id = ?", account_id).first
31
+
32
+ # Find the account credentials using the new service definition information.
33
+ configured_account = Services::AbaqisMdsPush.configured_account(account_id)
34
+ password = configured_account.credentials.first.try(:password) if configured_account.present?
35
+
36
+ @errors = []
37
+
38
+ @errors << "Unable to find specified account: #{account_id}." unless @upload_account
39
+ @errors << "MDS Web Service account is disabled: #{account_id}." unless @errors.present? || @upload_account.enabled?
40
+ @errors << "Account #{account_id} not configured for the MDS Web Services." unless @errors.present? || (configured_account.present? && configured_account.enabled?)
41
+ @errors << "Authentication failed for #{account_id}." unless @errors.present? || (password.present? && password == account_password)
42
+
43
+ clear_temporary_files if @errors.present?
44
+ render params[:action] if @errors.present?
45
+ end
46
+
47
+ # DS: This is a catch-all exception handler. The idea is that we always want to
48
+ # return an XML document to the caller, so we can't let Rails handle these
49
+ # exceptions on it's own.
50
+ def catch_all_exceptions(ex)
51
+ logger.error "Error processing MDS 3.0 Upload: #{ex.message}\n#{ex.backtrace.join("\n")}"
52
+ @errors = [ ex.message ]
53
+
54
+ render action: :create
55
+ end
56
+
57
+ #
58
+ # Overridden from Services::MdsUploadFilters. The filter in the module assumes
59
+ # a controller that has an index action to display the errors. In this case, we
60
+ # simply want to render the 'create' template to provide the appropriate XML
61
+ # error response. Sorry. I wish we could share the code, but life is hard
62
+ # sometimes.
63
+ #
64
+ def must_be_valid_mds_file
65
+ uv = UnzipmeValidator.new(@uploaded_file.path)
66
+
67
+ if ! uv.valid_zip?
68
+ @errors = [ "You have uploaded an invalid MDS 3.0 or MDS 3.0 Composite file." ]
69
+ render action: :create
70
+ end
71
+
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,57 @@
1
+ module Services
2
+
3
+ class MdsPullAccountsController < Services::ServiceBaseController
4
+ include StatusMasking
5
+
6
+ attr_reader :service_definition, :configured_account
7
+ respond_to :json
8
+
9
+ before_filter :must_have_valid_owner
10
+
11
+ def index
12
+ status, operator = determine_status_operator(params[:status])
13
+
14
+ if configured_account.present?
15
+
16
+ @mds_pull_accounts = configured_account.mds_pull_accounts.
17
+ order("created_at DESC").
18
+ limit(MAX_LIST_LENGTH)
19
+
20
+ elsif service_definition.present?
21
+
22
+ @mds_pull_accounts = MdsPullAccount.
23
+ joins(:configured_account).
24
+ where("services_configured_accounts.service_definition_id" => service_definition.id).
25
+ order("created_at DESC").
26
+ limit(MAX_LIST_LENGTH)
27
+
28
+ else
29
+
30
+ @mds_pull_accounts = MdsPullAccount.
31
+ joins(:configured_account, :service_definition).
32
+ where("services_service_definitions.service_id" => service.id).
33
+ order("created_at DESC").
34
+ limit(MAX_LIST_LENGTH)
35
+
36
+ end
37
+ @mds_pull_accounts = @mds_pull_accounts.where("status #{operator} ?", status).order("created_at DESC").limit(MAX_LIST_LENGTH) if status.present?
38
+ end
39
+
40
+ private
41
+
42
+ def must_have_valid_owner
43
+ if params[:service_definition_id].present?
44
+ @service_definition = service.service_definitions.where(id: params[:service_definition_id]).first
45
+ render(json: { error: "No service definition with id: #{params[:service_definition_id]}" }, status: 404) and return if @service_definition.blank?
46
+
47
+ if params[:configured_account_id].present?
48
+ @configured_account = service_definition.configured_accounts.where(id: params[:configured_account_id]).first
49
+ render(json: { error: "No configured account with id: #{params[:configured_account_id]}" }, status: 404) and return if @configured_account.blank?
50
+ end
51
+ end
52
+ # It's OK if this falls through; having just a service is enough...
53
+ end
54
+
55
+ end
56
+
57
+ end