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.
- checksums.yaml +7 -0
- data/README.md +29 -0
- data/Rakefile +40 -0
- data/app/contexts/services/accept_hl7_message_context.rb +32 -0
- data/app/contexts/services/application_mds_context.rb +21 -0
- data/app/contexts/services/complete_sltc_registration_process_context.rb +23 -0
- data/app/contexts/services/create_account_mapping_context.rb +23 -0
- data/app/contexts/services/create_configured_account_context.rb +26 -0
- data/app/contexts/services/create_configured_facility_context.rb +26 -0
- data/app/contexts/services/create_credential_context.rb +23 -0
- data/app/contexts/services/create_facility_mapping_context.rb +23 -0
- data/app/contexts/services/create_public_key_context.rb +22 -0
- data/app/contexts/services/create_service_context.rb +22 -0
- data/app/contexts/services/create_service_definition_context.rb +26 -0
- data/app/contexts/services/create_sltc_registration_context.rb +24 -0
- data/app/contexts/services/create_third_party_context.rb +22 -0
- data/app/contexts/services/hl7_message_trimming_context.rb +19 -0
- data/app/contexts/services/invoke_service_context.rb +21 -0
- data/app/contexts/services/list_sltc_providers_context.rb +22 -0
- data/app/contexts/services/mds_file_processing_context.rb +27 -0
- data/app/contexts/services/mds_file_upload_context.rb +25 -0
- data/app/contexts/services/mds_pull_context.rb +21 -0
- data/app/contexts/services/monthly_service_table_cleanup_context.rb +19 -0
- data/app/contexts/services/notify_new_registration_context.rb +22 -0
- data/app/contexts/services/notify_sltc_provider_change_context.rb +19 -0
- data/app/contexts/services/request_sltc_baseline_context.rb +23 -0
- data/app/contexts/services/update_account_mapping_context.rb +23 -0
- data/app/contexts/services/update_configured_account_context.rb +26 -0
- data/app/contexts/services/update_configured_facility_context.rb +26 -0
- data/app/contexts/services/update_credential_context.rb +23 -0
- data/app/contexts/services/update_facility_mapping_context.rb +23 -0
- data/app/contexts/services/update_public_key_context.rb +23 -0
- data/app/contexts/services/update_service_context.rb +23 -0
- data/app/contexts/services/update_service_definition_context.rb +26 -0
- data/app/contexts/services/update_third_party_context.rb +23 -0
- data/app/controllers/services/account_mappings_controller.rb +54 -0
- data/app/controllers/services/adts_controller.rb +35 -0
- data/app/controllers/services/application_controller.rb +17 -0
- data/app/controllers/services/assessment_requests_controller.rb +48 -0
- data/app/controllers/services/available_files_controller.rb +19 -0
- data/app/controllers/services/configured_account_base_controller.rb +17 -0
- data/app/controllers/services/configured_accounts_controller.rb +59 -0
- data/app/controllers/services/configured_facilities_controller.rb +65 -0
- data/app/controllers/services/facility_mappings_controller.rb +58 -0
- data/app/controllers/services/mds_files_controller.rb +75 -0
- data/app/controllers/services/mds_pull_accounts_controller.rb +57 -0
- data/app/controllers/services/public_keys_controller.rb +50 -0
- data/app/controllers/services/service_base_controller.rb +18 -0
- data/app/controllers/services/service_definition_base_controller.rb +31 -0
- data/app/controllers/services/service_definitions_controller.rb +59 -0
- data/app/controllers/services/services_controller.rb +56 -0
- data/app/controllers/services/sltc_providers_controller.rb +15 -0
- data/app/controllers/services/sltc_registrations_controller.rb +74 -0
- data/app/controllers/services/status_masking.rb +17 -0
- data/app/controllers/services/third_parties_controller.rb +47 -0
- data/app/controllers/services/third_party_base_controller.rb +17 -0
- data/app/controllers/services/validation_controller.rb +17 -0
- data/app/helpers/services/application_helper.rb +8 -0
- data/app/helpers/services/assessment_request_helper.rb +19 -0
- data/app/helpers/services/available_files_helper.rb +27 -0
- data/app/helpers/services/mds_pull_accounts_helper.rb +27 -0
- data/app/helpers/services/sltc_registrations_helper.rb +15 -0
- data/app/mailers/services_mailer.rb +57 -0
- data/app/models/services/abaqis_mds_push.rb +51 -0
- data/app/models/services/account_mapping.rb +10 -0
- data/app/models/services/application_api.rb +19 -0
- data/app/models/services/assessment_request.rb +18 -0
- data/app/models/services/available_file.rb +73 -0
- data/app/models/services/configured_account.rb +26 -0
- data/app/models/services/configured_facility.rb +16 -0
- data/app/models/services/credential.rb +9 -0
- data/app/models/services/facility_mapping.rb +12 -0
- data/app/models/services/ftp_server.rb +69 -0
- data/app/models/services/hl7_inbound_service.rb +47 -0
- data/app/models/services/hl7_message.rb +27 -0
- data/app/models/services/isc_code.rb +15 -0
- data/app/models/services/isc_code_lookup.rb +75 -0
- data/app/models/services/mds_assessment.rb +371 -0
- data/app/models/services/mds_content.rb +55 -0
- data/app/models/services/mds_pull.rb +41 -0
- data/app/models/services/mds_pull_account.rb +192 -0
- data/app/models/services/mds_push.rb +24 -0
- data/app/models/services/mds_upload.rb +64 -0
- data/app/models/services/mds_upload_content.rb +148 -0
- data/app/models/services/mds_ws_response.rb +21 -0
- data/app/models/services/mds_ws_response_handler.rb +31 -0
- data/app/models/services/pcc_mds_pull.rb +77 -0
- data/app/models/services/provider_change.rb +26 -0
- data/app/models/services/public_key.rb +11 -0
- data/app/models/services/service.rb +20 -0
- data/app/models/services/service_definition.rb +37 -0
- data/app/models/services/service_implementation.rb +29 -0
- data/app/models/services/sltc_api.rb +179 -0
- data/app/models/services/sltc_api_exception.rb +54 -0
- data/app/models/services/sltc_mds_pull.rb +230 -0
- data/app/models/services/sltc_registration.rb +23 -0
- data/app/models/services/third_party.rb +18 -0
- data/app/roles/services/account_mapping_creator.rb +13 -0
- data/app/roles/services/account_mapping_updator.rb +12 -0
- data/app/roles/services/configured_account_creator.rb +13 -0
- data/app/roles/services/configured_account_updater.rb +12 -0
- data/app/roles/services/configured_facility_creator.rb +13 -0
- data/app/roles/services/configured_facility_updater.rb +12 -0
- data/app/roles/services/credential_creator.rb +11 -0
- data/app/roles/services/credential_updater.rb +20 -0
- data/app/roles/services/facility_mapping_creator.rb +13 -0
- data/app/roles/services/facility_mapping_updater.rb +11 -0
- data/app/roles/services/hl7_adt_message_saver.rb +15 -0
- data/app/roles/services/hl7_message_trimmer.rb +14 -0
- data/app/roles/services/mds_assessment_categorizer.rb +71 -0
- data/app/roles/services/mds_file_processor.rb +86 -0
- data/app/roles/services/mds_notifications.rb +44 -0
- data/app/roles/services/monthly_service_table_cleaner.rb +19 -0
- data/app/roles/services/new_registration_notifier.rb +11 -0
- data/app/roles/services/public_key_creator.rb +14 -0
- data/app/roles/services/public_key_updater.rb +12 -0
- data/app/roles/services/service_creator.rb +13 -0
- data/app/roles/services/service_definition_creator.rb +13 -0
- data/app/roles/services/service_definition_updater.rb +12 -0
- data/app/roles/services/service_invoker.rb +25 -0
- data/app/roles/services/service_updater.rb +11 -0
- data/app/roles/services/sltc_baseline_requestor.rb +19 -0
- data/app/roles/services/sltc_provider_change_notifier.rb +25 -0
- data/app/roles/services/sltc_provider_lister.rb +13 -0
- data/app/roles/services/sltc_registration_completer.rb +81 -0
- data/app/roles/services/sltc_registration_saver.rb +13 -0
- data/app/roles/services/submit_mds_file_for_processing.rb +28 -0
- data/app/roles/services/third_party_creator.rb +13 -0
- data/app/roles/services/third_party_updater.rb +12 -0
- data/app/utils/services/file_upload_handler.rb +33 -0
- data/app/utils/services/mds_upload_filters.rb +26 -0
- data/app/utils/services/mds_xml_file_parser.rb +104 -0
- data/app/utils/services/upload_file.rb +13 -0
- data/app/validators/isc_code_validator.rb +42 -0
- data/app/validators/mds_birthdate_validator.rb +37 -0
- data/app/validators/mds_date_validator.rb +8 -0
- data/app/validators/mds_integer_validator.rb +15 -0
- data/app/validators/mds_version_validator.rb +16 -0
- data/app/validators/state_code_validator.rb +9 -0
- data/app/views/layouts/services/application.html.erb +14 -0
- data/app/views/services/account_mappings/index.json.jbuilder +9 -0
- data/app/views/services/account_mappings/show.json.jbuilder +7 -0
- data/app/views/services/assessment_requests/index.json.jbuilder +11 -0
- data/app/views/services/available_files/index.json.jbuilder +13 -0
- data/app/views/services/configured_accounts/index.json.jbuilder +13 -0
- data/app/views/services/configured_accounts/show.json.jbuilder +11 -0
- data/app/views/services/configured_facilities/index.json.jbuilder +13 -0
- data/app/views/services/configured_facilities/show.json.jbuilder +11 -0
- data/app/views/services/facility_mappings/index.json.jbuilder +10 -0
- data/app/views/services/facility_mappings/show.json.jbuilder +8 -0
- data/app/views/services/mds_files/create.builder +10 -0
- data/app/views/services/mds_pull_accounts/index.json.jbuilder +11 -0
- data/app/views/services/public_keys/index.json.jbuilder +8 -0
- data/app/views/services/public_keys/show.json.jbuilder +6 -0
- data/app/views/services/service_definitions/index.json.jbuilder +17 -0
- data/app/views/services/service_definitions/show.json.jbuilder +16 -0
- data/app/views/services/services/index.json.jbuilder +6 -0
- data/app/views/services/services/show.json.jbuilder +4 -0
- data/app/views/services/sltc_providers/index.json.jbuilder +10 -0
- data/app/views/services/sltc_registrations/index.json.jbuilder +10 -0
- data/app/views/services/third_parties/index.json.jbuilder +7 -0
- data/app/views/services/third_parties/show.json.jbuilder +5 -0
- data/app/views/services_mailer/burying_job.html.erb +20 -0
- data/app/views/services_mailer/delaying_job.html.erb +20 -0
- data/app/views/services_mailer/notify_sltc_client_registration.html.erb +39 -0
- data/app/views/services_mailer/notify_sltc_client_registration_invalid_request_type.html.erb +8 -0
- data/app/views/services_mailer/notify_sltc_client_registration_request_invalid.html.erb +10 -0
- data/app/views/services_mailer/notify_sltc_client_registration_validation_errors.html.erb +13 -0
- data/app/views/services_mailer/notify_sltc_provider_changes.html.erb +26 -0
- data/app/views/services_mailer/notify_support_about_no_mds_pull.html.erb +6 -0
- data/config/routes.rb +48 -0
- data/db/migrate/20140102000000_create_services_engine_tables.rb +131 -0
- data/db/migrate/20140517184450_new_services_columns.rb +24 -0
- data/db/migrate/20140525142842_new_configured_provider_table.rb +18 -0
- data/db/migrate/20140714172442_add_error_column_to_hl7_messages.rb +5 -0
- data/db/migrate/20140730164152_mds_upload_tables.rb +78 -0
- data/db/sql_data/service_data_setup.sql +24 -0
- data/lib/services/engine.rb +40 -0
- data/lib/services/version.rb +3 -0
- data/lib/services.rb +4 -0
- data/lib/tasks/services_tasks.rake +40 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +60 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +29 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +35 -0
- data/spec/dummy/config/environments/production.rb +68 -0
- data/spec/dummy/config/environments/test.rb +32 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/email.rb +1 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/schema.rb +237 -0
- data/spec/dummy/db/sql_data/services_isc_codes.sql +878 -0
- data/spec/dummy/log/test.log +3498 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/models/abaqis_mds_push_spec.rb +120 -0
- data/spec/models/available_file_spec.rb +234 -0
- data/spec/models/configured_account_spec.rb +39 -0
- data/spec/models/ftp_server_spec.rb +221 -0
- data/spec/models/isc_code_lookup_spec.rb +125 -0
- data/spec/models/isc_code_spec.rb +5 -0
- data/spec/models/mds_assessment_spec.rb +1070 -0
- data/spec/models/mds_pull_account_spec.rb +468 -0
- data/spec/models/mds_pull_spec.rb +48 -0
- data/spec/models/mds_push_spec.rb +43 -0
- data/spec/models/mds_ws_response_spec.rb +54 -0
- data/spec/models/pcc_mds_pull_spec.rb +273 -0
- data/spec/models/service_implementation_spec.rb +88 -0
- data/spec/models/sltc_api_exception_spec.rb +136 -0
- data/spec/models/sltc_api_spec.rb +192 -0
- data/spec/models/sltc_mds_pull_spec.rb +776 -0
- data/spec/roles/account_mapping_creator_spec.rb +40 -0
- data/spec/roles/account_mapping_updator_spec.rb +16 -0
- data/spec/roles/configured_account_creator_spec.rb +40 -0
- data/spec/roles/configured_account_updater_spec.rb +16 -0
- data/spec/roles/configured_facility_creator_spec.rb +40 -0
- data/spec/roles/configured_facility_updater_spec.rb +16 -0
- data/spec/roles/credential_creator_spec.rb +23 -0
- data/spec/roles/credential_updater_spec.rb +38 -0
- data/spec/roles/facility_mapping_creator_spec.rb +40 -0
- data/spec/roles/facility_mapping_updater_spec.rb +16 -0
- data/spec/roles/hl7_adt_message_saver_spec.rb +35 -0
- data/spec/roles/hl7_message_trimmer_spec.rb +31 -0
- data/spec/roles/monthly_service_table_cleaner_spec.rb +27 -0
- data/spec/roles/new_registration_notifier_spec.rb +18 -0
- data/spec/roles/service_ceator_spec.rb +34 -0
- data/spec/roles/service_definition_creator_spec.rb +40 -0
- data/spec/roles/service_definition_updater_spec.rb +16 -0
- data/spec/roles/service_invoker_spec.rb +22 -0
- data/spec/roles/service_updater_spec.rb +17 -0
- data/spec/roles/sltc_baseline_requestor_spec.rb +30 -0
- data/spec/roles/sltc_provider_lister_spec.rb +27 -0
- data/spec/roles/sltc_registration_completer_spec.rb +187 -0
- data/spec/roles/sltc_registration_saver_spec.rb +34 -0
- data/spec/roles/third_party_creator_spec.rb +34 -0
- data/spec/roles/third_party_updater_spec.rb +17 -0
- data/spec/spec_helper.rb +72 -0
- 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
|