From b24ed8a2ca97706fbd5ee9136fb6e52bb48a1ba6 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Tue, 30 Dec 2025 11:57:46 -0700 Subject: [PATCH 01/23] Remove deprecated 'clinicalPrivilegeActionCategory' from backend --- .../cc_common/data_model/data_client.py | 37 ++--- .../data_model/provider_record_util.py | 14 +- .../schema/adverse_action/__init__.py | 12 -- .../data_model/schema/adverse_action/api.py | 23 +-- .../schema/adverse_action/record.py | 22 +-- .../data_model/schema/privilege/record.py | 2 - .../resources/api/adverse-action-post.json | 2 +- .../test_schema/test_investigation.py | 2 +- .../tests/unit/test_provider_record_util.py | 2 +- .../tests/function/test_encumbrance_events.py | 4 +- .../provider-data-v1/handlers/encumbrance.py | 22 +-- .../test_handlers/test_encumbrance.py | 132 +----------------- .../test_handlers/test_investigation.py | 2 +- .../test_handlers/test_privilege_history.py | 4 +- .../stacks/api_stack/v1_api/api_model.py | 10 -- .../GET_PROVIDER_RESPONSE_SCHEMA.json | 6 - .../LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json | 4 - ..._LICENSE_INVESTIGATION_REQUEST_SCHEMA.json | 4 - ...RIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json | 4 - .../PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json | 4 - .../PROVIDER_USER_RESPONSE_SCHEMA.json | 6 - .../tests/smoke/investigation_smoke_tests.py | 2 +- 22 files changed, 25 insertions(+), 295 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py index 071ff066d..84c76b283 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py @@ -1527,19 +1527,10 @@ def encumber_privilege(self, adverse_action: AdverseActionData) -> None: ) now = config.current_standard_datetime - # TODO - remove the flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - from cc_common.feature_flag_client import FeatureFlagEnum, is_feature_enabled - - if is_feature_enabled(FeatureFlagEnum.ENCUMBRANCE_MULTI_CATEGORY_FLAG): - encumbrance_details = { - 'clinicalPrivilegeActionCategories': adverse_action.clinicalPrivilegeActionCategories, - 'adverseActionId': adverse_action.adverseActionId, - } - else: - encumbrance_details = { - 'clinicalPrivilegeActionCategory': adverse_action.clinicalPrivilegeActionCategory, - 'adverseActionId': adverse_action.adverseActionId, - } + encumbrance_details = { + 'clinicalPrivilegeActionCategories': adverse_action.clinicalPrivilegeActionCategories, + 'adverseActionId': adverse_action.adverseActionId, + } # The time selected here is somewhat arbitrary; however, we want this selection to not alter the date # displayed for a user when it is transformed back to their timezone. We selected noon UTC-4:00 so that @@ -3070,21 +3061,11 @@ def encumber_home_jurisdiction_license_privileges( logger.info( 'Found privileges to encumber', privilege_count=len(unencumbered_privileges_associated_with_license) ) - # TODO - remove the flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - from cc_common.feature_flag_client import FeatureFlagEnum, is_feature_enabled - - if is_feature_enabled(FeatureFlagEnum.ENCUMBRANCE_MULTI_CATEGORY_FLAG): - encumbrance_details = { - 'clinicalPrivilegeActionCategories': adverse_action.clinicalPrivilegeActionCategories, - 'licenseJurisdiction': jurisdiction, - 'adverseActionId': adverse_action_id, - } - else: - encumbrance_details = { - 'clinicalPrivilegeActionCategory': adverse_action.clinicalPrivilegeActionCategory, - 'licenseJurisdiction': jurisdiction, - 'adverseActionId': adverse_action_id, - } + encumbrance_details = { + 'clinicalPrivilegeActionCategories': adverse_action.clinicalPrivilegeActionCategories, + 'licenseJurisdiction': jurisdiction, + 'adverseActionId': adverse_action_id, + } # Build transaction items for all privileges transaction_items = [] diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py index fe538925d..717f50e13 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py @@ -383,18 +383,8 @@ def construct_simplified_privilege_history_object( and event.get('encumbranceDetails') and should_include_encumbrance_details ): - # TODO - remove the flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - # as well as check for deprecated field - from cc_common.feature_flag_client import FeatureFlagEnum, is_feature_enabled - - if is_feature_enabled(FeatureFlagEnum.ENCUMBRANCE_MULTI_CATEGORY_FLAG): - if 'clinicalPrivilegeActionCategory' in event['encumbranceDetails']: - event['note'] = event['encumbranceDetails'].get('clinicalPrivilegeActionCategory') - else: - # else we are using the new field, parse the list into a comma-separated string - event['note'] = ', '.join(event['encumbranceDetails']['clinicalPrivilegeActionCategories']) - else: - event['note'] = event['encumbranceDetails']['clinicalPrivilegeActionCategory'] + # Parse the list into a comma-separated string + event['note'] = ', '.join(event['encumbranceDetails']['clinicalPrivilegeActionCategories']) elif event['updateType'] == UpdateCategory.DEACTIVATION and event.get('deactivationDetails'): event['note'] = event['deactivationDetails']['note'] diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/__init__.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/__init__.py index d3a4b1bae..165c18605 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/__init__.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/__init__.py @@ -6,7 +6,6 @@ from cc_common.data_model.schema.common import ( AdverseActionAgainstEnum, CCDataClass, - ClinicalPrivilegeActionCategory, EncumbranceType, ) @@ -79,17 +78,6 @@ def encumbranceType(self) -> str: def encumbranceType(self, encumbrance_type_enum: EncumbranceType) -> None: self._data['encumbranceType'] = encumbrance_type_enum.value - # TODO - remove deprecated getter/setter after migrating to 'clinicalPrivilegeActionCategories' field # noqa: FIX002 - @property - def clinicalPrivilegeActionCategory(self) -> str | None: - return self._data.get('clinicalPrivilegeActionCategory') - - @clinicalPrivilegeActionCategory.setter - def clinicalPrivilegeActionCategory( - self, clinical_privilege_action_category_enum: ClinicalPrivilegeActionCategory - ) -> None: - self._data['clinicalPrivilegeActionCategory'] = clinical_privilege_action_category_enum.value - @property def clinicalPrivilegeActionCategories(self) -> list[str] | None: return self._data.get('clinicalPrivilegeActionCategories') diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py index 8ab49a878..bc97cc51d 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py @@ -26,27 +26,8 @@ class AdverseActionPostRequestSchema(ForgivingSchema): encumbranceEffectiveDate = Date(required=True, allow_none=False) encumbranceType = EncumbranceTypeField(required=True, allow_none=False) clinicalPrivilegeActionCategories = List( - ClinicalPrivilegeActionCategoryField(), required=False, allow_none=False, validate=Length(min=1) + ClinicalPrivilegeActionCategoryField(), required=True, allow_none=False, validate=Length(min=1) ) - # TODO - remove this field as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - clinicalPrivilegeActionCategory = ClinicalPrivilegeActionCategoryField(required=False, allow_none=False) - - @validates_schema - def validate_clinical_privilege_action_category_fields(self, data, **_kwargs): - """Ensure exactly one of the category fields is provided.""" - has_singular = 'clinicalPrivilegeActionCategory' in data - has_plural = 'clinicalPrivilegeActionCategories' in data - - if has_singular and has_plural: - raise ValidationError( - 'Cannot provide both clinicalPrivilegeActionCategory and clinicalPrivilegeActionCategories. ' - 'Use clinicalPrivilegeActionCategories (the singular field is deprecated).' - ) - - if not has_singular and not has_plural: - raise ValidationError( - 'Must provide either clinicalPrivilegeActionCategory or clinicalPrivilegeActionCategories.' - ) class AdverseActionPatchRequestSchema(ForgivingSchema): @@ -101,5 +82,3 @@ class AdverseActionGeneralResponseSchema(AdverseActionPublicResponseSchema): clinicalPrivilegeActionCategories = List(ClinicalPrivilegeActionCategoryField(), required=False, allow_none=False) liftingUser = Raw(required=False, allow_none=False) submittingUser = Raw(required=True, allow_none=False) - # TODO - remove this field as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - clinicalPrivilegeActionCategory = ClinicalPrivilegeActionCategoryField(required=False, allow_none=False) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py index cfd645249..b3b8c05fb 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py @@ -39,30 +39,17 @@ class AdverseActionRecordSchema(BaseRecordSchema): submittingUser = UUID(required=True, allow_none=False) creationDate = DateTime(required=True, allow_none=False) adverseActionId = UUID(required=True, allow_none=False) - # TODO - remove this field as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - clinicalPrivilegeActionCategory = ClinicalPrivilegeActionCategoryField(required=False, allow_none=False) # Populated when the action is lifted effectiveLiftDate = Date(required=False, allow_none=False) liftingUser = UUID(required=False, allow_none=False) - # TODO - remove this hook once migration is complete to the new field # noqa: FIX002 - @pre_load - def migrate_clinical_privilege_action_category_on_load(self, in_data, **_kwargs): - """Migrate deprecated clinicalPrivilegeActionCategory to clinicalPrivilegeActionCategories list - when loading from database.""" - # If the deprecated field exists and the new field doesn't, migrate it - if 'clinicalPrivilegeActionCategory' in in_data and 'clinicalPrivilegeActionCategories' not in in_data: - in_data['clinicalPrivilegeActionCategories'] = [in_data['clinicalPrivilegeActionCategory']] - # Remove the deprecated field to avoid having both - del in_data['clinicalPrivilegeActionCategory'] - return in_data @pre_dump def pre_dump_serialization(self, in_data, **_kwargs): """Pre-dump serialization to ensure the clinicalPrivilegeActionCategories list is serialized correctly.""" in_data = self.generate_pk_sk(in_data) - return self.migrate_clinical_privilege_action_category(in_data) + return in_data def generate_pk_sk(self, in_data, **_kwargs): in_data['pk'] = f'{in_data["compact"]}#PROVIDER#{in_data["providerId"]}' @@ -73,13 +60,6 @@ def generate_pk_sk(self, in_data, **_kwargs): ) return in_data - # TODO - remove this hook as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - def migrate_clinical_privilege_action_category(self, in_data, **_kwargs): - """Migrate deprecated clinicalPrivilegeActionCategory to clinicalPrivilegeActionCategories list.""" - # If the deprecated field exists and the new field doesn't, migrate it for backwards compatibility - if 'clinicalPrivilegeActionCategory' in in_data and 'clinicalPrivilegeActionCategories' not in in_data: - in_data['clinicalPrivilegeActionCategories'] = [in_data['clinicalPrivilegeActionCategory']] - return in_data @validates_schema def validate_license_type(self, data, **_kwargs): # noqa: ARG001 unused-argument diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py index cc6996389..7490271f8 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py @@ -64,8 +64,6 @@ class EncumbranceDetailsSchema(Schema): adverseActionId = UUID(required=True, allow_none=False) # present if update is created by upstream license encumbrance licenseJurisdiction = Jurisdiction(required=False, allow_none=False) - # TODO - remove this field as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - clinicalPrivilegeActionCategory = ClinicalPrivilegeActionCategoryField(required=False, allow_none=False) @BaseRecordSchema.register_schema('privilege') diff --git a/backend/compact-connect/lambdas/python/common/tests/resources/api/adverse-action-post.json b/backend/compact-connect/lambdas/python/common/tests/resources/api/adverse-action-post.json index 24f72fe95..bbd70db8a 100644 --- a/backend/compact-connect/lambdas/python/common/tests/resources/api/adverse-action-post.json +++ b/backend/compact-connect/lambdas/python/common/tests/resources/api/adverse-action-post.json @@ -1,5 +1,5 @@ { "encumbranceEffectiveDate": "2023-01-15", "encumbranceType": "suspension", - "clinicalPrivilegeActionCategory": "Unsafe Practice or Substandard Care" + "clinicalPrivilegeActionCategories": ["Unsafe Practice or Substandard Care"] } diff --git a/backend/compact-connect/lambdas/python/common/tests/unit/test_data_model/test_schema/test_investigation.py b/backend/compact-connect/lambdas/python/common/tests/unit/test_data_model/test_schema/test_investigation.py index 4278fd206..f1e56196a 100644 --- a/backend/compact-connect/lambdas/python/common/tests/unit/test_data_model/test_schema/test_investigation.py +++ b/backend/compact-connect/lambdas/python/common/tests/unit/test_data_model/test_schema/test_investigation.py @@ -143,7 +143,7 @@ def test_validate_patch_with_encumbrance(self): 'encumbrance': { 'encumbranceEffectiveDate': '2024-03-15', 'encumbranceType': 'suspension', - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', + 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], } } result = InvestigationPatchRequestSchema().load(investigation_data) diff --git a/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py b/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py index dae17ee88..1496a529a 100644 --- a/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py +++ b/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py @@ -952,7 +952,7 @@ def test_construct_simplified_privilege_history_object_returns_encumbrance_notes 'updatedValues': {'encumberedStatus': 'licenseEncumbered'}, 'updateType': 'encumbrance', 'encumbranceDetails': { - 'clinicalPrivilegeActionCategory': 'Non-compliance With Requirements', + 'clinicalPrivilegeActionCategories': ['Non-compliance With Requirements'], 'licenseJurisdiction': 'oh', }, }, diff --git a/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py b/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py index 7600f8011..e42b12bea 100644 --- a/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py +++ b/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py @@ -289,7 +289,7 @@ def test_license_encumbrance_listener_handles_all_privileges_already_encumbered_ self.test_data_generator.put_default_adverse_action_record_in_provider_table( value_overrides={ 'actionAgainst': 'license', - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', + 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], } ) @@ -321,7 +321,7 @@ def test_license_encumbrance_listener_handles_all_privileges_already_encumbered_ { 'adverseActionId': UUID(DEFAULT_ADVERSE_ACTION_ID), 'licenseJurisdiction': 'oh', - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', + 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], }, update_encumbrance_details, ) diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/handlers/encumbrance.py b/backend/compact-connect/lambdas/python/provider-data-v1/handlers/encumbrance.py index ced4bcc95..a946550f1 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/handlers/encumbrance.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/handlers/encumbrance.py @@ -11,7 +11,6 @@ from cc_common.data_model.schema.common import ( AdverseActionAgainstEnum, CCPermissionsAction, - ClinicalPrivilegeActionCategory, EncumbranceType, ) from cc_common.exceptions import CCInvalidRequestException @@ -99,26 +98,7 @@ def _generate_adverse_action_for_record_type( adverse_action.licenseType = license_type.name adverse_action.actionAgainst = adverse_action_against_record_type adverse_action.encumbranceType = EncumbranceType(adverse_action_post_body['encumbranceType']) - # TODO - remove the flag conditions as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - from cc_common.feature_flag_client import FeatureFlagEnum, is_feature_enabled - - if is_feature_enabled(FeatureFlagEnum.ENCUMBRANCE_MULTI_CATEGORY_FLAG): - if 'clinicalPrivilegeActionCategory' in adverse_action_post_body: - # replicate data to both the deprecated and new fields - adverse_action.clinicalPrivilegeActionCategory = ClinicalPrivilegeActionCategory( - adverse_action_post_body['clinicalPrivilegeActionCategory'] - ) - adverse_action.clinicalPrivilegeActionCategories = [ - ClinicalPrivilegeActionCategory(adverse_action_post_body['clinicalPrivilegeActionCategory']) - ] - else: - adverse_action.clinicalPrivilegeActionCategories = adverse_action_post_body[ - 'clinicalPrivilegeActionCategories' - ] - else: - adverse_action.clinicalPrivilegeActionCategory = ClinicalPrivilegeActionCategory( - adverse_action_post_body['clinicalPrivilegeActionCategory'] - ) + adverse_action.clinicalPrivilegeActionCategories = adverse_action_post_body['clinicalPrivilegeActionCategories'] adverse_action.effectiveStartDate = encumbrance_effective_date adverse_action.submittingUser = submitting_user adverse_action.creationDate = config.current_standard_datetime diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py index 42fdd2fba..c254b63cb 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py @@ -47,7 +47,7 @@ def _generate_test_body(): 'encumbranceEffectiveDate': TEST_ENCUMBRANCE_EFFECTIVE_DATE, # These Enums are expected to be `str` type, so we'll directly access their .value 'encumbranceType': EncumbranceType.SUSPENSION.value, - 'clinicalPrivilegeActionCategory': ClinicalPrivilegeActionCategory.UNSAFE_PRACTICE.value, + 'clinicalPrivilegeActionCategories': [ClinicalPrivilegeActionCategory.UNSAFE_PRACTICE.value], } @@ -126,8 +126,6 @@ def test_privilege_encumbrance_handler_adds_adverse_action_record_in_provider_da 'encumbranceType': DEFAULT_ENCUMBRANCE_TYPE, 'effectiveStartDate': date.fromisoformat(TEST_ENCUMBRANCE_EFFECTIVE_DATE), 'jurisdiction': DEFAULT_PRIVILEGE_JURISDICTION, - # TODO - remove this as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', } ) loaded_adverse_action = AdverseActionData.from_database_record(item) @@ -203,7 +201,7 @@ def test_privilege_encumbrance_handler_adds_privilege_update_record_in_provider_ 'effectiveDate': datetime.fromisoformat(TEST_ENCUMBRANCE_EFFECTIVE_DATETIME), 'createDate': datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP), 'encumbranceDetails': { - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', + 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], 'adverseActionId': loaded_privilege_update_data.encumbranceDetails['adverseActionId'], }, } @@ -345,68 +343,6 @@ def test_privilege_encumbrance_handler_handles_event_publishing_failure(self, mo encumbrance_handler(event, self.mock_context) self.assertEqual('Event publishing failed', str(context.exception)) - # TODO - remove this test once the deprecated 'clinicalPrivilegeActionCategory' field is removed # noqa: FIX002 - def test_privilege_encumbrance_handler_migrates_clinical_privilege_action_category_to_list(self): - """Test that the deprecated clinicalPrivilegeActionCategory field is migrated - to clinicalPrivilegeActionCategories list.""" - from cc_common.data_model.schema.adverse_action import AdverseActionData - from handlers.encumbrance import encumbrance_handler - - event, test_privilege_record = self._when_testing_privilege_encumbrance() - - response = encumbrance_handler(event, self.mock_context) - self.assertEqual(200, response['statusCode'], msg=json.loads(response['body'])) - - # Verify that the adverse action record was created with the migrated field - adverse_action_encumbrances = self._provider_table.query( - Select='ALL_ATTRIBUTES', - KeyConditionExpression=Key('pk').eq(test_privilege_record.serialize_to_database_record()['pk']) - & Key('sk').begins_with( - f'{test_privilege_record.compact}#PROVIDER#privilege/{test_privilege_record.jurisdiction}/slp#ADVERSE_ACTION' - ), - ) - self.assertEqual(1, len(adverse_action_encumbrances['Items'])) - item = adverse_action_encumbrances['Items'][0] - - # Load the adverse action record from the database - loaded_adverse_action = AdverseActionData.from_database_record(item) - - # TODO - remove this assertion as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - # Verify that the deprecated field is present in the stored data - self.assertIn('clinicalPrivilegeActionCategory', item) - self.assertEqual('Unsafe Practice or Substandard Care', loaded_adverse_action.clinicalPrivilegeActionCategory) - - # Verify that the new list field contains the migrated value - self.assertIn('clinicalPrivilegeActionCategories', item) - self.assertIsNotNone(loaded_adverse_action.clinicalPrivilegeActionCategories) - self.assertEqual( - ['Unsafe Practice or Substandard Care'], loaded_adverse_action.clinicalPrivilegeActionCategories - ) - - # TODO - remove this test once the deprecated 'clinicalPrivilegeActionCategory' field is removed # noqa: FIX002 - def test_privilege_encumbrance_handler_returns_400_if_both_category_fields_provided(self): - """Test that a 400 error is returned when both clinicalPrivilegeActionCategory and - clinicalPrivilegeActionCategories are provided.""" - from handlers.encumbrance import encumbrance_handler - - event, test_privilege_record = self._when_testing_privilege_encumbrance( - body_overrides={ - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', - 'clinicalPrivilegeActionCategories': [ - 'Unsafe Practice or Substandard Care', - 'Non-compliance With Requirements', - ], - } - ) - - response = encumbrance_handler(event, self.mock_context) - self.assertEqual(400, response['statusCode'], msg=json.loads(response['body'])) - response_body = json.loads(response['body']) - - self.assertIn( - 'Cannot provide both clinicalPrivilegeActionCategory and clinicalPrivilegeActionCategories', - response_body['message'], - ) mock_flag_client = MagicMock() @@ -491,8 +427,6 @@ def test_license_encumbrance_handler_adds_adverse_action_record_in_provider_data 'encumbranceType': DEFAULT_ENCUMBRANCE_TYPE, 'effectiveStartDate': date.fromisoformat(TEST_ENCUMBRANCE_EFFECTIVE_DATE), 'jurisdiction': DEFAULT_LICENSE_JURISDICTION, - # TODO - remove this as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', } ) loaded_adverse_action = AdverseActionData.from_database_record(item) @@ -629,68 +563,6 @@ def test_license_encumbrance_handler_returns_400_if_encumbrance_date_in_future(s response_body, ) - # TODO - remove this test once the deprecated 'clinicalPrivilegeActionCategory' field is removed # noqa: FIX002 - def test_license_encumbrance_handler_migrates_clinical_privilege_action_category_to_list(self): - """Test that the deprecated clinicalPrivilegeActionCategory field is migrated to - clinicalPrivilegeActionCategories list.""" - from cc_common.data_model.schema.adverse_action import AdverseActionData - from handlers.encumbrance import encumbrance_handler - - event, test_license_record = self._when_testing_valid_license_encumbrance() - - response = encumbrance_handler(event, self.mock_context) - self.assertEqual(200, response['statusCode'], msg=json.loads(response['body'])) - - # Verify that the adverse action record was created with the migrated field - adverse_action_encumbrances = self._provider_table.query( - Select='ALL_ATTRIBUTES', - KeyConditionExpression=Key('pk').eq(test_license_record.serialize_to_database_record()['pk']) - & Key('sk').begins_with( - f'{test_license_record.compact}#PROVIDER#license/{test_license_record.jurisdiction}/slp#ADVERSE_ACTION' - ), - ) - self.assertEqual(1, len(adverse_action_encumbrances['Items'])) - item = adverse_action_encumbrances['Items'][0] - - # Load the adverse action record from the database - loaded_adverse_action = AdverseActionData.from_database_record(item) - - # TODO - remove this assertion as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - # Verify that the deprecated field is present in the stored data - self.assertIn('clinicalPrivilegeActionCategory', item) - self.assertEqual('Unsafe Practice or Substandard Care', loaded_adverse_action.clinicalPrivilegeActionCategory) - - # Verify that the new list field contains the migrated value - self.assertIn('clinicalPrivilegeActionCategories', item) - self.assertIsNotNone(loaded_adverse_action.clinicalPrivilegeActionCategories) - self.assertEqual( - ['Unsafe Practice or Substandard Care'], loaded_adverse_action.clinicalPrivilegeActionCategories - ) - - # TODO - remove this test once the deprecated 'clinicalPrivilegeActionCategory' field is removed # noqa: FIX002 - def test_license_encumbrance_handler_returns_400_if_both_category_fields_provided(self): - """Test that a 400 error is returned when both clinicalPrivilegeActionCategory - and clinicalPrivilegeActionCategories are provided.""" - from handlers.encumbrance import encumbrance_handler - - event, test_license_record = self._when_testing_valid_license_encumbrance( - body_overrides={ - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', - 'clinicalPrivilegeActionCategories': [ - 'Unsafe Practice or Substandard Care', - 'Non-compliance With Requirements', - ], - } - ) - - response = encumbrance_handler(event, self.mock_context) - self.assertEqual(400, response['statusCode'], msg=json.loads(response['body'])) - response_body = json.loads(response['body']) - - self.assertIn( - 'Cannot provide both clinicalPrivilegeActionCategory and clinicalPrivilegeActionCategories', - response_body['message'], - ) @mock_aws diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_investigation.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_investigation.py index c89a412d1..c33544d7f 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_investigation.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_investigation.py @@ -42,7 +42,7 @@ def _generate_test_investigation_close_with_encumbrance_body(): 'encumbranceEffectiveDate': TEST_ENCUMBRANCE_EFFECTIVE_DATE, # These Enums are expected to be `str` type, so we'll directly access their .value 'encumbranceType': EncumbranceType.SUSPENSION.value, - 'clinicalPrivilegeActionCategory': ClinicalPrivilegeActionCategory.UNSAFE_PRACTICE.value, + 'clinicalPrivilegeActionCategories': [ClinicalPrivilegeActionCategory.UNSAFE_PRACTICE.value], }, } diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py index ce926f7ac..eef840245 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py @@ -25,7 +25,7 @@ def _when_testing_provider_user_event_with_custom_claims(self): value_overrides={ 'updateType': 'encumbrance', 'encumbranceDetails': { - 'clinicalPrivilegeActionCategory': 'Non-compliance With Requirements', + 'clinicalPrivilegeActionCategories': ['Non-compliance With Requirements'], 'licenseJurisdiction': 'oh', 'adverseActionId': DEFAULT_ADVERSE_ACTION_ID, }, @@ -50,7 +50,7 @@ def _when_testing_public_endpoint(self): value_overrides={ 'updateType': 'encumbrance', 'encumbranceDetails': { - 'clinicalPrivilegeActionCategory': 'Non-compliance With Requirements', + 'clinicalPrivilegeActionCategories': ['Non-compliance With Requirements'], 'licenseJurisdiction': 'oh', 'adverseActionId': DEFAULT_ADVERSE_ACTION_ID, }, diff --git a/backend/compact-connect/stacks/api_stack/v1_api/api_model.py b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py index a774757a9..6c73bee88 100644 --- a/backend/compact-connect/stacks/api_stack/v1_api/api_model.py +++ b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py @@ -1160,8 +1160,6 @@ def _provider_detail_response_schema(self): ), 'dateOfUpdate': JsonSchema(type=JsonSchemaType.STRING, format='date-time'), 'encumbranceType': JsonSchema(type=JsonSchemaType.STRING), - # TODO - remove this after migrating to list field # noqa: FIX002 - 'clinicalPrivilegeActionCategory': JsonSchema(type=JsonSchemaType.STRING), 'clinicalPrivilegeActionCategories': JsonSchema( type=JsonSchemaType.ARRAY, description='The categories of clinical privilege action', @@ -1306,8 +1304,6 @@ def _provider_detail_response_schema(self): ), 'dateOfUpdate': JsonSchema(type=JsonSchemaType.STRING, format='date-time'), 'encumbranceType': JsonSchema(type=JsonSchemaType.STRING), - # TODO - remove this after migrating to list field # noqa: FIX002 - 'clinicalPrivilegeActionCategory': JsonSchema(type=JsonSchemaType.STRING), 'clinicalPrivilegeActionCategories': JsonSchema( type=JsonSchemaType.ARRAY, description='The categories of clinical privilege action', @@ -1418,12 +1414,6 @@ def _encumbrance_request_schema(self) -> JsonSchema: pattern=cc_api.YMD_FORMAT, ), 'encumbranceType': self._encumbrance_type_schema, - # TODO - remove this after migrating to 'clinicalPrivilegeActionCategories' field # noqa: FIX002 - 'clinicalPrivilegeActionCategory': JsonSchema( - type=JsonSchemaType.STRING, - description='(Deprecated) The category of clinical privilege action. ' - 'Use clinicalPrivilegeActionCategories instead.', - ), 'clinicalPrivilegeActionCategories': JsonSchema( type=JsonSchemaType.ARRAY, description='The categories of clinical privilege action', diff --git a/backend/compact-connect/tests/resources/snapshots/GET_PROVIDER_RESPONSE_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/GET_PROVIDER_RESPONSE_SCHEMA.json index c6b5091df..7c87c0372 100644 --- a/backend/compact-connect/tests/resources/snapshots/GET_PROVIDER_RESPONSE_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/GET_PROVIDER_RESPONSE_SCHEMA.json @@ -622,9 +622,6 @@ "encumbranceType": { "type": "string" }, - "clinicalPrivilegeActionCategory": { - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { @@ -1549,9 +1546,6 @@ "encumbranceType": { "type": "string" }, - "clinicalPrivilegeActionCategory": { - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { diff --git a/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json index c29d25311..e79265a7b 100644 --- a/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json @@ -29,10 +29,6 @@ ], "type": "string" }, - "clinicalPrivilegeActionCategory": { - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead.", - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { diff --git a/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json index 2bf548c90..ca76ada4e 100644 --- a/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json @@ -37,10 +37,6 @@ ], "type": "string" }, - "clinicalPrivilegeActionCategory": { - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead.", - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { diff --git a/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json index 2bf548c90..ca76ada4e 100644 --- a/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json @@ -37,10 +37,6 @@ ], "type": "string" }, - "clinicalPrivilegeActionCategory": { - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead.", - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { diff --git a/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json index c29d25311..e79265a7b 100644 --- a/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json @@ -29,10 +29,6 @@ ], "type": "string" }, - "clinicalPrivilegeActionCategory": { - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead.", - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { diff --git a/backend/compact-connect/tests/resources/snapshots/PROVIDER_USER_RESPONSE_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PROVIDER_USER_RESPONSE_SCHEMA.json index c6b5091df..7c87c0372 100644 --- a/backend/compact-connect/tests/resources/snapshots/PROVIDER_USER_RESPONSE_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PROVIDER_USER_RESPONSE_SCHEMA.json @@ -622,9 +622,6 @@ "encumbranceType": { "type": "string" }, - "clinicalPrivilegeActionCategory": { - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { @@ -1549,9 +1546,6 @@ "encumbranceType": { "type": "string" }, - "clinicalPrivilegeActionCategory": { - "type": "string" - }, "clinicalPrivilegeActionCategories": { "description": "The categories of clinical privilege action", "items": { diff --git a/backend/compact-connect/tests/smoke/investigation_smoke_tests.py b/backend/compact-connect/tests/smoke/investigation_smoke_tests.py index 347699287..d6fcfba90 100755 --- a/backend/compact-connect/tests/smoke/investigation_smoke_tests.py +++ b/backend/compact-connect/tests/smoke/investigation_smoke_tests.py @@ -396,7 +396,7 @@ def test_close_privilege_investigation_with_encumbrance(auth_headers): 'encumbrance': { 'encumbranceEffectiveDate': '2024-01-15', 'encumbranceType': 'fine', - 'clinicalPrivilegeActionCategory': 'Unsafe Practice or Substandard Care', + 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], }, } From 3edc01f0967b233dd26a8a5f39c88305e45df327 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Tue, 30 Dec 2025 13:10:54 -0700 Subject: [PATCH 02/23] Remove feature flag and test mocks --- .../common/cc_common/feature_flag_enum.py | 1 - .../tests/unit/test_provider_record_util.py | 11 +-- .../tests/function/test_encumbrance_events.py | 77 ------------------- .../test_handlers/test_encumbrance.py | 55 +------------ .../test_handlers/test_privilege_history.py | 4 +- .../stacks/feature_flag_stack/__init__.py | 11 --- 6 files changed, 6 insertions(+), 153 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/feature_flag_enum.py b/backend/compact-connect/lambdas/python/common/cc_common/feature_flag_enum.py index 5180b9199..53e579568 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/feature_flag_enum.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/feature_flag_enum.py @@ -11,5 +11,4 @@ class FeatureFlagEnum(StrEnum): # flag used by internal testing TEST_FLAG = 'test-flag' # runtime flags - ENCUMBRANCE_MULTI_CATEGORY_FLAG = 'encumbrance-multi-category-flag' DUPLICATE_SSN_UPLOAD_CHECK_FLAG = 'duplicate-ssn-upload-check-flag' diff --git a/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py b/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py index 1496a529a..d8397e835 100644 --- a/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py +++ b/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py @@ -911,9 +911,7 @@ def test_construct_simplified_privilege_history_object_returns_deactivation_note self.maxDiff = None self.assertEqual(expected_history, history) - # TODO - remove mock flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=True) - def test_construct_simplified_privilege_history_object_returns_encumbrance_notes_if_requested(self, mock_flag): # noqa: ARG002 + def test_construct_simplified_privilege_history_object_returns_encumbrance_notes_if_requested(self): """Test that construct_simplified_privilege_history_object extracts the encumbrance notes successfully""" from cc_common.data_model.provider_record_util import ProviderRecordUtility @@ -991,12 +989,7 @@ def test_construct_simplified_privilege_history_object_returns_encumbrance_notes self.maxDiff = None self.assertEqual(expected_history, history) - # TODO - remove mock flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=True) - def test_construct_simplified_privilege_history_object_does_not_return_encumbrance_notes_if_not_requested( - self, - mock_flag, # noqa: ARG002 - ): + def test_construct_simplified_privilege_history_object_does_not_return_encumbrance_notes_if_not_requested(self): """Test that construct_simplified_privilege_history_object does not extract the encumbrance notes if it should not""" from cc_common.data_model.provider_record_util import ProviderRecordUtility diff --git a/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py b/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py index e42b12bea..ada58287d 100644 --- a/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py +++ b/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py @@ -20,14 +20,7 @@ from . import TstFunction -# TODO - remove the mock flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 -mock_feature_client = MagicMock() -mock_feature_client.return_value = True - - @mock_aws -# TODO - remove the mock flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 -@patch('cc_common.feature_flag_client.is_feature_enabled', mock_feature_client) @patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP)) class TestEncumbranceEvents(TstFunction): """Test suite for license encumbrance event handlers.""" @@ -262,76 +255,6 @@ def test_license_encumbrance_listener_handles_all_privileges_already_encumbered( # Verify one event was published for the privilege update mock_publish_event.assert_called_once() - # TODO - remove this test as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - @patch('cc_common.event_bus_client.EventBusClient._publish_event') - def test_license_encumbrance_listener_handles_all_privileges_already_encumbered_with_experiment_disabled( - self, - mock_publish_event, - ): - mock_feature_client.return_value = False - """Test that license encumbrance event handles case where all matching privileges are already encumbered.""" - from cc_common.data_model.schema.common import PrivilegeEncumberedStatusEnum - from handlers.encumbrance_events import license_encumbrance_listener - - # Set up test data - self.test_data_generator.put_default_provider_record_in_provider_table() - - # Create privileges that are already encumbered - privilege = self.test_data_generator.put_default_privilege_record_in_provider_table( - value_overrides={ - 'licenseJurisdiction': DEFAULT_LICENSE_JURISDICTION, - 'licenseTypeAbbreviation': DEFAULT_LICENSE_TYPE_ABBREVIATION, - 'encumberedStatus': 'encumbered', - } - ) - - # add adverse action item for license - self.test_data_generator.put_default_adverse_action_record_in_provider_table( - value_overrides={ - 'actionAgainst': 'license', - 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], - } - ) - - message = self._generate_license_encumbrance_message() - event = self._create_sqs_event(message) - - # Execute the handler - license_encumbrance_listener(event, self.mock_context) - - # Verify privilege status remains unchanged - provider_records = self.config.data_client.get_provider_user_records( - compact=DEFAULT_COMPACT, - provider_id=DEFAULT_PROVIDER_ID, - ) - - privileges = provider_records.get_privilege_records() - self.assertEqual(1, len(privileges)) - - self.assertEqual(PrivilegeEncumberedStatusEnum.ENCUMBERED, privileges[0].encumberedStatus) - - # Get update records using test_data_generator - update_records = self.test_data_generator.query_privilege_update_records_for_given_record_from_database( - privilege - ) - self.assertEqual(1, len(update_records)) - update_record = update_records[0] - update_encumbrance_details = update_record.encumbranceDetails - self.assertEqual( - { - 'adverseActionId': UUID(DEFAULT_ADVERSE_ACTION_ID), - 'licenseJurisdiction': 'oh', - 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], - }, - update_encumbrance_details, - ) - - # Verify one event was published for the privilege update - mock_publish_event.assert_called_once() - - # reset the flag client for the other tests - mock_feature_client.return_value = True - def test_license_encumbrance_listener_creates_privilege_update_records(self): """Test that license encumbrance event creates appropriate privilege update records.""" from handlers.encumbrance_events import license_encumbrance_listener diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py index c254b63cb..4e5e5d29a 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py @@ -98,8 +98,7 @@ def test_privilege_encumbrance_handler_returns_ok_message_with_valid_body(self): response_body, ) - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=True) - def test_privilege_encumbrance_handler_adds_adverse_action_record_in_provider_data_table(self, mock_flag): # noqa: ARG002 + def test_privilege_encumbrance_handler_adds_adverse_action_record_in_provider_data_table(self): from cc_common.data_model.schema.adverse_action import AdverseActionData from handlers.encumbrance import encumbrance_handler @@ -135,49 +134,7 @@ def test_privilege_encumbrance_handler_adds_adverse_action_record_in_provider_da loaded_adverse_action.to_dict(), ) - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=True) - def test_privilege_encumbrance_handler_adds_privilege_update_record_in_provider_data_table(self, mock_flag): # noqa: ARG002 - from handlers.encumbrance import encumbrance_handler - - event, test_privilege_record = self._when_testing_privilege_encumbrance() - - response = encumbrance_handler(event, self.mock_context) - self.assertEqual(200, response['statusCode'], msg=json.loads(response['body'])) - - # Verify that the encumbrance record was added to the provider data table - privilege_update_records = ( - self.test_data_generator.query_privilege_update_records_for_given_record_from_database( - test_privilege_record - ) - ) - self.assertEqual(1, len(privilege_update_records)) - loaded_privilege_update_data = privilege_update_records[0] - - expected_privilege_update_data = self.test_data_generator.generate_default_privilege_update( - value_overrides={ - 'updateType': 'encumbrance', - 'updatedValues': {'encumberedStatus': 'encumbered'}, - 'effectiveDate': datetime.fromisoformat(TEST_ENCUMBRANCE_EFFECTIVE_DATETIME), - 'createDate': datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP), - 'encumbranceDetails': { - 'clinicalPrivilegeActionCategories': ['Unsafe Practice or Substandard Care'], - 'adverseActionId': loaded_privilege_update_data.encumbranceDetails['adverseActionId'], - }, - } - ) - - self.assertEqual( - expected_privilege_update_data.to_dict(), - loaded_privilege_update_data.to_dict(), - ) - self.assertEqual({'encumberedStatus': 'encumbered'}, loaded_privilege_update_data.updatedValues) - - # TODO - remove the test as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=False) - def test_privilege_encumbrance_handler_adds_privilege_update_record_in_provider_data_table_flag_off( - self, - mock_flag, # noqa: ARG002 - ): + def test_privilege_encumbrance_handler_adds_privilege_update_record_in_provider_data_table(self): from handlers.encumbrance import encumbrance_handler event, test_privilege_record = self._when_testing_privilege_encumbrance() @@ -345,12 +302,7 @@ def test_privilege_encumbrance_handler_handles_event_publishing_failure(self, mo -mock_flag_client = MagicMock() -mock_flag_client.return_value = True - - @mock_aws -@patch('cc_common.feature_flag_client.is_feature_enabled', mock_flag_client) @patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP)) class TestPostLicenseEncumbrance(TstFunction): """Test suite for license encumbrance endpoints.""" @@ -398,8 +350,7 @@ def test_license_encumbrance_handler_returns_ok_message_with_valid_body(self): response_body, ) - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=True) - def test_license_encumbrance_handler_adds_adverse_action_record_in_provider_data_table(self, mock_flag): # noqa: ARG002 + def test_license_encumbrance_handler_adds_adverse_action_record_in_provider_data_table(self): from cc_common.data_model.schema.adverse_action import AdverseActionData from handlers.encumbrance import encumbrance_handler diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py index eef840245..f63df06cd 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py @@ -222,9 +222,7 @@ def test_get_privilege_history_public_returns_expected_history(self): self.assertEqual(expected_history, history_data) - # TODO - remove the mock flag as part of https://github.com/csg-org/CompactConnect/issues/1136 # noqa: FIX002 - @patch('cc_common.feature_flag_client.is_feature_enabled', return_value=True) - def test_get_privilege_history_staff_returns_expected_history(self, mock_flag): # noqa: ARG002 + def test_get_privilege_history_staff_returns_expected_history(self): from handlers.privilege_history import privilege_history_handler event = self._when_testing_staff_endpoint() diff --git a/backend/compact-connect/stacks/feature_flag_stack/__init__.py b/backend/compact-connect/stacks/feature_flag_stack/__init__.py index 3700c5696..fe12391f0 100644 --- a/backend/compact-connect/stacks/feature_flag_stack/__init__.py +++ b/backend/compact-connect/stacks/feature_flag_stack/__init__.py @@ -113,17 +113,6 @@ def __init__( environment_name=environment_name, ) - self.encumbrance_multiple_category_flag = FeatureFlagResource( - self, - 'EncumbranceMultiCategoryFlag', - provider=self.provider, - flag_name='encumbrance-multi-category-flag', - auto_enable_envs=[ - FeatureFlagEnvironmentName.TEST, - ], - environment_name=environment_name, - ) - self.duplicate_ssn_upload_check_flag = FeatureFlagResource( self, 'DuplicateSsnUploadCheckFlag', From 3086fae7c3301240bfeacf018949f75659ad79a1 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Tue, 30 Dec 2025 13:23:54 -0700 Subject: [PATCH 03/23] formatting/linter --- .../cc_common/data_model/schema/adverse_action/api.py | 1 - .../cc_common/data_model/schema/adverse_action/record.py | 7 ++----- .../data-events/tests/function/test_encumbrance_events.py | 3 ++- .../tests/function/test_handlers/test_encumbrance.py | 4 +--- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py index bc97cc51d..e4948db2b 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/api.py @@ -1,5 +1,4 @@ # ruff: noqa: N801, N815 invalid-name -from marshmallow import ValidationError, validates_schema from marshmallow.fields import Date, List, Raw, String from marshmallow.validate import Length, OneOf diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py index b3b8c05fb..c3826c716 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py @@ -1,5 +1,5 @@ # ruff: noqa: N801, N815 invalid-name -from marshmallow import ValidationError, pre_dump, pre_load, validates_schema +from marshmallow import ValidationError, pre_dump, validates_schema from marshmallow.fields import UUID, Date, DateTime, List, String from marshmallow.validate import OneOf @@ -44,12 +44,10 @@ class AdverseActionRecordSchema(BaseRecordSchema): effectiveLiftDate = Date(required=False, allow_none=False) liftingUser = UUID(required=False, allow_none=False) - @pre_dump def pre_dump_serialization(self, in_data, **_kwargs): """Pre-dump serialization to ensure the clinicalPrivilegeActionCategories list is serialized correctly.""" - in_data = self.generate_pk_sk(in_data) - return in_data + return self.generate_pk_sk(in_data) def generate_pk_sk(self, in_data, **_kwargs): in_data['pk'] = f'{in_data["compact"]}#PROVIDER#{in_data["providerId"]}' @@ -60,7 +58,6 @@ def generate_pk_sk(self, in_data, **_kwargs): ) return in_data - @validates_schema def validate_license_type(self, data, **_kwargs): # noqa: ARG001 unused-argument compact = data['compact'] diff --git a/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py b/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py index ada58287d..8b87144ba 100644 --- a/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py +++ b/backend/compact-connect/lambdas/python/data-events/tests/function/test_encumbrance_events.py @@ -1,7 +1,7 @@ import json import uuid from datetime import date, datetime, time -from unittest.mock import ANY, MagicMock, patch +from unittest.mock import ANY, patch from uuid import UUID from common_test.test_constants import ( @@ -20,6 +20,7 @@ from . import TstFunction + @mock_aws @patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP)) class TestEncumbranceEvents(TstFunction): diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py index 4e5e5d29a..9179e758d 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_encumbrance.py @@ -1,6 +1,6 @@ import json from datetime import UTC, date, datetime, timedelta -from unittest.mock import MagicMock, patch +from unittest.mock import patch from uuid import uuid4 from boto3.dynamodb.conditions import Key @@ -301,7 +301,6 @@ def test_privilege_encumbrance_handler_handles_event_publishing_failure(self, mo self.assertEqual('Event publishing failed', str(context.exception)) - @mock_aws @patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP)) class TestPostLicenseEncumbrance(TstFunction): @@ -515,7 +514,6 @@ def test_license_encumbrance_handler_returns_400_if_encumbrance_date_in_future(s ) - @mock_aws @patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP)) class TestPatchPrivilegeEncumbranceLifting(TstFunction): From 6f1695605b26e7c9ed15463c10bacc0635f938a5 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 11:14:59 -0600 Subject: [PATCH 04/23] Remove encumbrance feature flag from FE --- webroot/src/app.config.ts | 1 - .../src/components/LicenseCard/LicenseCard.ts | 70 ++++--------------- .../components/LicenseCard/LicenseCard.vue | 5 +- .../components/PrivilegeCard/PrivilegeCard.ts | 70 ++++--------------- .../PrivilegeCard/PrivilegeCard.vue | 5 +- .../AdverseAction/AdverseAction.model.spec.ts | 2 - .../AdverseAction/AdverseAction.model.ts | 1 - webroot/src/network/licenseApi/data.api.ts | 42 ++--------- webroot/src/network/mocks/mock.data.api.ts | 18 +---- webroot/src/network/mocks/mock.data.ts | 10 +-- 10 files changed, 40 insertions(+), 184 deletions(-) diff --git a/webroot/src/app.config.ts b/webroot/src/app.config.ts index b1088e695..896743bb6 100644 --- a/webroot/src/app.config.ts +++ b/webroot/src/app.config.ts @@ -307,7 +307,6 @@ export const compacts = { // = Feature gate IDs = // ============================= export enum FeatureGates { - ENCUMBER_MULTI_CATEGORY = 'encumbrance-multi-category-flag', EXAMPLE_FEATURE_1 = 'test-feature-1', // Keep this ID in place for examples & tests } diff --git a/webroot/src/components/LicenseCard/LicenseCard.ts b/webroot/src/components/LicenseCard/LicenseCard.ts index 08d979833..07807a013 100644 --- a/webroot/src/components/LicenseCard/LicenseCard.ts +++ b/webroot/src/components/LicenseCard/LicenseCard.ts @@ -16,7 +16,7 @@ import { ComputedRef, nextTick } from 'vue'; -import { dateFormatPatterns, FeatureGates } from '@/app.config'; +import { dateFormatPatterns } from '@/app.config'; import MixinForm from '@components/Forms/_mixins/form.mixin'; import InputDate from '@components/Forms/InputDate/InputDate.vue'; import InputSelect from '@components/Forms/InputSelect/InputSelect.vue'; @@ -99,10 +99,6 @@ class LicenseCard extends mixins(MixinForm) { // // Computed // - get featureGates(): typeof FeatureGates { - return FeatureGates; - } - get userStore() { return this.$store.state.user; } @@ -261,19 +257,10 @@ class LicenseCard extends mixins(MixinForm) { } get npdbCategoryOptions(): Array<{ value: string, name: string | ComputedRef }> { - const options = this.$tm('licensing.npdbTypes').map((npdbType) => ({ + return this.$tm('licensing.npdbTypes').map((npdbType) => ({ value: npdbType.key, name: npdbType.name, })); - - if (!this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY)) { - options.unshift({ - value: '', - name: computed(() => this.$t('common.selectOption')), - }); - } - - return options; } get endInvestigationModalTitle(): string { @@ -324,27 +311,14 @@ class LicenseCard extends mixins(MixinForm) { validation: Joi.string().required().messages(this.joiMessages.string), valueOptions: this.encumberDisciplineOptions, }), - ...(this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - encumberModalNpdbCategories: new FormInput({ - id: 'npdb-categories', - name: 'npdb-categories', - label: computed(() => this.$t('licensing.npdbCategoryLabel')), - validation: Joi.array().min(1).messages(this.joiMessages.array), - valueOptions: this.npdbCategoryOptions, - value: [], - }), - } - : { - encumberModalNpdbCategory: new FormInput({ - id: 'npdb-category', - name: 'npdb-category', - label: computed(() => this.$t('licensing.npdbCategoryLabel')), - validation: Joi.string().required().messages(this.joiMessages.string), - valueOptions: this.npdbCategoryOptions, - }), - } - ), + encumberModalNpdbCategories: new FormInput({ + id: 'npdb-categories', + name: 'npdb-categories', + label: computed(() => this.$t('licensing.npdbCategoryLabel')), + validation: Joi.array().min(1).messages(this.joiMessages.array), + valueOptions: this.npdbCategoryOptions, + value: [], + }), encumberModalStartDate: new FormInput({ id: 'encumber-start', name: 'encumber-start', @@ -523,14 +497,7 @@ class LicenseCard extends mixins(MixinForm) { investigationId, encumbrance: { encumbranceType: this.formData.encumberModalDisciplineAction.value, - ...(this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories: this.formData.encumberModalNpdbCategories.value, - } - : { - npdbCategory: this.formData.encumberModalNpdbCategory.value, - } - ), + npdbCategories: this.formData.encumberModalNpdbCategories.value, startDate: this.formData.encumberModalStartDate.value, }, }).catch((err) => { @@ -545,14 +512,7 @@ class LicenseCard extends mixins(MixinForm) { licenseState: stateAbbrev, licenseType: licenseTypeAbbrev.toLowerCase(), encumbranceType: this.formData.encumberModalDisciplineAction.value, - ...(this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories: this.formData.encumberModalNpdbCategories.value, - } - : { - npdbCategory: this.formData.encumberModalNpdbCategory.value, - } - ), + npdbCategories: this.formData.encumberModalNpdbCategories.value, startDate: this.formData.encumberModalStartDate.value, }).catch((err) => { this.modalErrorMessage = err?.message || this.$t('common.error'); @@ -992,11 +952,7 @@ class LicenseCard extends mixins(MixinForm) { this.validateAll({ asTouched: true }); } else if (this.isEncumberLicenseModalDisplayed) { this.formData.encumberModalDisciplineAction.value = this.encumberDisciplineOptions[1]?.value; - if (this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY)) { - this.formData.encumberModalNpdbCategories.value = [this.npdbCategoryOptions[1]?.value]; - } else { - this.formData.encumberModalNpdbCategory.value = this.npdbCategoryOptions[1]?.value; - } + this.formData.encumberModalNpdbCategories.value = [this.npdbCategoryOptions[1]?.value]; this.formData.encumberModalStartDate.value = moment().format('YYYY-MM-DD'); await nextTick(); this.validateAll({ asTouched: true }); diff --git a/webroot/src/components/LicenseCard/LicenseCard.vue b/webroot/src/components/LicenseCard/LicenseCard.vue index a0839c1d1..5e92b8ebe 100644 --- a/webroot/src/components/LicenseCard/LicenseCard.vue +++ b/webroot/src/components/LicenseCard/LicenseCard.vue @@ -154,12 +154,9 @@
-
+
-
- -
}> { - const options = this.$tm('licensing.npdbTypes').map((npdbType) => ({ + return this.$tm('licensing.npdbTypes').map((npdbType) => ({ value: npdbType.key, name: npdbType.name, })); - - if (!this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY)) { - options.unshift({ - value: '', - name: computed(() => this.$t('common.selectOption')), - }); - } - - return options; } get endInvestigationModalTitle(): string { @@ -316,27 +303,14 @@ class PrivilegeCard extends mixins(MixinForm) { validation: Joi.string().required().messages(this.joiMessages.string), valueOptions: this.encumberDisciplineOptions, }), - ...(this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - encumberModalNpdbCategories: new FormInput({ - id: 'npdb-categories', - name: 'npdb-categories', - label: computed(() => this.$t('licensing.npdbCategoryLabel')), - validation: Joi.array().min(1).messages(this.joiMessages.array), - valueOptions: this.npdbCategoryOptions, - value: [], - }), - } - : { - encumberModalNpdbCategory: new FormInput({ - id: 'npdb-category', - name: 'npdb-category', - label: computed(() => this.$t('licensing.npdbCategoryLabel')), - validation: Joi.string().required().messages(this.joiMessages.string), - valueOptions: this.npdbCategoryOptions, - }), - } - ), + encumberModalNpdbCategories: new FormInput({ + id: 'npdb-categories', + name: 'npdb-categories', + label: computed(() => this.$t('licensing.npdbCategoryLabel')), + validation: Joi.array().min(1).messages(this.joiMessages.array), + valueOptions: this.npdbCategoryOptions, + value: [], + }), encumberModalStartDate: new FormInput({ id: 'encumber-start', name: 'encumber-start', @@ -579,14 +553,7 @@ class PrivilegeCard extends mixins(MixinForm) { investigationId, encumbrance: { encumbranceType: this.formData.encumberModalDisciplineAction.value, - ...(this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories: this.formData.encumberModalNpdbCategories.value, - } - : { - npdbCategory: this.formData.encumberModalNpdbCategory.value, - } - ), + npdbCategories: this.formData.encumberModalNpdbCategories.value, startDate: this.formData.encumberModalStartDate.value, }, }).catch((err) => { @@ -601,14 +568,7 @@ class PrivilegeCard extends mixins(MixinForm) { privilegeState: stateAbbrev, licenseType: privilegeTypeAbbrev.toLowerCase(), encumbranceType: this.formData.encumberModalDisciplineAction.value, - ...(this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories: this.formData.encumberModalNpdbCategories.value, - } - : { - npdbCategory: this.formData.encumberModalNpdbCategory.value, - } - ), + npdbCategories: this.formData.encumberModalNpdbCategories.value, startDate: this.formData.encumberModalStartDate.value, }).catch((err) => { this.modalErrorMessage = err?.message || this.$t('common.error'); @@ -1047,11 +1007,7 @@ class PrivilegeCard extends mixins(MixinForm) { this.validateAll({ asTouched: true }); } else if (this.isEncumberPrivilegeModalDisplayed) { this.formData.encumberModalDisciplineAction.value = this.encumberDisciplineOptions[1]?.value; - if (this.$features.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY)) { - this.formData.encumberModalNpdbCategories.value = [this.npdbCategoryOptions[1]?.value]; - } else { - this.formData.encumberModalNpdbCategory.value = this.npdbCategoryOptions[1]?.value; - } + this.formData.encumberModalNpdbCategories.value = [this.npdbCategoryOptions[1]?.value]; this.formData.encumberModalStartDate.value = moment().format('YYYY-MM-DD'); await nextTick(); this.validateAll({ asTouched: true }); diff --git a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue index 773283ce6..fddca810a 100644 --- a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue +++ b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue @@ -214,12 +214,9 @@
-
+
-
- -
{ jurisdiction: 'al', type: 'test-type', encumbranceType: 'fine', - clinicalPrivilegeActionCategory: 'Non-compliance With Requirements', clinicalPrivilegeActionCategories: ['Non-compliance With Requirements'], creationDate: moment.utc().format(serverDatetimeFormat), effectiveStartDate: moment().subtract(1, 'day').format(serverDateFormat), @@ -168,7 +167,6 @@ describe('AdverseAction model', () => { expect(adverseAction.state).to.be.an.instanceof(State); expect(adverseAction.state.name()).to.equal('Alabama'); expect(adverseAction.type).to.equal(data.type); - expect(adverseAction.npdbType).to.equal(data.clinicalPrivilegeActionCategory); expect(adverseAction.npdbTypes).to.matchPattern(data.clinicalPrivilegeActionCategories); expect(adverseAction.creationDate).to.equal(data.creationDate); expect(adverseAction.startDate).to.equal(data.effectiveStartDate); diff --git a/webroot/src/models/AdverseAction/AdverseAction.model.ts b/webroot/src/models/AdverseAction/AdverseAction.model.ts index 7a93b3b3f..44a5f94a5 100644 --- a/webroot/src/models/AdverseAction/AdverseAction.model.ts +++ b/webroot/src/models/AdverseAction/AdverseAction.model.ts @@ -133,7 +133,6 @@ export class AdverseActionSerializer { state: new State({ abbrev: json.jurisdiction }), type: json.type, encumbranceType: json.encumbranceType, - npdbType: json.clinicalPrivilegeActionCategory, npdbTypes: Array.isArray(json.clinicalPrivilegeActionCategories) ? json.clinicalPrivilegeActionCategories : [], diff --git a/webroot/src/network/licenseApi/data.api.ts b/webroot/src/network/licenseApi/data.api.ts index c4f5806ef..c5ba79e13 100644 --- a/webroot/src/network/licenseApi/data.api.ts +++ b/webroot/src/network/licenseApi/data.api.ts @@ -5,7 +5,7 @@ // Created by InspiringApps on 6/18/24. // -import { authStorage, tokens, FeatureGates } from '@/app.config'; +import { authStorage, tokens } from '@/app.config'; import { config as envConfig } from '@plugins/EnvConfig/envConfig.plugin'; import { requestError, @@ -274,17 +274,9 @@ export class LicenseDataApi implements DataApiInterface { npdbCategories: Array, startDate: string ) { - const { $features } = (window as any).Vue?.config?.globalProperties || {}; const serverResponse: any = await this.api.post(`/v1/compacts/${compact}/providers/${licenseeId}/licenses/jurisdiction/${licenseState}/licenseType/${licenseType}/encumbrance`, { encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - clinicalPrivilegeActionCategories: npdbCategories, - } - : { - clinicalPrivilegeActionCategory: npdbCategory, - } - ), + clinicalPrivilegeActionCategories: npdbCategories, encumbranceEffectiveDate: startDate, }); @@ -362,21 +354,13 @@ export class LicenseDataApi implements DataApiInterface { startDate: string } ) { - const { $features } = (window as any).Vue?.config?.globalProperties || {}; const serverResponse: any = await this.api.patch(`/v1/compacts/${compact}/providers/${licenseeId}/licenses/jurisdiction/${licenseState}/licenseType/${licenseType}/investigation/${investigationId}`, { action: 'close', ...(encumbrance ? { encumbrance: { encumbranceType: encumbrance.encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - clinicalPrivilegeActionCategories: encumbrance.npdbCategories, - } - : { - clinicalPrivilegeActionCategory: encumbrance.npdbCategory, - } - ), + clinicalPrivilegeActionCategories: encumbrance.npdbCategories, encumbranceEffectiveDate: encumbrance.startDate, }, } @@ -432,17 +416,9 @@ export class LicenseDataApi implements DataApiInterface { npdbCategories: Array, startDate: string ) { - const { $features } = (window as any).Vue?.config?.globalProperties || {}; const serverResponse: any = await this.api.post(`/v1/compacts/${compact}/providers/${licenseeId}/privileges/jurisdiction/${privilegeState}/licenseType/${licenseType}/encumbrance`, { encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - clinicalPrivilegeActionCategories: npdbCategories, - } - : { - clinicalPrivilegeActionCategory: npdbCategory, - } - ), + clinicalPrivilegeActionCategories: npdbCategories, encumbranceEffectiveDate: startDate, }); @@ -520,21 +496,13 @@ export class LicenseDataApi implements DataApiInterface { startDate: string } ) { - const { $features } = (window as any).Vue?.config?.globalProperties || {}; const serverResponse: any = await this.api.patch(`/v1/compacts/${compact}/providers/${licenseeId}/privileges/jurisdiction/${privilegeState}/licenseType/${licenseType}/investigation/${investigationId}`, { action: 'close', ...(encumbrance ? { encumbrance: { encumbranceType: encumbrance.encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - clinicalPrivilegeActionCategories: encumbrance.npdbCategories, - } - : { - clinicalPrivilegeActionCategory: encumbrance.npdbCategory, - } - ), + clinicalPrivilegeActionCategories: encumbrance.npdbCategories, encumbranceEffectiveDate: encumbrance.startDate, }, } diff --git a/webroot/src/network/mocks/mock.data.api.ts b/webroot/src/network/mocks/mock.data.api.ts index f91397613..dedfd90c1 100644 --- a/webroot/src/network/mocks/mock.data.api.ts +++ b/webroot/src/network/mocks/mock.data.api.ts @@ -249,14 +249,7 @@ export class DataApi { licenseState, licenseType, encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories, - } - : { - npdbCategory, - } - ), + npdbCategories, startDate, })); } @@ -354,14 +347,7 @@ export class DataApi { privilegeState, licenseType, encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories, - } - : { - npdbCategory, - } - ), + npdbCategories, startDate, })); } diff --git a/webroot/src/network/mocks/mock.data.ts b/webroot/src/network/mocks/mock.data.ts index 2c37f3251..09ea0d630 100644 --- a/webroot/src/network/mocks/mock.data.ts +++ b/webroot/src/network/mocks/mock.data.ts @@ -740,7 +740,7 @@ export const licensees = { compact: 'octp', type: 'adverseAction', encumbranceType: 'fine', - clinicalPrivilegeActionCategory: 'Non-compliance With Requirements', + clinicalPrivilegeActionCategories: ['Non-compliance With Requirements'], actionAgainst: 'privilege', jurisdiction: 'nv', licenseTypeAbbreviation: 'ota', @@ -757,7 +757,7 @@ export const licensees = { compact: 'octp', type: 'adverseAction', encumbranceType: 'fine', - clinicalPrivilegeActionCategory: 'Non-compliance With Requirements', + clinicalPrivilegeActionCategories: ['Non-compliance With Requirements'], actionAgainst: 'privilege', jurisdiction: 'nv', licenseTypeAbbreviation: 'ota', @@ -876,7 +876,7 @@ export const licensees = { compact: 'octp', type: 'adverseAction', encumbranceType: 'fine', - clinicalPrivilegeActionCategory: 'Non-compliance With Requirements', + clinicalPrivilegeActionCategories: ['Non-compliance With Requirements'], actionAgainst: 'privilege', jurisdiction: 'oh', licenseTypeAbbreviation: 'ota', @@ -913,7 +913,7 @@ export const licensees = { compact: 'octp', type: 'adverseAction', encumbranceType: 'fine', - clinicalPrivilegeActionCategory: 'Non-compliance With Requirements', + clinicalPrivilegeActionCategories: ['Non-compliance With Requirements'], actionAgainst: 'privilege', jurisdiction: 'al', licenseTypeAbbreviation: 'ota', @@ -930,7 +930,7 @@ export const licensees = { compact: 'octp', type: 'adverseAction', encumbranceType: 'fine', - clinicalPrivilegeActionCategory: 'Unsafe Practice or Substandard Care', + clinicalPrivilegeActionCategories: ['Unsafe Practice or Substandard Care'], actionAgainst: 'privilege', jurisdiction: 'al', licenseTypeAbbreviation: 'ota', From 639e801ccc298c0d25242f17460c60474ec990c1 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 11:40:50 -0600 Subject: [PATCH 05/23] set field as required --- backend/compact-connect/stacks/api_stack/v1_api/api_model.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/compact-connect/stacks/api_stack/v1_api/api_model.py b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py index 6c73bee88..97479093e 100644 --- a/backend/compact-connect/stacks/api_stack/v1_api/api_model.py +++ b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py @@ -1404,8 +1404,7 @@ def _encumbrance_request_schema(self) -> JsonSchema: type=JsonSchemaType.OBJECT, description='Encumbrance data to create', additional_properties=False, - # TODO - add clinicalPrivilegeActionCategories after migrating # noqa: FIX002 - required=['encumbranceEffectiveDate', 'encumbranceType'], + required=['encumbranceEffectiveDate', 'encumbranceType', 'clinicalPrivilegeActionCategories'], properties={ 'encumbranceEffectiveDate': JsonSchema( type=JsonSchemaType.STRING, From 0c53cd8defbdcef4632eb68d9ea5ecbeb84a05c9 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 11:46:41 -0600 Subject: [PATCH 06/23] update test snapshots with required field --- .../snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json | 3 ++- .../snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json | 3 ++- .../PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json | 3 ++- .../snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json index e79265a7b..84b644b6c 100644 --- a/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/LICENSE_ENCUMBRANCE_REQUEST_SCHEMA.json @@ -39,7 +39,8 @@ }, "required": [ "encumbranceEffectiveDate", - "encumbranceType" + "encumbranceType", + "clinicalPrivilegeActionCategories" ], "type": "object", "$schema": "http://json-schema.org/draft-04/schema#" diff --git a/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json index ca76ada4e..6a60e169e 100644 --- a/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PATCH_LICENSE_INVESTIGATION_REQUEST_SCHEMA.json @@ -47,7 +47,8 @@ }, "required": [ "encumbranceEffectiveDate", - "encumbranceType" + "encumbranceType", + "clinicalPrivilegeActionCategories" ], "type": "object" } diff --git a/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json index ca76ada4e..6a60e169e 100644 --- a/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PATCH_PRIVILEGE_INVESTIGATION_REQUEST_SCHEMA.json @@ -47,7 +47,8 @@ }, "required": [ "encumbranceEffectiveDate", - "encumbranceType" + "encumbranceType", + "clinicalPrivilegeActionCategories" ], "type": "object" } diff --git a/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json b/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json index e79265a7b..84b644b6c 100644 --- a/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json +++ b/backend/compact-connect/tests/resources/snapshots/PRIVILEGE_ENCUMBRANCE_REQUEST_SCHEMA.json @@ -39,7 +39,8 @@ }, "required": [ "encumbranceEffectiveDate", - "encumbranceType" + "encumbranceType", + "clinicalPrivilegeActionCategories" ], "type": "object", "$schema": "http://json-schema.org/draft-04/schema#" From b01e7110c278de420073617a1b03677dc4b00ffc Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 11:53:29 -0600 Subject: [PATCH 07/23] Remove old SK pattern when fetching privileges --- .../cc_common/data_model/data_client.py | 44 ++--- .../common/tests/function/test_data_client.py | 154 ------------------ 2 files changed, 16 insertions(+), 182 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py index 84c76b283..a672983b7 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py @@ -1021,9 +1021,6 @@ def _get_privilege_update_records_directly( This should be used when it is undesirable to get all provider update records and filter for the specific privilege update records. - During migration period, this method queries both the new and old SK patterns to ensure - no records are missed. - :param str compact: The compact of the privilege :param str provider_id: The provider of the privilege :param str jurisdiction: The jurisdiction of the privilege @@ -1032,36 +1029,27 @@ def _get_privilege_update_records_directly( :return: List of privilege update records """ pk = f'{compact}#PROVIDER#{provider_id}' - - # SK prefixes to query (new pattern and old pattern for migration support) - # TODO - remove old pattern once migration is complete # noqa: FIX002 - sk_prefixes = [ - # New pattern - f'{compact}#UPDATE#{UpdateTierEnum.TIER_ONE}#privilege/{jurisdiction}/{license_type_abbr}/', - # Old pattern - f'{compact}#PROVIDER#privilege/{jurisdiction}/{license_type_abbr}#UPDATE', - ] + sk_prefix = f'{compact}#UPDATE#{UpdateTierEnum.TIER_ONE}#privilege/{jurisdiction}/{license_type_abbr}/' response_items = [] - # Query for records using each SK prefix pattern - for sk_prefix in sk_prefixes: - last_evaluated_key = None - while True: - pagination = {'ExclusiveStartKey': last_evaluated_key} if last_evaluated_key else {} - - query_resp = self.config.provider_table.query( - Select='ALL_ATTRIBUTES', - KeyConditionExpression=Key('pk').eq(pk) & Key('sk').begins_with(sk_prefix), - ConsistentRead=consistent_read, - **pagination, - ) + # Query for records using the SK prefix pattern + last_evaluated_key = None + while True: + pagination = {'ExclusiveStartKey': last_evaluated_key} if last_evaluated_key else {} + + query_resp = self.config.provider_table.query( + Select='ALL_ATTRIBUTES', + KeyConditionExpression=Key('pk').eq(pk) & Key('sk').begins_with(sk_prefix), + ConsistentRead=consistent_read, + **pagination, + ) - response_items.extend(query_resp.get('Items', [])) + response_items.extend(query_resp.get('Items', [])) - last_evaluated_key = query_resp.get('LastEvaluatedKey') - if not last_evaluated_key: - break + last_evaluated_key = query_resp.get('LastEvaluatedKey') + if not last_evaluated_key: + break return [PrivilegeUpdateData.from_database_record(item) for item in response_items] diff --git a/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py b/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py index 39267d400..9606fe183 100644 --- a/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py +++ b/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py @@ -1955,157 +1955,3 @@ def test_close_license_investigation_with_encumbrance(self): self.assertEqual(expected_investigation_close, investigation_record) - # TODO - remove this test once migration from old update SK pattern is complete # noqa: FIX002 - def test_get_provider_user_records_returns_old_sk_pattern_update_records_with_tier_one(self): - """Test that get_provider_user_records with TIER_ONE returns privilege update records with old SK pattern.""" - from cc_common.data_model.data_client import DataClient - from cc_common.data_model.provider_record_util import ProviderUserRecords - from cc_common.data_model.update_tier_enum import UpdateTierEnum - - provider_uuid = str(uuid4()) - compact = 'aslp' - jurisdiction = 'ky' - license_type_abbr = 'aud' - - # Create provider and privilege records - self.test_data_generator.put_default_provider_record_in_provider_table( - value_overrides={ - 'providerId': provider_uuid, - 'compact': compact, - } - ) - - privilege = self.test_data_generator.put_default_privilege_record_in_provider_table( - value_overrides={ - 'providerId': provider_uuid, - 'compact': compact, - 'jurisdiction': jurisdiction, - 'licenseType': 'audiologist', - } - ) - - # Manually create a privilege update record with the old SK pattern - old_sk_update_record = { - 'pk': f'{compact}#PROVIDER#{provider_uuid}', - 'sk': f'{compact}#PROVIDER#privilege/{jurisdiction}/{license_type_abbr}' - f'#UPDATE/1731110399/939a3c350708e34875f0a652bf7d7454', - 'type': 'privilegeUpdate', - 'updateType': 'renewal', - 'providerId': provider_uuid, - 'compact': compact, - 'jurisdiction': jurisdiction, - 'licenseType': 'audiologist', - 'createDate': '2024-11-08T23:59:59+00:00', - 'effectiveDate': '2024-11-08T23:59:59+00:00', - 'dateOfUpdate': '2024-11-08T23:59:59+00:00', - 'compactTransactionIdGSIPK': 'COMPACT#aslp#TX#1234567890#', - 'previous': { - 'attestations': [{'attestationId': 'jurisprudence-confirmation', 'version': '1'}], - 'dateOfIssuance': '2016-05-05T12:59:59+00:00', - 'dateOfRenewal': '2016-05-05T12:59:59+00:00', - 'dateOfExpiration': '2020-06-06', - 'dateOfUpdate': '2016-05-05T12:59:59+00:00', - 'compactTransactionId': '0123456789', - 'privilegeId': 'SLP-NE-1', - 'administratorSetStatus': 'active', - 'licenseJurisdiction': 'oh', - }, - 'updatedValues': { - 'dateOfRenewal': '2024-11-08T23:59:59+00:00', - 'dateOfExpiration': '2025-10-31', - 'compactTransactionId': 'test_transaction_id', - }, - } - self._provider_table.put_item(Item=old_sk_update_record) - - # Call get_provider_user_records with TIER_ONE - client = DataClient(self.config) - provider_user_records: ProviderUserRecords = client.get_provider_user_records( - compact=compact, - provider_id=provider_uuid, - include_update_tier=UpdateTierEnum.TIER_ONE, - ) - - # Verify the old SK pattern update record is returned - update_records = provider_user_records.get_update_records_for_privilege( - jurisdiction=jurisdiction, license_type=privilege.licenseType - ) - self.assertEqual(1, len(update_records)) - self.assertEqual('renewal', update_records[0].updateType) - - # TODO - remove this test once migration from old update SK pattern is complete # noqa: FIX002 - def test_get_privilege_data_returns_old_sk_pattern_update_records_with_detail(self): - """Test that get_privilege_data with detail=True returns privilege update records with old SK pattern.""" - from cc_common.data_model.data_client import DataClient - - provider_uuid = str(uuid4()) - compact = 'aslp' - jurisdiction = 'ne' - license_type_abbr = 'aud' - - # Create provider and privilege records - self.test_data_generator.put_default_provider_record_in_provider_table( - value_overrides={ - 'providerId': provider_uuid, - 'compact': compact, - } - ) - - self.test_data_generator.put_default_privilege_record_in_provider_table( - value_overrides={ - 'providerId': provider_uuid, - 'compact': compact, - 'jurisdiction': jurisdiction, - 'licenseType': 'audiologist', - } - ) - - # Manually create a privilege update record with the old SK pattern - old_sk_update_record = { - 'pk': f'{compact}#PROVIDER#{provider_uuid}', - 'sk': f'{compact}#PROVIDER#privilege/{jurisdiction}/{license_type_abbr}' - f'#UPDATE/1731110399/939a3c350708e34875f0a652bf7d7454', - 'type': 'privilegeUpdate', - 'updateType': 'renewal', - 'providerId': provider_uuid, - 'compact': compact, - 'jurisdiction': jurisdiction, - 'licenseType': 'audiologist', - 'createDate': '2024-11-08T23:59:59+00:00', - 'effectiveDate': '2024-11-08T23:59:59+00:00', - 'dateOfUpdate': '2024-11-08T23:59:59+00:00', - 'compactTransactionIdGSIPK': 'COMPACT#aslp#TX#1234567890#', - 'previous': { - 'attestations': [{'attestationId': 'jurisprudence-confirmation', 'version': '1'}], - 'dateOfIssuance': '2016-05-05T12:59:59+00:00', - 'dateOfRenewal': '2016-05-05T12:59:59+00:00', - 'dateOfExpiration': '2020-06-06', - 'dateOfUpdate': '2016-05-05T12:59:59+00:00', - 'compactTransactionId': '0123456789', - 'privilegeId': 'SLP-NE-1', - 'administratorSetStatus': 'active', - 'licenseJurisdiction': 'oh', - }, - 'updatedValues': { - 'dateOfRenewal': '2024-11-08T23:59:59+00:00', - 'dateOfExpiration': '2025-10-31', - 'compactTransactionId': 'test_transaction_id', - }, - } - self._provider_table.put_item(Item=old_sk_update_record) - - # Call get_privilege_data with detail=True - client = DataClient(self.config) - result = client.get_privilege_data( - compact=compact, - provider_id=provider_uuid, - jurisdiction=jurisdiction, - license_type_abbr=license_type_abbr, - detail=True, - ) - - # Verify the result contains the privilege record and the old SK pattern update record - self.assertEqual(2, len(result)) - self.assertEqual('privilege', result[0]['type']) - self.assertEqual('privilegeUpdate', result[1]['type']) - self.assertEqual('renewal', result[1]['updateType']) From 4717529902f92226f38b012752eb2e24d45a14b1 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 11:59:52 -0600 Subject: [PATCH 08/23] remove migratory pre-load hook --- .../cc_common/data_model/schema/provider/record.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/provider/record.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/provider/record.py index 2c4de0c77..8835b2a88 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/provider/record.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/provider/record.py @@ -233,17 +233,6 @@ class ProviderUpdateRecordSchema(BaseRecordSchema, ChangeHashMixin): # List of field names that were present in the previous record but removed in the update removedValues = List(String(), required=False, allow_none=False) - # TODO - remove this pre_load hook after migration is complete # noqa: FIX002 - @pre_load - def populate_create_date_for_backwards_compatibility(self, in_data, **kwargs): # noqa: ARG001 unused-argument - """ - For backwards compatibility, populate createDate from dateOfUpdate if createDate is missing. - This allows us to load old records that were created before the createDate field was added. - """ - if 'createDate' not in in_data: - in_data['createDate'] = in_data['dateOfUpdate'] - return in_data - @post_dump # Must be _post_ dump so we have values that are more easily hashed def generate_pk_sk(self, in_data, **kwargs): # noqa: ARG001 unused-argument in_data['pk'] = f'{in_data["compact"]}#PROVIDER#{in_data["providerId"]}' From 144ca4aea51d34cac59d4d0fc82fa153530d4c16 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 12:09:22 -0600 Subject: [PATCH 09/23] add comment about encumbrance detail field --- .../lambdas/python/common/cc_common/data_model/data_client.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py index a672983b7..57204345e 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/data_client.py @@ -3051,6 +3051,8 @@ def encumber_home_jurisdiction_license_privileges( ) encumbrance_details = { 'clinicalPrivilegeActionCategories': adverse_action.clinicalPrivilegeActionCategories, + # In the case of privileges being encumbered due to the home state license being encumbered, + # this 'licenseJurisdiction' field is added to denote which license was responsible for this update. 'licenseJurisdiction': jurisdiction, 'adverseActionId': adverse_action_id, } From d05afd46d5dc7177100393de748f9c3438aca094 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 14:24:55 -0600 Subject: [PATCH 10/23] Update smoke tests to clean up privilege update records --- .../purchasing_privileges_smoke_tests.py | 22 +------ .../tests/smoke/smoke_common.py | 59 +++++++++++++++++++ 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py b/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py index bac7e860b..186894d1a 100644 --- a/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py +++ b/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py @@ -3,7 +3,6 @@ from datetime import UTC, datetime import requests -from boto3.dynamodb.conditions import Key # Import the existing compact configuration tests from compact_configuration_smoke_tests import test_compact_configuration, test_jurisdiction_configuration @@ -11,6 +10,7 @@ from smoke_common import ( SmokeTestFailureException, call_provider_users_me_endpoint, + delete_existing_privilege_records, generate_opaque_data, get_provider_user_auth_headers_cached, load_smoke_test_env, @@ -142,25 +142,7 @@ def test_purchasing_privilege(delete_current_privilege: bool = True): provider_id = original_provider_data.get('providerId') compact = original_provider_data.get('compact') if delete_current_privilege: - dynamodb_table = config.provider_user_dynamodb_table - # query for all ne related privilege records - original_privilege_records = dynamodb_table.query( - KeyConditionExpression=Key('pk').eq(f'{compact}#PROVIDER#{provider_id}') - & Key('sk').begins_with(f'{compact}#PROVIDER#privilege/ne/') - ).get('Items', []) - for privilege in original_privilege_records: - # delete the privilege records - privilege_pk = privilege['pk'] - privilege_sk = privilege['sk'] - logger.info(f'Deleting privilege record:\n{privilege_pk}\n{privilege_sk}') - dynamodb_table.delete_item( - Key={ - 'pk': privilege_pk, - 'sk': privilege_sk, - } - ) - # give dynamodb time to propagate - time.sleep(1) + delete_existing_privilege_records(provider_id=provider_id, compact=compact, jurisdiction='ne') # Get the latest version of every attestation required for the privilege purchase required_attestation_ids = [ diff --git a/backend/compact-connect/tests/smoke/smoke_common.py b/backend/compact-connect/tests/smoke/smoke_common.py index aa9b5cc09..62a487379 100644 --- a/backend/compact-connect/tests/smoke/smoke_common.py +++ b/backend/compact-connect/tests/smoke/smoke_common.py @@ -1,6 +1,7 @@ import json import os import sys +import time import uuid import boto3 @@ -34,6 +35,7 @@ def __init__(self, message): # We have to import this after we've added the common lib to our path and environment from cc_common.data_model.provider_record_util import ProviderUserRecords # noqa: E402 F401 +from cc_common.data_model.update_tier_enum import UpdateTierEnum # noqa: E402 # importing this here so it can be easily referenced in the rollback upload tests from cc_common.data_model.schema.license import LicenseData, LicenseUpdateData # noqa: E402 F401 @@ -463,6 +465,63 @@ def create_test_privilege_record( return privilege_data +def delete_existing_privilege_records(provider_id: str, compact: str, jurisdiction: str): + """Delete all privilege records and privilege update records for a provider in a specific jurisdiction. + + This function queries for and deletes both privilege records and their associated update records + using the new SK pattern structure. + + :param provider_id: The provider's ID + :param compact: The compact abbreviation + :param jurisdiction: The jurisdiction abbreviation (e.g., 'ne') + """ + dynamodb_table = config.provider_user_dynamodb_table + pk = f'{compact}#PROVIDER#{provider_id}' + + # Query for all privilege records in the specified jurisdiction + original_privilege_records = dynamodb_table.query( + KeyConditionExpression=Key('pk').eq(pk) + & Key('sk').begins_with(f'{compact}#PROVIDER#privilege/{jurisdiction}/') + ).get('Items', []) + + # Query for all privilege update records in the specified jurisdiction + privilege_update_sk_prefix = f'{compact}#UPDATE#{UpdateTierEnum.TIER_ONE}#privilege/{jurisdiction}/' + original_privilege_update_records = [] + last_evaluated_key = None + while True: + pagination = {'ExclusiveStartKey': last_evaluated_key} if last_evaluated_key else {} + query_resp = dynamodb_table.query( + KeyConditionExpression=Key('pk').eq(pk) & Key('sk').begins_with(privilege_update_sk_prefix), + **pagination, + ) + original_privilege_update_records.extend(query_resp.get('Items', [])) + last_evaluated_key = query_resp.get('LastEvaluatedKey') + if not last_evaluated_key: + break + + original_privilege_records.extend(original_privilege_update_records) + + + # Delete all privilege records + for privilege in original_privilege_records: + privilege_pk = privilege['pk'] + privilege_sk = privilege['sk'] + logger.info(f'Deleting privilege record:\n{privilege_pk}\n{privilege_sk}') + dynamodb_table.delete_item( + Key={ + 'pk': privilege_pk, + 'sk': privilege_sk, + } + ) + # give dynamodb time to propagate + time.sleep(1) + + logger.info( + f'Deleted privilege record and {len(original_privilege_update_records)} privilege update records for ' + f'jurisdiction {jurisdiction}' + ) + + def cleanup_test_provider_records(provider_id: str, compact: str): """Clean up all test records for a provider. From d537e94ee9c34e3054945f323fde92f8a67adb28 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 16:29:37 -0600 Subject: [PATCH 11/23] add notification email env var to smoke test --- .../smoke/compact_configuration_smoke_tests.py | 14 ++++++++------ backend/compact-connect/tests/smoke/config.py | 4 ++++ .../tests/smoke/smoke_tests_env_example.json | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/backend/compact-connect/tests/smoke/compact_configuration_smoke_tests.py b/backend/compact-connect/tests/smoke/compact_configuration_smoke_tests.py index 4c392c4e7..8cf7e3a79 100644 --- a/backend/compact-connect/tests/smoke/compact_configuration_smoke_tests.py +++ b/backend/compact-connect/tests/smoke/compact_configuration_smoke_tests.py @@ -134,12 +134,13 @@ def test_compact_configuration(): cleanup_compact_configuration(compact) # Create test compact configuration data + notification_email = config.smoke_test_notification_email compact_config = { 'compactCommissionFee': {'feeAmount': 15.00, 'feeType': 'FLAT_RATE'}, 'licenseeRegistrationEnabled': False, - 'compactOperationsTeamEmails': ['ops-test@ccSmokeTestFakeEmail.com'], - 'compactAdverseActionsNotificationEmails': ['adverse-test@ccSmokeTestFakeEmail.com'], - 'compactSummaryReportNotificationEmails': ['summary-test@ccSmokeTestFakeEmail.com'], + 'compactOperationsTeamEmails': [notification_email], + 'compactAdverseActionsNotificationEmails': [notification_email], + 'compactSummaryReportNotificationEmails': [notification_email], 'configuredStates': [], 'transactionFeeConfiguration': { 'licenseeCharges': {'chargeAmount': 10.00, 'chargeType': 'FLAT_FEE_PER_PRIVILEGE', 'active': True} @@ -269,10 +270,11 @@ def test_jurisdiction_configuration(jurisdiction: str = 'ne', recreate_compact_c ) # Create test jurisdiction configuration data + notification_email = config.smoke_test_notification_email jurisdiction_config = { - 'jurisdictionOperationsTeamEmails': ['state-ops-test@ccSmokeTestFakeEmail.com'], - 'jurisdictionAdverseActionsNotificationEmails': ['state-adverse-test@ccSmokeTestFakeEmail.com'], - 'jurisdictionSummaryReportNotificationEmails': ['state-summary-test@ccSmokeTestFakeEmail.com'], + 'jurisdictionOperationsTeamEmails': [notification_email], + 'jurisdictionAdverseActionsNotificationEmails': [notification_email], + 'jurisdictionSummaryReportNotificationEmails': [notification_email], 'licenseeRegistrationEnabled': True, 'jurisprudenceRequirements': { 'required': True, diff --git a/backend/compact-connect/tests/smoke/config.py b/backend/compact-connect/tests/smoke/config.py index a6b582e29..b43b3e2d2 100644 --- a/backend/compact-connect/tests/smoke/config.py +++ b/backend/compact-connect/tests/smoke/config.py @@ -92,6 +92,10 @@ def sandbox_authorize_net_api_login_id(self): def sandbox_authorize_net_transaction_key(self): return os.environ['SANDBOX_AUTHORIZE_NET_TRANSACTION_KEY'] + @property + def smoke_test_notification_email(self): + return os.environ['CC_TEST_SMOKE_TEST_NOTIFICATION_EMAIL'] + @cached_property def cognito_client(self): return boto3.client('cognito-idp') diff --git a/backend/compact-connect/tests/smoke/smoke_tests_env_example.json b/backend/compact-connect/tests/smoke/smoke_tests_env_example.json index cec0fdade..9b12be036 100644 --- a/backend/compact-connect/tests/smoke/smoke_tests_env_example.json +++ b/backend/compact-connect/tests/smoke/smoke_tests_env_example.json @@ -19,5 +19,6 @@ "ENVIRONMENT_NAME": "sandboxEnvironmentNamePlaceholder", "SANDBOX_AUTHORIZE_NET_API_LOGIN_ID": "your_sandbox_api_login_id", "SANDBOX_AUTHORIZE_NET_TRANSACTION_KEY": "your_sandbox_transaction_key", + "CC_TEST_SMOKE_TEST_NOTIFICATION_EMAIL": "smoke-test-notifications@example.com", "CC_TEST_ROLLBACK_STEP_FUNCTION_ARN": "arn:aws:states:us-east-1:123456789012:stateMachine:Sandbox-DisasterRecoveryStack-LicenseUploadRollbackStateMachine" } From fbf166f9469d681b8e040cde2ecd04e87cf86aa2 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 16:40:45 -0600 Subject: [PATCH 12/23] add waits for notification processing --- .../tests/smoke/encumbrance_smoke_tests.py | 11 ++++++++ .../tests/smoke/smoke_common.py | 28 ++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/backend/compact-connect/tests/smoke/encumbrance_smoke_tests.py b/backend/compact-connect/tests/smoke/encumbrance_smoke_tests.py index 2f4c0b946..3dfbd5296 100644 --- a/backend/compact-connect/tests/smoke/encumbrance_smoke_tests.py +++ b/backend/compact-connect/tests/smoke/encumbrance_smoke_tests.py @@ -683,6 +683,12 @@ def test_license_encumbrance_workflow(): logger.info('License encumbrance workflow test completed successfully') + # Wait for downstream processing to complete, including notification handlers + # This prevents race conditions where notification handlers from previous lift operations + # might still be processing when the license becomes unencumbered + logger.info('Waiting for downstream processing and notification handlers to complete...') + helper.wait_for_downstream_processing() + finally: # Clean up all created staff users helper.cleanup_staff_users() @@ -927,6 +933,11 @@ def test_privilege_encumbrance_status_changes_with_license_encumbrance_workflow( helper.lift_license_encumbrance(lift_body, license_adverse_action_id) logger.info('License encumbrance lifted successfully') + # Wait for downstream processing to complete, including notification handlers + # This prevents race conditions where notification handlers might still be processing + logger.info('Waiting for downstream processing and notification handlers to complete...') + helper.wait_for_downstream_processing() + # Step 7: Verify privilege becomes 'unencumbered' logger.info('Step 7: Verifying privilege becomes unencumbered...') helper.validate_privilege_encumbered_state(expected_status='unencumbered') diff --git a/backend/compact-connect/tests/smoke/smoke_common.py b/backend/compact-connect/tests/smoke/smoke_common.py index 62a487379..7ee25bb60 100644 --- a/backend/compact-connect/tests/smoke/smoke_common.py +++ b/backend/compact-connect/tests/smoke/smoke_common.py @@ -35,11 +35,11 @@ def __init__(self, message): # We have to import this after we've added the common lib to our path and environment from cc_common.data_model.provider_record_util import ProviderUserRecords # noqa: E402 F401 -from cc_common.data_model.update_tier_enum import UpdateTierEnum # noqa: E402 # importing this here so it can be easily referenced in the rollback upload tests from cc_common.data_model.schema.license import LicenseData, LicenseUpdateData # noqa: E402 F401 from cc_common.data_model.schema.user.record import UserRecordSchema # noqa: E402 +from cc_common.data_model.update_tier_enum import UpdateTierEnum # noqa: E402 _TEST_STAFF_USER_PASSWORD = 'TestPass123!' # noqa: S105 test credential for test staff user _TEMP_STAFF_PASSWORD = 'TempPass123!' # noqa: S105 temporary password for creating test staff users @@ -230,10 +230,32 @@ def load_smoke_test_env(): def call_provider_users_me_endpoint(): + """Get the provider data from the GET '/v1/provider-users/me' endpoint. + + If a 403 response is received, the token will be refreshed and the request retried once. + + :return: The response body JSON + :raises SmokeTestFailureException: If the request fails after retry + """ # Get the provider data from the GET '/v1/provider-users/me' endpoint. get_provider_data_response = requests.get( url=config.api_base_url + '/v1/provider-users/me', headers=get_provider_user_auth_headers_cached(), timeout=10 ) + + # If we get a 403, the token may have expired - refresh it and retry once + if get_provider_data_response.status_code == 403: + logger.info('Received 403 response, refreshing provider user token and retrying...') + # Clear the cached token to force a refresh + if 'TEST_PROVIDER_USER_ID_TOKEN' in os.environ: + del os.environ['TEST_PROVIDER_USER_ID_TOKEN'] + + # Retry with fresh token + get_provider_data_response = requests.get( + url=config.api_base_url + '/v1/provider-users/me', + headers=get_provider_user_auth_headers_cached(), + timeout=10, + ) + if get_provider_data_response.status_code != 200: raise SmokeTestFailureException(f'Failed to GET provider data. Response: {get_provider_data_response.json()}') # return the response body @@ -480,8 +502,7 @@ def delete_existing_privilege_records(provider_id: str, compact: str, jurisdicti # Query for all privilege records in the specified jurisdiction original_privilege_records = dynamodb_table.query( - KeyConditionExpression=Key('pk').eq(pk) - & Key('sk').begins_with(f'{compact}#PROVIDER#privilege/{jurisdiction}/') + KeyConditionExpression=Key('pk').eq(pk) & Key('sk').begins_with(f'{compact}#PROVIDER#privilege/{jurisdiction}/') ).get('Items', []) # Query for all privilege update records in the specified jurisdiction @@ -501,7 +522,6 @@ def delete_existing_privilege_records(provider_id: str, compact: str, jurisdicti original_privilege_records.extend(original_privilege_update_records) - # Delete all privilege records for privilege in original_privilege_records: privilege_pk = privilege['pk'] From 3ec4b1d4f6336d803d5f629f8b2b4654a3f5375d Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 16:40:56 -0600 Subject: [PATCH 13/23] formatting/linter --- .../lambdas/python/common/tests/function/test_data_client.py | 1 - .../tests/smoke/purchasing_privileges_smoke_tests.py | 1 - 2 files changed, 2 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py b/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py index 9606fe183..1239b030c 100644 --- a/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py +++ b/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py @@ -1954,4 +1954,3 @@ def test_close_license_investigation_with_encumbrance(self): investigation_record.pop('dateOfUpdate') self.assertEqual(expected_investigation_close, investigation_record) - diff --git a/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py b/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py index 186894d1a..5a65aa5b0 100644 --- a/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py +++ b/backend/compact-connect/tests/smoke/purchasing_privileges_smoke_tests.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -import time from datetime import UTC, datetime import requests From 015ddb9b23e4c5778373feb90779e500441dfd4c Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 16:55:51 -0600 Subject: [PATCH 14/23] remove data migration stack This can be added back later if other migrations need to be performed --- .../migrate_update_sort_keys/main.py | 187 ------------------ .../function/test_migrate_update_sort_keys.py | 142 ------------- .../compact-connect/pipeline/backend_stage.py | 16 -- .../stacks/data_migration_stack/__init__.py | 51 ----- 4 files changed, 396 deletions(-) delete mode 100644 backend/compact-connect/lambdas/python/migration/migrate_update_sort_keys/main.py delete mode 100644 backend/compact-connect/lambdas/python/migration/tests/function/test_migrate_update_sort_keys.py delete mode 100644 backend/compact-connect/stacks/data_migration_stack/__init__.py diff --git a/backend/compact-connect/lambdas/python/migration/migrate_update_sort_keys/main.py b/backend/compact-connect/lambdas/python/migration/migrate_update_sort_keys/main.py deleted file mode 100644 index 87a7bf2f0..000000000 --- a/backend/compact-connect/lambdas/python/migration/migrate_update_sort_keys/main.py +++ /dev/null @@ -1,187 +0,0 @@ -from boto3.dynamodb.conditions import Attr -from cc_common.config import config, logger -from cc_common.data_model.provider_record_util import ( - LicenseUpdateData, - PrivilegeUpdateData, - ProviderRecordType, - ProviderUpdateData, -) -from cc_common.exceptions import CCInternalException -from custom_resource_handler import CustomResourceHandler, CustomResourceResponse - - -class UpdateRecordSortKeyMigration(CustomResourceHandler): - """Migration for migrating update record sort keys to support license upload rollbacks""" - - def on_create(self, properties: dict) -> None: - do_migration(properties) - - def on_update(self, properties: dict) -> None: - """ - No-op on update. - """ - - def on_delete(self, _properties: dict) -> CustomResourceResponse | None: - """ - No-op on delete. - """ - - -on_event = UpdateRecordSortKeyMigration('update-record-sort-keys') - - -def do_migration(_properties: dict) -> None: - """ - This migration performs the following: - - Scans the provider table for all update records - - For each update record, load the records and serialize it again, - so the schema classes will generate the new sort key patterns - - Recreate the records by deleting the update records with the old sort key and storing the migrated records. - """ - logger.info('Starting update record sort key migration') - - # Scan for all update records - update_records = [] - scan_pagination = {} - - while True: - response = config.provider_table.scan( - FilterExpression=Attr('type').eq(ProviderRecordType.LICENSE_UPDATE) - | Attr('type').eq(ProviderRecordType.PROVIDER_UPDATE) - | Attr('type').eq(ProviderRecordType.PRIVILEGE_UPDATE), - **scan_pagination, - ) - - items = response.get('Items', []) - update_records.extend(items) - logger.info(f'Found {len(items)} update records in current scan batch') - - # Check if we need to continue pagination - last_evaluated_key = response.get('LastEvaluatedKey') - if not last_evaluated_key: - break - - scan_pagination = {'ExclusiveStartKey': last_evaluated_key} - - logger.info(f'Found {len(update_records)} total update records to process') - - if not update_records: - logger.info('No update records found, migration complete') - return - - # Process records in batches of 50 (DynamoDB transaction limit is 100 items, - # and each record generates 2 items: 1 update + 1 delete) - batch_size = 50 - - for i in range(0, len(update_records), batch_size): - batch = update_records[i : i + batch_size] - logger.info(f'Processing batch {i // batch_size + 1} with {len(batch)} records') - - _process_batch(batch) - logger.info(f'Processed batch {i // batch_size + 1}') - - -def _generate_delete_transaction_item(pk: str, sk: str) -> dict: - """ - Generate a delete transaction item for a provider record. - :param pk: The primary key of the provider record - :param sk: The sort key of the provider record - :return: Delete transaction item - """ - return { - 'Delete': { - 'TableName': config.provider_table.table_name, - 'Key': { - 'pk': pk, - 'sk': sk, - }, - } - } - - -def _generate_put_transaction_item(item: dict) -> dict: - """ - Generate a put transaction item for a provider record. - :param item: The provider record to put. - :return: Put transaction item - """ - return { - 'Put': { - 'TableName': config.provider_table.table_name, - 'Item': item, - } - } - - -def _generate_transaction_items(original_update_record: dict) -> list[dict]: - """ - In the case of a provider update record, we add a createDate field based on the dateOfUpdate field. - Then we use the ProviderUpdateData class to serialize the record and return the transaction items. - (one to delete the old record and one to create the new record) - - :param original_update_record: The provider update record to process - :return: List of transaction items - """ - # grab the old pk and sk from the object - old_pk = original_update_record['pk'] - old_sk = original_update_record['sk'] - record_type = original_update_record.get('type') - if record_type == ProviderRecordType.PROVIDER_UPDATE: - data_class = ProviderUpdateData - elif record_type == ProviderRecordType.LICENSE_UPDATE: - data_class = LicenseUpdateData - elif record_type == ProviderRecordType.PRIVILEGE_UPDATE: - data_class = PrivilegeUpdateData - else: - logger.error('invalid record type found', record_type=record_type, pk=old_pk, sk=old_sk) - raise CCInternalException('invalid record type found') - - # Performing deserialization/serialization on the record, which will generate - # the new pk/sks values we are migrating to. - - update_data = data_class.from_database_record(original_update_record) - migrated_provider_update_record = update_data.serialize_to_database_record() - # retain original dateOfUpdate value - migrated_provider_update_record['dateOfUpdate'] = original_update_record['dateOfUpdate'] - - logger.info( - 'Prepared update items for create date', - old_pk=old_pk, - old_sk=old_sk, - updated_pk=migrated_provider_update_record['pk'], - updated_sk=migrated_provider_update_record['sk'], - ) - - # delete old record with old pk/sk, and create new one - return [ - _generate_delete_transaction_item(pk=old_pk, sk=old_sk), - _generate_put_transaction_item(migrated_provider_update_record), - ] - - -def _process_batch(update_records: list[dict]) -> None: - """ - Process a batch of update records. - - :param update_records: List of update records to process - """ - transaction_items = [] - - for update_record in update_records: - try: - transaction_items.extend(_generate_transaction_items(update_record)) - except Exception as e: # noqa: BLE001 - logger.error( - 'Error preparing update items for update record, skipping.', - exc_info=e, - pk=update_record.get('pk'), - sk=update_record.get('sk'), - ) - - # Execute the transaction - if transaction_items: - logger.info(f'Executing transaction with {len(transaction_items)} items') - config.provider_table.meta.client.transact_write_items(TransactItems=transaction_items) - logger.info('Transaction completed successfully') - else: - logger.warning('No valid transaction items to process in this batch') diff --git a/backend/compact-connect/lambdas/python/migration/tests/function/test_migrate_update_sort_keys.py b/backend/compact-connect/lambdas/python/migration/tests/function/test_migrate_update_sort_keys.py deleted file mode 100644 index dff07ff85..000000000 --- a/backend/compact-connect/lambdas/python/migration/tests/function/test_migrate_update_sort_keys.py +++ /dev/null @@ -1,142 +0,0 @@ -from datetime import datetime -from unittest.mock import patch - -from common_test.test_constants import ( - DEFAULT_LICENSE_JURISDICTION, - DEFAULT_LICENSE_UPDATE_CREATE_DATE, - DEFAULT_LICENSE_UPDATE_DATETIME, - DEFAULT_PRIVILEGE_JURISDICTION, - DEFAULT_PRIVILEGE_UPDATE_DATETIME, - DEFAULT_PROVIDER_UPDATE_DATETIME, -) -from moto import mock_aws - -from . import TstFunction - -MOCK_DATETIME_STRING = '2025-10-23T08:15:00+00:00' -MOCK_COMPACT = 'coun' -MOCK_PROVIDER_ID = '01d67765-76dd-47c8-b39a-8389445bb3b7' - - -@mock_aws -@patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(MOCK_DATETIME_STRING)) -class TestMigrateUpdateSortKeys(TstFunction): - """Test class for migrating update record sort keys.""" - - def test_should_migrate_provider_update_records_to_expected_pattern(self): - from migrate_update_sort_keys.main import do_migration - - old_provider_update_record = self.test_data_generator.generate_default_provider_update( - value_overrides={'compact': MOCK_COMPACT, 'providerId': MOCK_PROVIDER_ID} - ) - serialized_old_record = old_provider_update_record.serialize_to_database_record() - # replace sk with old pattern to simulate old record to be migrated - serialized_old_record['sk'] = 'coun#PROVIDER#UPDATE#1752526787/2f429ccda22d273b1ee4876f2917e27f' - del serialized_old_record['createDate'] - serialized_old_record['dateOfUpdate'] = DEFAULT_PROVIDER_UPDATE_DATETIME - self.config.provider_table.put_item(Item=serialized_old_record) - - # run migration - do_migration({}) - - # verify old record was deleted - old_record_resp = self.config.provider_table.get_item( - Key={'pk': serialized_old_record['pk'], 'sk': serialized_old_record['sk']} - ) - self.assertIsNone(old_record_resp.get('Item')) - - # verify new record was created with expected sk - expected_sk = ( - f'{MOCK_COMPACT}#UPDATE#2#provider/{DEFAULT_PROVIDER_UPDATE_DATETIME}/2f429ccda22d273b1ee4876f2917e27f' - ) - new_record = self.config.provider_table.get_item(Key={'pk': serialized_old_record['pk'], 'sk': expected_sk})[ - 'Item' - ] - - serialized_old_record['sk'] = expected_sk - # as part of migration, the createDate field will be populated with whatever the dateOfUpdate was - # so we expect that here - serialized_old_record['createDate'] = DEFAULT_PROVIDER_UPDATE_DATETIME - # only the sort key and the createDate should have been modified - self.assertEqual(serialized_old_record, new_record) - - def test_should_migrate_license_update_records_to_expected_pattern(self): - from migrate_update_sort_keys.main import do_migration - - old_license_update_record = self.test_data_generator.generate_default_license_update( - value_overrides={ - 'compact': MOCK_COMPACT, - 'providerId': MOCK_PROVIDER_ID, - 'licenseType': 'licensed professional counselor', - } - ) - serialized_old_record = old_license_update_record.serialize_to_database_record() - # replace sk with old pattern to simulate old record to be migrated - serialized_old_record['sk'] = ( - f'{MOCK_COMPACT}#PROVIDER#license/{DEFAULT_LICENSE_JURISDICTION}/lpc#UPDATE#1752526787/21554583eb71ccc5f8aa5988c8a50ac2' - ) - serialized_old_record['dateOfUpdate'] = DEFAULT_LICENSE_UPDATE_DATETIME - self.config.provider_table.put_item(Item=serialized_old_record) - - # run migration - do_migration({}) - - # verify old record was deleted - old_record_resp = self.config.provider_table.get_item( - Key={'pk': serialized_old_record['pk'], 'sk': serialized_old_record['sk']} - ) - self.assertIsNone(old_record_resp.get('Item')) - - # verify new record was created with expected sk - expected_sk = ( - f'{MOCK_COMPACT}#UPDATE#3#license/{DEFAULT_LICENSE_JURISDICTION}/lpc' - f'/{DEFAULT_LICENSE_UPDATE_CREATE_DATE}/21554583eb71ccc5f8aa5988c8a50ac2' - ) - new_record = self.config.provider_table.get_item(Key={'pk': serialized_old_record['pk'], 'sk': expected_sk})[ - 'Item' - ] - serialized_old_record['sk'] = expected_sk - # nothing on the record should have changed other than the sort key - self.assertEqual(serialized_old_record, new_record) - - def test_should_migrate_privilege_update_records_to_expected_pattern(self): - from migrate_update_sort_keys.main import do_migration - - mock_create_date = '2025-07-07T07:07:07+00:00' - - old_privilege_update_record = self.test_data_generator.generate_default_privilege_update( - value_overrides={ - 'compact': MOCK_COMPACT, - 'providerId': MOCK_PROVIDER_ID, - 'licenseType': 'licensed professional counselor', - 'createDate': datetime.fromisoformat(mock_create_date), - } - ) - serialized_old_record = old_privilege_update_record.serialize_to_database_record() - # replace sk with old pattern to simulate old record to be migrated - serialized_old_record['sk'] = ( - f'{MOCK_COMPACT}#PROVIDER#privilege/{DEFAULT_PRIVILEGE_JURISDICTION}/lpc#UPDATE#1752526787/399abde0989ad5e936920a3ba9f0944a' - ) - serialized_old_record['dateOfUpdate'] = DEFAULT_PRIVILEGE_UPDATE_DATETIME - self.config.provider_table.put_item(Item=serialized_old_record) - - # run migration - do_migration({}) - - # verify old record was deleted - old_record_resp = self.config.provider_table.get_item( - Key={'pk': serialized_old_record['pk'], 'sk': serialized_old_record['sk']} - ) - self.assertIsNone(old_record_resp.get('Item')) - - # verify new record was created with expected sk - expected_sk = ( - f'{MOCK_COMPACT}#UPDATE#1#privilege/{DEFAULT_PRIVILEGE_JURISDICTION}/lpc' - f'/{mock_create_date}/399abde0989ad5e936920a3ba9f0944a' - ) - new_record = self.config.provider_table.get_item(Key={'pk': serialized_old_record['pk'], 'sk': expected_sk})[ - 'Item' - ] - serialized_old_record['sk'] = expected_sk - # nothing on the record should have changed other than the sort key - self.assertEqual(serialized_old_record, new_record) diff --git a/backend/compact-connect/pipeline/backend_stage.py b/backend/compact-connect/pipeline/backend_stage.py index cf897ea11..78f0bfa75 100644 --- a/backend/compact-connect/pipeline/backend_stage.py +++ b/backend/compact-connect/pipeline/backend_stage.py @@ -218,22 +218,6 @@ def __init__( standard_tags=standard_tags, ) - # Stack to house data migration custom resources - # This stack depends on the API and event listener stacks to ensure - # all core infrastructure is in place before migrations run - self.data_migration_stack = DataMigrationStack( - self, - 'DataMigrationStack', - env=environment, - environment_name=environment_name, - environment_context=environment_context, - standard_tags=standard_tags, - persistent_stack=self.persistent_stack, - ) - # Explicitly declare the dependency to ensure proper deployment order - self.data_migration_stack.add_dependency(self.api_stack) - self.data_migration_stack.add_dependency(self.event_listener_stack) - # Search Persistent Stack - OpenSearch Domain for advanced provider search self.search_persistent_stack = SearchPersistentStack( self, diff --git a/backend/compact-connect/stacks/data_migration_stack/__init__.py b/backend/compact-connect/stacks/data_migration_stack/__init__.py deleted file mode 100644 index 5413c5b50..000000000 --- a/backend/compact-connect/stacks/data_migration_stack/__init__.py +++ /dev/null @@ -1,51 +0,0 @@ -from cdk_nag import NagSuppressions -from common_constructs.stack import AppStack -from constructs import Construct - -from common_constructs.data_migration import DataMigration -from stacks import persistent_stack as ps - - -class DataMigrationStack(AppStack): - """ - Stack to house data migration custom resources that run scripts to perform data migrations. - This stack should be deployed after other infrastructure stacks are in place. - """ - - def __init__( - self, - scope: Construct, - construct_id: str, - *, - environment_name: str, - environment_context: dict, - persistent_stack: ps.PersistentStack, - **kwargs, - ): - super().__init__( - scope, construct_id, environment_context=environment_context, environment_name=environment_name, **kwargs - ) - - update_sort_keys_migration = DataMigration( - self, - 'MigrateUpdateSortKeys', - migration_dir='migrate_update_sort_keys', - lambda_environment={ - 'PROVIDER_TABLE_NAME': persistent_stack.provider_table.table_name, - **self.common_env_vars, - }, - ) - persistent_stack.shared_encryption_key.grant_encrypt_decrypt(update_sort_keys_migration) - persistent_stack.provider_table.grant_read_write_data(update_sort_keys_migration) - NagSuppressions.add_resource_suppressions_by_path( - self, - f'{update_sort_keys_migration.migration_function.role.node.path}/DefaultPolicy/Resource', - suppressions=[ - { - 'id': 'AwsSolutions-IAM5', - 'reason': 'This policy contains wild-carded actions and resources but they are scoped to the ' - 'specific actions, Table and Key that this lambda needs access to in order to perform the' - 'migration.', - }, - ], - ) From 97dfb5713a52a9057d8bf11aa4c5ea66f8b083dc Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Mon, 5 Jan 2026 16:57:21 -0600 Subject: [PATCH 15/23] remove unused import --- backend/compact-connect/pipeline/backend_stage.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/compact-connect/pipeline/backend_stage.py b/backend/compact-connect/pipeline/backend_stage.py index 78f0bfa75..b53a8b7c4 100644 --- a/backend/compact-connect/pipeline/backend_stage.py +++ b/backend/compact-connect/pipeline/backend_stage.py @@ -4,7 +4,6 @@ from stacks.api_lambda_stack import ApiLambdaStack from stacks.api_stack import ApiStack -from stacks.data_migration_stack import DataMigrationStack from stacks.disaster_recovery_stack import DisasterRecoveryStack from stacks.event_listener_stack import EventListenerStack from stacks.event_state_stack import EventStateStack From 1515362afaf2acb2b82f4ee017fda3c8a2aa4680 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Wed, 7 Jan 2026 14:33:50 -0600 Subject: [PATCH 16/23] return npdb categories as list to privilege timeline --- .../data_model/provider_record_util.py | 4 +-- .../data_model/schema/privilege/api.py | 2 ++ .../test_handlers/test_privilege_history.py | 4 +-- .../LicenseHistoryItem.model.spec.ts | 29 ++++++++++++++++++- .../LicenseHistoryItem.model.ts | 22 ++++++++++---- webroot/src/network/mocks/mock.data.api.ts | 6 ---- 6 files changed, 51 insertions(+), 16 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py index 717f50e13..c8b1f74c0 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/provider_record_util.py @@ -383,8 +383,8 @@ def construct_simplified_privilege_history_object( and event.get('encumbranceDetails') and should_include_encumbrance_details ): - # Parse the list into a comma-separated string - event['note'] = ', '.join(event['encumbranceDetails']['clinicalPrivilegeActionCategories']) + # In the case of encumbrances, we return the list of npdb categories associated with it + event['npdbCategories'] = event['encumbranceDetails']['clinicalPrivilegeActionCategories'] elif event['updateType'] == UpdateCategory.DEACTIVATION and event.get('deactivationDetails'): event['note'] = event['deactivationDetails']['note'] diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py index 659faa3a6..112b44472 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py @@ -178,6 +178,8 @@ class PrivilegeHistoryEventResponseSchema(ForgivingSchema): effectiveDate = Raw(required=True, allow_none=False) createDate = Raw(required=True, allow_none=False) note = String(required=False, allow_none=True) + # in the case of encumbrance events, we return the list of categories rather than a note + npdbCategories = List(String(required=False, allow_none=True)) class PrivilegeHistoryResponseSchema(ForgivingSchema): diff --git a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py index f63df06cd..8dba539ac 100644 --- a/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py +++ b/backend/compact-connect/lambdas/python/provider-data-v1/tests/function/test_handlers/test_privilege_history.py @@ -166,7 +166,7 @@ def test_get_privilege_history_users_me_returns_expected_history(self): 'createDate': '2023-05-05T12:59:59+00:00', 'dateOfUpdate': '2024-11-08T23:59:59+00:00', 'effectiveDate': '2022-05-05T12:59:59+00:00', - 'note': 'Non-compliance With Requirements', + 'npdbCategories': ['Non-compliance With Requirements'], 'type': 'privilegeUpdate', 'updateType': 'encumbrance', }, @@ -255,7 +255,7 @@ def test_get_privilege_history_staff_returns_expected_history(self): 'effectiveDate': '2022-05-05T12:59:59+00:00', 'type': 'privilegeUpdate', 'updateType': 'encumbrance', - 'note': 'Non-compliance With Requirements, Misconduct or Abuse', + 'npdbCategories': ['Non-compliance With Requirements', 'Misconduct or Abuse'], }, ], 'jurisdiction': 'ne', diff --git a/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.spec.ts b/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.spec.ts index 958bb6d32..982a03cce 100644 --- a/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.spec.ts +++ b/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.spec.ts @@ -42,6 +42,7 @@ describe('LicenseHistoryItem model', () => { expect(licenseHistoryItem.createDate).to.equal(null); expect(licenseHistoryItem.effectiveDate).to.equal(null); expect(licenseHistoryItem.serverNote).to.equal(null); + expect(licenseHistoryItem.npdbCategories).to.equal(null); expect(licenseHistoryItem.effectiveDateDisplay()).to.equal(''); expect(licenseHistoryItem.createDateDisplay()).to.equal(''); expect(licenseHistoryItem.isActivatingEvent()).to.equal(false); @@ -150,7 +151,33 @@ describe('LicenseHistoryItem model', () => { expect(licenseHistoryItem.updateTypeDisplay()).to.equal('Deactivation'); expect(licenseHistoryItem.noteDisplay()).to.equal('Deactivated due to associated license being deactivated'); }); - it('should create a LicenseHistoryItem with correct display values for an encumbrance', () => { + it('should create a LicenseHistoryItem with correct display values for an encumbrance with npdbCategories', () => { + const data = { + type: 'privilegeUpdate', + updateType: 'encumbrance', + dateOfUpdate: '2025-05-01T15:27:35+00:00', + effectiveDate: '2025-05-01T15:27:35+00:00', + createDate: '2025-05-01T15:27:35+00:00', + npdbCategories: ['Misconduct or Abuse', 'Non-compliance With Requirements'] + }; + const licenseHistoryItem = LicenseHistoryItemSerializer.fromServer(data); + + expect(licenseHistoryItem).to.be.an.instanceof(LicenseHistoryItem); + expect(licenseHistoryItem.type).to.equal(data.type); + expect(licenseHistoryItem.updateType).to.equal(data.updateType); + expect(licenseHistoryItem.dateOfUpdate).to.equal(data.dateOfUpdate); + expect(licenseHistoryItem.createDate).to.equal(data.createDate); + expect(licenseHistoryItem.effectiveDate).to.equal(data.effectiveDate); + expect(licenseHistoryItem.npdbCategories).to.deep.equal(data.npdbCategories); + expect(licenseHistoryItem.effectiveDateDisplay()).to.equal('5/1/2025'); + expect(licenseHistoryItem.createDateDisplay()).to.equal('5/1/2025'); + expect(licenseHistoryItem.isActivatingEvent()).to.equal(false); + expect(licenseHistoryItem.isDeactivatingEvent()).to.equal(true); + expect(licenseHistoryItem.updateTypeDisplay()).to.equal('Encumbrance'); + expect(licenseHistoryItem.noteDisplay()).to.equal('Misconduct or Abuse, Non-compliance With Requirements'); + }); + + it('should create a LicenseHistoryItem with correct display values for an encumbrance with single category', () => { const data = { type: 'privilegeUpdate', updateType: 'encumbrance', diff --git a/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts b/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts index 103bbf6b2..1b6f999c1 100644 --- a/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts +++ b/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts @@ -17,6 +17,7 @@ export interface InterfaceLicenseHistoryItem { createDate?: string | null; effectiveDate?: string | null; serverNote?: string | null; + npdbCategories?: string[] | null; } // ======================================================== @@ -31,6 +32,7 @@ export class LicenseHistoryItem implements InterfaceLicenseHistoryItem { public createDate? = null; public effectiveDate? = null; public serverNote? = null; + public npdbCategories?: string[] | null = null; constructor(data?: InterfaceLicenseHistoryItem) { const cleanDataObject = deleteUndefinedProperties(data); @@ -93,11 +95,20 @@ export class LicenseHistoryItem implements InterfaceLicenseHistoryItem { } else if (updateType === 'licenseDeactivation') { noteDisplay = this.$t('licensing.licenseDeactivationNote'); } else if (updateType === 'encumbrance') { - const npdbTypes = this.$tm('licensing.npdbTypes') || []; - const npdbType = npdbTypes.find((translate) => translate.key === this.serverNote); - const typeName = npdbType?.name || ''; - - noteDisplay = typeName; + // For encumbrance events, use npdbCategories if available (new format) + // Otherwise fall back to serverNote for backward compatibility + if (this.npdbCategories && this.npdbCategories.length > 0) { + const npdbTypes = this.$tm('licensing.npdbTypes') || []; + const categoryNames = this.npdbCategories + .map((categoryKey) => { + const npdbType = npdbTypes.find((translate) => translate.key === categoryKey); + + return npdbType?.name || categoryKey; + }) + .filter((name) => name); // Filter out empty strings + + noteDisplay = categoryNames.join(', '); + } } return noteDisplay; @@ -116,6 +127,7 @@ export class LicenseHistoryItemSerializer { effectiveDate: json.effectiveDate, dateOfUpdate: json.dateOfUpdate, serverNote: json.note, + npdbCategories: json.npdbCategories, }; return new LicenseHistoryItem(licenseHistoryData); diff --git a/webroot/src/network/mocks/mock.data.api.ts b/webroot/src/network/mocks/mock.data.api.ts index dedfd90c1..c769deb05 100644 --- a/webroot/src/network/mocks/mock.data.api.ts +++ b/webroot/src/network/mocks/mock.data.api.ts @@ -232,12 +232,9 @@ export class DataApi { licenseState, licenseType, encumbranceType, - npdbCategory, npdbCategories, startDate ) { - const { $features } = (window as any).Vue?.config?.globalProperties || {}; - if (!compact) { return Promise.reject(new Error('failed license encumber')); } @@ -330,12 +327,9 @@ export class DataApi { privilegeState, licenseType, encumbranceType, - npdbCategory, npdbCategories, startDate ) { - const { $features } = (window as any).Vue?.config?.globalProperties || {}; - if (!compact) { return Promise.reject(new Error('failed privilege encumber')); } From 11b860f3680091678f899fc832b3bd2ca3d499ce Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Wed, 7 Jan 2026 15:16:22 -0600 Subject: [PATCH 17/23] update api response model for privilege history endpoint --- backend/compact-connect/stacks/api_stack/v1_api/api_model.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/compact-connect/stacks/api_stack/v1_api/api_model.py b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py index 97479093e..531158bcc 100644 --- a/backend/compact-connect/stacks/api_stack/v1_api/api_model.py +++ b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py @@ -2345,6 +2345,11 @@ def privilege_history_response_model(self) -> Model: ), 'createDate': JsonSchema(type=JsonSchemaType.STRING, format='date-time'), 'note': JsonSchema(type=JsonSchemaType.STRING), + 'npdbCategories': JsonSchema( + type=JsonSchemaType.ARRAY, + description='The categories of clinical privilege action for encumbrance events', + items=JsonSchema(type=JsonSchemaType.STRING), + ), }, ), ), From bf9e83b1096a49266a78ac69f3c83d525a019df8 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Wed, 7 Jan 2026 15:41:40 -0600 Subject: [PATCH 18/23] update test in common layer --- .../python/common/cc_common/data_model/schema/privilege/api.py | 2 +- .../python/common/tests/unit/test_provider_record_util.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py index 112b44472..f8eeabd32 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/api.py @@ -179,7 +179,7 @@ class PrivilegeHistoryEventResponseSchema(ForgivingSchema): createDate = Raw(required=True, allow_none=False) note = String(required=False, allow_none=True) # in the case of encumbrance events, we return the list of categories rather than a note - npdbCategories = List(String(required=False, allow_none=True)) + npdbCategories = List(String(), required=False, allow_none=True) class PrivilegeHistoryResponseSchema(ForgivingSchema): diff --git a/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py b/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py index d8397e835..d7526d31d 100644 --- a/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py +++ b/backend/compact-connect/lambdas/python/common/tests/unit/test_provider_record_util.py @@ -980,7 +980,7 @@ def test_construct_simplified_privilege_history_object_returns_encumbrance_notes 'effectiveDate': datetime.fromisoformat('2025-06-16T00:00:00+04:00'), 'type': 'privilegeUpdate', 'updateType': 'encumbrance', - 'note': 'Non-compliance With Requirements', + 'npdbCategories': ['Non-compliance With Requirements'], }, ], } From 520d80952ed2399c428f8e2ecab9dd2e48808e9f Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Wed, 7 Jan 2026 15:56:19 -0600 Subject: [PATCH 19/23] set npdb categories to required in marshmallow schemas --- .../common/cc_common/data_model/schema/adverse_action/record.py | 2 +- .../common/cc_common/data_model/schema/privilege/record.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py index c3826c716..62df0f5f2 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/adverse_action/record.py @@ -34,7 +34,7 @@ class AdverseActionRecordSchema(BaseRecordSchema): # Populated on creation encumbranceType = EncumbranceTypeField(required=True, allow_none=False) - clinicalPrivilegeActionCategories = List(ClinicalPrivilegeActionCategoryField(), required=False, allow_none=False) + clinicalPrivilegeActionCategories = List(ClinicalPrivilegeActionCategoryField(), required=True, allow_none=False) effectiveStartDate = Date(required=True, allow_none=False) submittingUser = UUID(required=True, allow_none=False) creationDate = DateTime(required=True, allow_none=False) diff --git a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py index 7490271f8..bdf15acb7 100644 --- a/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py +++ b/backend/compact-connect/lambdas/python/common/cc_common/data_model/schema/privilege/record.py @@ -60,7 +60,7 @@ class EncumbranceDetailsSchema(Schema): Schema for tracking details about an encumbrance. """ - clinicalPrivilegeActionCategories = List(ClinicalPrivilegeActionCategoryField(), required=False, allow_none=False) + clinicalPrivilegeActionCategories = List(ClinicalPrivilegeActionCategoryField(), required=True, allow_none=False) adverseActionId = UUID(required=True, allow_none=False) # present if update is created by upstream license encumbrance licenseJurisdiction = Jurisdiction(required=False, allow_none=False) From 1f3011e09524d3c41c8d647ffea380fd0951041e Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Wed, 7 Jan 2026 16:39:24 -0600 Subject: [PATCH 20/23] display first npdb category from list when ending encumbrance This was previously displaying the deprecated field, which we no longer support. This keeps the change compatible with the previous implementation by grabbing the first category from the list. --- webroot/src/components/LicenseCard/LicenseCard.vue | 2 +- webroot/src/components/PrivilegeCard/PrivilegeCard.vue | 2 +- .../src/models/AdverseAction/AdverseAction.model.spec.ts | 6 +++--- webroot/src/models/AdverseAction/AdverseAction.model.ts | 8 ++------ 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/webroot/src/components/LicenseCard/LicenseCard.vue b/webroot/src/components/LicenseCard/LicenseCard.vue index 5e92b8ebe..2404b5104 100644 --- a/webroot/src/components/LicenseCard/LicenseCard.vue +++ b/webroot/src/components/LicenseCard/LicenseCard.vue @@ -330,7 +330,7 @@ :key="selected.id" class="removed-encumbrance" > -
{{ selected.npdbTypeName() }}
+
{{ selected.getFirstNpdbTypeName() }}
{{ $t('licensing.confirmLicenseUnencumberSuccessEndDate') }}: {{ dateDisplayFormat(formData[`adverse-action-end-date-${selected.id}`].value) }} diff --git a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue index fddca810a..e8596d153 100644 --- a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue +++ b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue @@ -390,7 +390,7 @@ :key="selected.id" class="removed-encumbrance" > -
{{ selected.npdbTypeName() }}
+
{{ selected.getFirstNpdbTypeName() }}
{{ $t('licensing.confirmPrivilegeUnencumberSuccessEndDate') }}: {{ dateDisplayFormat(formData[`adverse-action-end-date-${selected.id}`].value) }} diff --git a/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts b/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts index c693e4541..9822eebce 100644 --- a/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts +++ b/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts @@ -58,7 +58,7 @@ describe('AdverseAction model', () => { expect(adverseAction.endDateDisplay()).to.equal(''); expect(adverseAction.hasEndDate()).to.equal(false); expect(adverseAction.encumbranceTypeName()).to.equal(''); - expect(adverseAction.npdbTypeName()).to.equal(''); + expect(adverseAction.getFirstNpdbTypeName()).to.equal(''); expect(adverseAction.getNpdbTypeName()).to.equal(''); expect(adverseAction.isActive()).to.equal(false); }); @@ -97,7 +97,7 @@ describe('AdverseAction model', () => { expect(adverseAction.endDateDisplay()).to.equal('Invalid date'); expect(adverseAction.hasEndDate()).to.equal(true); expect(adverseAction.encumbranceTypeName()).to.equal(''); - expect(adverseAction.npdbTypeName()).to.equal(''); + expect(adverseAction.getFirstNpdbTypeName()).to.equal(''); expect(adverseAction.getNpdbTypeName('Other')).to.equal('Other'); expect(adverseAction.isActive()).to.equal(false); }); @@ -182,7 +182,7 @@ describe('AdverseAction model', () => { ); expect(adverseAction.hasEndDate()).to.equal(true); expect(adverseAction.encumbranceTypeName()).to.equal('Fine'); - expect(adverseAction.npdbTypeName()).to.equal('Non-compliance With Requirements'); + expect(adverseAction.getFirstNpdbTypeName()).to.equal('Non-compliance With Requirements'); expect(adverseAction.getNpdbTypeName(data.clinicalPrivilegeActionCategories[0])).to.equal('Non-compliance With Requirements'); expect(adverseAction.isActive()).to.equal(true); }); diff --git a/webroot/src/models/AdverseAction/AdverseAction.model.ts b/webroot/src/models/AdverseAction/AdverseAction.model.ts index 44a5f94a5..c9d71850c 100644 --- a/webroot/src/models/AdverseAction/AdverseAction.model.ts +++ b/webroot/src/models/AdverseAction/AdverseAction.model.ts @@ -83,12 +83,8 @@ export class AdverseAction implements InterfaceAdverseActionCreate { return typeName; } - public npdbTypeName(): string { - const npdbTypes = this.$tm('licensing.npdbTypes') || []; - const npdbType = npdbTypes.find((translate) => translate.key === this.npdbType); - const typeName = npdbType?.name || ''; - - return typeName; + public getFirstNpdbTypeName(): string { + return this.getNpdbTypeName(this.npdbTypes?.[0] || ''); } public getNpdbTypeName(npdbType: string): string { From 614c758ba5e3ae09fc41c0dc721b76310ed1ad49 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Wed, 7 Jan 2026 16:41:42 -0600 Subject: [PATCH 21/23] update api spec --- .../api-specification/latest-oas30.json | 16326 ++++++++++------ 1 file changed, 9874 insertions(+), 6452 deletions(-) diff --git a/backend/compact-connect/docs/internal/api-specification/latest-oas30.json b/backend/compact-connect/docs/internal/api-specification/latest-oas30.json index 8abe15b1f..860f5240b 100644 --- a/backend/compact-connect/docs/internal/api-specification/latest-oas30.json +++ b/backend/compact-connect/docs/internal/api-specification/latest-oas30.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "LicenseApi", - "version": "2025-11-10T18:53:58Z" + "version": "2026-01-07T22:16:05Z" }, "servers": [ { @@ -10,8 +10,8 @@ } ], "paths": { - "/v1/compacts/{compact}": { - "get": { + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation": { + "post": { "parameters": [ { "name": "Authorization", @@ -28,42 +28,25 @@ "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenBxfAXNgCl0f1" - } - } - } - } - }, - "security": [ + }, { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/readGeneral", - "octp/readGeneral", - "coun/readGeneral" - ] - } - ] - }, - "put": { - "parameters": [ + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, { - "name": "Authorization", - "in": "header", + "name": "jurisdiction", + "in": "path", "required": true, "schema": { "type": "string" } }, { - "name": "compact", + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -75,7 +58,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenrzUhY3WW0Y7L" + "$ref": "#/components/schemas/SandboLicen9VEPwkhZhKem" } } }, @@ -87,7 +70,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } @@ -131,21 +114,19 @@ ] } ] - } - }, - "/v1/compacts/{compact}/attestations/{attestationId}": { - "get": { + }, + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } }, { - "name": "compact", + "name": "providerId", "in": "path", "required": true, "schema": { @@ -153,7 +134,15 @@ } }, { - "name": "attestationId", + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -162,49 +151,42 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicenHcuQxywUvhOh" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/credentials/payment-processor": { + "/v1/provider-users/initiateRecovery": { "post": { - "parameters": [ - { - "name": "Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "compact", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenLPepHoMLi1aj" + "$ref": "#/components/schemas/SandboLicenJt67zBFIGGPS" } } }, @@ -216,65 +198,57 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenou5OKotlJ6Ez" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + } + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/jurisdictions": { - "get": { + "/v1/compacts/{compact}/providers/{providerId}/licenses": { + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } }, { - "name": "compact", + "name": "providerId", "in": "path", "required": true, "schema": { @@ -283,29 +257,36 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicenHX8YNrOpPZbZ" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/readGeneral", - "octp/readGeneral", - "coun/readGeneral" - ] + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/jurisdictions/{jurisdiction}": { + "/v1/compacts/{compact}/jurisdictions/{jurisdiction}/licenses/bulk-upload": { "get": { "parameters": [ { @@ -339,7 +320,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenbGNGFVLD0EDE" + "$ref": "#/components/schemas/SandboLicenjfa9vGqBChQd" } } } @@ -348,33 +329,54 @@ "security": [ { "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/readGeneral", - "octp/readGeneral", - "coun/readGeneral" + "aslp/write", + "al/aslp.write", + "ak/aslp.write", + "ar/aslp.write", + "co/aslp.write", + "de/aslp.write", + "ky/aslp.write", + "la/aslp.write", + "me/aslp.write", + "md/aslp.write", + "mn/aslp.write", + "ms/aslp.write", + "mo/aslp.write", + "ne/aslp.write", + "oh/aslp.write", + "octp/write", + "al/octp.write", + "ar/octp.write", + "ky/octp.write", + "la/octp.write", + "ms/octp.write", + "ne/octp.write", + "oh/octp.write", + "coun/write", + "al/coun.write", + "ar/coun.write", + "fl/coun.write", + "ga/coun.write", + "ky/coun.write", + "ne/coun.write", + "oh/coun.write", + "ut/coun.write" ] } ] }, - "put": { + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } }, { - "name": "compact", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "jurisdiction", + "name": "jurisdiction", "in": "path", "required": true, "schema": { @@ -382,79 +384,71 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenTi9BrhAERjPp" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } } - } + }, + "content": {} } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + } + } + }, + "/v1/public/jurisdictions": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/jurisdictions/{jurisdiction}/licenses/bulk-upload": { + "/v1/public/compacts/{compact}/jurisdictions": { "get": { "parameters": [ - { - "name": "Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "compact", "in": "path", @@ -462,14 +456,6 @@ "schema": { "type": "string" } - }, - { - "name": "jurisdiction", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { @@ -478,53 +464,55 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenJIK60DVCsApb" + "$ref": "#/components/schemas/SandboLicenLnkOp52kvwLg" } } } } - }, - "security": [ + } + }, + "options": { + "parameters": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/write", - "al/aslp.write", - "ak/aslp.write", - "ar/aslp.write", - "co/aslp.write", - "de/aslp.write", - "ky/aslp.write", - "la/aslp.write", - "me/aslp.write", - "md/aslp.write", - "mn/aslp.write", - "ms/aslp.write", - "mo/aslp.write", - "ne/aslp.write", - "oh/aslp.write", - "octp/write", - "al/octp.write", - "ar/octp.write", - "ky/octp.write", - "la/octp.write", - "ms/octp.write", - "ne/octp.write", - "oh/octp.write", - "coun/write", - "al/coun.write", - "ar/coun.write", - "fl/coun.write", - "ga/coun.write", - "ky/coun.write", - "ne/coun.write", - "oh/coun.write", - "ut/coun.write" - ] + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } - ] + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } } }, - "/v1/compacts/{compact}/providers/query": { + "/v1/purchases/privileges": { "post": { "parameters": [ { @@ -534,21 +522,13 @@ "schema": { "type": "string" } - }, - { - "name": "compact", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenYwiFMNF2Vu7Z" + "$ref": "#/components/schemas/SandboLicendZ26vvlCKCbW" } } }, @@ -560,7 +540,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLiceno12FSfDWBzow" + "$ref": "#/components/schemas/SandboLicenVHq6DcHpnqp0" } } } @@ -568,16 +548,42 @@ }, "security": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/readGeneral", - "octp/readGeneral", - "coun/readGeneral" - ] + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] } ] + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } } }, - "/v1/compacts/{compact}/providers/{providerId}": { + "/v1/provider-users/me": { "get": { "parameters": [ { @@ -587,22 +593,6 @@ "schema": { "type": "string" } - }, - { - "name": "compact", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "providerId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], "responses": { @@ -611,7 +601,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenr5TVmpxKfPGq" + "$ref": "#/components/schemas/SandboLicenJlHz6gimzgVV" } } } @@ -619,19 +609,45 @@ }, "security": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/readGeneral", - "octp/readGeneral", - "coun/readGeneral" - ] + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] } ] - } - }, - "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance": { - "post": { - "parameters": [ - { + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/ssn": { + "get": { + "parameters": [ + { "name": "Authorization", "in": "header", "required": true, @@ -654,9 +670,63 @@ "schema": { "type": "string" } - }, + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenx7ouhX772atw" + } + } + } + } + }, + "security": [ { - "name": "jurisdiction", + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/readSSN", + "al/aslp.readSSN", + "ak/aslp.readSSN", + "ar/aslp.readSSN", + "co/aslp.readSSN", + "de/aslp.readSSN", + "ky/aslp.readSSN", + "la/aslp.readSSN", + "me/aslp.readSSN", + "md/aslp.readSSN", + "mn/aslp.readSSN", + "ms/aslp.readSSN", + "mo/aslp.readSSN", + "ne/aslp.readSSN", + "oh/aslp.readSSN", + "octp/readSSN", + "al/octp.readSSN", + "ar/octp.readSSN", + "ky/octp.readSSN", + "la/octp.readSSN", + "ms/octp.readSSN", + "ne/octp.readSSN", + "oh/octp.readSSN", + "coun/readSSN", + "al/coun.readSSN", + "ar/coun.readSSN", + "fl/coun.readSSN", + "ga/coun.readSSN", + "ky/coun.readSSN", + "ne/coun.readSSN", + "oh/coun.readSSN", + "ut/coun.readSSN" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", "in": "path", "required": true, "schema": { @@ -664,7 +734,81 @@ } }, { - "name": "licenseType", + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/compacts/{compact}/providers/query": { + "post": { + "parameters": [ + { + "name": "compact", "in": "path", "required": true, "schema": { @@ -676,7 +820,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenEAecRKtirVZk" + "$ref": "#/components/schemas/SandboLicenyuZlweRzUTEW" } } }, @@ -688,63 +832,57 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenf1YSNMeYKlGD" } } } } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] - } - ] - } - }, - "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance/{encumbranceId}": { - "patch": { + } + }, + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } - }, + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}": { + "options": { + "parameters": [ { "name": "compact", "in": "path", @@ -776,80 +914,98 @@ "schema": { "type": "string" } - }, + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType": { + "options": { + "parameters": [ { - "name": "encumbranceId", + "name": "compact", "in": "path", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicen3zolh21hPpCk" - } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation": { - "post": { + "/v1/compacts/{compact}/attestations/{attestationId}": { + "get": { "parameters": [ { "name": "Authorization", @@ -868,15 +1024,36 @@ } }, { - "name": "providerId", + "name": "attestationId", "in": "path", "required": true, "schema": { "type": "string" } - }, + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen0TA7m9cBJLpz" + } + } + } + } + }, + "security": [ { - "name": "jurisdiction", + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", "in": "path", "required": true, "schema": { @@ -884,7 +1061,7 @@ } }, { - "name": "licenseType", + "name": "attestationId", "in": "path", "required": true, "schema": { @@ -892,23 +1069,55 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenZ1SdRwpLvl46" + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } } + }, + "content": {} + } + } + } + }, + "/v1/purchases/privileges/options": { + "get": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenaiHAuDR162f2" } } } @@ -916,46 +1125,85 @@ }, "security": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] } ] + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } } }, - "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation/{investigationId}": { - "patch": { + "/v1/public/compacts/{compact}": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/jurisdiction/{jurisdiction}/licenseType/{licenseType}/history": { + "get": { "parameters": [ { "name": "Authorization", @@ -966,7 +1214,7 @@ } }, { - "name": "compact", + "name": "jurisdiction", "in": "path", "required": true, "schema": { @@ -974,31 +1222,7 @@ } }, { - "name": "providerId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "jurisdiction", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "licenseType", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "investigationId", + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -1006,23 +1230,13 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenvJ6cvnUE8Wwa" - } - } - }, - "required": true - }, "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicen0XcLtKpj7p28" } } } @@ -1030,73 +1244,72 @@ }, "security": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] } ] - } - }, - "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/deactivate": { - "post": { + }, + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "jurisdiction", + "in": "path", "required": true, "schema": { "type": "string" } }, { - "name": "compact", + "name": "licenseType", "in": "path", "required": true, "schema": { "type": "string" } - }, + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}": { + "get": { + "parameters": [ { - "name": "providerId", - "in": "path", + "name": "Authorization", + "in": "header", "required": true, "schema": { "type": "string" } }, { - "name": "jurisdiction", + "name": "compact", "in": "path", "required": true, "schema": { @@ -1104,7 +1317,7 @@ } }, { - "name": "licenseType", + "name": "providerId", "in": "path", "required": true, "schema": { @@ -1112,23 +1325,13 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenPAsEF1Ia4s7g" - } - } - }, - "required": true - }, "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenJlHz6gimzgVV" } } } @@ -1137,54 +1340,15 @@ "security": [ { "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" + "aslp/readGeneral", + "octp/readGeneral", + "coun/readGeneral" ] } ] - } - }, - "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance": { - "post": { + }, + "options": { "parameters": [ - { - "name": "Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "compact", "in": "path", @@ -1200,18 +1364,99 @@ "schema": { "type": "string" } - }, + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/jurisdictions/live": { + "get": { + "parameters": [ { - "name": "jurisdiction", - "in": "path", - "required": true, + "name": "compact", + "in": "query", "schema": { "type": "string" } - }, + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenEPhGnRpsTFzc" + } + } + } + } + } + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/home-jurisdiction": { + "put": { + "parameters": [ { - "name": "licenseType", - "in": "path", + "name": "Authorization", + "in": "header", "required": true, "schema": { "type": "string" @@ -1222,7 +1467,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicen6bEbVSG2KkBx" + "$ref": "#/components/schemas/SandboLicenJVUAEniGDz2F" } } }, @@ -1234,7 +1479,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } @@ -1242,55 +1487,44 @@ }, "security": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] } ] + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } } }, - "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance/{encumbranceId}": { - "patch": { + "/v1/compacts/{compact}/providers/{providerId}/privileges": { + "options": { "parameters": [ - { - "name": "Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "compact", "in": "path", @@ -1306,37 +1540,45 @@ "schema": { "type": "string" } - }, - { - "name": "jurisdiction", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "licenseType", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "encumbranceId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/verifyRecovery": { + "post": { "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenVZHLGnXN7APB" + "$ref": "#/components/schemas/SandboLicen5bneP2wVdz6l" } } }, @@ -1348,54 +1590,46 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + } + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/history": { - "get": { + "/v1/compacts/{compact}/providers/query": { + "post": { "parameters": [ { "name": "Authorization", @@ -1412,39 +1646,25 @@ "schema": { "type": "string" } - }, - { - "name": "providerId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "jurisdiction", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "licenseType", - "in": "path", - "required": true, - "schema": { - "type": "string" - } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenyuZlweRzUTEW" + } + } + }, + "required": true + }, "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenobivPmYh5SvH" + "$ref": "#/components/schemas/SandboLicenDTjDt3roB2dM" } } } @@ -1459,6 +1679,46 @@ ] } ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } } }, "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation": { @@ -1509,7 +1769,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenISmLYcqYrfLq" + "$ref": "#/components/schemas/SandboLicenKbxrVseriPZY" } } }, @@ -1521,7 +1781,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } @@ -1565,15 +1825,261 @@ ] } ] - } - }, - "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation/{investigationId}": { - "patch": { + }, + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", - "required": true, + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/military-affiliation": { + "post": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenoBgekYzIk0Uy" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenSFWw1LC3Pl63" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + } + ] + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + }, + "patch": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenztG3aZP1J9M3" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + } + ] + } + }, + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance/{encumbranceId}": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "encumbranceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + }, + "patch": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, "schema": { "type": "string" } @@ -1611,7 +2117,7 @@ } }, { - "name": "investigationId", + "name": "encumbranceId", "in": "path", "required": true, "schema": { @@ -1623,7 +2129,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenmwNUQ4l5yt99" + "$ref": "#/components/schemas/SandboLicenFqy1VQNhsjvi" } } }, @@ -1635,7 +2141,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } @@ -1681,17 +2187,9 @@ ] } }, - "/v1/compacts/{compact}/providers/{providerId}/ssn": { - "get": { + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction": { + "options": { "parameters": [ - { - "name": "Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "compact", "in": "path", @@ -1710,62 +2208,40 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { "schema": { - "$ref": "#/components/schemas/SandboLicen2x5yTuN7Vce5" + "type": "string" } - } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/readSSN", - "al/aslp.readSSN", - "ak/aslp.readSSN", - "ar/aslp.readSSN", - "co/aslp.readSSN", - "de/aslp.readSSN", - "ky/aslp.readSSN", - "la/aslp.readSSN", - "me/aslp.readSSN", - "md/aslp.readSSN", - "mn/aslp.readSSN", - "ms/aslp.readSSN", - "mo/aslp.readSSN", - "ne/aslp.readSSN", - "oh/aslp.readSSN", - "octp/readSSN", - "al/octp.readSSN", - "ar/octp.readSSN", - "ky/octp.readSSN", - "la/octp.readSSN", - "ms/octp.readSSN", - "ne/octp.readSSN", - "oh/octp.readSSN", - "coun/readSSN", - "al/coun.readSSN", - "ar/coun.readSSN", - "fl/coun.readSSN", - "ga/coun.readSSN", - "ky/coun.readSSN", - "ne/coun.readSSN", - "oh/coun.readSSN", - "ut/coun.readSSN" - ] + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/staff-users": { - "get": { + "/v1/flags/{flagId}/check": { + "post": { "parameters": [ { - "name": "compact", + "name": "flagId", "in": "path", "required": true, "schema": { @@ -1773,68 +2249,33 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenpl2UadOfjgNJ" + } + } + }, + "required": true + }, "responses": { "200": { "description": "200 response", - "headers": { - "Access-Control-Allow-Origin": { - "schema": { - "type": "string" - } - } - }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenLLx7v2Sq2Nku" + "$ref": "#/components/schemas/SandboLicen113ZVRfz1NW8" } } } } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] - } - ] + } }, - "post": { + "options": { "parameters": [ { - "name": "compact", + "name": "flagId", "in": "path", "required": true, "schema": { @@ -1842,77 +2283,38 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenDb8Dl04rAoPD" - } - } - }, - "required": true - }, "responses": { - "200": { - "description": "200 response", + "204": { + "description": "204 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } - } - }, - "content": { - "application/json": { + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicen2VPoPHwDEcqq" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + }, + "content": {} } - ] + } } }, - "/v1/compacts/{compact}/staff-users/{userId}": { - "get": { + "/v1/compacts/{compact}/jurisdictions/{jurisdiction}/licenses": { + "options": { "parameters": [ { "name": "compact", @@ -1923,7 +2325,7 @@ } }, { - "name": "userId", + "name": "jurisdiction", "in": "path", "required": true, "schema": { @@ -1932,85 +2334,98 @@ } ], "responses": { - "404": { - "description": "404 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } - } - }, - "200": { - "description": "200 response", + "204": { + "description": "204 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } - } - }, - "content": { - "application/json": { + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicen2VPoPHwDEcqq" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + }, + "content": {} } - ] - }, - "delete": { + } + } + }, + "/v1/flags/{flagId}": { + "options": { "parameters": [ { - "name": "compact", + "name": "flagId", "in": "path", "required": true, "schema": { "type": "string" } - }, + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}": { + "options": { + "parameters": [ { - "name": "userId", + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", "in": "path", "required": true, "schema": { @@ -2019,68 +2434,46 @@ } ], "responses": { - "404": { - "description": "404 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } - } - } - }, - "200": { - "description": "200 response", - "content": { - "application/json": { + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + }, + "content": {} } - ] - }, - "patch": { + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance": { + "post": { "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "compact", "in": "path", @@ -2090,7 +2483,23 @@ } }, { - "name": "userId", + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -2102,36 +2511,19 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenC1PiOZAh5Usx" + "$ref": "#/components/schemas/SandboLicenv4avK8ok4P45" } } }, "required": true }, "responses": { - "404": { - "description": "404 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } - } - }, "200": { "description": "200 response", - "headers": { - "Access-Control-Allow-Origin": { - "schema": { - "type": "string" - } - } - }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicen2VPoPHwDEcqq" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } @@ -2175,10 +2567,8 @@ ] } ] - } - }, - "/v1/compacts/{compact}/staff-users/{userId}/reinvite": { - "post": { + }, + "options": { "parameters": [ { "name": "compact", @@ -2189,7 +2579,23 @@ } }, { - "name": "userId", + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -2198,135 +2604,73 @@ } ], "responses": { - "404": { - "description": "404 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } - } - } - }, - "200": { - "description": "200 response", - "content": { - "application/json": { + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "aslp/admin", - "al/aslp.admin", - "ak/aslp.admin", - "ar/aslp.admin", - "co/aslp.admin", - "de/aslp.admin", - "ky/aslp.admin", - "la/aslp.admin", - "me/aslp.admin", - "md/aslp.admin", - "mn/aslp.admin", - "ms/aslp.admin", - "mo/aslp.admin", - "ne/aslp.admin", - "oh/aslp.admin", - "octp/admin", - "al/octp.admin", - "ar/octp.admin", - "ky/octp.admin", - "la/octp.admin", - "ms/octp.admin", - "ne/octp.admin", - "oh/octp.admin", - "coun/admin", - "al/coun.admin", - "ar/coun.admin", - "fl/coun.admin", - "ga/coun.admin", - "ky/coun.admin", - "ne/coun.admin", - "oh/coun.admin", - "ut/coun.admin" - ] + }, + "content": {} } - ] + } } }, - "/v1/flags/{flagId}/check": { - "post": { + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation/{investigationId}": { + "options": { "parameters": [ { - "name": "flagId", + "name": "compact", "in": "path", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenHVkU4oNl0nsF" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicen0ONaFbyAwP9V" - } - } + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - } - } - } - }, - "/v1/provider-users/initiateRecovery": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenpPZOnBEPSaJL" - } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" } - } - } - } - }, - "/v1/provider-users/me": { - "get": { - "parameters": [ + }, { - "name": "Authorization", - "in": "header", + "name": "investigationId", + "in": "path", "required": true, "schema": { "type": "string" @@ -2334,25 +2678,34 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicenr5TVmpxKfPGq" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + }, + "content": {} } - ] - } - }, - "/v1/provider-users/me/email": { + } + }, "patch": { "parameters": [ { @@ -2362,43 +2715,42 @@ "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenaSmGZue6afyn" - } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - } - }, - "security": [ + }, { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] - } - ] - } - }, - "/v1/provider-users/me/email/verify": { - "post": { - "parameters": [ + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, { - "name": "Authorization", - "in": "header", + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "investigationId", + "in": "path", "required": true, "schema": { "type": "string" @@ -2409,7 +2761,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenbcsmAhiZJZ0Q" + "$ref": "#/components/schemas/SandboLicennuxBDueZ6Trv" } } }, @@ -2421,7 +2773,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } @@ -2429,65 +2781,89 @@ }, "security": [ { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] } ] } }, - "/v1/provider-users/me/home-jurisdiction": { - "put": { - "parameters": [ - { - "name": "Authorization", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicen8QcYRI7AzDyX" - } - } - }, - "required": true - }, + "/": { + "options": { "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + }, + "content": {} } - ] + } } }, - "/v1/provider-users/me/jurisdiction/{jurisdiction}/licenseType/{licenseType}/history": { - "get": { + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}": { + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } }, { - "name": "jurisdiction", + "name": "providerId", "in": "path", "required": true, "schema": { @@ -2495,7 +2871,7 @@ } }, { - "name": "licenseType", + "name": "jurisdiction", "in": "path", "required": true, "schema": { @@ -2504,161 +2880,64 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicenobivPmYh5SvH" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + }, + "content": {} } - ] + } } }, - "/v1/provider-users/me/military-affiliation": { - "post": { + "/v1/public/compacts/{compact}/providers/{providerId}/jurisdiction/{jurisdiction}/licenseType/{licenseType}/history": { + "get": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenJZNKekBSUCl5" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenUzZJQKKk5goL" - } - } - } - } - }, - "security": [ { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] - } - ] - }, - "patch": { - "parameters": [ - { - "name": "Authorization", - "in": "header", + "name": "providerId", + "in": "path", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicendERazg9NeEsA" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } - } - } - }, - "security": [ { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] - } - ] - } - }, - "/v1/provider-users/registration": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenwoqrSnm0rsGM" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } - } - } - } - } - }, - "/v1/provider-users/verifyRecovery": { - "post": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenirtyanNQfXka" - } + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } - } - } - } - } - }, - "/v1/public/compacts/{compact}/jurisdictions": { - "get": { - "parameters": [ { - "name": "compact", + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -2672,16 +2951,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenHX8YNrOpPZbZ" + "$ref": "#/components/schemas/SandboLicen0XcLtKpj7p28" } } } } } - } - }, - "/v1/public/compacts/{compact}/providers/query": { - "post": { + }, + "options": { "parameters": [ { "name": "compact", @@ -2690,37 +2967,17 @@ "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenYwiFMNF2Vu7Z" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenBxXRobaYJSR9" - } - } + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - } - } - } - }, - "/v1/public/compacts/{compact}/providers/{providerId}": { - "get": { - "parameters": [ + }, { - "name": "compact", + "name": "jurisdiction", "in": "path", "required": true, "schema": { @@ -2728,7 +2985,7 @@ } }, { - "name": "providerId", + "name": "licenseType", "in": "path", "required": true, "schema": { @@ -2737,22 +2994,46 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicendF8CsBCXAU1x" + "type": "string" } } - } + }, + "content": {} } } } }, - "/v1/public/compacts/{compact}/providers/{providerId}/jurisdiction/{jurisdiction}/licenseType/{licenseType}/history": { - "get": { + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/deactivate": { + "post": { "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, { "name": "compact", "in": "path", @@ -2786,92 +3067,96 @@ } } ], - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenobivPmYh5SvH" - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenG4CMW3C4eZNN" } } - } - } - } - }, - "/v1/public/jurisdictions/live": { - "get": { - "parameters": [ - { - "name": "compact", - "in": "query", - "schema": { - "type": "string" - } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SandboLicenZdwYMaXuEYs6" + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" } } } } - } - } - }, - "/v1/purchases/privileges": { - "post": { + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + }, + "options": { "parameters": [ { - "name": "Authorization", - "in": "header", + "name": "compact", + "in": "path", "required": true, "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenBWZgN83iyevY" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLiceng72nqBB23bmL" - } - } + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" } - } - }, - "security": [ + }, { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] - } - ] - } - }, - "/v1/purchases/privileges/options": { - "get": { - "parameters": [ + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, { - "name": "Authorization", - "in": "header", + "name": "licenseType", + "in": "path", "required": true, "schema": { "type": "string" @@ -2879,2286 +3164,3629 @@ } ], "responses": { - "200": { - "description": "200 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicenI2vqm7fRdSBi" + "type": "string" } } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + }, + "content": {} } - ] + } } }, - "/v1/staff-users/me": { - "get": { + "/v1/provider-users": { + "options": { "responses": { - "404": { - "description": "404 response", - "content": { - "application/json": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" + "type": "string" } } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/jurisdiction/{jurisdiction}": { + "options": { + "parameters": [ + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" } - }, - "200": { - "description": "200 response", + } + ], + "responses": { + "204": { + "description": "204 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } - } - }, - "content": { - "application/json": { + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { "schema": { - "$ref": "#/components/schemas/SandboLicen2VPoPHwDEcqq" + "type": "string" } } - } + }, + "content": {} } - }, - "security": [ + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/investigation/{investigationId}": { + "options": { + "parameters": [ { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "profile" - ] - } - ] - }, - "patch": { - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicenI4CqYMff5SWl" - } + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "required": true - }, - "responses": { - "404": { - "description": "404 response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SandboLicengeanQqZ1NjKt" - } - } + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "200": { - "description": "200 response", + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", "headers": { "Access-Control-Allow-Origin": { "schema": { "type": "string" } - } - }, - "content": { - "application/json": { + }, + "Access-Control-Allow-Methods": { "schema": { - "$ref": "#/components/schemas/SandboLicen2VPoPHwDEcqq" + "type": "string" } - } - } - } - }, - "security": [ - { - "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ - "profile" - ] - } - ] - } - } - }, - "components": { - "schemas": { - "SandboLicen2x5yTuN7Vce5": { - "required": [ - "ssn" - ], - "type": "object", - "properties": { - "ssn": { - "pattern": "^[0-9]{3}-[0-9]{2}-[0-9]{4}$", - "type": "string", - "description": "The provider's social security number" - } - } - }, - "SandboLicenbcsmAhiZJZ0Q": { - "required": [ - "verificationCode" - ], - "type": "object", - "properties": { - "verificationCode": { - "pattern": "^[0-9]{4}$", - "type": "string", - "description": "4-digit verification code" - } - }, - "additionalProperties": false - }, - "SandboLicenvJ6cvnUE8Wwa": { - "required": [ - "action" - ], - "type": "object", - "properties": { - "action": { - "type": "string", - "enum": [ - "close" - ] - }, - "encumbrance": { - "required": [ - "encumbranceEffectiveDate", - "encumbranceType" - ], - "type": "object", - "properties": { - "encumbranceEffectiveDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The effective date of the encumbrance", - "format": "date" }, - "clinicalPrivilegeActionCategories": { - "type": "array", - "description": "The categories of clinical privilege action", - "items": { + "Vary": { + "schema": { "type": "string" } }, - "encumbranceType": { - "type": "string", - "description": "The type of encumbrance", - "enum": [ - "fine", - "reprimand", - "required supervision", - "completion of continuing education", - "public reprimand", - "probation", - "injunctive action", - "suspension", - "revocation", - "denial", - "surrender of license", - "modification of previous action-extension", - "modification of previous action-reduction", - "other monitoring", - "other adjudicated action not listed" - ] - }, - "clinicalPrivilegeActionCategory": { - "type": "string", - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead." - } - }, - "additionalProperties": false, - "description": "Encumbrance data to create" - } - } - }, - "SandboLicenISmLYcqYrfLq": { - "type": "object", - "properties": {} - }, - "SandboLicenJIK60DVCsApb": { - "required": [ - "upload" - ], - "type": "object", - "properties": { - "upload": { - "required": [ - "fields", - "url" - ], - "type": "object", - "properties": { - "fields": { - "type": "object", - "additionalProperties": { + "Access-Control-Allow-Headers": { + "schema": { "type": "string" } - }, - "url": { - "type": "string" } - } + }, + "content": {} } } }, - "SandboLicen6bEbVSG2KkBx": { - "required": [ - "encumbranceEffectiveDate", - "encumbranceType" - ], - "type": "object", - "properties": { - "encumbranceEffectiveDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The effective date of the encumbrance", - "format": "date" - }, - "clinicalPrivilegeActionCategories": { - "type": "array", - "description": "The categories of clinical privilege action", - "items": { + "patch": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { "type": "string" } }, - "encumbranceType": { - "type": "string", - "description": "The type of encumbrance", - "enum": [ - "fine", - "reprimand", - "required supervision", - "completion of continuing education", - "public reprimand", - "probation", - "injunctive action", - "suspension", - "revocation", - "denial", - "surrender of license", - "modification of previous action-extension", - "modification of previous action-reduction", - "other monitoring", - "other adjudicated action not listed" - ] + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, - "clinicalPrivilegeActionCategory": { - "type": "string", - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead." - } - }, - "additionalProperties": false, - "description": "Encumbrance data to create" - }, - "SandboLicenVZHLGnXN7APB": { - "required": [ - "effectiveLiftDate" - ], - "type": "object", - "properties": { - "effectiveLiftDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The effective date when the encumbrance will be lifted", - "format": "date" - } - }, - "additionalProperties": false - }, - "SandboLicenirtyanNQfXka": { - "required": [ - "compact", - "providerId", - "recaptchaToken", - "recoveryToken" - ], - "type": "object", - "properties": { - "compact": { - "type": "string", - "description": "Compact abbreviation", - "enum": [ - "aslp", - "octp", - "coun" - ] + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string", - "description": "Provider UUID" + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, - "recaptchaToken": { - "minLength": 1, - "type": "string", - "description": "ReCAPTCHA token for verification" + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, - "recoveryToken": { - "maxLength": 256, - "minLength": 1, - "type": "string", - "description": "Recovery token from the email link" + { + "name": "investigationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } - }, - "additionalProperties": false - }, - "SandboLicen2VPoPHwDEcqq": { - "required": [ - "attributes", - "permissions", - "status", - "userId" ], - "type": "object", - "properties": { - "permissions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - } - }, - "jurisdictions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "write": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - }, - "additionalProperties": false - } - } - } - } - }, - "additionalProperties": false + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenUONaWXXjz4K6" + } } }, - "attributes": { - "required": [ - "email", - "familyName", - "givenName" - ], - "type": "object", - "properties": { - "givenName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "email": { - "maxLength": 100, - "minLength": 5, - "type": "string" + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } } - }, - "additionalProperties": false - }, - "userId": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "active", - "inactive" - ] + } } }, - "additionalProperties": false - }, - "SandboLicenUzZJQKKk5goL": { - "required": [ - "affiliationType", - "dateOfUpdate", - "dateOfUpload", - "documentUploadFields", - "status" - ], - "type": "object", - "properties": { - "dateOfUpload": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The date the document was uploaded", - "format": "date" - }, - "affiliationType": { - "type": "string", - "description": "The type of military affiliation", - "enum": [ - "militaryMember", - "militaryMemberSpouse" + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" ] - }, - "fileNames": { - "type": "array", - "description": "List of military affiliation file names", - "items": { - "type": "string", - "description": "The name of the file being uploaded" + } + ] + } + }, + "/v1/compacts/{compact}/staff-users/{userId}/reinvite": { + "post": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "dateOfUpdate": { - "type": "string", - "description": "The date the document was last updated", - "format": "date-time" - }, - "status": { - "type": "string", - "description": "The status of the military affiliation" - }, - "documentUploadFields": { - "type": "array", - "description": "The fields used to upload documents", - "items": { - "type": "object", - "properties": { - "fields": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "The form fields used to upload the document" - }, - "url": { - "type": "string", - "description": "The url to upload the document to" - } - }, - "description": "The fields used to upload a specific document" + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" } } - } - }, - "SandboLicenYwiFMNF2Vu7Z": { - "required": [ - "query" ], - "type": "object", - "properties": { - "pagination": { - "type": "object", - "properties": { - "lastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "string" - }, - "pageSize": { - "maximum": 100, - "minimum": 5, - "type": "integer" + "responses": { + "404": { + "description": "404 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } } - }, - "additionalProperties": false + } }, - "query": { - "type": "object", - "properties": { - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string", - "description": "Internal UUID for the provider" - }, - "jurisdiction": { - "type": "string", - "description": "Filter for providers with privilege/license in a jurisdiction", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "givenName": { - "maxLength": 100, - "type": "string", - "description": "Filter for providers with a given name (familyName is required if givenName is provided)" - }, - "familyName": { - "maxLength": 100, - "type": "string", - "description": "Filter for providers with a family name" - } - }, - "additionalProperties": false, - "description": "The query parameters" - }, - "sorting": { - "required": [ - "key" - ], - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key to sort results by", - "enum": [ - "dateOfUpdate", - "familyName" - ] - }, - "direction": { - "type": "string", - "description": "Direction to sort results by", - "enum": [ - "ascending", - "descending" - ] + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } } - }, - "description": "How to sort results" + } } }, - "additionalProperties": false + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] }, - "SandboLicenHX8YNrOpPZbZ": { - "type": "array", - "items": { - "required": [ - "compact", - "jurisdictionName", - "postalAbbreviation" - ], - "type": "object", - "properties": { - "postalAbbreviation": { - "type": "string", - "description": "The postal abbreviation of the jurisdiction" - }, - "compact": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { "type": "string" - }, - "jurisdictionName": { - "type": "string", - "description": "The name of the jurisdiction" } } - } - }, - "SandboLicengeanQqZ1NjKt": { - "required": [ - "message" ], - "type": "object", - "properties": { - "message": { - "type": "string", - "description": "A message about the request" + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} } } - }, - "SandboLicenTi9BrhAERjPp": { - "required": [ - "jurisdictionAdverseActionsNotificationEmails", - "jurisdictionOperationsTeamEmails", - "jurisdictionSummaryReportNotificationEmails", - "jurisprudenceRequirements", - "licenseeRegistrationEnabled", - "privilegeFees" + } + }, + "/v1/compacts/{compact}/staff-users": { + "get": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "type": "object", - "properties": { - "privilegeFees": { - "type": "array", - "description": "The fees for the privileges by license type", - "items": { - "required": [ - "amount", - "licenseTypeAbbreviation" - ], - "type": "object", - "properties": { - "amount": { - "minimum": 0, - "type": "number" - }, - "militaryRate": { - "description": "Optional military rate for the privilege fee.", - "oneOf": [ - { - "minimum": 0, - "type": "number" - }, - null - ] - }, - "licenseTypeAbbreviation": { - "type": "string", - "enum": [ - "aud", - "slp", - "ot", - "ota", - "lpc" - ] + "responses": { + "200": { + "description": "200 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" } - }, - "additionalProperties": false - } - }, - "jurisdictionAdverseActionsNotificationEmails": { - "maxItems": 10, - "minItems": 1, - "uniqueItems": true, - "type": "array", - "description": "List of email addresses for adverse actions notifications", - "items": { - "type": "string", - "format": "email" - } - }, - "jurisdictionOperationsTeamEmails": { - "maxItems": 10, - "minItems": 1, - "uniqueItems": true, - "type": "array", - "description": "List of email addresses for operations team notifications", - "items": { - "type": "string", - "format": "email" - } - }, - "jurisprudenceRequirements": { - "required": [ - "required" - ], - "type": "object", - "properties": { - "linkToDocumentation": { - "description": "Optional link to jurisprudence documentation", - "oneOf": [ - { - "type": "string" - }, - null - ] - }, - "required": { - "type": "boolean", - "description": "Whether jurisprudence requirements exist" } }, - "additionalProperties": false - }, - "licenseeRegistrationEnabled": { - "type": "boolean", - "description": "Denotes whether licensee registration is enabled" - }, - "jurisdictionSummaryReportNotificationEmails": { - "maxItems": 10, - "minItems": 1, - "uniqueItems": true, - "type": "array", - "description": "List of email addresses for summary report notifications", - "items": { - "type": "string", - "format": "email" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenxXSBED7FZUQN" + } + } } } }, - "additionalProperties": false + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] }, - "SandboLicen3zolh21hPpCk": { - "required": [ - "effectiveLiftDate" + "post": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "type": "object", - "properties": { - "effectiveLiftDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The effective date when the encumbrance will be lifted", - "format": "date" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenPfWQpg9qdCvm" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen2qPPtuQWh8hv" + } + } + } } }, - "additionalProperties": false + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] }, - "SandboLicenBxXRobaYJSR9": { - "required": [ - "pagination", - "providers" + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "type": "object", - "properties": { - "pagination": { - "type": "object", - "properties": { - "prevLastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "object" + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } }, - "lastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "object" + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } }, - "pageSize": { - "maximum": 100, - "minimum": 5, - "type": "integer" + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } } - } - }, - "query": { - "type": "object", - "properties": { - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string", - "description": "Internal UUID for the provider" + }, + "content": {} + } + } + } + }, + "/v1/public/compacts": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } }, - "jurisdiction": { - "type": "string", - "description": "Filter for providers with privilege/license in a jurisdiction", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } }, - "givenName": { - "maxLength": 100, - "type": "string", - "description": "Filter for providers with a given name" + "Vary": { + "schema": { + "type": "string" + } }, - "familyName": { - "maxLength": 100, - "type": "string", - "description": "Filter for providers with a family name" + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } } - } - }, - "sorting": { - "required": [ - "key" - ], - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key to sort results by", - "enum": [ - "dateOfUpdate", - "familyName" - ] + }, + "content": {} + } + } + } + }, + "/v1/staff-users": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } }, - "direction": { - "type": "string", - "description": "Direction to sort results by", - "enum": [ - "ascending", - "descending" - ] + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } } }, - "description": "How to sort results" + "content": {} + } + } + } + }, + "/v1/staff-users/me": { + "get": { + "responses": { + "404": { + "description": "404 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } }, - "providers": { - "maxLength": 100, - "type": "array", - "items": { - "required": [ - "compact", - "familyName", - "givenName", - "licenseJurisdiction", - "privilegeJurisdictions", - "providerId", - "type" - ], - "type": "object", - "properties": { - "licenseJurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "200": { + "description": "200 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { "type": "string" - }, - "npi": { - "pattern": "^[0-9]{10}$", + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen2qPPtuQWh8hv" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "profile" + ] + } + ] + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { "type": "string" - }, - "givenName": { - "maxLength": 100, - "minLength": 1, + } + }, + "Access-Control-Allow-Methods": { + "schema": { "type": "string" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, + } + }, + "Vary": { + "schema": { "type": "string" - }, - "middleName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "privilegeJurisdictions": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - } - }, - "type": { - "type": "string", - "enum": [ - "provider" - ] - }, - "suffix": { - "maxLength": 100, - "minLength": 1, + } + }, + "Access-Control-Allow-Headers": { + "schema": { "type": "string" - }, - "currentHomeJurisdiction": { - "type": "string", - "description": "The current jurisdiction postal abbreviation if known.", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy", - "other", - "unknown" - ] - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" } } - } - } - } - }, - "SandboLicenou5OKotlJ6Ez": { - "required": [ - "message" - ], - "type": "object", - "properties": { - "message": { - "type": "string", - "description": "A message about the request" + }, + "content": {} } } }, - "SandboLicenpPZOnBEPSaJL": { - "required": [ - "compact", - "dob", - "familyName", - "givenName", - "jurisdiction", - "licenseType", - "partialSocial", - "password", - "recaptchaToken", - "username" - ], - "type": "object", - "properties": { - "licenseType": { - "type": "string", - "description": "Type of license", - "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" - ] + "patch": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicendz0gMqUAh7qN" + } + } }, - "password": { - "maxLength": 256, - "minLength": 12, - "type": "string", - "description": "Provider's current password" + "required": true + }, + "responses": { + "404": { + "description": "404 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } }, - "compact": { - "type": "string", - "description": "Compact abbreviation", - "enum": [ - "aslp", - "octp", - "coun" + "200": { + "description": "200 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen2qPPtuQWh8hv" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "profile" ] + } + ] + } + }, + "/v1/public/compacts/{compact}/providers/{providerId}/jurisdiction": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, - "dob": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "Date of birth in YYYY-MM-DD format", - "format": "date" - }, - "jurisdiction": { - "type": "string", - "description": "Two-letter jurisdiction code", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "givenName": { - "maxLength": 200, - "minLength": 1, - "type": "string", - "description": "Provider's given name" - }, - "familyName": { - "maxLength": 200, - "minLength": 1, - "type": "string", - "description": "Provider's family name" - }, - "recaptchaToken": { - "minLength": 1, - "type": "string", - "description": "ReCAPTCHA token for verification" - }, - "partialSocial": { - "pattern": "^[0-9]{4}$", - "type": "string", - "description": "Last 4 digits of SSN" - }, - "username": { - "maxLength": 100, - "minLength": 5, - "type": "string", - "description": "Provider's email address (username)", - "format": "email" + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } - }, - "additionalProperties": false - }, - "SandboLicenHVkU4oNl0nsF": { - "type": "object", - "properties": { - "context": { - "type": "object", - "properties": { - "userId": { - "maxLength": 100, - "minLength": 1, - "type": "string", - "description": "Optional user ID for feature flag evaluation" + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } }, - "customAttributes": { - "type": "object", - "additionalProperties": { + "Access-Control-Allow-Methods": { + "schema": { "type": "string" - }, - "description": "Optional custom attributes for feature flag evaluation" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } } }, - "additionalProperties": false, - "description": "Optional context for feature flag evaluation" + "content": {} } - }, - "additionalProperties": false - }, - "SandboLicenEAecRKtirVZk": { - "required": [ - "encumbranceEffectiveDate", - "encumbranceType" - ], - "type": "object", - "properties": { - "encumbranceEffectiveDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The effective date of the encumbrance", - "format": "date" - }, - "clinicalPrivilegeActionCategories": { - "type": "array", - "description": "The categories of clinical privilege action", - "items": { + } + } + }, + "/v1/compacts/{compact}/staff-users/{userId}": { + "get": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { "type": "string" } }, - "encumbranceType": { - "type": "string", - "description": "The type of encumbrance", - "enum": [ - "fine", - "reprimand", - "required supervision", - "completion of continuing education", - "public reprimand", - "probation", - "injunctive action", - "suspension", - "revocation", - "denial", - "surrender of license", - "modification of previous action-extension", - "modification of previous action-reduction", - "other monitoring", - "other adjudicated action not listed" - ] + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "404": { + "description": "404 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } }, - "clinicalPrivilegeActionCategory": { - "type": "string", - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead." + "200": { + "description": "200 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen2qPPtuQWh8hv" + } + } + } } }, - "additionalProperties": false, - "description": "Encumbrance data to create" + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] }, - "SandboLicendF8CsBCXAU1x": { - "required": [ - "compact", - "dateOfUpdate", - "familyName", - "givenName", - "licenseJurisdiction", - "privilegeJurisdictions", - "providerId", - "type" - ], - "type": "object", - "properties": { - "privileges": { - "type": "array", - "items": { - "required": [ - "administratorSetStatus", - "compact", - "dateOfExpiration", - "dateOfIssuance", - "dateOfRenewal", - "dateOfUpdate", - "jurisdiction", - "licenseJurisdiction", - "licenseType", - "privilegeId", - "providerId", - "status", - "type" - ], - "type": "object", - "properties": { - "licenseJurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "history": { - "type": "array", - "items": { - "required": [ - "compact", - "dateOfUpdate", - "jurisdiction", - "licenseType", - "previous", - "providerId", - "type", - "updateType", - "updatedValues" - ], - "type": "object", - "properties": { - "licenseType": { - "type": "string", - "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" - ] - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "previous": { - "required": [ - "administratorSetStatus", - "dateOfExpiration", - "dateOfIssuance", - "dateOfRenewal", - "dateOfUpdate", - "licenseJurisdiction", - "privilegeId" - ], - "type": "object", - "properties": { - "administratorSetStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "licenseJurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "privilegeId": { - "type": "string" - }, - "dateOfRenewal": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - } - } - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "updatedValues": { - "type": "object", - "properties": { - "administratorSetStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "licenseJurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "privilegeId": { - "type": "string" - }, - "dateOfRenewal": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - } - } - }, - "type": { - "type": "string", - "enum": [ - "privilegeUpdate" - ] - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - }, - "updateType": { - "type": "string", - "enum": [ - "deactivation", - "expiration", - "issuance", - "other", - "renewal", - "encumbrance", - "homeJurisdictionChange", - "registration", - "lifting_encumbrance", - "licenseDeactivation", - "emailChange" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "privilege" - ] - }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "licenseType": { - "type": "string", - "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" - ] - }, - "administratorSetStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "privilegeId": { + "delete": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "404": { + "description": "404 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + }, + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + }, + "patch": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicengqvhPQz7ywKX" + } + } + }, + "required": true + }, + "responses": { + "404": { + "description": "404 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + }, + "200": { + "description": "200 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen2qPPtuQWh8hv" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + } + }, + "/v1/compacts/{compact}/jurisdictions/{jurisdiction}": { + "get": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLiceniWnENMKPoAG6" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/readGeneral", + "octp/readGeneral", + "coun/readGeneral" + ] + } + ] + }, + "put": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenJwiQTQPNiltz" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/purchases": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/compacts/{compact}/providers": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/email": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + }, + "patch": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenudbEF4n02FXU" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + } + ] + } + }, + "/v1/compacts/{compact}/credentials": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/jurisdiction": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/jurisdictions": { + "get": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenLnkOp52kvwLg" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/readGeneral", + "octp/readGeneral", + "coun/readGeneral" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}": { + "get": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenRy0ye4gsVdf9" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/readGeneral", + "octp/readGeneral", + "coun/readGeneral" + ] + } + ] + }, + "put": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenZx6a73xGIfzu" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/flags": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/jurisdiction/{jurisdiction}/licenseType/{licenseType}": { + "options": { + "parameters": [ + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/registration": { + "post": { + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenmftfBe6vPEA8" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + } + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/compacts/{compact}/providers/{providerId}/jurisdiction/{jurisdiction}/licenseType": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/compacts/{compact}/providers/{providerId}/jurisdiction/{jurisdiction}": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance": { + "post": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenmKXS1L8tLsGF" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1": { + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/history": { + "get": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen0XcLtKpj7p28" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/readGeneral", + "octp/readGeneral", + "coun/readGeneral" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/compacts/{compact}/providers/{providerId}": { + "get": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicennv4iZSNKxEXN" + } + } + } + } + } + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/jurisdiction/{jurisdiction}/licenseType": { + "options": { + "parameters": [ + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/provider-users/me/email/verify": { + "post": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenlu9HVFJNEZQz" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiProviderUsersPoolAuthorizerEB7523BA": [] + } + ] + }, + "options": { + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/attestations": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/licenses/jurisdiction/{jurisdiction}/licenseType/{licenseType}": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { "type": "string" - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/credentials/payment-processor": { + "post": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenmMTXPta5fldR" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicen9dv1jZzfaVo8" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + }, + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/public/compacts/{compact}/providers/{providerId}/jurisdiction/{jurisdiction}/licenseType/{licenseType}": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + } + }, + "/v1/compacts/{compact}/providers/{providerId}/privileges/jurisdiction/{jurisdiction}/licenseType/{licenseType}/encumbrance/{encumbranceId}": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "encumbranceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string" + } + } + }, + "content": {} + } + } + }, + "patch": { + "parameters": [ + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "providerId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "jurisdiction", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "licenseType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "encumbranceId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenSo5EafP3rZhM" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "200 response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SandboLicenTMQQKAeKTKQR" + } + } + } + } + }, + "security": [ + { + "SandboxAPIStackLicenseApiStaffUsersPoolAuthorizer14A84A9B": [ + "aslp/admin", + "al/aslp.admin", + "ak/aslp.admin", + "ar/aslp.admin", + "co/aslp.admin", + "de/aslp.admin", + "ky/aslp.admin", + "la/aslp.admin", + "me/aslp.admin", + "md/aslp.admin", + "mn/aslp.admin", + "ms/aslp.admin", + "mo/aslp.admin", + "ne/aslp.admin", + "oh/aslp.admin", + "octp/admin", + "al/octp.admin", + "ar/octp.admin", + "ky/octp.admin", + "la/octp.admin", + "ms/octp.admin", + "ne/octp.admin", + "oh/octp.admin", + "coun/admin", + "al/coun.admin", + "ar/coun.admin", + "fl/coun.admin", + "ga/coun.admin", + "ky/coun.admin", + "ne/coun.admin", + "oh/coun.admin", + "ut/coun.admin" + ] + } + ] + } + }, + "/v1/compacts/{compact}/providers": { + "options": { + "parameters": [ + { + "name": "compact", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "204 response", + "headers": { + "Access-Control-Allow-Origin": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string" + } + }, + "Vary": { + "schema": { + "type": "string" + } + }, + "Access-Control-Allow-Headers": { + "schema": { "type": "string" - }, - "dateOfRenewal": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "adverseActions": { - "type": "array", - "items": { - "required": [ - "actionAgainst", - "adverseActionId", - "compact", - "creationDate", - "dateOfUpdate", - "effectiveStartDate", - "jurisdiction", - "licenseType", - "licenseTypeAbbreviation", - "providerId", - "type" - ], - "type": "object", - "properties": { - "licenseType": { - "type": "string" - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "effectiveStartDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "licenseTypeAbbreviation": { - "type": "string" - }, - "adverseActionId": { - "type": "string" - }, - "effectiveLiftDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "type": { - "type": "string", - "enum": [ - "adverseAction" - ] - }, - "creationDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "actionAgainst": { - "type": "string" - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - } - } - } - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "active", - "inactive" - ] } } + }, + "content": {} + } + } + } + } + }, + "components": { + "schemas": { + "SandboLicenudbEF4n02FXU": { + "required": [ + "newEmailAddress" + ], + "type": "object", + "properties": { + "newEmailAddress": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "description": "The new email address to set for the provider", + "format": "email" + } + }, + "additionalProperties": false + }, + "SandboLicenmKXS1L8tLsGF": { + "required": [ + "clinicalPrivilegeActionCategories", + "encumbranceEffectiveDate", + "encumbranceType" + ], + "type": "object", + "properties": { + "encumbranceEffectiveDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The effective date of the encumbrance", + "format": "date" + }, + "clinicalPrivilegeActionCategories": { + "type": "array", + "description": "The categories of clinical privilege action", + "items": { + "type": "string" } }, - "licenseJurisdiction": { + "encumbranceType": { "type": "string", + "description": "The type of encumbrance", "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" + "fine", + "reprimand", + "required supervision", + "completion of continuing education", + "public reprimand", + "probation", + "injunctive action", + "suspension", + "revocation", + "denial", + "surrender of license", + "modification of previous action-extension", + "modification of previous action-reduction", + "other monitoring", + "other adjudicated action not listed" ] - }, - "compact": { + } + }, + "additionalProperties": false, + "description": "Encumbrance data to create" + }, + "SandboLicennuxBDueZ6Trv": { + "required": [ + "action" + ], + "type": "object", + "properties": { + "action": { "type": "string", "enum": [ - "aslp", - "octp", - "coun" + "close" ] }, - "npi": { - "pattern": "^[0-9]{10}$", - "type": "string" + "encumbrance": { + "required": [ + "clinicalPrivilegeActionCategories", + "encumbranceEffectiveDate", + "encumbranceType" + ], + "type": "object", + "properties": { + "encumbranceEffectiveDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The effective date of the encumbrance", + "format": "date" + }, + "clinicalPrivilegeActionCategories": { + "type": "array", + "description": "The categories of clinical privilege action", + "items": { + "type": "string" + } + }, + "encumbranceType": { + "type": "string", + "description": "The type of encumbrance", + "enum": [ + "fine", + "reprimand", + "required supervision", + "completion of continuing education", + "public reprimand", + "probation", + "injunctive action", + "suspension", + "revocation", + "denial", + "surrender of license", + "modification of previous action-extension", + "modification of previous action-reduction", + "other monitoring", + "other adjudicated action not listed" + ] + } + }, + "additionalProperties": false, + "description": "Encumbrance data to create" + } + } + }, + "SandboLicen2qPPtuQWh8hv": { + "required": [ + "attributes", + "permissions", + "status", + "userId" + ], + "type": "object", + "properties": { + "permissions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + } + }, + "jurisdictions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "write": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + }, + "additionalProperties": false + } + } + } + } + }, + "additionalProperties": false + } + }, + "attributes": { + "required": [ + "email", + "familyName", + "givenName" + ], + "type": "object", + "properties": { + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "email": { + "maxLength": 100, + "minLength": 5, + "type": "string" + } + }, + "additionalProperties": false }, - "givenName": { - "maxLength": 100, - "minLength": 1, + "userId": { "type": "string" }, - "privilegeJurisdictions": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - } - }, - "type": { + "status": { "type": "string", "enum": [ - "provider" + "active", + "inactive" ] - }, - "suffix": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "currentHomeJurisdiction": { + } + }, + "additionalProperties": false + }, + "SandboLicendz0gMqUAh7qN": { + "type": "object", + "properties": { + "attributes": { + "type": "object", + "properties": { + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "SandboLicenztG3aZP1J9M3": { + "required": [ + "status" + ], + "type": "object", + "properties": { + "status": { "type": "string", - "description": "The current jurisdiction postal abbreviation if known.", + "description": "The status to set the military affiliation to.", "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy", - "other", - "unknown" + "inactive" ] + } + }, + "additionalProperties": false + }, + "SandboLicenKbxrVseriPZY": { + "type": "object", + "properties": {} + }, + "SandboLicenpl2UadOfjgNJ": { + "type": "object", + "properties": { + "context": { + "type": "object", + "properties": { + "userId": { + "maxLength": 100, + "minLength": 1, + "type": "string", + "description": "Optional user ID for feature flag evaluation" + }, + "customAttributes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional custom attributes for feature flag evaluation" + } + }, + "additionalProperties": false, + "description": "Optional context for feature flag evaluation" + } + }, + "additionalProperties": false + }, + "SandboLicen9dv1jZzfaVo8": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "A message about the request" + } + } + }, + "SandboLicenSFWw1LC3Pl63": { + "required": [ + "affiliationType", + "dateOfUpdate", + "dateOfUpload", + "documentUploadFields", + "status" + ], + "type": "object", + "properties": { + "dateOfUpload": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The date the document was uploaded", + "format": "date" }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "middleName": { - "maxLength": 100, - "minLength": 1, - "type": "string" + "affiliationType": { + "type": "string", + "description": "The type of military affiliation", + "enum": [ + "militaryMember", + "militaryMemberSpouse" + ] + }, + "fileNames": { + "type": "array", + "description": "List of military affiliation file names", + "items": { + "type": "string", + "description": "The name of the file being uploaded" + } }, "dateOfUpdate": { "type": "string", + "description": "The date the document was last updated", "format": "date-time" + }, + "status": { + "type": "string", + "description": "The status of the military affiliation" + }, + "documentUploadFields": { + "type": "array", + "description": "The fields used to upload documents", + "items": { + "type": "object", + "properties": { + "fields": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The form fields used to upload the document" + }, + "url": { + "type": "string", + "description": "The url to upload the document to" + } + }, + "description": "The fields used to upload a specific document" + } } } }, - "SandboLicenI2vqm7fRdSBi": { + "SandboLicenf1YSNMeYKlGD": { "required": [ - "items", - "pagination" + "pagination", + "providers" ], "type": "object", "properties": { @@ -5182,299 +6810,625 @@ } } }, - "items": { - "maxLength": 100, - "type": "array", - "items": { - "type": "object", - "oneOf": [ - { - "required": [ - "compactAbbr", - "compactCommissionFee", - "compactName", - "isSandbox", - "paymentProcessorPublicFields", - "transactionFeeConfiguration", - "type" - ], - "type": "object", - "properties": { - "compactCommissionFee": { - "required": [ - "feeAmount", - "feeType" - ], - "type": "object", - "properties": { - "feeAmount": { - "type": "number" - }, - "feeType": { - "type": "string", - "enum": [ - "FLAT_RATE" - ] - } - } - }, - "compactAbbr": { - "type": "string", - "description": "The abbreviation of the compact" - }, - "paymentProcessorPublicFields": { - "required": [ - "apiLoginId", - "publicClientKey" - ], - "type": "object", - "properties": { - "publicClientKey": { - "type": "string", - "description": "The public client key for the payment processor" - }, - "apiLoginId": { - "type": "string", - "description": "The API login ID for the payment processor" - } - } - }, - "type": { - "type": "string", - "enum": [ - "compact" - ] - }, - "transactionFeeConfiguration": { - "required": [ - "licenseeCharges" - ], - "type": "object", - "properties": { - "licenseeCharges": { - "required": [ - "active", - "chargeAmount", - "chargeType" - ], - "type": "object", - "properties": { - "chargeType": { - "type": "string", - "description": "The type of transaction fee charge", - "enum": [ - "FLAT_FEE_PER_PRIVILEGE" - ] - }, - "active": { - "type": "boolean", - "description": "Whether the compact is charging licensees transaction fees" - }, - "chargeAmount": { - "type": "number", - "description": "The amount to charge per privilege purchased" - } - } - } - } - }, - "isSandbox": { - "type": "boolean", - "description": "Whether the compact is in sandbox mode" - }, - "compactName": { - "type": "string", - "description": "The full name of the compact" - } - } + "query": { + "type": "object", + "properties": { + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string", + "description": "Internal UUID for the provider" + }, + "jurisdiction": { + "type": "string", + "description": "Filter for providers with privilege/license in a jurisdiction", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "givenName": { + "maxLength": 100, + "type": "string", + "description": "Filter for providers with a given name" + }, + "familyName": { + "maxLength": 100, + "type": "string", + "description": "Filter for providers with a family name" + } + } + }, + "sorting": { + "required": [ + "key" + ], + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The key to sort results by", + "enum": [ + "dateOfUpdate", + "familyName" + ] + }, + "direction": { + "type": "string", + "description": "Direction to sort results by", + "enum": [ + "ascending", + "descending" + ] + } + }, + "description": "How to sort results" + }, + "providers": { + "maxLength": 100, + "type": "array", + "items": { + "required": [ + "compact", + "familyName", + "givenName", + "licenseJurisdiction", + "privilegeJurisdictions", + "providerId", + "type" + ], + "type": "object", + "properties": { + "licenseJurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] }, - { - "required": [ - "jurisdictionName", - "jurisprudenceRequirements", - "postalAbbreviation", - "privilegeFees", - "type" - ], - "type": "object", - "properties": { - "privilegeFees": { - "type": "array", - "description": "The fees for the privileges", - "items": { - "required": [ - "amount", - "licenseTypeAbbreviation" - ], - "type": "object", - "properties": { - "amount": { - "type": "number" - }, - "militaryRate": { - "description": "Optional military rate for the privilege fee.", - "oneOf": [ - { - "minimum": 0, - "type": "number" - }, - null - ] - }, - "licenseTypeAbbreviation": { - "type": "string" - } - } - } - }, - "postalAbbreviation": { - "type": "string", - "description": "The postal abbreviation of the jurisdiction" - }, - "jurisprudenceRequirements": { - "required": [ - "required" - ], - "type": "object", - "properties": { - "linkToDocumentation": { - "description": "Optional link to jurisprudence documentation", - "oneOf": [ - { - "type": "string" - }, - null - ] - }, - "required": { - "type": "boolean", - "description": "Whether jurisprudence requirements exist" - } - } - }, - "jurisdictionName": { - "type": "string", - "description": "The name of the jurisdiction" - }, - "type": { - "type": "string", - "enum": [ - "jurisdiction" - ] - } + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "npi": { + "pattern": "^[0-9]{10}$", + "type": "string" + }, + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "middleName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "privilegeJurisdictions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] } + }, + "type": { + "type": "string", + "enum": [ + "provider" + ] + }, + "suffix": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "currentHomeJurisdiction": { + "type": "string", + "description": "The current jurisdiction postal abbreviation if known.", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy", + "other", + "unknown" + ] + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" } - ] + } } } } }, - "SandboLicenLPepHoMLi1aj": { + "SandboLicen0TA7m9cBJLpz": { + "type": "object", + "properties": { + "dateCreated": { + "type": "string", + "format": "date-time" + }, + "attestationId": { + "type": "string" + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "text": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "attestation" + ] + }, + "locale": { + "type": "string" + }, + "version": { + "type": "string" + }, + "required": { + "type": "boolean" + } + } + }, + "SandboLicenEPhGnRpsTFzc": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + } + } + }, + "SandboLicenx7ouhX772atw": { "required": [ - "apiLoginId", - "processor", - "transactionKey" + "ssn" ], "type": "object", "properties": { - "apiLoginId": { - "maxLength": 100, + "ssn": { + "pattern": "^[0-9]{3}-[0-9]{2}-[0-9]{4}$", + "type": "string", + "description": "The provider's social security number" + } + } + }, + "SandboLicenFqy1VQNhsjvi": { + "required": [ + "effectiveLiftDate" + ], + "type": "object", + "properties": { + "effectiveLiftDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The effective date when the encumbrance will be lifted", + "format": "date" + } + }, + "additionalProperties": false + }, + "SandboLicenJt67zBFIGGPS": { + "required": [ + "compact", + "dob", + "familyName", + "givenName", + "jurisdiction", + "licenseType", + "partialSocial", + "password", + "recaptchaToken", + "username" + ], + "type": "object", + "properties": { + "licenseType": { + "type": "string", + "description": "Type of license", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "password": { + "maxLength": 256, + "minLength": 12, + "type": "string", + "description": "Provider's current password" + }, + "compact": { + "type": "string", + "description": "Compact abbreviation", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "dob": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "Date of birth in YYYY-MM-DD format", + "format": "date" + }, + "jurisdiction": { + "type": "string", + "description": "Two-letter jurisdiction code", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "givenName": { + "maxLength": 200, "minLength": 1, "type": "string", - "description": "The api login id for the payment processor" + "description": "Provider's given name" }, - "transactionKey": { - "maxLength": 100, + "familyName": { + "maxLength": 200, "minLength": 1, "type": "string", - "description": "The transaction key for the payment processor" + "description": "Provider's family name" }, - "processor": { + "recaptchaToken": { + "minLength": 1, "type": "string", - "description": "The type of payment processor", - "enum": [ - "authorize.net" - ] - } - }, - "additionalProperties": false - }, - "SandboLicenmwNUQ4l5yt99": { - "required": [ - "action" - ], - "type": "object", - "properties": { - "action": { + "description": "ReCAPTCHA token for verification" + }, + "partialSocial": { + "pattern": "^[0-9]{4}$", "type": "string", - "enum": [ - "close" - ] + "description": "Last 4 digits of SSN" }, - "encumbrance": { - "required": [ - "encumbranceEffectiveDate", - "encumbranceType" - ], - "type": "object", - "properties": { - "encumbranceEffectiveDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "The effective date of the encumbrance", - "format": "date" - }, - "clinicalPrivilegeActionCategories": { - "type": "array", - "description": "The categories of clinical privilege action", - "items": { - "type": "string" - } - }, - "encumbranceType": { - "type": "string", - "description": "The type of encumbrance", - "enum": [ - "fine", - "reprimand", - "required supervision", - "completion of continuing education", - "public reprimand", - "probation", - "injunctive action", - "suspension", - "revocation", - "denial", - "surrender of license", - "modification of previous action-extension", - "modification of previous action-reduction", - "other monitoring", - "other adjudicated action not listed" - ] - }, - "clinicalPrivilegeActionCategory": { - "type": "string", - "description": "(Deprecated) The category of clinical privilege action. Use clinicalPrivilegeActionCategories instead." - } - }, - "additionalProperties": false, - "description": "Encumbrance data to create" - } - } - }, - "SandboLicen0ONaFbyAwP9V": { - "required": [ - "enabled" - ], - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "description": "Whether the feature flag is enabled" + "username": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "description": "Provider's email address (username)", + "format": "email" } - } + }, + "additionalProperties": false }, - "SandboLicenrzUhY3WW0Y7L": { + "SandboLicenZx6a73xGIfzu": { "required": [ "compactAdverseActionsNotificationEmails", "compactCommissionFee", @@ -5604,198 +7558,313 @@ "format": "email" } }, - "licenseeRegistrationEnabled": { - "type": "boolean", - "description": "Denotes whether licensee registration is enabled" + "licenseeRegistrationEnabled": { + "type": "boolean", + "description": "Denotes whether licensee registration is enabled" + }, + "transactionFeeConfiguration": { + "type": "object", + "properties": { + "licenseeCharges": { + "required": [ + "active", + "chargeAmount", + "chargeType" + ], + "type": "object", + "properties": { + "chargeType": { + "type": "string", + "description": "The type of transaction fee charge", + "enum": [ + "FLAT_FEE_PER_PRIVILEGE" + ] + }, + "active": { + "type": "boolean", + "description": "Whether the compact is charging licensees transaction fees" + }, + "chargeAmount": { + "minimum": 0, + "type": "number", + "description": "The amount to charge per privilege purchased" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "compactOperationsTeamEmails": { + "maxItems": 10, + "minItems": 1, + "uniqueItems": true, + "type": "array", + "description": "List of email addresses for operations team notifications", + "items": { + "type": "string", + "format": "email" + } + } + }, + "additionalProperties": false + }, + "SandboLiceniWnENMKPoAG6": { + "required": [ + "compact", + "jurisdictionAdverseActionsNotificationEmails", + "jurisdictionName", + "jurisdictionOperationsTeamEmails", + "jurisdictionSummaryReportNotificationEmails", + "jurisprudenceRequirements", + "licenseeRegistrationEnabled", + "postalAbbreviation", + "privilegeFees" + ], + "type": "object", + "properties": { + "privilegeFees": { + "type": "array", + "description": "The fees for the privileges by license type", + "items": { + "required": [ + "amount", + "licenseTypeAbbreviation" + ], + "type": "object", + "properties": { + "amount": { + "type": "number" + }, + "militaryRate": { + "description": "Optional military rate for the privilege fee.", + "oneOf": [ + { + "minimum": 0, + "type": "number" + }, + null + ] + }, + "licenseTypeAbbreviation": { + "type": "string", + "enum": [ + "aud", + "slp", + "ot", + "ota", + "lpc" + ] + } + } + } + }, + "postalAbbreviation": { + "type": "string", + "description": "The postal abbreviation of the jurisdiction" + }, + "jurisdictionAdverseActionsNotificationEmails": { + "type": "array", + "description": "List of email addresses for adverse actions notifications", + "items": { + "type": "string", + "format": "email" + } + }, + "jurisdictionOperationsTeamEmails": { + "type": "array", + "description": "List of email addresses for operations team notifications", + "items": { + "type": "string", + "format": "email" + } + }, + "compact": { + "type": "string", + "description": "The compact this jurisdiction configuration belongs to", + "enum": [ + "aslp", + "octp", + "coun" + ] }, - "transactionFeeConfiguration": { + "jurisprudenceRequirements": { + "required": [ + "required" + ], "type": "object", "properties": { - "licenseeCharges": { - "required": [ - "active", - "chargeAmount", - "chargeType" - ], - "type": "object", - "properties": { - "chargeType": { - "type": "string", - "description": "The type of transaction fee charge", - "enum": [ - "FLAT_FEE_PER_PRIVILEGE" - ] - }, - "active": { - "type": "boolean", - "description": "Whether the compact is charging licensees transaction fees" + "linkToDocumentation": { + "description": "Optional link to jurisprudence documentation", + "oneOf": [ + { + "type": "string" }, - "chargeAmount": { - "minimum": 0, - "type": "number", - "description": "The amount to charge per privilege purchased" - } - }, - "additionalProperties": false + null + ] + }, + "required": { + "type": "boolean", + "description": "Whether jurisprudence requirements exist" } - }, - "additionalProperties": false + } }, - "compactOperationsTeamEmails": { - "maxItems": 10, - "minItems": 1, - "uniqueItems": true, + "licenseeRegistrationEnabled": { + "type": "boolean", + "description": "Denotes whether licensee registration is enabled" + }, + "jurisdictionName": { + "type": "string", + "description": "The name of the jurisdiction" + }, + "jurisdictionSummaryReportNotificationEmails": { "type": "array", - "description": "List of email addresses for operations team notifications", + "description": "List of email addresses for summary report notifications", "items": { "type": "string", "format": "email" } } - }, - "additionalProperties": false + } }, - "SandboLicenPAsEF1Ia4s7g": { + "SandboLicenJwiQTQPNiltz": { "required": [ - "deactivationNote" + "jurisdictionAdverseActionsNotificationEmails", + "jurisdictionOperationsTeamEmails", + "jurisdictionSummaryReportNotificationEmails", + "jurisprudenceRequirements", + "licenseeRegistrationEnabled", + "privilegeFees" ], "type": "object", "properties": { - "deactivationNote": { - "maxLength": 256, - "type": "string", - "description": "Note describing why the privilege is being deactivated" - } - }, - "additionalProperties": false - }, - "SandboLicenLLx7v2Sq2Nku": { - "type": "object", - "properties": { - "pagination": { - "type": "object", - "properties": { - "prevLastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "object" - }, - "lastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "object" - }, - "pageSize": { - "maximum": 100, - "minimum": 5, - "type": "integer" - } - } - }, - "users": { + "privilegeFees": { "type": "array", + "description": "The fees for the privileges by license type", "items": { "required": [ - "attributes", - "permissions", - "status", - "userId" + "amount", + "licenseTypeAbbreviation" ], "type": "object", "properties": { - "permissions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - } - }, - "jurisdictions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "write": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - }, - "additionalProperties": false - } - } - } - } - }, - "additionalProperties": false - } + "amount": { + "minimum": 0, + "type": "number" }, - "attributes": { - "required": [ - "email", - "familyName", - "givenName" - ], - "type": "object", - "properties": { - "givenName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" + "militaryRate": { + "description": "Optional military rate for the privilege fee.", + "oneOf": [ + { + "minimum": 0, + "type": "number" }, - "email": { - "maxLength": 100, - "minLength": 5, - "type": "string" - } - }, - "additionalProperties": false - }, - "userId": { - "type": "string" + null + ] }, - "status": { + "licenseTypeAbbreviation": { "type": "string", "enum": [ - "active", - "inactive" + "aud", + "slp", + "ot", + "ota", + "lpc" ] } }, "additionalProperties": false } + }, + "jurisdictionAdverseActionsNotificationEmails": { + "maxItems": 10, + "minItems": 1, + "uniqueItems": true, + "type": "array", + "description": "List of email addresses for adverse actions notifications", + "items": { + "type": "string", + "format": "email" + } + }, + "jurisdictionOperationsTeamEmails": { + "maxItems": 10, + "minItems": 1, + "uniqueItems": true, + "type": "array", + "description": "List of email addresses for operations team notifications", + "items": { + "type": "string", + "format": "email" + } + }, + "jurisprudenceRequirements": { + "required": [ + "required" + ], + "type": "object", + "properties": { + "linkToDocumentation": { + "description": "Optional link to jurisprudence documentation", + "oneOf": [ + { + "type": "string" + }, + null + ] + }, + "required": { + "type": "boolean", + "description": "Whether jurisprudence requirements exist" + } + }, + "additionalProperties": false + }, + "licenseeRegistrationEnabled": { + "type": "boolean", + "description": "Denotes whether licensee registration is enabled" + }, + "jurisdictionSummaryReportNotificationEmails": { + "maxItems": 10, + "minItems": 1, + "uniqueItems": true, + "type": "array", + "description": "List of email addresses for summary report notifications", + "items": { + "type": "string", + "format": "email" + } + } + }, + "additionalProperties": false + }, + "SandboLicenTMQQKAeKTKQR": { + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "A message about the request" + } + } + }, + "SandboLicenlu9HVFJNEZQz": { + "required": [ + "verificationCode" + ], + "type": "object", + "properties": { + "verificationCode": { + "pattern": "^[0-9]{4}$", + "type": "string", + "description": "4-digit verification code" } }, "additionalProperties": false }, - "SandboLicenobivPmYh5SvH": { + "SandboLicen0XcLtKpj7p28": { "required": [ "compact", "events", @@ -5904,6 +7973,13 @@ "note": { "type": "string" }, + "npdbCategories": { + "type": "array", + "description": "The categories of clinical privilege action for encumbrance events", + "items": { + "type": "string" + } + }, "type": { "type": "string", "enum": [ @@ -5944,93 +8020,7 @@ } } }, - "SandboLicenI4CqYMff5SWl": { - "type": "object", - "properties": { - "attributes": { - "type": "object", - "properties": { - "givenName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "SandboLicenZdwYMaXuEYs6": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - } - } - }, - "SandboLiceng72nqBB23bmL": { + "SandboLicenVHq6DcHpnqp0": { "required": [ "transactionId" ], @@ -6046,338 +8036,1052 @@ } } }, - "SandboLicenJZNKekBSUCl5": { - "required": [ - "affiliationType", - "fileNames" - ], + "SandboLicen9VEPwkhZhKem": { "type": "object", - "properties": { - "affiliationType": { - "type": "string", - "description": "The type of military affiliation", - "enum": [ - "militaryMember", - "militaryMemberSpouse" - ] - }, - "fileNames": { - "type": "array", - "description": "List of military affiliation file names", - "items": { - "maxLength": 150, - "type": "string", - "description": "The name of the file being uploaded" - } - } - }, - "additionalProperties": false + "properties": {} }, - "SandboLicenbGNGFVLD0EDE": { + "SandboLicenJlHz6gimzgVV": { "required": [ + "birthMonthDay", "compact", - "jurisdictionAdverseActionsNotificationEmails", - "jurisdictionName", - "jurisdictionOperationsTeamEmails", - "jurisdictionSummaryReportNotificationEmails", - "jurisprudenceRequirements", - "licenseeRegistrationEnabled", - "postalAbbreviation", - "privilegeFees" + "dateOfExpiration", + "dateOfUpdate", + "familyName", + "givenName", + "licenseJurisdiction", + "licenses", + "militaryAffiliations", + "privilegeJurisdictions", + "privileges", + "providerId", + "type" ], "type": "object", "properties": { - "privilegeFees": { + "privileges": { "type": "array", - "description": "The fees for the privileges by license type", "items": { "required": [ - "amount", - "licenseTypeAbbreviation" + "administratorSetStatus", + "attestations", + "compact", + "compactTransactionId", + "dateOfExpiration", + "dateOfIssuance", + "dateOfRenewal", + "dateOfUpdate", + "history", + "jurisdiction", + "licenseJurisdiction", + "licenseType", + "privilegeId", + "providerId", + "status", + "type" ], "type": "object", "properties": { - "amount": { - "type": "number" + "investigationStatus": { + "type": "string", + "description": "Status indicating if the privilege is under investigation", + "enum": [ + "underInvestigation" + ] + }, + "licenseJurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] }, - "militaryRate": { - "description": "Optional military rate for the privilege fee.", - "oneOf": [ - { - "minimum": 0, - "type": "number" - }, - null + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" ] }, - "licenseTypeAbbreviation": { + "jurisdiction": { "type": "string", "enum": [ - "aud", - "slp", - "ot", - "ota", - "lpc" + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" ] - } - } - } - }, - "postalAbbreviation": { - "type": "string", - "description": "The postal abbreviation of the jurisdiction" - }, - "jurisdictionAdverseActionsNotificationEmails": { - "type": "array", - "description": "List of email addresses for adverse actions notifications", - "items": { - "type": "string", - "format": "email" - } - }, - "jurisdictionOperationsTeamEmails": { - "type": "array", - "description": "List of email addresses for operations team notifications", - "items": { - "type": "string", - "format": "email" - } - }, - "compact": { - "type": "string", - "description": "The compact this jurisdiction configuration belongs to", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "jurisprudenceRequirements": { - "required": [ - "required" - ], - "type": "object", - "properties": { - "linkToDocumentation": { - "description": "Optional link to jurisprudence documentation", - "oneOf": [ - { - "type": "string" - }, - null - ] - }, - "required": { - "type": "boolean", - "description": "Whether jurisprudence requirements exist" - } - } - }, - "licenseeRegistrationEnabled": { - "type": "boolean", - "description": "Denotes whether licensee registration is enabled" - }, - "jurisdictionName": { - "type": "string", - "description": "The name of the jurisdiction" - }, - "jurisdictionSummaryReportNotificationEmails": { - "type": "array", - "description": "List of email addresses for summary report notifications", - "items": { - "type": "string", - "format": "email" - } - } - } - }, - "SandboLicenC1PiOZAh5Usx": { - "type": "object", - "properties": { - "permissions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" + }, + "attestations": { + "type": "array", + "items": { + "required": [ + "attestationId", + "version" + ], + "type": "object", + "properties": { + "attestationId": { + "maxLength": 100, + "type": "string" + }, + "version": { + "maxLength": 100, + "type": "string" + } + } + } + }, + "investigations": { + "type": "array", + "items": { + "required": [ + "compact", + "creationDate", + "dateOfUpdate", + "investigationId", + "jurisdiction", + "licenseType", + "providerId", + "submittingUser", + "type" + ], + "type": "object", + "properties": { + "licenseType": { + "type": "string" + }, + "investigationId": { + "type": "string" + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "submittingUser": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "investigation" + ] + }, + "creationDate": { + "type": "string", + "format": "date-time" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + } + } + } + }, + "history": { + "type": "array", + "items": { + "required": [ + "compact", + "dateOfUpdate", + "jurisdiction", + "previous", + "type", + "updateType" + ], + "type": "object", + "properties": { + "removedValues": { + "type": "array", + "description": "List of field names that were present in the previous record but removed in the update", + "items": { + "type": "string" + } + }, + "licenseType": { + "type": "string", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "previous": { + "required": [ + "administratorSetStatus", + "attestations", + "compactTransactionId", + "dateOfExpiration", + "dateOfIssuance", + "dateOfRenewal", + "dateOfUpdate", + "licenseJurisdiction", + "privilegeId" + ], + "type": "object", + "properties": { + "licenseJurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "attestations": { + "type": "array", + "items": { + "required": [ + "attestationId", + "version" + ], + "type": "object", + "properties": { + "attestationId": { + "maxLength": 100, + "type": "string" + }, + "version": { + "maxLength": 100, + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "privilege" + ] + }, + "compactTransactionId": { + "type": "string" + }, + "dateOfIssuance": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "administratorSetStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "privilegeId": { + "type": "string" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "dateOfRenewal": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + } + } + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "updatedValues": { + "type": "object", + "properties": { + "licenseJurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "attestations": { + "type": "array", + "items": { + "required": [ + "attestationId", + "version" + ], + "type": "object", + "properties": { + "attestationId": { + "maxLength": 100, + "type": "string" + }, + "version": { + "maxLength": 100, + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "privilege" + ] + }, + "compactTransactionId": { + "type": "string" + }, + "dateOfIssuance": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "administratorSetStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "privilegeId": { + "type": "string" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "dateOfRenewal": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + } + } + }, + "type": { + "type": "string", + "enum": [ + "privilegeUpdate" + ] + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + }, + "updateType": { + "type": "string", + "enum": [ + "deactivation", + "expiration", + "issuance", + "other", + "renewal", + "encumbrance", + "homeJurisdictionChange", + "registration", + "lifting_encumbrance", + "licenseDeactivation", + "emailChange" + ] + } } } }, - "jurisdictions": { - "type": "object", - "additionalProperties": { + "type": { + "type": "string", + "enum": [ + "privilege" + ] + }, + "compactTransactionId": { + "type": "string" + }, + "dateOfIssuance": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "licenseType": { + "type": "string", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "administratorSetStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "privilegeId": { + "type": "string" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "dateOfRenewal": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "adverseActions": { + "type": "array", + "items": { + "required": [ + "actionAgainst", + "adverseActionId", + "compact", + "creationDate", + "dateOfUpdate", + "effectiveStartDate", + "encumbranceType", + "jurisdiction", + "licenseType", + "licenseTypeAbbreviation", + "providerId", + "type" + ], "type": "object", "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "write": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - }, - "additionalProperties": false + "clinicalPrivilegeActionCategories": { + "type": "array", + "description": "The categories of clinical privilege action", + "items": { + "type": "string" + } + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "licenseTypeAbbreviation": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "adverseAction" + ] + }, + "creationDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "actionAgainst": { + "type": "string" + }, + "licenseType": { + "type": "string" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "effectiveStartDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "adverseActionId": { + "type": "string" + }, + "effectiveLiftDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "encumbranceType": { + "type": "string" + }, + "liftingUser": { + "type": "string" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" } } } - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false - }, - "SandboLicenHcuQxywUvhOh": { - "type": "object", - "properties": { - "dateCreated": { - "type": "string", - "format": "date-time" - }, - "attestationId": { - "type": "string" - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "text": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "attestation" - ] - }, - "locale": { - "type": "string" - }, - "version": { - "type": "string" - }, - "required": { - "type": "boolean" - } - } - }, - "SandboLicenDb8Dl04rAoPD": { - "required": [ - "attributes", - "permissions" - ], - "type": "object", - "properties": { - "permissions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - } }, - "jurisdictions": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "actions": { - "type": "object", - "properties": { - "readPrivate": { - "type": "boolean" - }, - "admin": { - "type": "boolean" - }, - "write": { - "type": "boolean" - }, - "readSSN": { - "type": "boolean" - } - }, - "additionalProperties": false - } - } - } + "dateOfUpdate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "active", + "inactive" + ] } - }, - "additionalProperties": false + } } }, - "attributes": { - "required": [ - "email", - "familyName", - "givenName" - ], - "type": "object", - "properties": { - "givenName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "email": { - "maxLength": 100, - "minLength": 5, - "type": "string" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "SandboLicen8QcYRI7AzDyX": { - "required": [ - "jurisdiction" - ], - "type": "object", - "properties": { - "jurisdiction": { + "licenseJurisdiction": { "type": "string", - "description": "The jurisdiction postal abbreviation to set as home jurisdiction", "enum": [ "al", "ak", @@ -6431,90 +9135,56 @@ "wa", "wv", "wi", - "wy", - "other" + "wy" ] - } - }, - "additionalProperties": false - }, - "SandboLicenBWZgN83iyevY": { - "required": [ - "attestations", - "licenseType", - "orderInformation", - "selectedJurisdictions" - ], - "type": "object", - "properties": { - "licenseType": { + }, + "compact": { "type": "string", - "description": "The type of license the provider is purchasing a privilege for.", "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" + "aslp", + "octp", + "coun" ] }, - "attestations": { - "type": "array", - "description": "List of attestations that the user has agreed to", - "items": { - "required": [ - "attestationId", - "version" - ], - "type": "object", - "properties": { - "attestationId": { - "maxLength": 100, - "type": "string", - "description": "The ID of the attestation" - }, - "version": { - "maxLength": 10, - "pattern": "^\\d+$", - "type": "string", - "description": "The version of the attestation" - } - } - } + "npi": { + "pattern": "^[0-9]{10}$", + "type": "string" }, - "orderInformation": { - "required": [ - "opaqueData" - ], - "type": "object", - "properties": { - "opaqueData": { - "required": [ - "dataDescriptor", - "dataValue" - ], - "type": "object", - "properties": { - "dataValue": { - "maxLength": 1000, - "type": "string", - "description": "The opaque data value token returned by Authorize.Net Accept UI" - }, - "dataDescriptor": { - "maxLength": 100, - "type": "string", - "description": "The opaque data descriptor returned by Authorize.Net Accept UI" - } - } - } - } + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "compactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "jurisdictionUploadedCompactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "dateOfBirth": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" }, - "selectedJurisdictions": { - "maxLength": 20, + "jurisdictionUploadedLicenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "privilegeJurisdictions": { "type": "array", "items": { "type": "string", - "description": "Jurisdictions a provider has selected to purchase privileges in.", "enum": [ "al", "ak", @@ -6571,263 +9241,121 @@ "wy" ] } - } - } - }, - "SandboLicenZ1SdRwpLvl46": { - "type": "object", - "properties": {} - }, - "SandboLicenBxfAXNgCl0f1": { - "required": [ - "compactAbbr", - "compactAdverseActionsNotificationEmails", - "compactCommissionFee", - "compactName", - "compactOperationsTeamEmails", - "compactSummaryReportNotificationEmails", - "configuredStates", - "licenseeRegistrationEnabled" - ], - "type": "object", - "properties": { - "configuredStates": { - "type": "array", - "description": "List of states that have submitted configurations and their live status", - "items": { - "required": [ - "isLive", - "postalAbbreviation" - ], - "type": "object", - "properties": { - "postalAbbreviation": { - "type": "string", - "description": "The postal abbreviation of the jurisdiction", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "isLive": { - "type": "boolean", - "description": "Whether the state is live and available for registrations." - } - } - } - }, - "compactCommissionFee": { - "required": [ - "feeAmount", - "feeType" - ], - "type": "object", - "properties": { - "feeAmount": { - "type": "number" - }, - "feeType": { - "type": "string", - "enum": [ - "FLAT_RATE" - ] - } - } - }, - "compactSummaryReportNotificationEmails": { - "type": "array", - "description": "List of email addresses for summary report notifications", - "items": { - "type": "string", - "format": "email" - } - }, - "compactAdverseActionsNotificationEmails": { - "type": "array", - "description": "List of email addresses for adverse actions notifications", - "items": { - "type": "string", - "format": "email" - } - }, - "licenseeRegistrationEnabled": { - "type": "boolean", - "description": "Denotes whether licensee registration is enabled" }, - "compactAbbr": { + "type": { "type": "string", - "description": "The abbreviation of the compact" + "enum": [ + "provider" + ] }, - "transactionFeeConfiguration": { - "type": "object", - "properties": { - "licenseeCharges": { - "required": [ - "active", - "chargeAmount", - "chargeType" - ], - "type": "object", - "properties": { - "chargeType": { - "type": "string", - "description": "The type of transaction fee charge", - "enum": [ - "FLAT_FEE_PER_PRIVILEGE" - ] - }, - "active": { - "type": "boolean", - "description": "Whether the compact is charging licensees transaction fees" - }, - "chargeAmount": { - "type": "number", - "description": "The amount to charge per privilege purchased" - } - } - } - } + "suffix": { + "maxLength": 100, + "minLength": 1, + "type": "string" }, - "compactName": { + "currentHomeJurisdiction": { "type": "string", - "description": "The full name of the compact" - }, - "compactOperationsTeamEmails": { - "type": "array", - "description": "List of email addresses for operations team notifications", - "items": { - "type": "string", - "format": "email" - } - } - } - }, - "SandboLiceno12FSfDWBzow": { - "required": [ - "pagination", - "providers" - ], - "type": "object", - "properties": { - "pagination": { - "type": "object", - "properties": { - "prevLastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "object" - }, - "lastKey": { - "maxLength": 1024, - "minLength": 1, - "type": "object" - }, - "pageSize": { - "maximum": 100, - "minimum": 5, - "type": "integer" - } - } - }, - "sorting": { - "required": [ - "key" - ], - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key to sort results by", - "enum": [ - "dateOfUpdate", - "familyName" - ] - }, - "direction": { - "type": "string", - "description": "Direction to sort results by", - "enum": [ - "ascending", - "descending" - ] - } - }, - "description": "How to sort results" + "description": "The current jurisdiction postal abbreviation if known.", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy", + "other", + "unknown" + ] }, - "providers": { - "maxLength": 100, + "licenses": { "type": "array", "items": { "required": [ - "birthMonthDay", "compact", "compactEligibility", "dateOfExpiration", + "dateOfIssuance", + "dateOfRenewal", "dateOfUpdate", "familyName", "givenName", + "history", + "homeAddressCity", + "homeAddressPostalCode", + "homeAddressState", + "homeAddressStreet1", + "jurisdiction", "jurisdictionUploadedCompactEligibility", "jurisdictionUploadedLicenseStatus", - "licenseJurisdiction", "licenseStatus", - "privilegeJurisdictions", + "licenseType", + "middleName", "providerId", "type" ], "type": "object", "properties": { - "licenseJurisdiction": { + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "homeAddressStreet2": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "jurisdiction": { "type": "string", "enum": [ "al", @@ -6885,21 +9413,203 @@ "wy" ] }, - "compact": { + "homeAddressStreet1": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "investigations": { + "type": "array", + "items": { + "required": [ + "compact", + "creationDate", + "dateOfUpdate", + "investigationId", + "jurisdiction", + "licenseType", + "providerId", + "submittingUser", + "type" + ], + "type": "object", + "properties": { + "licenseType": { + "type": "string" + }, + "investigationId": { + "type": "string" + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "submittingUser": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "investigation" + ] + }, + "creationDate": { + "type": "string", + "format": "date-time" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "license-home" + ] + }, + "suffix": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "dateOfIssuance": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "licenseType": { + "type": "string", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "emailAddress": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "format": "email" + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "homeAddressState": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "dateOfRenewal": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "homeAddressCity": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "licenseNumber": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "investigationStatus": { "type": "string", + "description": "Status indicating if the license is under investigation", "enum": [ - "aslp", - "octp", - "coun" + "underInvestigation" ] }, "npi": { "pattern": "^[0-9]{10}$", "type": "string" }, - "givenName": { - "maxLength": 100, - "minLength": 1, + "homeAddressPostalCode": { + "maxLength": 7, + "minLength": 5, "type": "string" }, "compactEligibility": { @@ -6909,6 +9619,11 @@ "ineligible" ] }, + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, "jurisdictionUploadedCompactEligibility": { "type": "string", "enum": [ @@ -6928,150 +9643,395 @@ "inactive" ] }, - "privilegeJurisdictions": { + "history": { "type": "array", "items": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - } - }, - "type": { - "type": "string", - "enum": [ - "provider" - ] - }, - "suffix": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "currentHomeJurisdiction": { - "type": "string", - "description": "The current jurisdiction postal abbreviation if known.", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy", - "other", - "unknown" - ] + "required": [ + "compact", + "dateOfUpdate", + "jurisdiction", + "previous", + "type", + "updateType" + ], + "type": "object", + "properties": { + "removedValues": { + "type": "array", + "description": "List of field names that were present in the previous record but removed in the update", + "items": { + "type": "string" + } + }, + "licenseType": { + "type": "string", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "previous": { + "required": [ + "dateOfExpiration", + "dateOfIssuance", + "dateOfRenewal", + "familyName", + "givenName", + "homeAddressCity", + "homeAddressPostalCode", + "homeAddressState", + "homeAddressStreet1", + "jurisdictionUploadedCompactEligibility", + "jurisdictionUploadedLicenseStatus", + "middleName" + ], + "type": "object", + "properties": { + "homeAddressStreet2": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "npi": { + "pattern": "^[0-9]{10}$", + "type": "string" + }, + "homeAddressPostalCode": { + "maxLength": 7, + "minLength": 5, + "type": "string" + }, + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "homeAddressStreet1": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "compactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "jurisdictionUploadedCompactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "dateOfBirth": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "jurisdictionUploadedLicenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "suffix": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "dateOfIssuance": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "emailAddress": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "format": "email" + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "phoneNumber": { + "pattern": "^\\+[0-9]{8,15}$", + "type": "string" + }, + "homeAddressState": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "dateOfRenewal": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "licenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "homeAddressCity": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "licenseNumber": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "middleName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "licenseStatusName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + } + } + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "updatedValues": { + "type": "object", + "properties": { + "homeAddressStreet2": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "npi": { + "pattern": "^[0-9]{10}$", + "type": "string" + }, + "homeAddressPostalCode": { + "maxLength": 7, + "minLength": 5, + "type": "string" + }, + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "homeAddressStreet1": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "compactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "jurisdictionUploadedCompactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "dateOfBirth": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "jurisdictionUploadedLicenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "suffix": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "dateOfIssuance": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "emailAddress": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "format": "email" + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "phoneNumber": { + "pattern": "^\\+[0-9]{8,15}$", + "type": "string" + }, + "homeAddressState": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "dateOfRenewal": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "licenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "homeAddressCity": { + "maxLength": 100, + "minLength": 2, + "type": "string" + }, + "licenseNumber": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "middleName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "licenseStatusName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "licenseUpdate" + ] + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + }, + "updateType": { + "type": "string", + "enum": [ + "deactivation", + "expiration", + "issuance", + "other", + "renewal", + "encumbrance", + "homeJurisdictionChange", + "registration", + "lifting_encumbrance", + "licenseDeactivation", + "emailChange" + ] + } + } + } }, "ssnLastFour": { "pattern": "^[0-9]{4}$", "type": "string" }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "phoneNumber": { + "pattern": "^\\+[0-9]{8,15}$", "type": "string" }, "licenseStatus": { @@ -7081,207 +10041,460 @@ "inactive" ] }, - "familyName": { + "middleName": { "maxLength": 100, "minLength": 1, "type": "string" }, - "middleName": { + "licenseStatusName": { "maxLength": 100, "minLength": 1, "type": "string" }, - "birthMonthDay": { - "pattern": "^[01]{1}[0-9]{1}-[0-3]{1}[0-9]{1}$", + "adverseActions": { + "type": "array", + "items": { + "required": [ + "actionAgainst", + "adverseActionId", + "compact", + "creationDate", + "dateOfUpdate", + "effectiveStartDate", + "encumbranceType", + "jurisdiction", + "licenseType", + "licenseTypeAbbreviation", + "providerId", + "type" + ], + "type": "object", + "properties": { + "clinicalPrivilegeActionCategories": { + "type": "array", + "description": "The categories of clinical privilege action", + "items": { + "type": "string" + } + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "jurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "licenseTypeAbbreviation": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "adverseAction" + ] + }, + "creationDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "actionAgainst": { + "type": "string" + }, + "licenseType": { + "type": "string" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "effectiveStartDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "adverseActionId": { + "type": "string" + }, + "effectiveLiftDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "encumbranceType": { + "type": "string" + }, + "liftingUser": { + "type": "string" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + } + } + } + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + } + } + } + }, + "ssnLastFour": { + "pattern": "^[0-9]{4}$", + "type": "string" + }, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "militaryAffiliations": { + "type": "array", + "items": { + "required": [ + "affiliationType", + "compact", + "dateOfUpdate", + "dateOfUpload", + "fileNames", + "providerId", + "status", + "type" + ], + "type": "object", + "properties": { + "dateOfUpload": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" }, - "compactConnectRegisteredEmailAddress": { - "maxLength": 100, - "minLength": 5, + "compact": { "type": "string", - "format": "email" + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "downloadLinks": { + "type": "array", + "items": { + "required": [ + "fileName", + "url" + ], + "type": "object", + "properties": { + "fileName": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "affiliationType": { + "type": "string", + "enum": [ + "militaryMember", + "militaryMemberSpouse" + ] + }, + "type": { + "type": "string", + "enum": [ + "militaryAffiliation" + ] }, "dateOfUpdate": { "type": "string", "format": "date-time" + }, + "fileNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string", + "enum": [ + "active", + "inactive" + ] } } } - } - } - }, - "SandboLicendERazg9NeEsA": { - "required": [ - "status" - ], - "type": "object", - "properties": { - "status": { + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "licenseStatus": { "type": "string", - "description": "The status to set the military affiliation to.", "enum": [ + "active", "inactive" ] - } - }, - "additionalProperties": false - }, - "SandboLicenwoqrSnm0rsGM": { - "required": [ - "compact", - "dob", - "email", - "familyName", - "givenName", - "jurisdiction", - "licenseType", - "partialSocial", - "token" - ], - "type": "object", - "properties": { - "licenseType": { - "maxLength": 500, - "type": "string", - "description": "Type of license", - "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" - ] - }, - "compact": { - "maxLength": 100, - "type": "string", - "description": "Compact name" - }, - "dob": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "description": "Date of birth in YYYY-MM-DD format" - }, - "givenName": { - "maxLength": 200, - "type": "string", - "description": "Provider's given name" }, "familyName": { - "maxLength": 200, - "type": "string", - "description": "Provider's family name" + "maxLength": 100, + "minLength": 1, + "type": "string" }, - "jurisdiction": { - "maxLength": 2, - "minLength": 2, - "type": "string", - "description": "Two-letter jurisdiction code", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] + "middleName": { + "maxLength": 100, + "minLength": 1, + "type": "string" }, - "partialSocial": { - "maxLength": 4, - "minLength": 4, + "birthMonthDay": { + "pattern": "^[01]{1}[0-9]{1}-[0-3]{1}[0-9]{1}$", "type": "string", - "description": "Last 4 digits of SSN" + "format": "date" }, - "email": { + "compactConnectRegisteredEmailAddress": { "maxLength": 100, "minLength": 5, "type": "string", - "description": "Provider's email address", "format": "email" }, - "token": { - "type": "string", - "description": "ReCAPTCHA token" - } - } - }, - "SandboLicenaSmGZue6afyn": { - "required": [ - "newEmailAddress" - ], - "type": "object", - "properties": { - "newEmailAddress": { - "maxLength": 100, - "minLength": 5, - "type": "string", - "description": "The new email address to set for the provider", - "format": "email" + "dateOfUpdate": { + "type": "string", + "format": "date-time" + } + } + }, + "SandboLicenjfa9vGqBChQd": { + "required": [ + "upload" + ], + "type": "object", + "properties": { + "upload": { + "required": [ + "fields", + "url" + ], + "type": "object", + "properties": { + "fields": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "url": { + "type": "string" + } + } + } + } + }, + "SandboLicenyuZlweRzUTEW": { + "required": [ + "query" + ], + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "lastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "string" + }, + "pageSize": { + "maximum": 100, + "minimum": 5, + "type": "integer" + } + }, + "additionalProperties": false + }, + "query": { + "type": "object", + "properties": { + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string", + "description": "Internal UUID for the provider" + }, + "jurisdiction": { + "type": "string", + "description": "Filter for providers with privilege/license in a jurisdiction", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "givenName": { + "maxLength": 100, + "type": "string", + "description": "Filter for providers with a given name (familyName is required if givenName is provided)" + }, + "familyName": { + "maxLength": 100, + "type": "string", + "description": "Filter for providers with a family name" + } + }, + "additionalProperties": false, + "description": "The query parameters" + }, + "sorting": { + "required": [ + "key" + ], + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The key to sort results by", + "enum": [ + "dateOfUpdate", + "familyName" + ] + }, + "direction": { + "type": "string", + "description": "Direction to sort results by", + "enum": [ + "ascending", + "descending" + ] + } + }, + "description": "How to sort results" } }, "additionalProperties": false }, - "SandboLicenr5TVmpxKfPGq": { + "SandboLicennv4iZSNKxEXN": { "required": [ - "birthMonthDay", "compact", - "dateOfExpiration", "dateOfUpdate", "familyName", "givenName", "licenseJurisdiction", - "licenses", - "militaryAffiliations", "privilegeJurisdictions", - "privileges", "providerId", "type" ], @@ -7292,14 +10505,11 @@ "items": { "required": [ "administratorSetStatus", - "attestations", "compact", - "compactTransactionId", "dateOfExpiration", "dateOfIssuance", "dateOfRenewal", "dateOfUpdate", - "history", "jurisdiction", "licenseJurisdiction", "licenseType", @@ -7310,13 +10520,6 @@ ], "type": "object", "properties": { - "investigationStatus": { - "type": "string", - "description": "Status indicating if the privilege is under investigation", - "enum": [ - "underInvestigation" - ] - }, "licenseJurisdiction": { "type": "string", "enum": [ @@ -7405,173 +10608,41 @@ "ks", "ky", "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "attestations": { - "type": "array", - "items": { - "required": [ - "attestationId", - "version" - ], - "type": "object", - "properties": { - "attestationId": { - "maxLength": 100, - "type": "string" - }, - "version": { - "maxLength": 100, - "type": "string" - } - } - } - }, - "investigations": { - "type": "array", - "items": { - "required": [ - "compact", - "creationDate", - "dateOfUpdate", - "investigationId", - "jurisdiction", - "licenseType", - "providerId", - "submittingUser", - "type" - ], - "type": "object", - "properties": { - "licenseType": { - "type": "string" - }, - "investigationId": { - "type": "string" - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "submittingUser": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "investigation" - ] - }, - "creationDate": { - "type": "string", - "format": "date-time" - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - } - } - } + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] }, "history": { "type": "array", @@ -7580,19 +10651,15 @@ "compact", "dateOfUpdate", "jurisdiction", + "licenseType", "previous", + "providerId", "type", - "updateType" + "updateType", + "updatedValues" ], "type": "object", "properties": { - "removedValues": { - "type": "array", - "description": "List of field names that were present in the previous record but removed in the update", - "items": { - "type": "string" - } - }, "licenseType": { "type": "string", "enum": [ @@ -7614,8 +10681,6 @@ "previous": { "required": [ "administratorSetStatus", - "attestations", - "compactTransactionId", "dateOfExpiration", "dateOfIssuance", "dateOfRenewal", @@ -7625,73 +10690,19 @@ ], "type": "object", "properties": { - "licenseJurisdiction": { + "administratorSetStatus": { "type": "string", "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" + "active", + "inactive" ] }, - "compact": { + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] + "format": "date" }, - "jurisdiction": { + "licenseJurisdiction": { "type": "string", "enum": [ "al", @@ -7749,60 +10760,15 @@ "wy" ] }, - "attestations": { - "type": "array", - "items": { - "required": [ - "attestationId", - "version" - ], - "type": "object", - "properties": { - "attestationId": { - "maxLength": 100, - "type": "string" - }, - "version": { - "maxLength": 100, - "type": "string" - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "privilege" - ] - }, - "compactTransactionId": { + "privilegeId": { "type": "string" }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "administratorSetStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "dateOfExpiration": { + "dateOfRenewal": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" }, - "privilegeId": { - "type": "string" - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "dateOfRenewal": { + "dateOfIssuance": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" @@ -7810,16 +10776,13 @@ "dateOfUpdate": { "type": "string", "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "active", - "inactive" - ] } } }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, "jurisdiction": { "type": "string", "enum": [ @@ -7863,91 +10826,37 @@ "or", "pa", "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "updatedValues": { - "type": "object", - "properties": { - "licenseJurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "compact": { + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "updatedValues": { + "type": "object", + "properties": { + "administratorSetStatus": { "type": "string", "enum": [ - "aslp", - "octp", - "coun" + "active", + "inactive" ] }, - "jurisdiction": { + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "licenseJurisdiction": { "type": "string", "enum": [ "al", @@ -8005,60 +10914,15 @@ "wy" ] }, - "attestations": { - "type": "array", - "items": { - "required": [ - "attestationId", - "version" - ], - "type": "object", - "properties": { - "attestationId": { - "maxLength": 100, - "type": "string" - }, - "version": { - "maxLength": 100, - "type": "string" - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "privilege" - ] - }, - "compactTransactionId": { + "privilegeId": { "type": "string" }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "administratorSetStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "dateOfExpiration": { + "dateOfRenewal": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" }, - "privilegeId": { - "type": "string" - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "dateOfRenewal": { + "dateOfIssuance": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" @@ -8066,13 +10930,6 @@ "dateOfUpdate": { "type": "string", "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "active", - "inactive" - ] } } }, @@ -8111,9 +10968,6 @@ "privilege" ] }, - "compactTransactionId": { - "type": "string" - }, "dateOfIssuance": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", @@ -8163,7 +11017,6 @@ "creationDate", "dateOfUpdate", "effectiveStartDate", - "encumbranceType", "jurisdiction", "licenseType", "licenseTypeAbbreviation", @@ -8172,12 +11025,8 @@ ], "type": "object", "properties": { - "clinicalPrivilegeActionCategories": { - "type": "array", - "description": "The categories of clinical privilege action", - "items": { - "type": "string" - } + "licenseType": { + "type": "string" }, "compact": { "type": "string", @@ -8187,6 +11036,10 @@ "coun" ] }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, "jurisdiction": { "type": "string", "enum": [ @@ -8245,50 +11098,34 @@ "wy" ] }, - "licenseTypeAbbreviation": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "adverseAction" - ] - }, - "creationDate": { + "effectiveStartDate": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" }, - "actionAgainst": { - "type": "string" - }, - "licenseType": { + "licenseTypeAbbreviation": { "type": "string" }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "adverseActionId": { "type": "string" }, - "effectiveStartDate": { + "effectiveLiftDate": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" }, - "adverseActionId": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "adverseAction" + ] }, - "effectiveLiftDate": { + "creationDate": { "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", "format": "date" }, - "encumbranceType": { - "type": "string" - }, - "clinicalPrivilegeActionCategory": { - "type": "string" - }, - "liftingUser": { + "actionAgainst": { "type": "string" }, "dateOfUpdate": { @@ -8387,32 +11224,6 @@ "minLength": 1, "type": "string" }, - "compactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "jurisdictionUploadedCompactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "dateOfBirth": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "jurisdictionUploadedLicenseStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, "privilegeJurisdictions": { "type": "array", "items": { @@ -8546,49 +11357,89 @@ "unknown" ] }, - "licenses": { - "type": "array", - "items": { - "required": [ - "compact", - "compactEligibility", - "dateOfExpiration", - "dateOfIssuance", - "dateOfRenewal", - "dateOfUpdate", - "familyName", - "givenName", - "history", - "homeAddressCity", - "homeAddressPostalCode", - "homeAddressState", - "homeAddressStreet1", - "jurisdiction", - "jurisdictionUploadedCompactEligibility", - "jurisdictionUploadedLicenseStatus", - "licenseStatus", - "licenseType", - "middleName", - "providerId", - "type" + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "middleName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "dateOfUpdate": { + "type": "string", + "format": "date-time" + } + } + }, + "SandboLicen5bneP2wVdz6l": { + "required": [ + "compact", + "providerId", + "recaptchaToken", + "recoveryToken" + ], + "type": "object", + "properties": { + "compact": { + "type": "string", + "description": "Compact abbreviation", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", + "type": "string", + "description": "Provider UUID" + }, + "recaptchaToken": { + "minLength": 1, + "type": "string", + "description": "ReCAPTCHA token for verification" + }, + "recoveryToken": { + "maxLength": 256, + "minLength": 1, + "type": "string", + "description": "Recovery token from the email link" + } + }, + "additionalProperties": false + }, + "SandboLicenRy0ye4gsVdf9": { + "required": [ + "compactAbbr", + "compactAdverseActionsNotificationEmails", + "compactCommissionFee", + "compactName", + "compactOperationsTeamEmails", + "compactSummaryReportNotificationEmails", + "configuredStates", + "licenseeRegistrationEnabled" + ], + "type": "object", + "properties": { + "configuredStates": { + "type": "array", + "description": "List of states that have submitted configurations and their live status", + "items": { + "required": [ + "isLive", + "postalAbbreviation" ], "type": "object", "properties": { - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "homeAddressStreet2": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "jurisdiction": { + "postalAbbreviation": { "type": "string", + "description": "The postal abbreviation of the jurisdiction", "enum": [ "al", "ak", @@ -8621,812 +11472,1063 @@ "nv", "nh", "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "homeAddressStreet1": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "investigations": { - "type": "array", - "items": { - "required": [ - "compact", - "creationDate", - "dateOfUpdate", - "investigationId", - "jurisdiction", - "licenseType", - "providerId", - "submittingUser", - "type" - ], - "type": "object", - "properties": { - "licenseType": { - "type": "string" - }, - "investigationId": { - "type": "string" - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "submittingUser": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "investigation" - ] - }, - "creationDate": { - "type": "string", - "format": "date-time" - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "license-home" - ] - }, - "suffix": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "licenseType": { - "type": "string", - "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" - ] - }, - "emailAddress": { - "maxLength": 100, - "minLength": 5, - "type": "string", - "format": "email" - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "homeAddressState": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "dateOfRenewal": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "homeAddressCity": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "licenseNumber": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "investigationStatus": { - "type": "string", - "description": "Status indicating if the license is under investigation", - "enum": [ - "underInvestigation" - ] - }, - "npi": { - "pattern": "^[0-9]{10}$", - "type": "string" - }, - "homeAddressPostalCode": { - "maxLength": 7, - "minLength": 5, - "type": "string" - }, - "compactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" ] }, - "givenName": { + "isLive": { + "type": "boolean", + "description": "Whether the state is live and available for registrations." + } + } + } + }, + "compactCommissionFee": { + "required": [ + "feeAmount", + "feeType" + ], + "type": "object", + "properties": { + "feeAmount": { + "type": "number" + }, + "feeType": { + "type": "string", + "enum": [ + "FLAT_RATE" + ] + } + } + }, + "compactSummaryReportNotificationEmails": { + "type": "array", + "description": "List of email addresses for summary report notifications", + "items": { + "type": "string", + "format": "email" + } + }, + "compactAdverseActionsNotificationEmails": { + "type": "array", + "description": "List of email addresses for adverse actions notifications", + "items": { + "type": "string", + "format": "email" + } + }, + "licenseeRegistrationEnabled": { + "type": "boolean", + "description": "Denotes whether licensee registration is enabled" + }, + "compactAbbr": { + "type": "string", + "description": "The abbreviation of the compact" + }, + "transactionFeeConfiguration": { + "type": "object", + "properties": { + "licenseeCharges": { + "required": [ + "active", + "chargeAmount", + "chargeType" + ], + "type": "object", + "properties": { + "chargeType": { + "type": "string", + "description": "The type of transaction fee charge", + "enum": [ + "FLAT_FEE_PER_PRIVILEGE" + ] + }, + "active": { + "type": "boolean", + "description": "Whether the compact is charging licensees transaction fees" + }, + "chargeAmount": { + "type": "number", + "description": "The amount to charge per privilege purchased" + } + } + } + } + }, + "compactName": { + "type": "string", + "description": "The full name of the compact" + }, + "compactOperationsTeamEmails": { + "type": "array", + "description": "List of email addresses for operations team notifications", + "items": { + "type": "string", + "format": "email" + } + } + } + }, + "SandboLicenmftfBe6vPEA8": { + "required": [ + "compact", + "dob", + "email", + "familyName", + "givenName", + "jurisdiction", + "licenseType", + "partialSocial", + "token" + ], + "type": "object", + "properties": { + "licenseType": { + "maxLength": 500, + "type": "string", + "description": "Type of license", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "compact": { + "maxLength": 100, + "type": "string", + "description": "Compact name" + }, + "dob": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "Date of birth in YYYY-MM-DD format" + }, + "givenName": { + "maxLength": 200, + "type": "string", + "description": "Provider's given name" + }, + "familyName": { + "maxLength": 200, + "type": "string", + "description": "Provider's family name" + }, + "jurisdiction": { + "maxLength": 2, + "minLength": 2, + "type": "string", + "description": "Two-letter jurisdiction code", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "partialSocial": { + "maxLength": 4, + "minLength": 4, + "type": "string", + "description": "Last 4 digits of SSN" + }, + "email": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "description": "Provider's email address", + "format": "email" + }, + "token": { + "type": "string", + "description": "ReCAPTCHA token" + } + } + }, + "SandboLicenSo5EafP3rZhM": { + "required": [ + "effectiveLiftDate" + ], + "type": "object", + "properties": { + "effectiveLiftDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The effective date when the encumbrance will be lifted", + "format": "date" + } + }, + "additionalProperties": false + }, + "SandboLicendZ26vvlCKCbW": { + "required": [ + "attestations", + "licenseType", + "orderInformation", + "selectedJurisdictions" + ], + "type": "object", + "properties": { + "licenseType": { + "type": "string", + "description": "The type of license the provider is purchasing a privilege for.", + "enum": [ + "audiologist", + "speech-language pathologist", + "occupational therapist", + "occupational therapy assistant", + "licensed professional counselor" + ] + }, + "attestations": { + "type": "array", + "description": "List of attestations that the user has agreed to", + "items": { + "required": [ + "attestationId", + "version" + ], + "type": "object", + "properties": { + "attestationId": { "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "jurisdictionUploadedCompactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "dateOfBirth": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", "type": "string", - "format": "date" + "description": "The ID of the attestation" }, - "jurisdictionUploadedLicenseStatus": { + "version": { + "maxLength": 10, + "pattern": "^\\d+$", "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "history": { - "type": "array", - "items": { - "required": [ - "compact", - "dateOfUpdate", - "jurisdiction", - "previous", - "type", - "updateType" - ], - "type": "object", - "properties": { - "removedValues": { - "type": "array", - "description": "List of field names that were present in the previous record but removed in the update", - "items": { - "type": "string" - } - }, - "licenseType": { - "type": "string", - "enum": [ - "audiologist", - "speech-language pathologist", - "occupational therapist", - "occupational therapy assistant", - "licensed professional counselor" - ] - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "previous": { - "required": [ - "dateOfExpiration", - "dateOfIssuance", - "dateOfRenewal", - "familyName", - "givenName", - "homeAddressCity", - "homeAddressPostalCode", - "homeAddressState", - "homeAddressStreet1", - "jurisdictionUploadedCompactEligibility", - "jurisdictionUploadedLicenseStatus", - "middleName" - ], - "type": "object", - "properties": { - "homeAddressStreet2": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "npi": { - "pattern": "^[0-9]{10}$", - "type": "string" - }, - "homeAddressPostalCode": { - "maxLength": 7, - "minLength": 5, - "type": "string" - }, - "givenName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "homeAddressStreet1": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "compactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "jurisdictionUploadedCompactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "dateOfBirth": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "jurisdictionUploadedLicenseStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "suffix": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "emailAddress": { - "maxLength": 100, - "minLength": 5, - "type": "string", - "format": "email" - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "phoneNumber": { - "pattern": "^\\+[0-9]{8,15}$", - "type": "string" - }, - "homeAddressState": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "dateOfRenewal": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "licenseStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "homeAddressCity": { - "maxLength": 100, - "minLength": 2, - "type": "string" + "description": "The version of the attestation" + } + } + } + }, + "orderInformation": { + "required": [ + "opaqueData" + ], + "type": "object", + "properties": { + "opaqueData": { + "required": [ + "dataDescriptor", + "dataValue" + ], + "type": "object", + "properties": { + "dataValue": { + "maxLength": 1000, + "type": "string", + "description": "The opaque data value token returned by Authorize.Net Accept UI" + }, + "dataDescriptor": { + "maxLength": 100, + "type": "string", + "description": "The opaque data descriptor returned by Authorize.Net Accept UI" + } + } + } + } + }, + "selectedJurisdictions": { + "maxLength": 20, + "type": "array", + "items": { + "type": "string", + "description": "Jurisdictions a provider has selected to purchase privileges in.", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + } + } + } + }, + "SandboLicengqvhPQz7ywKX": { + "type": "object", + "properties": { + "permissions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + } + }, + "jurisdictions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" }, - "licenseNumber": { - "maxLength": 100, - "minLength": 1, - "type": "string" + "admin": { + "type": "boolean" }, - "middleName": { - "maxLength": 100, - "minLength": 1, - "type": "string" + "write": { + "type": "boolean" }, - "licenseStatusName": { - "maxLength": 100, - "minLength": 1, - "type": "string" + "readSSN": { + "type": "boolean" } + }, + "additionalProperties": false + } + } + } + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + "SandboLicenaiHAuDR162f2": { + "required": [ + "items", + "pagination" + ], + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "prevLastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "object" + }, + "lastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "object" + }, + "pageSize": { + "maximum": 100, + "minimum": 5, + "type": "integer" + } + } + }, + "items": { + "maxLength": 100, + "type": "array", + "items": { + "type": "object", + "oneOf": [ + { + "required": [ + "compactAbbr", + "compactCommissionFee", + "compactName", + "isSandbox", + "paymentProcessorPublicFields", + "transactionFeeConfiguration", + "type" + ], + "type": "object", + "properties": { + "compactCommissionFee": { + "required": [ + "feeAmount", + "feeType" + ], + "type": "object", + "properties": { + "feeAmount": { + "type": "number" + }, + "feeType": { + "type": "string", + "enum": [ + "FLAT_RATE" + ] } - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "updatedValues": { + } + }, + "compactAbbr": { + "type": "string", + "description": "The abbreviation of the compact" + }, + "paymentProcessorPublicFields": { + "required": [ + "apiLoginId", + "publicClientKey" + ], + "type": "object", + "properties": { + "publicClientKey": { + "type": "string", + "description": "The public client key for the payment processor" + }, + "apiLoginId": { + "type": "string", + "description": "The API login ID for the payment processor" + } + } + }, + "type": { + "type": "string", + "enum": [ + "compact" + ] + }, + "transactionFeeConfiguration": { + "required": [ + "licenseeCharges" + ], + "type": "object", + "properties": { + "licenseeCharges": { + "required": [ + "active", + "chargeAmount", + "chargeType" + ], + "type": "object", + "properties": { + "chargeType": { + "type": "string", + "description": "The type of transaction fee charge", + "enum": [ + "FLAT_FEE_PER_PRIVILEGE" + ] + }, + "active": { + "type": "boolean", + "description": "Whether the compact is charging licensees transaction fees" + }, + "chargeAmount": { + "type": "number", + "description": "The amount to charge per privilege purchased" + } + } + } + } + }, + "isSandbox": { + "type": "boolean", + "description": "Whether the compact is in sandbox mode" + }, + "compactName": { + "type": "string", + "description": "The full name of the compact" + } + } + }, + { + "required": [ + "jurisdictionName", + "jurisprudenceRequirements", + "postalAbbreviation", + "privilegeFees", + "type" + ], + "type": "object", + "properties": { + "privilegeFees": { + "type": "array", + "description": "The fees for the privileges", + "items": { + "required": [ + "amount", + "licenseTypeAbbreviation" + ], "type": "object", "properties": { - "homeAddressStreet2": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "npi": { - "pattern": "^[0-9]{10}$", - "type": "string" - }, - "homeAddressPostalCode": { - "maxLength": 7, - "minLength": 5, - "type": "string" - }, - "givenName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "homeAddressStreet1": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "compactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "jurisdictionUploadedCompactEligibility": { - "type": "string", - "enum": [ - "eligible", - "ineligible" - ] - }, - "dateOfBirth": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "jurisdictionUploadedLicenseStatus": { - "type": "string", - "enum": [ - "active", - "inactive" - ] - }, - "suffix": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "dateOfIssuance": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "emailAddress": { - "maxLength": 100, - "minLength": 5, - "type": "string", - "format": "email" - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "phoneNumber": { - "pattern": "^\\+[0-9]{8,15}$", - "type": "string" - }, - "homeAddressState": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "dateOfRenewal": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" + "amount": { + "type": "number" }, - "licenseStatus": { - "type": "string", - "enum": [ - "active", - "inactive" + "militaryRate": { + "description": "Optional military rate for the privilege fee.", + "oneOf": [ + { + "minimum": 0, + "type": "number" + }, + null ] }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "homeAddressCity": { - "maxLength": 100, - "minLength": 2, - "type": "string" - }, - "licenseNumber": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "middleName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "licenseStatusName": { - "maxLength": 100, - "minLength": 1, + "licenseTypeAbbreviation": { "type": "string" } } - }, - "type": { - "type": "string", - "enum": [ - "licenseUpdate" - ] - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - }, - "updateType": { - "type": "string", - "enum": [ - "deactivation", - "expiration", - "issuance", - "other", - "renewal", - "encumbrance", - "homeJurisdictionChange", - "registration", - "lifting_encumbrance", - "licenseDeactivation", - "emailChange" - ] } + }, + "postalAbbreviation": { + "type": "string", + "description": "The postal abbreviation of the jurisdiction" + }, + "jurisprudenceRequirements": { + "required": [ + "required" + ], + "type": "object", + "properties": { + "linkToDocumentation": { + "description": "Optional link to jurisprudence documentation", + "oneOf": [ + { + "type": "string" + }, + null + ] + }, + "required": { + "type": "boolean", + "description": "Whether jurisprudence requirements exist" + } + } + }, + "jurisdictionName": { + "type": "string", + "description": "The name of the jurisdiction" + }, + "type": { + "type": "string", + "enum": [ + "jurisdiction" + ] } } + } + ] + } + } + } + }, + "SandboLicenv4avK8ok4P45": { + "required": [ + "clinicalPrivilegeActionCategories", + "encumbranceEffectiveDate", + "encumbranceType" + ], + "type": "object", + "properties": { + "encumbranceEffectiveDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The effective date of the encumbrance", + "format": "date" + }, + "clinicalPrivilegeActionCategories": { + "type": "array", + "description": "The categories of clinical privilege action", + "items": { + "type": "string" + } + }, + "encumbranceType": { + "type": "string", + "description": "The type of encumbrance", + "enum": [ + "fine", + "reprimand", + "required supervision", + "completion of continuing education", + "public reprimand", + "probation", + "injunctive action", + "suspension", + "revocation", + "denial", + "surrender of license", + "modification of previous action-extension", + "modification of previous action-reduction", + "other monitoring", + "other adjudicated action not listed" + ] + } + }, + "additionalProperties": false, + "description": "Encumbrance data to create" + }, + "SandboLicenDTjDt3roB2dM": { + "required": [ + "pagination", + "providers" + ], + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "prevLastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "object" + }, + "lastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "object" + }, + "pageSize": { + "maximum": 100, + "minimum": 5, + "type": "integer" + } + } + }, + "sorting": { + "required": [ + "key" + ], + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "The key to sort results by", + "enum": [ + "dateOfUpdate", + "familyName" + ] + }, + "direction": { + "type": "string", + "description": "Direction to sort results by", + "enum": [ + "ascending", + "descending" + ] + } + }, + "description": "How to sort results" + }, + "providers": { + "maxLength": 100, + "type": "array", + "items": { + "required": [ + "birthMonthDay", + "compact", + "compactEligibility", + "dateOfExpiration", + "dateOfUpdate", + "familyName", + "givenName", + "jurisdictionUploadedCompactEligibility", + "jurisdictionUploadedLicenseStatus", + "licenseJurisdiction", + "licenseStatus", + "privilegeJurisdictions", + "providerId", + "type" + ], + "type": "object", + "properties": { + "licenseJurisdiction": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + }, + "compact": { + "type": "string", + "enum": [ + "aslp", + "octp", + "coun" + ] + }, + "npi": { + "pattern": "^[0-9]{10}$", + "type": "string" + }, + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "compactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "jurisdictionUploadedCompactEligibility": { + "type": "string", + "enum": [ + "eligible", + "ineligible" + ] + }, + "dateOfBirth": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "jurisdictionUploadedLicenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "privilegeJurisdictions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy" + ] + } }, - "ssnLastFour": { - "pattern": "^[0-9]{4}$", - "type": "string" + "type": { + "type": "string", + "enum": [ + "provider" + ] }, - "phoneNumber": { - "pattern": "^\\+[0-9]{8,15}$", + "suffix": { + "maxLength": 100, + "minLength": 1, "type": "string" }, - "licenseStatus": { + "currentHomeJurisdiction": { "type": "string", + "description": "The current jurisdiction postal abbreviation if known.", "enum": [ - "active", - "inactive" + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy", + "other", + "unknown" ] }, - "middleName": { - "maxLength": 100, - "minLength": 1, + "ssnLastFour": { + "pattern": "^[0-9]{4}$", "type": "string" }, - "licenseStatusName": { - "maxLength": 100, - "minLength": 1, + "dateOfExpiration": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "format": "date" + }, + "providerId": { + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", "type": "string" }, - "adverseActions": { - "type": "array", - "items": { - "required": [ - "actionAgainst", - "adverseActionId", - "compact", - "creationDate", - "dateOfUpdate", - "effectiveStartDate", - "encumbranceType", - "jurisdiction", - "licenseType", - "licenseTypeAbbreviation", - "providerId", - "type" - ], - "type": "object", - "properties": { - "clinicalPrivilegeActionCategories": { - "type": "array", - "description": "The categories of clinical privilege action", - "items": { - "type": "string" - } - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "jurisdiction": { - "type": "string", - "enum": [ - "al", - "ak", - "az", - "ar", - "ca", - "co", - "ct", - "de", - "dc", - "fl", - "ga", - "hi", - "id", - "il", - "in", - "ia", - "ks", - "ky", - "la", - "me", - "md", - "ma", - "mi", - "mn", - "ms", - "mo", - "mt", - "ne", - "nv", - "nh", - "nj", - "nm", - "ny", - "nc", - "nd", - "oh", - "ok", - "or", - "pa", - "pr", - "ri", - "sc", - "sd", - "tn", - "tx", - "ut", - "vt", - "va", - "vi", - "wa", - "wv", - "wi", - "wy" - ] - }, - "licenseTypeAbbreviation": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "adverseAction" - ] - }, - "creationDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "actionAgainst": { - "type": "string" - }, - "licenseType": { - "type": "string" - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "effectiveStartDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "adverseActionId": { - "type": "string" - }, - "effectiveLiftDate": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "encumbranceType": { - "type": "string" - }, - "clinicalPrivilegeActionCategory": { - "type": "string" - }, - "liftingUser": { - "type": "string" - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" - } - } - } + "licenseStatus": { + "type": "string", + "enum": [ + "active", + "inactive" + ] + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "middleName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "birthMonthDay": { + "pattern": "^[01]{1}[0-9]{1}-[0-3]{1}[0-9]{1}$", + "type": "string", + "format": "date" + }, + "compactConnectRegisteredEmailAddress": { + "maxLength": 100, + "minLength": 5, + "type": "string", + "format": "email" }, "dateOfUpdate": { "type": "string", @@ -9434,88 +12536,279 @@ } } } + } + } + }, + "SandboLicenUONaWXXjz4K6": { + "required": [ + "action" + ], + "type": "object", + "properties": { + "action": { + "type": "string", + "enum": [ + "close" + ] }, - "ssnLastFour": { - "pattern": "^[0-9]{4}$", - "type": "string" - }, - "dateOfExpiration": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "encumbrance": { + "required": [ + "clinicalPrivilegeActionCategories", + "encumbranceEffectiveDate", + "encumbranceType" + ], + "type": "object", + "properties": { + "encumbranceEffectiveDate": { + "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", + "type": "string", + "description": "The effective date of the encumbrance", + "format": "date" + }, + "clinicalPrivilegeActionCategories": { + "type": "array", + "description": "The categories of clinical privilege action", + "items": { + "type": "string" + } + }, + "encumbranceType": { + "type": "string", + "description": "The type of encumbrance", + "enum": [ + "fine", + "reprimand", + "required supervision", + "completion of continuing education", + "public reprimand", + "probation", + "injunctive action", + "suspension", + "revocation", + "denial", + "surrender of license", + "modification of previous action-extension", + "modification of previous action-reduction", + "other monitoring", + "other adjudicated action not listed" + ] + } + }, + "additionalProperties": false, + "description": "Encumbrance data to create" + } + } + }, + "SandboLicenG4CMW3C4eZNN": { + "required": [ + "deactivationNote" + ], + "type": "object", + "properties": { + "deactivationNote": { + "maxLength": 256, "type": "string", - "format": "date" + "description": "Note describing why the privilege is being deactivated" + } + }, + "additionalProperties": false + }, + "SandboLicenPfWQpg9qdCvm": { + "required": [ + "attributes", + "permissions" + ], + "type": "object", + "properties": { + "permissions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + } + }, + "jurisdictions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "write": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + }, + "additionalProperties": false + } + } + } + } + }, + "additionalProperties": false + } }, - "militaryAffiliations": { + "attributes": { + "required": [ + "email", + "familyName", + "givenName" + ], + "type": "object", + "properties": { + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "email": { + "maxLength": 100, + "minLength": 5, + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "SandboLicenxXSBED7FZUQN": { + "type": "object", + "properties": { + "pagination": { + "type": "object", + "properties": { + "prevLastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "object" + }, + "lastKey": { + "maxLength": 1024, + "minLength": 1, + "type": "object" + }, + "pageSize": { + "maximum": 100, + "minimum": 5, + "type": "integer" + } + } + }, + "users": { "type": "array", "items": { "required": [ - "affiliationType", - "compact", - "dateOfUpdate", - "dateOfUpload", - "fileNames", - "providerId", + "attributes", + "permissions", "status", - "type" + "userId" ], "type": "object", "properties": { - "dateOfUpload": { - "pattern": "^[12]{1}[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$", - "type": "string", - "format": "date" - }, - "compact": { - "type": "string", - "enum": [ - "aslp", - "octp", - "coun" - ] - }, - "downloadLinks": { - "type": "array", - "items": { - "required": [ - "fileName", - "url" - ], + "permissions": { + "type": "object", + "additionalProperties": { "type": "object", "properties": { - "fileName": { - "type": "string" + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + } }, - "url": { - "type": "string" + "jurisdictions": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "properties": { + "readPrivate": { + "type": "boolean" + }, + "admin": { + "type": "boolean" + }, + "write": { + "type": "boolean" + }, + "readSSN": { + "type": "boolean" + } + }, + "additionalProperties": false + } + } + } } - } + }, + "additionalProperties": false } }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "affiliationType": { - "type": "string", - "enum": [ - "militaryMember", - "militaryMemberSpouse" - ] - }, - "type": { - "type": "string", - "enum": [ - "militaryAffiliation" - ] - }, - "dateOfUpdate": { - "type": "string", - "format": "date-time" + "attributes": { + "required": [ + "email", + "familyName", + "givenName" + ], + "type": "object", + "properties": { + "givenName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "familyName": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "email": { + "maxLength": 100, + "minLength": 5, + "type": "string" + } + }, + "additionalProperties": false }, - "fileNames": { - "type": "array", - "items": { - "type": "string" - } + "userId": { + "type": "string" }, "status": { "type": "string", @@ -9524,44 +12817,172 @@ "inactive" ] } - } + }, + "additionalProperties": false } - }, - "providerId": { - "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]{1}[0-9a-f]{3}-[0-9a-f]{12}", - "type": "string" - }, - "licenseStatus": { + } + }, + "additionalProperties": false + }, + "SandboLicenoBgekYzIk0Uy": { + "required": [ + "affiliationType", + "fileNames" + ], + "type": "object", + "properties": { + "affiliationType": { "type": "string", + "description": "The type of military affiliation", "enum": [ - "active", - "inactive" + "militaryMember", + "militaryMemberSpouse" ] }, - "familyName": { - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "middleName": { + "fileNames": { + "type": "array", + "description": "List of military affiliation file names", + "items": { + "maxLength": 150, + "type": "string", + "description": "The name of the file being uploaded" + } + } + }, + "additionalProperties": false + }, + "SandboLicenJVUAEniGDz2F": { + "required": [ + "jurisdiction" + ], + "type": "object", + "properties": { + "jurisdiction": { + "type": "string", + "description": "The jurisdiction postal abbreviation to set as home jurisdiction", + "enum": [ + "al", + "ak", + "az", + "ar", + "ca", + "co", + "ct", + "de", + "dc", + "fl", + "ga", + "hi", + "id", + "il", + "in", + "ia", + "ks", + "ky", + "la", + "me", + "md", + "ma", + "mi", + "mn", + "ms", + "mo", + "mt", + "ne", + "nv", + "nh", + "nj", + "nm", + "ny", + "nc", + "nd", + "oh", + "ok", + "or", + "pa", + "pr", + "ri", + "sc", + "sd", + "tn", + "tx", + "ut", + "vt", + "va", + "vi", + "wa", + "wv", + "wi", + "wy", + "other" + ] + } + }, + "additionalProperties": false + }, + "SandboLicenLnkOp52kvwLg": { + "type": "array", + "items": { + "required": [ + "compact", + "jurisdictionName", + "postalAbbreviation" + ], + "type": "object", + "properties": { + "postalAbbreviation": { + "type": "string", + "description": "The postal abbreviation of the jurisdiction" + }, + "compact": { + "type": "string" + }, + "jurisdictionName": { + "type": "string", + "description": "The name of the jurisdiction" + } + } + } + }, + "SandboLicenmMTXPta5fldR": { + "required": [ + "apiLoginId", + "processor", + "transactionKey" + ], + "type": "object", + "properties": { + "apiLoginId": { "maxLength": 100, "minLength": 1, - "type": "string" - }, - "birthMonthDay": { - "pattern": "^[01]{1}[0-9]{1}-[0-3]{1}[0-9]{1}$", "type": "string", - "format": "date" + "description": "The api login id for the payment processor" }, - "compactConnectRegisteredEmailAddress": { + "transactionKey": { "maxLength": 100, - "minLength": 5, + "minLength": 1, "type": "string", - "format": "email" + "description": "The transaction key for the payment processor" }, - "dateOfUpdate": { + "processor": { "type": "string", - "format": "date-time" + "description": "The type of payment processor", + "enum": [ + "authorize.net" + ] + } + }, + "additionalProperties": false + }, + "SandboLicen113ZVRfz1NW8": { + "required": [ + "enabled" + ], + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether the feature flag is enabled" } } } @@ -9580,5 +13001,6 @@ "x-amazon-apigateway-authtype": "cognito_user_pools" } } - } + }, + "x-amazon-apigateway-security-policy": "TLS_1_0" } From 45cf83492b19bc5c6e5e9d1e6940e85870cc7ffc Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Thu, 8 Jan 2026 08:57:09 -0600 Subject: [PATCH 22/23] PR feedback - using the encumbrance type name instead of npdb category --- webroot/src/components/LicenseCard/LicenseCard.vue | 2 +- .../src/components/PrivilegeCard/PrivilegeCard.vue | 2 +- .../models/AdverseAction/AdverseAction.model.spec.ts | 6 ------ .../src/models/AdverseAction/AdverseAction.model.ts | 12 ------------ 4 files changed, 2 insertions(+), 20 deletions(-) diff --git a/webroot/src/components/LicenseCard/LicenseCard.vue b/webroot/src/components/LicenseCard/LicenseCard.vue index 2404b5104..1f415d33f 100644 --- a/webroot/src/components/LicenseCard/LicenseCard.vue +++ b/webroot/src/components/LicenseCard/LicenseCard.vue @@ -330,7 +330,7 @@ :key="selected.id" class="removed-encumbrance" > -
{{ selected.getFirstNpdbTypeName() }}
+
{{ selected.encumbranceTypeName() }}
{{ $t('licensing.confirmLicenseUnencumberSuccessEndDate') }}: {{ dateDisplayFormat(formData[`adverse-action-end-date-${selected.id}`].value) }} diff --git a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue index e8596d153..8853f26af 100644 --- a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue +++ b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue @@ -390,7 +390,7 @@ :key="selected.id" class="removed-encumbrance" > -
{{ selected.getFirstNpdbTypeName() }}
+
{{ selected.encumbranceTypeName() }}
{{ $t('licensing.confirmPrivilegeUnencumberSuccessEndDate') }}: {{ dateDisplayFormat(formData[`adverse-action-end-date-${selected.id}`].value) }} diff --git a/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts b/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts index 9822eebce..5afa16933 100644 --- a/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts +++ b/webroot/src/models/AdverseAction/AdverseAction.model.spec.ts @@ -58,8 +58,6 @@ describe('AdverseAction model', () => { expect(adverseAction.endDateDisplay()).to.equal(''); expect(adverseAction.hasEndDate()).to.equal(false); expect(adverseAction.encumbranceTypeName()).to.equal(''); - expect(adverseAction.getFirstNpdbTypeName()).to.equal(''); - expect(adverseAction.getNpdbTypeName()).to.equal(''); expect(adverseAction.isActive()).to.equal(false); }); it('should create an AdverseAction model with specific values', () => { @@ -97,8 +95,6 @@ describe('AdverseAction model', () => { expect(adverseAction.endDateDisplay()).to.equal('Invalid date'); expect(adverseAction.hasEndDate()).to.equal(true); expect(adverseAction.encumbranceTypeName()).to.equal(''); - expect(adverseAction.getFirstNpdbTypeName()).to.equal(''); - expect(adverseAction.getNpdbTypeName('Other')).to.equal('Other'); expect(adverseAction.isActive()).to.equal(false); }); it('should create an AdverseAction model with specific values (startDate but no endDate)', () => { @@ -182,8 +178,6 @@ describe('AdverseAction model', () => { ); expect(adverseAction.hasEndDate()).to.equal(true); expect(adverseAction.encumbranceTypeName()).to.equal('Fine'); - expect(adverseAction.getFirstNpdbTypeName()).to.equal('Non-compliance With Requirements'); - expect(adverseAction.getNpdbTypeName(data.clinicalPrivilegeActionCategories[0])).to.equal('Non-compliance With Requirements'); expect(adverseAction.isActive()).to.equal(true); }); it('should create an AdverseAction model with specific values through serializer (invalid data type from server)', () => { diff --git a/webroot/src/models/AdverseAction/AdverseAction.model.ts b/webroot/src/models/AdverseAction/AdverseAction.model.ts index c9d71850c..0480b7da9 100644 --- a/webroot/src/models/AdverseAction/AdverseAction.model.ts +++ b/webroot/src/models/AdverseAction/AdverseAction.model.ts @@ -83,18 +83,6 @@ export class AdverseAction implements InterfaceAdverseActionCreate { return typeName; } - public getFirstNpdbTypeName(): string { - return this.getNpdbTypeName(this.npdbTypes?.[0] || ''); - } - - public getNpdbTypeName(npdbType: string): string { - const npdbTypes = this.$tm('licensing.npdbTypes') || []; - const npdbTypeRecord = npdbTypes.find((translate) => translate.key === npdbType); - const typeName = npdbTypeRecord?.name || ''; - - return typeName; - } - public isActive(): boolean { // Determine whether the adverse action is currently in effect const { startDate, endDate } = this; From 8c34f765660735a61defa6a68ccf907f6f41c366 Mon Sep 17 00:00:00 2001 From: Landon Shumway Date: Tue, 13 Jan 2026 12:50:14 -0600 Subject: [PATCH 23/23] PR feedback - fix comment --- .../src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts b/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts index 1b6f999c1..9c6869d53 100644 --- a/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts +++ b/webroot/src/models/LicenseHistoryItem/LicenseHistoryItem.model.ts @@ -95,8 +95,7 @@ export class LicenseHistoryItem implements InterfaceLicenseHistoryItem { } else if (updateType === 'licenseDeactivation') { noteDisplay = this.$t('licensing.licenseDeactivationNote'); } else if (updateType === 'encumbrance') { - // For encumbrance events, use npdbCategories if available (new format) - // Otherwise fall back to serverNote for backward compatibility + // For encumbrance events, use npdbCategories if (this.npdbCategories && this.npdbCategories.length > 0) { const npdbTypes = this.$tm('licensing.npdbTypes') || []; const categoryNames = this.npdbCategories