{{ $t('licensing.activeFrom') }}
diff --git a/webroot/src/locales/en.json b/webroot/src/locales/en.json
index 870437880b..578f92ebed 100644
--- a/webroot/src/locales/en.json
+++ b/webroot/src/locales/en.json
@@ -867,12 +867,24 @@
"abbrev": "lmsw"
},
{
- "name": "Licensed Bachelor Social Worker",
- "key": "licensed bachelor social worker",
+ "name": "Licensed Bachelors Social Worker",
+ "key": "licensed bachelors social worker",
"compactKey": "socw",
"abbrev": "lbsw"
}
],
+ "licenseScopes": [
+ {
+ "name": "Single state",
+ "key": "single-state",
+ "compactKey": "socw"
+ },
+ {
+ "name": "Multi state",
+ "key": "multi-state",
+ "compactKey": "socw"
+ }
+ ],
"disciplineTypes": [
{
"name": "Fine",
@@ -968,13 +980,21 @@
"name": "Improper Supervision or Allowing Unlicensed Practice",
"key": "Improper Supervision or Allowing Unlicensed Practice"
},
+ {
+ "name": "Fraud",
+ "key": "fraud"
+ },
{
"name": "Consumer harm",
- "key": "Consumer Harm"
+ "key": "consumer harm"
},
{
"name": "Other",
"key": "Other"
+ },
+ {
+ "name": "Other",
+ "key": "other"
}
],
"privilegePurchaseTitle": "Privilege purchase",
diff --git a/webroot/src/locales/es.json b/webroot/src/locales/es.json
index 58797f18ff..c8ddf62d07 100644
--- a/webroot/src/locales/es.json
+++ b/webroot/src/locales/es.json
@@ -852,11 +852,23 @@
},
{
"name": "Trabajador social titulado con licencia",
- "key": "licensed bachelor social worker",
+ "key": "licensed bachelors social worker",
"compactKey": "socw",
"abbrev": "lbsw"
}
],
+ "licenseScopes": [
+ {
+ "name": "Estado único",
+ "key": "single-state",
+ "compactKey": "socw"
+ },
+ {
+ "name": "Estado múltiple",
+ "key": "multi-state",
+ "compactKey": "socw"
+ }
+ ],
"disciplineTypes": [
{
"name": "Multa",
@@ -952,13 +964,21 @@
"name": "Supervisión inadecuada o autorización de prácticas sin licencia",
"key": "Improper Supervision or Allowing Unlicensed Practice"
},
+ {
+ "name": "Fraude",
+ "key": "fraud"
+ },
{
"name": "Daños al consumidor",
- "key": "Consumer Harm"
+ "key": "consumer harm"
},
{
"name": "Otro",
"key": "Other"
+ },
+ {
+ "name": "Otro",
+ "key": "other"
}
],
"privilegePurchaseTitle": "Compra privada",
diff --git a/webroot/src/models/License/License.model.spec.ts b/webroot/src/models/License/License.model.spec.ts
index 1656a7fedf..8f73554ab9 100644
--- a/webroot/src/models/License/License.model.spec.ts
+++ b/webroot/src/models/License/License.model.spec.ts
@@ -10,6 +10,7 @@ import { serverDateFormat, displayDateFormat, serverDatetimeFormat } from '@/app
import {
License,
LicenseType,
+ LicenseScope,
LicenseStatus,
EligibilityStatus,
LicenseSerializer
@@ -61,6 +62,7 @@ describe('License model', () => {
expect(license.mailingAddress).to.be.an.instanceof(Address);
expect(license.email).to.equal(null);
expect(license.licenseType).to.equal(null);
+ expect(license.licenseScope).to.equal(null);
expect(license.history).to.matchPattern([]);
expect(license.status).to.equal(LicenseStatus.INACTIVE);
expect(license.statusDescription).to.equal(null);
@@ -76,7 +78,9 @@ describe('License model', () => {
expect(license.isExpired()).to.equal(false);
expect(license.isAdminDeactivated()).to.equal(false);
expect(license.isCompactEligible()).to.equal(false);
+ expect(license.licenseTypeDisplay()).to.equal('');
expect(license.licenseTypeAbbreviation()).to.equal('');
+ expect(license.licenseScopeDisplay()).to.equal('');
expect(license.displayName()).to.equal('Unknown');
expect(license.isEncumbered()).to.equal(false);
expect(license.isLatestLiftedEncumbranceWithinWaitPeriod()).to.equal(false);
@@ -99,6 +103,7 @@ describe('License model', () => {
email: 'test@example.com',
npi: 'test-npi',
licenseType: LicenseType.AUDIOLOGIST,
+ licenseScope: LicenseScope.MULTI_STATE,
history: [new LicenseHistoryItem()],
status: LicenseStatus.ACTIVE,
statusDescription: 'test-status-desc',
@@ -125,6 +130,7 @@ describe('License model', () => {
expect(license.licenseNumber).to.equal(data.licenseNumber);
expect(license.privilegeId).to.equal(data.privilegeId);
expect(license.licenseType).to.equal(data.licenseType);
+ expect(license.licenseScope).to.equal(data.licenseScope);
expect(license.history[0]).to.be.an.instanceof(LicenseHistoryItem);
expect(license.status).to.equal(data.status);
expect(license.statusDescription).to.equal(data.statusDescription);
@@ -140,7 +146,9 @@ describe('License model', () => {
expect(license.isExpired()).to.equal(false);
expect(license.isAdminDeactivated()).to.equal(false);
expect(license.isCompactEligible()).to.equal(true);
+ expect(license.licenseTypeDisplay()).to.equal('Audiologist');
expect(license.licenseTypeAbbreviation()).to.equal('AUD');
+ expect(license.licenseScopeDisplay()).to.equal('Multi state');
expect(license.displayName()).to.equal('Unknown - audiologist');
expect(license.displayName(', ', true)).to.equal('Unknown, AUD');
expect(license.isEncumbered()).to.equal(false);
@@ -180,6 +188,7 @@ describe('License model', () => {
homeAddressPostalCode: 'test-zip',
emailAddress: 'test@example.com',
licenseType: LicenseType.AUDIOLOGIST,
+ licenseScope: LicenseScope.SINGLE_STATE,
history: [],
licenseStatus: LicenseStatus.ACTIVE,
licenseStatusName: 'test-status-desc',
@@ -220,6 +229,7 @@ describe('License model', () => {
expect(license.expireDate).to.equal(data.dateOfExpiration);
expect(license.activeFromDate).to.equal(data.activeSince);
expect(license.licenseType).to.equal(data.licenseType);
+ expect(license.licenseScope).to.equal(data.licenseScope);
expect(license.status).to.equal(data.licenseStatus);
expect(license.statusDescription).to.equal(data.licenseStatusName);
expect(license.eligibility).to.equal(data.compactEligibility);
@@ -243,7 +253,9 @@ describe('License model', () => {
expect(license.isCompactEligible()).to.equal(true);
expect(license.displayName()).to.equal('Alabama - audiologist');
expect(license.displayName(', ', true)).to.equal('Alabama, AUD');
+ expect(license.licenseTypeDisplay()).to.equal('Audiologist');
expect(license.licenseTypeAbbreviation()).to.equal('AUD');
+ expect(license.licenseScopeDisplay()).to.equal('Single state');
expect(license.isEncumbered()).to.equal(true);
expect(license.isLatestLiftedEncumbranceWithinWaitPeriod()).to.equal(false);
expect(license.isUnderInvestigation()).to.equal(true);
@@ -257,6 +269,7 @@ describe('License model', () => {
jurisdiction: 'ne',
licenseJurisdiction: 'ky',
licenseType: 'occupational therapy assistant',
+ licenseScope: 'multi-state',
dateOfIssuance: '2022-03-19T21:51:26+00:00',
dateOfRenewal: '2025-03-26T16:19:09+00:00',
dateOfExpiration: '2025-02-12',
@@ -579,6 +592,7 @@ describe('License model', () => {
expect(license.expireDate).to.equal(data.dateOfExpiration);
expect(license.activeFromDate).to.equal(data.activeSince);
expect(license.licenseType).to.equal(data.licenseType);
+ expect(license.licenseScope).to.equal(data.licenseScope);
expect(license.privilegeId).to.equal(data.privilegeId);
expect(license.status).to.equal(data.status);
expect(license.statusDescription).to.equal(null);
@@ -607,7 +621,9 @@ describe('License model', () => {
expect(license.isCompactEligible()).to.equal(false);
expect(license.displayName()).to.equal('Nebraska - occupational therapy assistant');
expect(license.displayName(', ', true)).to.equal('Nebraska, OTA');
+ expect(license.licenseTypeDisplay()).to.equal('Occupational Therapy Assistant');
expect(license.licenseTypeAbbreviation()).to.equal('OTA');
+ expect(license.licenseScopeDisplay()).to.equal('Multi state');
expect(license.history.length).to.equal(0);
expect(license.isEncumbered()).to.equal(false);
expect(license.isLatestLiftedEncumbranceWithinWaitPeriod()).to.equal(true);
diff --git a/webroot/src/models/License/License.model.ts b/webroot/src/models/License/License.model.ts
index fa757fbacd..0a75281a95 100644
--- a/webroot/src/models/License/License.model.ts
+++ b/webroot/src/models/License/License.model.ts
@@ -20,7 +20,7 @@ import { StatsigClient } from '@statsig/js-client';
// ========================================================
// = Interface =
// ========================================================
-export enum LicenseType { // Temp server definition until server returns via endpoint
+export enum LicenseType {
AUDIOLOGIST = 'audiologist',
SPEECH_LANGUAGE_PATHOLOGIST = 'speech-language pathologist',
SPEECH_AND_LANGUAGE_PATHOLOGIST = 'speech and language pathologist',
@@ -34,7 +34,12 @@ export enum LicenseType { // Temp server definition until server returns via end
ESTHETICIAN = 'esthetician',
}
-export enum LicenseStatus { // Temp server definition until server returns via endpoint
+export enum LicenseScope {
+ SINGLE_STATE = 'single-state',
+ MULTI_STATE = 'multi-state',
+}
+
+export enum LicenseStatus {
ACTIVE = 'active',
INACTIVE = 'inactive',
}
@@ -62,6 +67,7 @@ export interface InterfaceLicense {
licenseNumber?: string | null;
privilegeId?: string | null;
licenseType?: LicenseType | null,
+ licenseScope?: LicenseScope | null,
history?: Array
,
status?: LicenseStatus,
statusDescription?: string | null,
@@ -92,6 +98,7 @@ export class License implements InterfaceLicense {
public privilegeId? = null;
public expireDate? = null;
public licenseType? = null;
+ public licenseScope? = null;
public history? = [];
public status? = LicenseStatus.INACTIVE;
public statusDescription? = null;
@@ -148,6 +155,14 @@ export class License implements InterfaceLicense {
return this.eligibility === EligibilityStatus.ELIGIBLE;
}
+ public licenseTypeDisplay(): string {
+ const licenseTypes = this.$tm('licensing.licenseTypes') || [];
+ const licenseType = licenseTypes.find((translate) => translate.key === this.licenseType);
+ const typeDisplay = licenseType?.name || '';
+
+ return typeDisplay;
+ }
+
public licenseTypeAbbreviation(): string {
const licenseTypes = this.$tm('licensing.licenseTypes') || [];
const licenseType = licenseTypes.find((translate) => translate.key === this.licenseType);
@@ -157,6 +172,14 @@ export class License implements InterfaceLicense {
return upperCaseAbbrev;
}
+ public licenseScopeDisplay(): string {
+ const licenseScopes = this.$tm('licensing.licenseScopes') || [];
+ const licenseScope = licenseScopes.find((translate) => translate.key === this.licenseScope);
+ const scopeDisplay = licenseScope?.name || '';
+
+ return scopeDisplay;
+ }
+
public displayName(delimiter = ' - ', displayAbbrev = false): string {
const stateName = this.issueState?.name() || '';
const licenseTypeToShow = (displayAbbrev) ? this.licenseTypeAbbreviation() : this.licenseType;
@@ -223,6 +246,7 @@ export class LicenseSerializer {
renewalDate: json.dateOfRenewal,
expireDate: json.dateOfExpiration,
licenseType: json.licenseType,
+ licenseScope: json.licenseScope,
status: json.licenseStatus || json.status,
statusDescription: json.licenseStatusName,
eligibility: (json.type === 'license' || json.type === 'license-home')
diff --git a/webroot/src/network/data.api.ts b/webroot/src/network/data.api.ts
index 1adcd6137f..fedbddc4bf 100644
--- a/webroot/src/network/data.api.ts
+++ b/webroot/src/network/data.api.ts
@@ -181,6 +181,7 @@ export class DataApi {
* @param {string} npdbCategory The NPDB category name.
* @param {Array} npdbCategories The NPDB category list.
* @param {string} startDate The encumber start date.
+ * @param {string} [licenseScope] The license scope.
* @return {Promise