@blackcode_sa/metaestetics-api 1.14.78 → 1.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.d.mts +5 -0
- package/dist/admin/index.d.ts +5 -0
- package/dist/admin/index.js +47 -5
- package/dist/admin/index.mjs +47 -5
- package/dist/index.d.mts +302 -1
- package/dist/index.d.ts +302 -1
- package/dist/index.js +2655 -1754
- package/dist/index.mjs +1880 -983
- package/package.json +1 -1
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +59 -6
- package/src/services/__tests__/auth/auth.mock.test.ts +2 -2
- package/src/services/__tests__/auth/auth.setup.ts +6 -1
- package/src/services/__tests__/auth.service.test.ts +8 -44
- package/src/services/__tests__/base.service.test.ts +4 -45
- package/src/services/__tests__/user.service.test.ts +6 -4
- package/src/services/appointment/utils/appointment.utils.ts +0 -3
- package/src/services/appointment/utils/extended-procedure.utils.ts +1 -0
- package/src/services/auth/auth.v2.service.ts +7 -7
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +11 -33
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +21 -151
- package/src/services/clinic/__tests__/clinic.service.test.ts +17 -69
- package/src/services/clinic/utils/clinic-group.utils.ts +2 -2
- package/src/services/clinic/utils/clinic.utils.ts +28 -22
- package/src/services/clinic/utils/index.ts +0 -1
- package/src/services/notifications/__tests__/notification.service.test.ts +5 -5
- package/src/services/patient/__tests__/patient.service.test.ts +17 -25
- package/src/services/patient/patient.service.ts +136 -0
- package/src/services/patient/utils/body-assessment.utils.ts +159 -0
- package/src/services/patient/utils/docs.utils.ts +1 -1
- package/src/services/patient/utils/hair-scalp-assessment.utils.ts +158 -0
- package/src/services/patient/utils/pre-surgical-assessment.utils.ts +161 -0
- package/src/services/patient/utils/skin-quality-assessment.utils.ts +160 -0
- package/src/services/user/user.v2.service.ts +4 -3
- package/src/types/patient/body-assessment.types.ts +93 -0
- package/src/types/patient/hair-scalp-assessment.types.ts +98 -0
- package/src/types/patient/index.ts +4 -0
- package/src/types/patient/pre-surgical-assessment.types.ts +95 -0
- package/src/types/patient/skin-quality-assessment.types.ts +105 -0
- package/src/validations/patient/body-assessment.schema.ts +82 -0
- package/src/validations/patient/hair-scalp-assessment.schema.ts +70 -0
- package/src/validations/patient/pre-surgical-assessment.schema.ts +78 -0
- package/src/validations/patient/skin-quality-assessment.schema.ts +70 -0
package/dist/admin/index.d.mts
CHANGED
|
@@ -3606,6 +3606,11 @@ declare class AppointmentAggregationService {
|
|
|
3606
3606
|
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
3607
3607
|
*/
|
|
3608
3608
|
private createPreAppointmentRequirementInstances;
|
|
3609
|
+
/**
|
|
3610
|
+
* Resolves an array of requirement items that may be string IDs or full Requirement objects.
|
|
3611
|
+
* String IDs are batch-fetched from the backoffice_requirements collection.
|
|
3612
|
+
*/
|
|
3613
|
+
private resolveRequirements;
|
|
3609
3614
|
/**
|
|
3610
3615
|
* Fetches post-requirements from a procedure document
|
|
3611
3616
|
* @param procedureId - The procedure ID to fetch requirements from
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -3606,6 +3606,11 @@ declare class AppointmentAggregationService {
|
|
|
3606
3606
|
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
3607
3607
|
*/
|
|
3608
3608
|
private createPreAppointmentRequirementInstances;
|
|
3609
|
+
/**
|
|
3610
|
+
* Resolves an array of requirement items that may be string IDs or full Requirement objects.
|
|
3611
|
+
* String IDs are batch-fetched from the backoffice_requirements collection.
|
|
3612
|
+
*/
|
|
3613
|
+
private resolveRequirements;
|
|
3609
3614
|
/**
|
|
3610
3615
|
* Fetches post-requirements from a procedure document
|
|
3611
3616
|
* @param procedureId - The procedure ID to fetch requirements from
|
package/dist/admin/index.js
CHANGED
|
@@ -603,6 +603,9 @@ var PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME = "patientRequirements";
|
|
|
603
603
|
// src/admin/aggregation/appointment/appointment.aggregation.service.ts
|
|
604
604
|
var admin6 = __toESM(require("firebase-admin"));
|
|
605
605
|
|
|
606
|
+
// src/backoffice/types/requirement.types.ts
|
|
607
|
+
var REQUIREMENTS_COLLECTION = "backoffice_requirements";
|
|
608
|
+
|
|
606
609
|
// src/types/procedure/index.ts
|
|
607
610
|
var PROCEDURES_COLLECTION = "procedures";
|
|
608
611
|
|
|
@@ -3605,9 +3608,12 @@ var AppointmentAggregationService = class {
|
|
|
3605
3608
|
const batch = this.db.batch();
|
|
3606
3609
|
let instancesCreatedCount = 0;
|
|
3607
3610
|
let createdInstances = [];
|
|
3611
|
+
const resolvedPreRequirements = await this.resolveRequirements(
|
|
3612
|
+
appointment.preProcedureRequirements
|
|
3613
|
+
);
|
|
3608
3614
|
Logger.info(
|
|
3609
|
-
`[AggService] Found ${
|
|
3610
|
-
|
|
3615
|
+
`[AggService] Found ${resolvedPreRequirements.length} pre-requirements to process: ${JSON.stringify(
|
|
3616
|
+
resolvedPreRequirements.map((r) => {
|
|
3611
3617
|
var _a2, _b;
|
|
3612
3618
|
return {
|
|
3613
3619
|
id: r.id,
|
|
@@ -3620,7 +3626,7 @@ var AppointmentAggregationService = class {
|
|
|
3620
3626
|
})
|
|
3621
3627
|
)}`
|
|
3622
3628
|
);
|
|
3623
|
-
for (const template of
|
|
3629
|
+
for (const template of resolvedPreRequirements) {
|
|
3624
3630
|
if (!template) {
|
|
3625
3631
|
Logger.warn(
|
|
3626
3632
|
`[AggService] Found null/undefined template in preProcedureRequirements array`
|
|
@@ -3818,6 +3824,41 @@ var AppointmentAggregationService = class {
|
|
|
3818
3824
|
throw error;
|
|
3819
3825
|
}
|
|
3820
3826
|
}
|
|
3827
|
+
/**
|
|
3828
|
+
* Resolves an array of requirement items that may be string IDs or full Requirement objects.
|
|
3829
|
+
* String IDs are batch-fetched from the backoffice_requirements collection.
|
|
3830
|
+
*/
|
|
3831
|
+
async resolveRequirements(items) {
|
|
3832
|
+
if (items.length === 0) return [];
|
|
3833
|
+
const resolved = [];
|
|
3834
|
+
const idsToFetch = [];
|
|
3835
|
+
for (const item of items) {
|
|
3836
|
+
if (typeof item === "string") {
|
|
3837
|
+
idsToFetch.push(item);
|
|
3838
|
+
} else if (item && typeof item === "object" && item.id) {
|
|
3839
|
+
resolved.push(item);
|
|
3840
|
+
}
|
|
3841
|
+
}
|
|
3842
|
+
if (idsToFetch.length > 0) {
|
|
3843
|
+
Logger.info(
|
|
3844
|
+
`[AggService] Resolving ${idsToFetch.length} requirement ID(s) from ${REQUIREMENTS_COLLECTION}`
|
|
3845
|
+
);
|
|
3846
|
+
const refs = idsToFetch.map(
|
|
3847
|
+
(id) => this.db.collection(REQUIREMENTS_COLLECTION).doc(id)
|
|
3848
|
+
);
|
|
3849
|
+
const snapshots = await this.db.getAll(...refs);
|
|
3850
|
+
for (const snap of snapshots) {
|
|
3851
|
+
if (snap.exists) {
|
|
3852
|
+
resolved.push({ id: snap.id, ...snap.data() });
|
|
3853
|
+
} else {
|
|
3854
|
+
Logger.warn(
|
|
3855
|
+
`[AggService] Requirement template '${snap.id}' not found in ${REQUIREMENTS_COLLECTION}`
|
|
3856
|
+
);
|
|
3857
|
+
}
|
|
3858
|
+
}
|
|
3859
|
+
}
|
|
3860
|
+
return resolved;
|
|
3861
|
+
}
|
|
3821
3862
|
/**
|
|
3822
3863
|
* Fetches post-requirements from a procedure document
|
|
3823
3864
|
* @param procedureId - The procedure ID to fetch requirements from
|
|
@@ -3831,10 +3872,11 @@ var AppointmentAggregationService = class {
|
|
|
3831
3872
|
return [];
|
|
3832
3873
|
}
|
|
3833
3874
|
const procedure = procedureDoc.data();
|
|
3834
|
-
const
|
|
3835
|
-
if (
|
|
3875
|
+
const rawPostRequirements = procedure.postRequirements || [];
|
|
3876
|
+
if (rawPostRequirements.length === 0) {
|
|
3836
3877
|
return [];
|
|
3837
3878
|
}
|
|
3879
|
+
const postRequirements = await this.resolveRequirements(rawPostRequirements);
|
|
3838
3880
|
return postRequirements.map((req) => ({
|
|
3839
3881
|
requirement: req,
|
|
3840
3882
|
sourceProcedures: [
|
package/dist/admin/index.mjs
CHANGED
|
@@ -526,6 +526,9 @@ var PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME = "patientRequirements";
|
|
|
526
526
|
// src/admin/aggregation/appointment/appointment.aggregation.service.ts
|
|
527
527
|
import * as admin6 from "firebase-admin";
|
|
528
528
|
|
|
529
|
+
// src/backoffice/types/requirement.types.ts
|
|
530
|
+
var REQUIREMENTS_COLLECTION = "backoffice_requirements";
|
|
531
|
+
|
|
529
532
|
// src/types/procedure/index.ts
|
|
530
533
|
var PROCEDURES_COLLECTION = "procedures";
|
|
531
534
|
|
|
@@ -3528,9 +3531,12 @@ var AppointmentAggregationService = class {
|
|
|
3528
3531
|
const batch = this.db.batch();
|
|
3529
3532
|
let instancesCreatedCount = 0;
|
|
3530
3533
|
let createdInstances = [];
|
|
3534
|
+
const resolvedPreRequirements = await this.resolveRequirements(
|
|
3535
|
+
appointment.preProcedureRequirements
|
|
3536
|
+
);
|
|
3531
3537
|
Logger.info(
|
|
3532
|
-
`[AggService] Found ${
|
|
3533
|
-
|
|
3538
|
+
`[AggService] Found ${resolvedPreRequirements.length} pre-requirements to process: ${JSON.stringify(
|
|
3539
|
+
resolvedPreRequirements.map((r) => {
|
|
3534
3540
|
var _a2, _b;
|
|
3535
3541
|
return {
|
|
3536
3542
|
id: r.id,
|
|
@@ -3543,7 +3549,7 @@ var AppointmentAggregationService = class {
|
|
|
3543
3549
|
})
|
|
3544
3550
|
)}`
|
|
3545
3551
|
);
|
|
3546
|
-
for (const template of
|
|
3552
|
+
for (const template of resolvedPreRequirements) {
|
|
3547
3553
|
if (!template) {
|
|
3548
3554
|
Logger.warn(
|
|
3549
3555
|
`[AggService] Found null/undefined template in preProcedureRequirements array`
|
|
@@ -3741,6 +3747,41 @@ var AppointmentAggregationService = class {
|
|
|
3741
3747
|
throw error;
|
|
3742
3748
|
}
|
|
3743
3749
|
}
|
|
3750
|
+
/**
|
|
3751
|
+
* Resolves an array of requirement items that may be string IDs or full Requirement objects.
|
|
3752
|
+
* String IDs are batch-fetched from the backoffice_requirements collection.
|
|
3753
|
+
*/
|
|
3754
|
+
async resolveRequirements(items) {
|
|
3755
|
+
if (items.length === 0) return [];
|
|
3756
|
+
const resolved = [];
|
|
3757
|
+
const idsToFetch = [];
|
|
3758
|
+
for (const item of items) {
|
|
3759
|
+
if (typeof item === "string") {
|
|
3760
|
+
idsToFetch.push(item);
|
|
3761
|
+
} else if (item && typeof item === "object" && item.id) {
|
|
3762
|
+
resolved.push(item);
|
|
3763
|
+
}
|
|
3764
|
+
}
|
|
3765
|
+
if (idsToFetch.length > 0) {
|
|
3766
|
+
Logger.info(
|
|
3767
|
+
`[AggService] Resolving ${idsToFetch.length} requirement ID(s) from ${REQUIREMENTS_COLLECTION}`
|
|
3768
|
+
);
|
|
3769
|
+
const refs = idsToFetch.map(
|
|
3770
|
+
(id) => this.db.collection(REQUIREMENTS_COLLECTION).doc(id)
|
|
3771
|
+
);
|
|
3772
|
+
const snapshots = await this.db.getAll(...refs);
|
|
3773
|
+
for (const snap of snapshots) {
|
|
3774
|
+
if (snap.exists) {
|
|
3775
|
+
resolved.push({ id: snap.id, ...snap.data() });
|
|
3776
|
+
} else {
|
|
3777
|
+
Logger.warn(
|
|
3778
|
+
`[AggService] Requirement template '${snap.id}' not found in ${REQUIREMENTS_COLLECTION}`
|
|
3779
|
+
);
|
|
3780
|
+
}
|
|
3781
|
+
}
|
|
3782
|
+
}
|
|
3783
|
+
return resolved;
|
|
3784
|
+
}
|
|
3744
3785
|
/**
|
|
3745
3786
|
* Fetches post-requirements from a procedure document
|
|
3746
3787
|
* @param procedureId - The procedure ID to fetch requirements from
|
|
@@ -3754,10 +3795,11 @@ var AppointmentAggregationService = class {
|
|
|
3754
3795
|
return [];
|
|
3755
3796
|
}
|
|
3756
3797
|
const procedure = procedureDoc.data();
|
|
3757
|
-
const
|
|
3758
|
-
if (
|
|
3798
|
+
const rawPostRequirements = procedure.postRequirements || [];
|
|
3799
|
+
if (rawPostRequirements.length === 0) {
|
|
3759
3800
|
return [];
|
|
3760
3801
|
}
|
|
3802
|
+
const postRequirements = await this.resolveRequirements(rawPostRequirements);
|
|
3761
3803
|
return postRequirements.map((req) => ({
|
|
3762
3804
|
requirement: req,
|
|
3763
3805
|
sourceProcedures: [
|
package/dist/index.d.mts
CHANGED
|
@@ -3663,6 +3663,295 @@ interface UpdateAestheticAnalysisData {
|
|
|
3663
3663
|
assessmentScales?: AssessmentScales;
|
|
3664
3664
|
}
|
|
3665
3665
|
|
|
3666
|
+
declare const SKIN_QUALITY_ASSESSMENT_COLLECTION = "skin-quality-assessment";
|
|
3667
|
+
type SkinQualityAssessmentStatus = 'incomplete' | 'ready_for_planning' | 'treatment_planned';
|
|
3668
|
+
type SkinHydrationLevel = 'very_dry' | 'dry' | 'normal' | 'oily' | 'very_oily';
|
|
3669
|
+
type SkinSensitivityLevel = 'none' | 'mild' | 'moderate' | 'severe';
|
|
3670
|
+
type SkinElasticityLevel = 'excellent' | 'good' | 'fair' | 'poor';
|
|
3671
|
+
type PoreSizeLevel = 'fine' | 'small' | 'medium' | 'large' | 'very_large';
|
|
3672
|
+
type SkinTextureLevel = 'smooth' | 'slightly_rough' | 'rough' | 'very_rough';
|
|
3673
|
+
interface SkinCharacteristics {
|
|
3674
|
+
hydration: SkinHydrationLevel;
|
|
3675
|
+
oiliness: SkinHydrationLevel;
|
|
3676
|
+
sensitivity: SkinSensitivityLevel;
|
|
3677
|
+
elasticity: SkinElasticityLevel;
|
|
3678
|
+
poreSize: PoreSizeLevel;
|
|
3679
|
+
texture: SkinTextureLevel;
|
|
3680
|
+
}
|
|
3681
|
+
type SkinConditionType = 'acne' | 'rosacea' | 'melasma' | 'hyperpigmentation' | 'hypopigmentation' | 'eczema' | 'psoriasis' | 'sun_damage' | 'scarring' | 'keratosis';
|
|
3682
|
+
interface SkinConditionEntry {
|
|
3683
|
+
type: SkinConditionType;
|
|
3684
|
+
severity: string;
|
|
3685
|
+
location?: string;
|
|
3686
|
+
notes?: string;
|
|
3687
|
+
}
|
|
3688
|
+
type SkinZone = 'forehead' | 'periorbital' | 'cheeks' | 'nose' | 'perioral' | 'chin' | 'neck' | 'decolletage';
|
|
3689
|
+
interface SkinZoneAssessment {
|
|
3690
|
+
zone: SkinZone;
|
|
3691
|
+
pigmentation: string;
|
|
3692
|
+
texture: string;
|
|
3693
|
+
vascularity: string;
|
|
3694
|
+
photoaging: string;
|
|
3695
|
+
notes?: string;
|
|
3696
|
+
}
|
|
3697
|
+
type FitzpatrickType = 'I' | 'II' | 'III' | 'IV' | 'V' | 'VI';
|
|
3698
|
+
type GlogauClassification = 'I' | 'II' | 'III' | 'IV';
|
|
3699
|
+
type ElastosisGrade = 'none' | 'mild' | 'moderate' | 'severe';
|
|
3700
|
+
interface SkinQualityScales {
|
|
3701
|
+
fitzpatrick?: FitzpatrickType;
|
|
3702
|
+
glogau?: GlogauClassification;
|
|
3703
|
+
elastosis?: ElastosisGrade;
|
|
3704
|
+
}
|
|
3705
|
+
interface SkinQualityAssessment {
|
|
3706
|
+
id: string;
|
|
3707
|
+
patientId: string;
|
|
3708
|
+
appointmentId?: string;
|
|
3709
|
+
characteristics?: SkinCharacteristics;
|
|
3710
|
+
conditions: SkinConditionEntry[];
|
|
3711
|
+
zoneAssessments: SkinZoneAssessment[];
|
|
3712
|
+
scales: SkinQualityScales;
|
|
3713
|
+
completionPercentage: number;
|
|
3714
|
+
status: SkinQualityAssessmentStatus;
|
|
3715
|
+
lastUpdatedBy: string;
|
|
3716
|
+
lastUpdatedByRole: 'PATIENT' | 'PRACTITIONER';
|
|
3717
|
+
createdAt?: Timestamp | any;
|
|
3718
|
+
updatedAt?: Timestamp | any;
|
|
3719
|
+
}
|
|
3720
|
+
interface CreateSkinQualityAssessmentData {
|
|
3721
|
+
patientId: string;
|
|
3722
|
+
appointmentId?: string;
|
|
3723
|
+
characteristics?: SkinCharacteristics;
|
|
3724
|
+
conditions?: SkinConditionEntry[];
|
|
3725
|
+
zoneAssessments?: SkinZoneAssessment[];
|
|
3726
|
+
scales?: SkinQualityScales;
|
|
3727
|
+
}
|
|
3728
|
+
interface UpdateSkinQualityAssessmentData {
|
|
3729
|
+
appointmentId?: string;
|
|
3730
|
+
characteristics?: SkinCharacteristics;
|
|
3731
|
+
conditions?: SkinConditionEntry[];
|
|
3732
|
+
zoneAssessments?: SkinZoneAssessment[];
|
|
3733
|
+
scales?: SkinQualityScales;
|
|
3734
|
+
}
|
|
3735
|
+
|
|
3736
|
+
declare const BODY_ASSESSMENT_COLLECTION = "body-assessment";
|
|
3737
|
+
type BodyAssessmentStatus = 'incomplete' | 'ready_for_planning' | 'treatment_planned';
|
|
3738
|
+
type BodyZone = 'abdomen' | 'flanks' | 'back' | 'upper_arms' | 'thighs_inner' | 'thighs_outer' | 'buttocks' | 'chest' | 'knees' | 'submental';
|
|
3739
|
+
type SeverityLevel = 'none' | 'mild' | 'moderate' | 'severe';
|
|
3740
|
+
type MuscleDefinitionLevel = 'well_defined' | 'moderate' | 'poor' | 'none';
|
|
3741
|
+
interface BodyZoneAssessment {
|
|
3742
|
+
zone: BodyZone;
|
|
3743
|
+
fatDeposit: SeverityLevel;
|
|
3744
|
+
skinLaxity: SeverityLevel;
|
|
3745
|
+
stretchMarks: SeverityLevel;
|
|
3746
|
+
cellulite: SeverityLevel;
|
|
3747
|
+
muscleDefinition: MuscleDefinitionLevel;
|
|
3748
|
+
notes?: string;
|
|
3749
|
+
}
|
|
3750
|
+
interface BodyCompositionData {
|
|
3751
|
+
bmi?: number;
|
|
3752
|
+
bodyFatPercentage?: number;
|
|
3753
|
+
waistHipRatio?: number;
|
|
3754
|
+
weight?: number;
|
|
3755
|
+
height?: number;
|
|
3756
|
+
}
|
|
3757
|
+
interface BodyMeasurementsData {
|
|
3758
|
+
waist?: number;
|
|
3759
|
+
hips?: number;
|
|
3760
|
+
chest?: number;
|
|
3761
|
+
upperArm?: number;
|
|
3762
|
+
thigh?: number;
|
|
3763
|
+
units: 'cm' | 'inches';
|
|
3764
|
+
}
|
|
3765
|
+
interface BodySymmetryData {
|
|
3766
|
+
overallSymmetry: 'symmetric' | 'mild_asymmetry' | 'moderate_asymmetry' | 'significant_asymmetry';
|
|
3767
|
+
notes?: string;
|
|
3768
|
+
affectedAreas?: string[];
|
|
3769
|
+
}
|
|
3770
|
+
interface BodyAssessment {
|
|
3771
|
+
id: string;
|
|
3772
|
+
patientId: string;
|
|
3773
|
+
appointmentId?: string;
|
|
3774
|
+
selectedZones: BodyZone[];
|
|
3775
|
+
zoneAssessments: BodyZoneAssessment[];
|
|
3776
|
+
composition?: BodyCompositionData;
|
|
3777
|
+
measurements?: BodyMeasurementsData;
|
|
3778
|
+
symmetry?: BodySymmetryData;
|
|
3779
|
+
completionPercentage: number;
|
|
3780
|
+
status: BodyAssessmentStatus;
|
|
3781
|
+
lastUpdatedBy: string;
|
|
3782
|
+
lastUpdatedByRole: 'PATIENT' | 'PRACTITIONER';
|
|
3783
|
+
createdAt?: Timestamp | any;
|
|
3784
|
+
updatedAt?: Timestamp | any;
|
|
3785
|
+
}
|
|
3786
|
+
interface CreateBodyAssessmentData {
|
|
3787
|
+
patientId: string;
|
|
3788
|
+
appointmentId?: string;
|
|
3789
|
+
selectedZones?: BodyZone[];
|
|
3790
|
+
zoneAssessments?: BodyZoneAssessment[];
|
|
3791
|
+
composition?: BodyCompositionData;
|
|
3792
|
+
measurements?: BodyMeasurementsData;
|
|
3793
|
+
symmetry?: BodySymmetryData;
|
|
3794
|
+
}
|
|
3795
|
+
interface UpdateBodyAssessmentData {
|
|
3796
|
+
appointmentId?: string;
|
|
3797
|
+
selectedZones?: BodyZone[];
|
|
3798
|
+
zoneAssessments?: BodyZoneAssessment[];
|
|
3799
|
+
composition?: BodyCompositionData;
|
|
3800
|
+
measurements?: BodyMeasurementsData;
|
|
3801
|
+
symmetry?: BodySymmetryData;
|
|
3802
|
+
}
|
|
3803
|
+
|
|
3804
|
+
declare const HAIR_SCALP_ASSESSMENT_COLLECTION = "hair-scalp-assessment";
|
|
3805
|
+
type HairScalpAssessmentStatus = 'incomplete' | 'ready_for_planning' | 'treatment_planned';
|
|
3806
|
+
type NorwoodStage = 'I' | 'II' | 'IIa' | 'III' | 'IIIa' | 'III_vertex' | 'IV' | 'IVa' | 'V' | 'Va' | 'VI' | 'VII';
|
|
3807
|
+
type LudwigStage = 'I' | 'II' | 'III';
|
|
3808
|
+
type HairLossType = 'androgenetic' | 'diffuse' | 'areata' | 'traction' | 'scarring' | 'telogen_effluvium';
|
|
3809
|
+
interface HairLossPattern {
|
|
3810
|
+
type: HairLossType;
|
|
3811
|
+
norwoodStage?: NorwoodStage;
|
|
3812
|
+
ludwigStage?: LudwigStage;
|
|
3813
|
+
onsetDuration?: string;
|
|
3814
|
+
familyHistory?: boolean;
|
|
3815
|
+
notes?: string;
|
|
3816
|
+
}
|
|
3817
|
+
type HairType = 'straight' | 'wavy' | 'curly' | 'coily';
|
|
3818
|
+
type HairDensity = 'high' | 'medium' | 'low' | 'very_low';
|
|
3819
|
+
type HairColor = 'black' | 'dark_brown' | 'brown' | 'light_brown' | 'blonde' | 'red' | 'grey' | 'white';
|
|
3820
|
+
type HairTextureGrade = 'fine' | 'medium' | 'coarse';
|
|
3821
|
+
interface HairCharacteristics {
|
|
3822
|
+
type: HairType;
|
|
3823
|
+
density: HairDensity;
|
|
3824
|
+
color: HairColor;
|
|
3825
|
+
texture: HairTextureGrade;
|
|
3826
|
+
diameter?: 'thin' | 'medium' | 'thick';
|
|
3827
|
+
}
|
|
3828
|
+
type ScalpScalinessLevel = 'none' | 'mild' | 'moderate' | 'severe';
|
|
3829
|
+
type ScalpRednessLevel = 'none' | 'mild' | 'moderate' | 'severe';
|
|
3830
|
+
type ScalpSebumLevel = 'dry' | 'normal' | 'oily' | 'very_oily';
|
|
3831
|
+
interface ScalpCondition {
|
|
3832
|
+
scaliness: ScalpScalinessLevel;
|
|
3833
|
+
redness: ScalpRednessLevel;
|
|
3834
|
+
sebum: ScalpSebumLevel;
|
|
3835
|
+
folliculitis: boolean;
|
|
3836
|
+
scarring: boolean;
|
|
3837
|
+
notes?: string;
|
|
3838
|
+
}
|
|
3839
|
+
type HairLossZone = 'frontal' | 'temporal_left' | 'temporal_right' | 'mid_scalp' | 'vertex' | 'occipital' | 'parietal_left' | 'parietal_right';
|
|
3840
|
+
interface HairLossZoneAssessment {
|
|
3841
|
+
zone: HairLossZone;
|
|
3842
|
+
miniaturization: 'none' | 'mild' | 'moderate' | 'severe';
|
|
3843
|
+
density: HairDensity;
|
|
3844
|
+
notes?: string;
|
|
3845
|
+
}
|
|
3846
|
+
interface HairScalpAssessment {
|
|
3847
|
+
id: string;
|
|
3848
|
+
patientId: string;
|
|
3849
|
+
appointmentId?: string;
|
|
3850
|
+
hairLossPattern?: HairLossPattern;
|
|
3851
|
+
hairCharacteristics?: HairCharacteristics;
|
|
3852
|
+
scalpCondition?: ScalpCondition;
|
|
3853
|
+
zoneAssessments: HairLossZoneAssessment[];
|
|
3854
|
+
completionPercentage: number;
|
|
3855
|
+
status: HairScalpAssessmentStatus;
|
|
3856
|
+
lastUpdatedBy: string;
|
|
3857
|
+
lastUpdatedByRole: 'PATIENT' | 'PRACTITIONER';
|
|
3858
|
+
createdAt?: Timestamp | any;
|
|
3859
|
+
updatedAt?: Timestamp | any;
|
|
3860
|
+
}
|
|
3861
|
+
interface CreateHairScalpAssessmentData {
|
|
3862
|
+
patientId: string;
|
|
3863
|
+
appointmentId?: string;
|
|
3864
|
+
hairLossPattern?: HairLossPattern;
|
|
3865
|
+
hairCharacteristics?: HairCharacteristics;
|
|
3866
|
+
scalpCondition?: ScalpCondition;
|
|
3867
|
+
zoneAssessments?: HairLossZoneAssessment[];
|
|
3868
|
+
}
|
|
3869
|
+
interface UpdateHairScalpAssessmentData {
|
|
3870
|
+
appointmentId?: string;
|
|
3871
|
+
hairLossPattern?: HairLossPattern;
|
|
3872
|
+
hairCharacteristics?: HairCharacteristics;
|
|
3873
|
+
scalpCondition?: ScalpCondition;
|
|
3874
|
+
zoneAssessments?: HairLossZoneAssessment[];
|
|
3875
|
+
}
|
|
3876
|
+
|
|
3877
|
+
declare const PRE_SURGICAL_ASSESSMENT_COLLECTION = "pre-surgical-assessment";
|
|
3878
|
+
type PreSurgicalAssessmentStatus = 'incomplete' | 'ready_for_planning' | 'treatment_planned';
|
|
3879
|
+
type ASAClassification = 'I' | 'II' | 'III' | 'IV';
|
|
3880
|
+
interface AnesthesiaHistory {
|
|
3881
|
+
previousAnesthesia: boolean;
|
|
3882
|
+
adverseReactions?: boolean;
|
|
3883
|
+
reactionDetails?: string;
|
|
3884
|
+
preferredType?: 'local' | 'regional' | 'general' | 'sedation';
|
|
3885
|
+
malignantHyperthermiaRisk?: boolean;
|
|
3886
|
+
}
|
|
3887
|
+
type BleedingRiskLevel = 'low' | 'moderate' | 'high';
|
|
3888
|
+
interface BleedingRisk {
|
|
3889
|
+
level: BleedingRiskLevel;
|
|
3890
|
+
anticoagulantUse: boolean;
|
|
3891
|
+
anticoagulantDetails?: string;
|
|
3892
|
+
bleedingDisorderHistory: boolean;
|
|
3893
|
+
bleedingDisorderDetails?: string;
|
|
3894
|
+
}
|
|
3895
|
+
type TissueQualityLevel = 'excellent' | 'good' | 'fair' | 'poor';
|
|
3896
|
+
interface SurgicalSiteAssessment {
|
|
3897
|
+
site: string;
|
|
3898
|
+
skinQuality: TissueQualityLevel;
|
|
3899
|
+
scarringHistory: 'none' | 'normal' | 'hypertrophic' | 'keloid';
|
|
3900
|
+
tissueQuality: TissueQualityLevel;
|
|
3901
|
+
previousSurgery: boolean;
|
|
3902
|
+
previousSurgeryDetails?: string;
|
|
3903
|
+
notes?: string;
|
|
3904
|
+
}
|
|
3905
|
+
interface LabResult {
|
|
3906
|
+
name: string;
|
|
3907
|
+
value: string;
|
|
3908
|
+
unit?: string;
|
|
3909
|
+
date?: string;
|
|
3910
|
+
isNormal?: boolean;
|
|
3911
|
+
notes?: string;
|
|
3912
|
+
}
|
|
3913
|
+
type SmokingStatus = 'never' | 'former' | 'current' | 'quit_recently';
|
|
3914
|
+
type ClearanceStatus = 'not_required' | 'pending' | 'obtained' | 'denied';
|
|
3915
|
+
interface PreSurgicalAssessment {
|
|
3916
|
+
id: string;
|
|
3917
|
+
patientId: string;
|
|
3918
|
+
appointmentId?: string;
|
|
3919
|
+
asaClassification?: ASAClassification;
|
|
3920
|
+
anesthesiaHistory?: AnesthesiaHistory;
|
|
3921
|
+
bleedingRisk?: BleedingRisk;
|
|
3922
|
+
surgicalSiteAssessments: SurgicalSiteAssessment[];
|
|
3923
|
+
labResults: LabResult[];
|
|
3924
|
+
smokingStatus?: SmokingStatus;
|
|
3925
|
+
clearance: ClearanceStatus;
|
|
3926
|
+
completionPercentage: number;
|
|
3927
|
+
status: PreSurgicalAssessmentStatus;
|
|
3928
|
+
lastUpdatedBy: string;
|
|
3929
|
+
lastUpdatedByRole: 'PATIENT' | 'PRACTITIONER';
|
|
3930
|
+
createdAt?: Timestamp | any;
|
|
3931
|
+
updatedAt?: Timestamp | any;
|
|
3932
|
+
}
|
|
3933
|
+
interface CreatePreSurgicalAssessmentData {
|
|
3934
|
+
patientId: string;
|
|
3935
|
+
appointmentId?: string;
|
|
3936
|
+
asaClassification?: ASAClassification;
|
|
3937
|
+
anesthesiaHistory?: AnesthesiaHistory;
|
|
3938
|
+
bleedingRisk?: BleedingRisk;
|
|
3939
|
+
surgicalSiteAssessments?: SurgicalSiteAssessment[];
|
|
3940
|
+
labResults?: LabResult[];
|
|
3941
|
+
smokingStatus?: SmokingStatus;
|
|
3942
|
+
clearance?: ClearanceStatus;
|
|
3943
|
+
}
|
|
3944
|
+
interface UpdatePreSurgicalAssessmentData {
|
|
3945
|
+
appointmentId?: string;
|
|
3946
|
+
asaClassification?: ASAClassification;
|
|
3947
|
+
anesthesiaHistory?: AnesthesiaHistory;
|
|
3948
|
+
bleedingRisk?: BleedingRisk;
|
|
3949
|
+
surgicalSiteAssessments?: SurgicalSiteAssessment[];
|
|
3950
|
+
labResults?: LabResult[];
|
|
3951
|
+
smokingStatus?: SmokingStatus;
|
|
3952
|
+
clearance?: ClearanceStatus;
|
|
3953
|
+
}
|
|
3954
|
+
|
|
3666
3955
|
declare const PATIENTS_COLLECTION = "patients";
|
|
3667
3956
|
declare const PATIENT_SENSITIVE_INFO_COLLECTION = "sensitive-info";
|
|
3668
3957
|
declare const PATIENT_MEDICAL_HISTORY_COLLECTION = "medical-history";
|
|
@@ -6418,6 +6707,18 @@ declare class PatientService extends BaseService {
|
|
|
6418
6707
|
getAestheticAnalysis(patientId: string): Promise<AestheticAnalysis | null>;
|
|
6419
6708
|
createAestheticAnalysis(patientId: string, data: CreateAestheticAnalysisData): Promise<void>;
|
|
6420
6709
|
updateAestheticAnalysis(patientId: string, data: UpdateAestheticAnalysisData): Promise<void>;
|
|
6710
|
+
getSkinQualityAssessment(patientId: string): Promise<SkinQualityAssessment | null>;
|
|
6711
|
+
createSkinQualityAssessment(patientId: string, data: CreateSkinQualityAssessmentData): Promise<void>;
|
|
6712
|
+
updateSkinQualityAssessment(patientId: string, data: UpdateSkinQualityAssessmentData): Promise<void>;
|
|
6713
|
+
getBodyAssessment(patientId: string): Promise<BodyAssessment | null>;
|
|
6714
|
+
createBodyAssessment(patientId: string, data: CreateBodyAssessmentData): Promise<void>;
|
|
6715
|
+
updateBodyAssessment(patientId: string, data: UpdateBodyAssessmentData): Promise<void>;
|
|
6716
|
+
getHairScalpAssessment(patientId: string): Promise<HairScalpAssessment | null>;
|
|
6717
|
+
createHairScalpAssessment(patientId: string, data: CreateHairScalpAssessmentData): Promise<void>;
|
|
6718
|
+
updateHairScalpAssessment(patientId: string, data: UpdateHairScalpAssessmentData): Promise<void>;
|
|
6719
|
+
getPreSurgicalAssessment(patientId: string): Promise<PreSurgicalAssessment | null>;
|
|
6720
|
+
createPreSurgicalAssessment(patientId: string, data: CreatePreSurgicalAssessmentData): Promise<void>;
|
|
6721
|
+
updatePreSurgicalAssessment(patientId: string, data: UpdatePreSurgicalAssessmentData): Promise<void>;
|
|
6421
6722
|
}
|
|
6422
6723
|
|
|
6423
6724
|
declare class ClinicAdminService extends BaseService {
|
|
@@ -9365,4 +9666,4 @@ declare const getFirebaseApp: () => Promise<FirebaseApp>;
|
|
|
9365
9666
|
declare const getFirebaseStorage: () => Promise<FirebaseStorage>;
|
|
9366
9667
|
declare const getFirebaseFunctions: () => Promise<Functions>;
|
|
9367
9668
|
|
|
9368
|
-
export { AESTHETIC_ANALYSIS_COLLECTION, ANALYTICS_COLLECTION, APPOINTMENTS_COLLECTION, AcquisitionSource, type AddAllergyData, type AddBlockingConditionData, type AddContraindicationData, type AddMedicationData, type AddressData, type AdminInfo, type AdminToken, AdminTokenStatus, type AestheticAnalysis, type AestheticAnalysisStatus, type Allergy, type AllergySubtype, AllergyType, type AllergyTypeWithSubtype, AnalyticsCloudService, type AnalyticsDateRange, type AnalyticsFilters, type AnalyticsMetadata, type AnalyticsPeriod, AnalyticsService, type Appointment, type AppointmentCancelledNotification, type AppointmentMediaItem, type AppointmentMetadata, type AppointmentProductMetadata, type AppointmentReminderNotification, type AppointmentRescheduledProposalNotification, type AppointmentRescheduledReminderNotification, AppointmentService, AppointmentStatus, type AppointmentStatusChangeNotification, type AppointmentTrend, type AssessmentScales, AuthService, type BaseDocumentElement, type BaseMetrics, type BaseNotification, BaseService, type BeforeAfterPerZone, type BillingInfo, type BillingPerZone, type BillingTransaction, BillingTransactionType, BillingTransactionsService, type BinaryChoiceElement, BlockingCondition, type Brand, BrandService, type Break, CALENDAR_COLLECTION, CANCELLATION_ANALYTICS_SUBCOLLECTION, CLINICS_COLLECTION, CLINIC_ADMINS_COLLECTION, CLINIC_ANALYTICS_SUBCOLLECTION, CLINIC_GROUPS_COLLECTION, type CalendarEvent, CalendarEventStatus, type CalendarEventTime, CalendarEventType, CalendarServiceV2, CalendarServiceV3, CalendarSyncStatus, type CancellationMetrics, type CancellationRateTrend, type CancellationReasonStats, type Category, CategoryService, CertificationLevel, CertificationSpecialty, type Clinic, type ClinicAdmin, ClinicAdminService, type ClinicAdminSignupData, type ClinicAnalytics, type ClinicBranchSetupData, type ClinicComparisonMetrics, type ClinicContactInfo, type ClinicGroup, ClinicGroupService, type ClinicGroupSetupData, type ClinicInfo, type ClinicLocation, ClinicPhotoTag, type ClinicReview, type ClinicReviewInfo, ClinicService, ClinicTag, type ClinicTags, type ClinicalFindingDetail, type ClinicalFindings, ConstantsService, type ContactPerson, Contraindication, type ContraindicationDynamic, CosmeticAllergySubtype, type CostPerPatientMetrics, type CreateAdminTokenData, type CreateAestheticAnalysisData, type CreateAppointmentData, type CreateAppointmentHttpData, type CreateAppointmentParams, type CreateBillingTransactionData, type CreateBlockingEventParams, type CreateCalendarEventData, type CreateClinicAdminData, type CreateClinicData, type CreateClinicGroupData, type CreateDefaultClinicGroupData, type CreateDocumentTemplateData, type CreateDraftPractitionerData, type CreateManualPatientData, type CreatePatientLocationInfoData, type CreatePatientMedicalInfoData, type CreatePatientProfileData, type CreatePatientSensitiveInfoData, type CreatePatientTokenData, type CreatePractitionerData, type CreatePractitionerInviteData, type CreatePractitionerTokenData, type CreateProcedureData, type CreateSyncedCalendarData, type CreateUserData, Currency, DASHBOARD_ANALYTICS_SUBCOLLECTION, DEFAULT_MEDICAL_INFO, DOCTOR_FORMS_SUBCOLLECTION, DOCUMENTATION_TEMPLATES_COLLECTION, type DashboardAnalytics, type DatePickerElement, type DateRange, type DigitalSignatureElement, type DoctorInfo, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateService, type DurationTrend, type DynamicTextElement, DynamicVariable, type EmergencyContact, type EntityType, EnvironmentalAllergySubtype, type ExtendedProcedureInfo, ExternalCalendarService, FILLED_DOCUMENTS_COLLECTION, type FileUploadElement, type FilledDocument, type FilledDocumentFileValue, FilledDocumentService, FilledDocumentStatus, type FinalBilling, type FirebaseUser, FoodAllergySubtype, type FormReminderNotification, type FormSubmissionConfirmationNotification, type GamificationInfo, Gender, type GeneralMessageNotification, type GroupedAnalyticsBase, type GroupedPatientBehaviorMetrics, type GroupedPatientRetentionMetrics, type GroupedPractitionerPerformanceMetrics, type GroupedProcedurePerformanceMetrics, type GroupedProductUsageMetrics, type GroupedRevenueMetrics, type GroupedTimeEfficiencyMetrics, type GroupingPeriod, type HeadingElement, HeadingLevel, INVITE_TOKENS_COLLECTION, Language, type LinkedFormInfo, type ListElement, ListType, type LocationData, MEDIA_METADATA_COLLECTION, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, MediaType, MedicationAllergySubtype, type MultipleChoiceElement, NOTIFICATIONS_COLLECTION, NO_SHOW_ANALYTICS_SUBCOLLECTION, type NextStepsRecommendation, type NoShowMetrics, type Notification, NotificationService, NotificationStatus, NotificationType, type OverallReviewAverages, PATIENTS_COLLECTION, PATIENT_APPOINTMENTS_COLLECTION, PATIENT_LOCATION_INFO_COLLECTION, PATIENT_MEDICAL_HISTORY_COLLECTION, PATIENT_MEDICAL_INFO_COLLECTION, PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME, PATIENT_SENSITIVE_INFO_COLLECTION, PRACTITIONERS_COLLECTION, PRACTITIONER_ANALYTICS_SUBCOLLECTION, PRACTITIONER_INVITES_COLLECTION, PROCEDURES_COLLECTION, PROCEDURE_ANALYTICS_SUBCOLLECTION, type ParagraphElement, type PatientAnalytics, type PatientClinic, type PatientDoctor, type PatientGoals, PatientInstructionStatus, type PatientLifetimeValueMetrics, type PatientLocationInfo, type PatientMedicalInfo, type PatientProfile, type PatientProfileComplete, type PatientProfileForDoctor, type PatientProfileInfo, type PatientRequirementInstance, type PatientRequirementInstruction, PatientRequirementOverallStatus, type PatientRequirementsFilters, PatientRequirementsService, type PatientRetentionMetrics, type PatientReviewInfo, type PatientSensitiveInfo, PatientService, type PatientToken, PatientTokenStatus, type PaymentConfirmationNotification, PaymentStatus, type PaymentStatusBreakdown, type PlanDetails, type PostRequirementNotification, PracticeType, type Practitioner, type PractitionerAnalytics, type PractitionerBasicInfo, type PractitionerCertification, type PractitionerClinicProcedures, type PractitionerClinicWorkingHours, type PractitionerInvite, type PractitionerInviteFilters, PractitionerInviteService, PractitionerInviteStatus, type PractitionerProfileInfo, type PractitionerReview, type PractitionerReviewInfo, PractitionerService, PractitionerStatus, type PractitionerToken, PractitionerTokenStatus, type PractitionerWorkingHours, type PreRequirementNotification, PricingMeasure, type Procedure, type ProcedureAnalytics, type ProcedureCategorization, type ProcedureExtendedInfo, ProcedureFamily, type ProcedureInfo, type ProcedurePopularity, type ProcedureProduct, type ProcedureProfitability, type ProcedureRecommendationNotification, type ProcedureReview, type ProcedureReviewInfo, ProcedureService, type ProcedureSummaryInfo, type Product, type ProductRevenueMetrics, ProductService, type ProductUsageByProcedure, type ProductUsageMetrics, type ProposedWorkingHours, REGISTER_TOKENS_COLLECTION, REVENUE_ANALYTICS_SUBCOLLECTION, REVIEWS_COLLECTION, type RatingScaleElement, type ReadStoredAnalyticsOptions, type RecommendedProcedure, type RequesterInfo, type Requirement, type RequirementInstructionDueNotification, type RequirementSourceProcedure, RequirementType, type RevenueMetrics, type RevenueTrend, type Review, type ReviewAnalyticsMetrics, ReviewAnalyticsService, type ReviewDetail, type ReviewMetrics, type ReviewRequestNotification, ReviewService, type ReviewTrend, SYNCED_CALENDARS_COLLECTION, type SearchAppointmentsParams, type SearchCalendarEventsParams, SearchLocationEnum, type SearchPatientsParams, type SignatureElement, type SingleChoiceElement, type StoredCancellationMetrics, type StoredClinicAnalytics, type StoredDashboardAnalytics, type StoredNoShowMetrics, type StoredPractitionerAnalytics, type StoredProcedureAnalytics, type StoredRevenueMetrics, type StoredTimeEfficiencyMetrics, type StripeTransactionData, type Subcategory, SubcategoryService, SubscriptionModel, SubscriptionStatus, type SyncedCalendar, type SyncedCalendarEvent, SyncedCalendarProvider, SyncedCalendarsService, TIME_EFFICIENCY_ANALYTICS_SUBCOLLECTION, type Technology, type TechnologyDocumentationTemplate, TechnologyService, type TextInputElement, type TimeEfficiencyMetrics, type TimeSlot, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, type TrendPeriod, USERS_COLLECTION, USER_FORMS_SUBCOLLECTION, type UpdateAestheticAnalysisData, type UpdateAllergyData, type UpdateAppointmentData, type UpdateAppointmentParams, type UpdateBlockingConditionData, type UpdateBlockingEventParams, type UpdateCalendarEventData, type UpdateClinicAdminData, type UpdateClinicData, type UpdateClinicGroupData, type UpdateContraindicationData, type UpdateDocumentTemplateData, type UpdateMedicationData, type UpdatePatientLocationInfoData, type UpdatePatientMedicalInfoData, type UpdatePatientProfileData, type UpdatePatientSensitiveInfoData, type UpdatePractitionerData, type UpdatePractitionerInviteData, type UpdateProcedureData, type UpdateSyncedCalendarData, type UpdateVitalStatsData, type User, UserRole, UserService, type VitalStats, type WorkingHours, type ZoneItemData, type ZonePhotoUploadData, getFirebaseApp, getFirebaseAuth, getFirebaseDB, getFirebaseFunctions, getFirebaseInstance, getFirebaseStorage, initializeFirebase };
|
|
9669
|
+
export { AESTHETIC_ANALYSIS_COLLECTION, ANALYTICS_COLLECTION, APPOINTMENTS_COLLECTION, type ASAClassification, AcquisitionSource, type AddAllergyData, type AddBlockingConditionData, type AddContraindicationData, type AddMedicationData, type AddressData, type AdminInfo, type AdminToken, AdminTokenStatus, type AestheticAnalysis, type AestheticAnalysisStatus, type Allergy, type AllergySubtype, AllergyType, type AllergyTypeWithSubtype, AnalyticsCloudService, type AnalyticsDateRange, type AnalyticsFilters, type AnalyticsMetadata, type AnalyticsPeriod, AnalyticsService, type AnesthesiaHistory, type Appointment, type AppointmentCancelledNotification, type AppointmentMediaItem, type AppointmentMetadata, type AppointmentProductMetadata, type AppointmentReminderNotification, type AppointmentRescheduledProposalNotification, type AppointmentRescheduledReminderNotification, AppointmentService, AppointmentStatus, type AppointmentStatusChangeNotification, type AppointmentTrend, type AssessmentScales, AuthService, BODY_ASSESSMENT_COLLECTION, type BaseDocumentElement, type BaseMetrics, type BaseNotification, BaseService, type BeforeAfterPerZone, type BillingInfo, type BillingPerZone, type BillingTransaction, BillingTransactionType, BillingTransactionsService, type BinaryChoiceElement, type BleedingRisk, type BleedingRiskLevel, BlockingCondition, type BodyAssessment, type BodyAssessmentStatus, type BodyCompositionData, type BodyMeasurementsData, type BodySymmetryData, type BodyZone, type BodyZoneAssessment, type Brand, BrandService, type Break, CALENDAR_COLLECTION, CANCELLATION_ANALYTICS_SUBCOLLECTION, CLINICS_COLLECTION, CLINIC_ADMINS_COLLECTION, CLINIC_ANALYTICS_SUBCOLLECTION, CLINIC_GROUPS_COLLECTION, type CalendarEvent, CalendarEventStatus, type CalendarEventTime, CalendarEventType, CalendarServiceV2, CalendarServiceV3, CalendarSyncStatus, type CancellationMetrics, type CancellationRateTrend, type CancellationReasonStats, type Category, CategoryService, CertificationLevel, CertificationSpecialty, type ClearanceStatus, type Clinic, type ClinicAdmin, ClinicAdminService, type ClinicAdminSignupData, type ClinicAnalytics, type ClinicBranchSetupData, type ClinicComparisonMetrics, type ClinicContactInfo, type ClinicGroup, ClinicGroupService, type ClinicGroupSetupData, type ClinicInfo, type ClinicLocation, ClinicPhotoTag, type ClinicReview, type ClinicReviewInfo, ClinicService, ClinicTag, type ClinicTags, type ClinicalFindingDetail, type ClinicalFindings, ConstantsService, type ContactPerson, Contraindication, type ContraindicationDynamic, CosmeticAllergySubtype, type CostPerPatientMetrics, type CreateAdminTokenData, type CreateAestheticAnalysisData, type CreateAppointmentData, type CreateAppointmentHttpData, type CreateAppointmentParams, type CreateBillingTransactionData, type CreateBlockingEventParams, type CreateBodyAssessmentData, type CreateCalendarEventData, type CreateClinicAdminData, type CreateClinicData, type CreateClinicGroupData, type CreateDefaultClinicGroupData, type CreateDocumentTemplateData, type CreateDraftPractitionerData, type CreateHairScalpAssessmentData, type CreateManualPatientData, type CreatePatientLocationInfoData, type CreatePatientMedicalInfoData, type CreatePatientProfileData, type CreatePatientSensitiveInfoData, type CreatePatientTokenData, type CreatePractitionerData, type CreatePractitionerInviteData, type CreatePractitionerTokenData, type CreatePreSurgicalAssessmentData, type CreateProcedureData, type CreateSkinQualityAssessmentData, type CreateSyncedCalendarData, type CreateUserData, Currency, DASHBOARD_ANALYTICS_SUBCOLLECTION, DEFAULT_MEDICAL_INFO, DOCTOR_FORMS_SUBCOLLECTION, DOCUMENTATION_TEMPLATES_COLLECTION, type DashboardAnalytics, type DatePickerElement, type DateRange, type DigitalSignatureElement, type DoctorInfo, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateService, type DurationTrend, type DynamicTextElement, DynamicVariable, type ElastosisGrade, type EmergencyContact, type EntityType, EnvironmentalAllergySubtype, type ExtendedProcedureInfo, ExternalCalendarService, FILLED_DOCUMENTS_COLLECTION, type FileUploadElement, type FilledDocument, type FilledDocumentFileValue, FilledDocumentService, FilledDocumentStatus, type FinalBilling, type FirebaseUser, type FitzpatrickType, FoodAllergySubtype, type FormReminderNotification, type FormSubmissionConfirmationNotification, type GamificationInfo, Gender, type GeneralMessageNotification, type GlogauClassification, type GroupedAnalyticsBase, type GroupedPatientBehaviorMetrics, type GroupedPatientRetentionMetrics, type GroupedPractitionerPerformanceMetrics, type GroupedProcedurePerformanceMetrics, type GroupedProductUsageMetrics, type GroupedRevenueMetrics, type GroupedTimeEfficiencyMetrics, type GroupingPeriod, HAIR_SCALP_ASSESSMENT_COLLECTION, type HairCharacteristics, type HairColor, type HairDensity, type HairLossPattern, type HairLossType, type HairLossZone, type HairLossZoneAssessment, type HairScalpAssessment, type HairScalpAssessmentStatus, type HairTextureGrade, type HairType, type HeadingElement, HeadingLevel, INVITE_TOKENS_COLLECTION, type LabResult, Language, type LinkedFormInfo, type ListElement, ListType, type LocationData, type LudwigStage, MEDIA_METADATA_COLLECTION, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, MediaType, MedicationAllergySubtype, type MultipleChoiceElement, type MuscleDefinitionLevel, NOTIFICATIONS_COLLECTION, NO_SHOW_ANALYTICS_SUBCOLLECTION, type NextStepsRecommendation, type NoShowMetrics, type NorwoodStage, type Notification, NotificationService, NotificationStatus, NotificationType, type OverallReviewAverages, PATIENTS_COLLECTION, PATIENT_APPOINTMENTS_COLLECTION, PATIENT_LOCATION_INFO_COLLECTION, PATIENT_MEDICAL_HISTORY_COLLECTION, PATIENT_MEDICAL_INFO_COLLECTION, PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME, PATIENT_SENSITIVE_INFO_COLLECTION, PRACTITIONERS_COLLECTION, PRACTITIONER_ANALYTICS_SUBCOLLECTION, PRACTITIONER_INVITES_COLLECTION, PRE_SURGICAL_ASSESSMENT_COLLECTION, PROCEDURES_COLLECTION, PROCEDURE_ANALYTICS_SUBCOLLECTION, type ParagraphElement, type PatientAnalytics, type PatientClinic, type PatientDoctor, type PatientGoals, PatientInstructionStatus, type PatientLifetimeValueMetrics, type PatientLocationInfo, type PatientMedicalInfo, type PatientProfile, type PatientProfileComplete, type PatientProfileForDoctor, type PatientProfileInfo, type PatientRequirementInstance, type PatientRequirementInstruction, PatientRequirementOverallStatus, type PatientRequirementsFilters, PatientRequirementsService, type PatientRetentionMetrics, type PatientReviewInfo, type PatientSensitiveInfo, PatientService, type PatientToken, PatientTokenStatus, type PaymentConfirmationNotification, PaymentStatus, type PaymentStatusBreakdown, type PlanDetails, type PoreSizeLevel, type PostRequirementNotification, PracticeType, type Practitioner, type PractitionerAnalytics, type PractitionerBasicInfo, type PractitionerCertification, type PractitionerClinicProcedures, type PractitionerClinicWorkingHours, type PractitionerInvite, type PractitionerInviteFilters, PractitionerInviteService, PractitionerInviteStatus, type PractitionerProfileInfo, type PractitionerReview, type PractitionerReviewInfo, PractitionerService, PractitionerStatus, type PractitionerToken, PractitionerTokenStatus, type PractitionerWorkingHours, type PreRequirementNotification, type PreSurgicalAssessment, type PreSurgicalAssessmentStatus, PricingMeasure, type Procedure, type ProcedureAnalytics, type ProcedureCategorization, type ProcedureExtendedInfo, ProcedureFamily, type ProcedureInfo, type ProcedurePopularity, type ProcedureProduct, type ProcedureProfitability, type ProcedureRecommendationNotification, type ProcedureReview, type ProcedureReviewInfo, ProcedureService, type ProcedureSummaryInfo, type Product, type ProductRevenueMetrics, ProductService, type ProductUsageByProcedure, type ProductUsageMetrics, type ProposedWorkingHours, REGISTER_TOKENS_COLLECTION, REVENUE_ANALYTICS_SUBCOLLECTION, REVIEWS_COLLECTION, type RatingScaleElement, type ReadStoredAnalyticsOptions, type RecommendedProcedure, type RequesterInfo, type Requirement, type RequirementInstructionDueNotification, type RequirementSourceProcedure, RequirementType, type RevenueMetrics, type RevenueTrend, type Review, type ReviewAnalyticsMetrics, ReviewAnalyticsService, type ReviewDetail, type ReviewMetrics, type ReviewRequestNotification, ReviewService, type ReviewTrend, SKIN_QUALITY_ASSESSMENT_COLLECTION, SYNCED_CALENDARS_COLLECTION, type ScalpCondition, type ScalpRednessLevel, type ScalpScalinessLevel, type ScalpSebumLevel, type SearchAppointmentsParams, type SearchCalendarEventsParams, SearchLocationEnum, type SearchPatientsParams, type SeverityLevel, type SignatureElement, type SingleChoiceElement, type SkinCharacteristics, type SkinConditionEntry, type SkinConditionType, type SkinElasticityLevel, type SkinHydrationLevel, type SkinQualityAssessment, type SkinQualityAssessmentStatus, type SkinQualityScales, type SkinSensitivityLevel, type SkinTextureLevel, type SkinZone, type SkinZoneAssessment, type SmokingStatus, type StoredCancellationMetrics, type StoredClinicAnalytics, type StoredDashboardAnalytics, type StoredNoShowMetrics, type StoredPractitionerAnalytics, type StoredProcedureAnalytics, type StoredRevenueMetrics, type StoredTimeEfficiencyMetrics, type StripeTransactionData, type Subcategory, SubcategoryService, SubscriptionModel, SubscriptionStatus, type SurgicalSiteAssessment, type SyncedCalendar, type SyncedCalendarEvent, SyncedCalendarProvider, SyncedCalendarsService, TIME_EFFICIENCY_ANALYTICS_SUBCOLLECTION, type Technology, type TechnologyDocumentationTemplate, TechnologyService, type TextInputElement, type TimeEfficiencyMetrics, type TimeSlot, TimeUnit, type TissueQualityLevel, TreatmentBenefit, type TreatmentBenefitDynamic, type TrendPeriod, USERS_COLLECTION, USER_FORMS_SUBCOLLECTION, type UpdateAestheticAnalysisData, type UpdateAllergyData, type UpdateAppointmentData, type UpdateAppointmentParams, type UpdateBlockingConditionData, type UpdateBlockingEventParams, type UpdateBodyAssessmentData, type UpdateCalendarEventData, type UpdateClinicAdminData, type UpdateClinicData, type UpdateClinicGroupData, type UpdateContraindicationData, type UpdateDocumentTemplateData, type UpdateHairScalpAssessmentData, type UpdateMedicationData, type UpdatePatientLocationInfoData, type UpdatePatientMedicalInfoData, type UpdatePatientProfileData, type UpdatePatientSensitiveInfoData, type UpdatePractitionerData, type UpdatePractitionerInviteData, type UpdatePreSurgicalAssessmentData, type UpdateProcedureData, type UpdateSkinQualityAssessmentData, type UpdateSyncedCalendarData, type UpdateVitalStatsData, type User, UserRole, UserService, type VitalStats, type WorkingHours, type ZoneItemData, type ZonePhotoUploadData, getFirebaseApp, getFirebaseAuth, getFirebaseDB, getFirebaseFunctions, getFirebaseInstance, getFirebaseStorage, initializeFirebase };
|