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" } 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..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 @@ -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] @@ -1527,19 +1515,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 +3049,13 @@ 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, + # 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, + } # 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..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,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'] + # 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/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..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 @@ -26,27 +25,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 +81,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..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 @@ -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 @@ -34,35 +34,20 @@ 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) 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 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"]}' @@ -73,14 +58,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 compact = data['compact'] 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..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 @@ -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/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..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,12 +60,10 @@ 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) - # 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/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"]}' 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/function/test_data_client.py b/backend/compact-connect/lambdas/python/common/tests/function/test_data_client.py index 39267d400..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,158 +1954,3 @@ def test_close_license_investigation_with_encumbrance(self): investigation_record.pop('dateOfUpdate') 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']) 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..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 @@ -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 @@ -952,7 +950,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', }, }, @@ -982,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'], }, ], } @@ -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 7600f8011..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,14 +20,8 @@ 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 +256,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', - 'clinicalPrivilegeActionCategory': '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', - 'clinicalPrivilegeActionCategory': '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/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/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..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 @@ -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], } @@ -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 @@ -126,8 +125,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) @@ -137,8 +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 + 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() @@ -174,47 +170,6 @@ def test_privilege_encumbrance_handler_adds_privilege_update_record_in_provider_ ) 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 - ): - 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': { - 'clinicalPrivilegeActionCategory': '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) - def test_privilege_encumbrance_handler_sets_privilege_record_to_inactive_in_provider_data_table(self): from cc_common.data_model.schema.common import PrivilegeEncumberedStatusEnum from cc_common.data_model.schema.privilege import PrivilegeData @@ -345,76 +300,8 @@ 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() -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.""" @@ -462,8 +349,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 @@ -491,8 +377,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,69 +513,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 @patch('cc_common.config._Config.current_standard_datetime', datetime.fromisoformat(DEFAULT_DATE_OF_UPDATE_TIMESTAMP)) 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..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 @@ -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, }, @@ -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', }, @@ -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() @@ -257,7 +255,7 @@ def test_get_privilege_history_staff_returns_expected_history(self, mock_flag): '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/backend/compact-connect/pipeline/backend_stage.py b/backend/compact-connect/pipeline/backend_stage.py index cf897ea11..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 @@ -218,22 +217,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/api_stack/v1_api/api_model.py b/backend/compact-connect/stacks/api_stack/v1_api/api_model.py index a774757a9..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 @@ -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', @@ -1408,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, @@ -1418,12 +1413,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', @@ -2356,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), + ), }, ), ), 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.', - }, - ], - ) 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', 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..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 @@ -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": { @@ -43,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 2bf548c90..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 @@ -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": { @@ -51,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 2bf548c90..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 @@ -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": { @@ -51,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 c29d25311..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 @@ -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": { @@ -43,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/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/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/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/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'], }, } 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..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,9 +1,7 @@ #!/usr/bin/env python3 -import time 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 +9,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 +141,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..7ee25bb60 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 @@ -38,6 +39,7 @@ def __init__(self, message): # 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 @@ -228,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 @@ -463,6 +487,61 @@ 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. 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" } 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..1f415d33f 100644 --- a/webroot/src/components/LicenseCard/LicenseCard.vue +++ b/webroot/src/components/LicenseCard/LicenseCard.vue @@ -154,12 +154,9 @@
-
+
-
- -
-
{{ selected.npdbTypeName() }}
+
{{ selected.encumbranceTypeName() }}
{{ $t('licensing.confirmLicenseUnencumberSuccessEndDate') }}: {{ dateDisplayFormat(formData[`adverse-action-end-date-${selected.id}`].value) }} diff --git a/webroot/src/components/PrivilegeCard/PrivilegeCard.ts b/webroot/src/components/PrivilegeCard/PrivilegeCard.ts index 5aa21959d..b99ca7268 100644 --- a/webroot/src/components/PrivilegeCard/PrivilegeCard.ts +++ b/webroot/src/components/PrivilegeCard/PrivilegeCard.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 InputTextarea from '@components/Forms/InputTextarea/InputTextarea.vue'; import InputDate from '@components/Forms/InputDate/InputDate.vue'; @@ -83,10 +83,6 @@ class PrivilegeCard extends mixins(MixinForm) { // // Computed // - get featureGates(): typeof FeatureGates { - return FeatureGates; - } - get userStore() { return this.$store.state.user; } @@ -233,19 +229,10 @@ class PrivilegeCard 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 { @@ -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..8853f26af 100644 --- a/webroot/src/components/PrivilegeCard/PrivilegeCard.vue +++ b/webroot/src/components/PrivilegeCard/PrivilegeCard.vue @@ -214,12 +214,9 @@
-
+
-
- -
-
{{ selected.npdbTypeName() }}
+
{{ 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 f87d70ab4..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.npdbTypeName()).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.npdbTypeName()).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)', () => { @@ -152,7 +148,6 @@ describe('AdverseAction model', () => { 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 +163,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); @@ -184,8 +178,6 @@ 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.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 7a93b3b3f..0480b7da9 100644 --- a/webroot/src/models/AdverseAction/AdverseAction.model.ts +++ b/webroot/src/models/AdverseAction/AdverseAction.model.ts @@ -83,22 +83,6 @@ 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 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; @@ -133,7 +117,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/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..9c6869d53 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,19 @@ 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 (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 +126,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/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..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')); } @@ -249,14 +246,7 @@ export class DataApi { licenseState, licenseType, encumbranceType, - ...($features?.checkGate(FeatureGates.ENCUMBER_MULTI_CATEGORY) - ? { - npdbCategories, - } - : { - npdbCategory, - } - ), + npdbCategories, startDate, })); } @@ -337,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')); } @@ -354,14 +341,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',