@blackcode_sa/metaestetics-api 1.5.10 → 1.5.12

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/index.d.mts CHANGED
@@ -1684,12 +1684,14 @@ interface Subcategory {
1684
1684
 
1685
1685
  /**
1686
1686
  * Technology used in medical procedures
1687
- * Technologies are the third level of hierarchy, belonging to a specific subcategory
1688
- * and represent a specific method or approach to treatment
1687
+ * Technologies are now a top-level collection that reference their full path in the hierarchy
1688
+ * through family, category, and subcategory IDs
1689
1689
  *
1690
1690
  * @property id - Unique identifier of the technology
1691
1691
  * @property name - Name of the technology
1692
1692
  * @property description - Detailed description of the technology and its application
1693
+ * @property family - The procedure family this technology belongs to (aesthetics/surgery)
1694
+ * @property categoryId - ID of the category this technology belongs to
1693
1695
  * @property subcategoryId - ID of the subcategory this technology belongs to
1694
1696
  * @property technicalDetails - Technical specifications and details
1695
1697
  * @property requirements - List of pre and post procedure requirements
@@ -1709,6 +1711,10 @@ interface Technology {
1709
1711
  name: string;
1710
1712
  /** Detaljan opis tehnologije */
1711
1713
  description: string;
1714
+ /** Familija procedura kojoj tehnologija pripada */
1715
+ family: ProcedureFamily;
1716
+ /** ID kategorije kojoj tehnologija pripada */
1717
+ categoryId: string;
1712
1718
  /** ID potkategorije kojoj tehnologija pripada */
1713
1719
  subcategoryId: string;
1714
1720
  /** Tehnički detalji i specifikacije */
@@ -3567,20 +3573,23 @@ declare class SubcategoryService extends BaseService {
3567
3573
 
3568
3574
  /**
3569
3575
  * Servis za upravljanje tehnologijama i njihovim zahtevima.
3570
- * Tehnologije su treći nivo organizacije i pripadaju određenoj podkategoriji.
3571
- * Svaka tehnologija može imati svoje specifične zahteve pre i posle procedure.
3576
+ * Tehnologije su sada top-level kolekcija koja referencira svoju putanju u hijerarhiji
3577
+ * kroz family, categoryId i subcategoryId.
3572
3578
  *
3573
3579
  * @example
3574
3580
  * const technologyService = new TechnologyService();
3575
3581
  *
3576
3582
  * // Kreiranje nove tehnologije
3577
- * const technology = await technologyService.create(categoryId, subcategoryId, {
3583
+ * const technology = await technologyService.create({
3578
3584
  * name: "Botulinum Toxin",
3579
- * description: "Neurotoxin injections for wrinkle reduction"
3585
+ * description: "Neurotoxin injections for wrinkle reduction",
3586
+ * family: ProcedureFamily.AESTHETICS,
3587
+ * categoryId: "category123",
3588
+ * subcategoryId: "subcategory456"
3580
3589
  * });
3581
3590
  *
3582
3591
  * // Dodavanje zahteva
3583
- * await technologyService.addRequirement(categoryId, subcategoryId, technology.id, {
3592
+ * await technologyService.addRequirement(technology.id, {
3584
3593
  * type: "pre",
3585
3594
  * name: "Stay Hydrated",
3586
3595
  * description: "Drink plenty of water"
@@ -3588,19 +3597,15 @@ declare class SubcategoryService extends BaseService {
3588
3597
  */
3589
3598
  declare class TechnologyService extends BaseService {
3590
3599
  /**
3591
- * Vraća referencu na Firestore kolekciju tehnologija za određenu podkategoriju
3592
- * @param categoryId - ID kategorije
3593
- * @param subcategoryId - ID podkategorije
3600
+ * Vraća referencu na Firestore kolekciju tehnologija
3594
3601
  */
3595
3602
  private getTechnologiesRef;
3596
3603
  /**
3597
- * Kreira novu tehnologiju u okviru podkategorije
3598
- * @param categoryId - ID kategorije
3599
- * @param subcategoryId - ID podkategorije
3604
+ * Kreira novu tehnologiju
3600
3605
  * @param technology - Podaci za novu tehnologiju
3601
3606
  * @returns Kreirana tehnologija sa generisanim ID-em
3602
3607
  */
3603
- create(categoryId: string, subcategoryId: string, technology: Omit<Technology, "id" | "createdAt" | "updatedAt">): Promise<{
3608
+ create(technology: Omit<Technology, "id" | "createdAt" | "updatedAt">): Promise<{
3604
3609
  isActive: boolean;
3605
3610
  updatedAt: Date;
3606
3611
  blockingConditions: BlockingCondition[];
@@ -3609,6 +3614,8 @@ declare class TechnologyService extends BaseService {
3609
3614
  description: string;
3610
3615
  createdAt: Date;
3611
3616
  technicalDetails?: string | undefined;
3617
+ family: ProcedureFamily;
3618
+ categoryId: string;
3612
3619
  subcategoryId: string;
3613
3620
  requirements: {
3614
3621
  pre: Requirement[];
@@ -3620,168 +3627,197 @@ declare class TechnologyService extends BaseService {
3620
3627
  id: string;
3621
3628
  }>;
3622
3629
  /**
3623
- * Vraća sve aktivne tehnologije za određenu podkategoriju
3630
+ * Vraća sve aktivne tehnologije
3631
+ * @returns Lista aktivnih tehnologija
3632
+ */
3633
+ getAll(): Promise<Technology[]>;
3634
+ /**
3635
+ * Vraća sve aktivne tehnologije za određenu familiju
3636
+ * @param family - Familija procedura
3637
+ * @returns Lista aktivnih tehnologija
3638
+ */
3639
+ getAllByFamily(family: ProcedureFamily): Promise<Technology[]>;
3640
+ /**
3641
+ * Vraća sve aktivne tehnologije za određenu kategoriju
3624
3642
  * @param categoryId - ID kategorije
3643
+ * @returns Lista aktivnih tehnologija
3644
+ */
3645
+ getAllByCategoryId(categoryId: string): Promise<Technology[]>;
3646
+ /**
3647
+ * Vraća sve aktivne tehnologije za određenu podkategoriju
3625
3648
  * @param subcategoryId - ID podkategorije
3626
3649
  * @returns Lista aktivnih tehnologija
3627
3650
  */
3628
- getAllBySubcategoryId(categoryId: string, subcategoryId: string): Promise<Technology[]>;
3651
+ getAllBySubcategoryId(subcategoryId: string): Promise<Technology[]>;
3629
3652
  /**
3630
3653
  * Ažurira postojeću tehnologiju
3631
- * @param categoryId - ID kategorije
3632
- * @param subcategoryId - ID podkategorije
3633
3654
  * @param technologyId - ID tehnologije
3634
3655
  * @param technology - Novi podaci za tehnologiju
3635
3656
  * @returns Ažurirana tehnologija
3636
3657
  */
3637
- update(categoryId: string, subcategoryId: string, technologyId: string, technology: Partial<Omit<Technology, "id" | "createdAt" | "subcategoryId">>): Promise<Technology | null>;
3658
+ update(technologyId: string, technology: Partial<Omit<Technology, "id" | "createdAt" | "family" | "categoryId" | "subcategoryId">>): Promise<Technology | null>;
3638
3659
  /**
3639
3660
  * Soft delete tehnologije (postavlja isActive na false)
3640
- * @param categoryId - ID kategorije
3641
- * @param subcategoryId - ID podkategorije
3642
3661
  * @param technologyId - ID tehnologije koja se briše
3643
3662
  */
3644
- delete(categoryId: string, subcategoryId: string, technologyId: string): Promise<void>;
3663
+ delete(technologyId: string): Promise<void>;
3645
3664
  /**
3646
3665
  * Vraća tehnologiju po ID-u
3647
- * @param categoryId - ID kategorije
3648
- * @param subcategoryId - ID podkategorije
3649
3666
  * @param technologyId - ID tražene tehnologije
3650
3667
  * @returns Tehnologija ili null ako ne postoji
3651
3668
  */
3652
- getById(categoryId: string, subcategoryId: string, technologyId: string): Promise<Technology | null>;
3669
+ getById(technologyId: string): Promise<Technology | null>;
3653
3670
  /**
3654
3671
  * Dodaje novi zahtev tehnologiji
3655
- * @param categoryId - ID kategorije
3656
- * @param subcategoryId - ID podkategorije
3657
3672
  * @param technologyId - ID tehnologije
3658
3673
  * @param requirement - Zahtev koji se dodaje
3659
3674
  * @returns Ažurirana tehnologija sa novim zahtevom
3660
3675
  */
3661
- addRequirement(categoryId: string, subcategoryId: string, technologyId: string, requirement: Requirement): Promise<Technology | null>;
3676
+ addRequirement(technologyId: string, requirement: Requirement): Promise<Technology | null>;
3662
3677
  /**
3663
3678
  * Uklanja zahtev iz tehnologije
3664
- * @param categoryId - ID kategorije
3665
- * @param subcategoryId - ID podkategorije
3666
3679
  * @param technologyId - ID tehnologije
3667
3680
  * @param requirement - Zahtev koji se uklanja
3668
3681
  * @returns Ažurirana tehnologija bez uklonjenog zahteva
3669
3682
  */
3670
- removeRequirement(categoryId: string, subcategoryId: string, technologyId: string, requirement: Requirement): Promise<Technology | null>;
3683
+ removeRequirement(technologyId: string, requirement: Requirement): Promise<Technology | null>;
3671
3684
  /**
3672
3685
  * Vraća sve zahteve za tehnologiju
3673
- * @param categoryId - ID kategorije
3674
- * @param subcategoryId - ID podkategorije
3675
3686
  * @param technologyId - ID tehnologije
3676
3687
  * @param type - Opcioni filter za tip zahteva (pre/post)
3677
3688
  * @returns Lista zahteva
3678
3689
  */
3679
- getRequirements(categoryId: string, subcategoryId: string, technologyId: string, type?: RequirementType): Promise<Requirement[]>;
3690
+ getRequirements(technologyId: string, type?: RequirementType): Promise<Requirement[]>;
3680
3691
  /**
3681
3692
  * Ažurira postojeći zahtev
3682
- * @param categoryId - ID kategorije
3683
- * @param subcategoryId - ID podkategorije
3684
3693
  * @param technologyId - ID tehnologije
3685
3694
  * @param oldRequirement - Stari zahtev koji se menja
3686
3695
  * @param newRequirement - Novi zahtev koji zamenjuje stari
3687
3696
  * @returns Ažurirana tehnologija
3688
3697
  */
3689
- updateRequirement(categoryId: string, subcategoryId: string, technologyId: string, oldRequirement: Requirement, newRequirement: Requirement): Promise<Technology | null>;
3698
+ updateRequirement(technologyId: string, oldRequirement: Requirement, newRequirement: Requirement): Promise<Technology | null>;
3690
3699
  /**
3691
3700
  * Dodaje blokirajući uslov tehnologiji
3692
- * @param categoryId - ID kategorije
3693
- * @param subcategoryId - ID podkategorije
3694
3701
  * @param technologyId - ID tehnologije
3695
3702
  * @param condition - Blokirajući uslov koji se dodaje
3696
3703
  * @returns Ažurirana tehnologija
3697
3704
  */
3698
- addBlockingCondition(categoryId: string, subcategoryId: string, technologyId: string, condition: BlockingCondition): Promise<Technology | null>;
3705
+ addBlockingCondition(technologyId: string, condition: BlockingCondition): Promise<Technology | null>;
3699
3706
  /**
3700
3707
  * Uklanja blokirajući uslov iz tehnologije
3701
- * @param categoryId - ID kategorije
3702
- * @param subcategoryId - ID podkategorije
3703
3708
  * @param technologyId - ID tehnologije
3704
3709
  * @param condition - Blokirajući uslov koji se uklanja
3705
3710
  * @returns Ažurirana tehnologija
3706
3711
  */
3707
- removeBlockingCondition(categoryId: string, subcategoryId: string, technologyId: string, condition: BlockingCondition): Promise<Technology | null>;
3712
+ removeBlockingCondition(technologyId: string, condition: BlockingCondition): Promise<Technology | null>;
3708
3713
  /**
3709
3714
  * Dodaje kontraindikaciju tehnologiji
3710
- * @param categoryId - ID kategorije
3711
- * @param subcategoryId - ID podkategorije
3712
3715
  * @param technologyId - ID tehnologije
3713
3716
  * @param contraindication - Kontraindikacija koja se dodaje
3714
3717
  * @returns Ažurirana tehnologija
3715
3718
  */
3716
- addContraindication(categoryId: string, subcategoryId: string, technologyId: string, contraindication: Contraindication): Promise<Technology | null>;
3719
+ addContraindication(technologyId: string, contraindication: Contraindication): Promise<Technology | null>;
3717
3720
  /**
3718
3721
  * Uklanja kontraindikaciju iz tehnologije
3719
- * @param categoryId - ID kategorije
3720
- * @param subcategoryId - ID podkategorije
3721
3722
  * @param technologyId - ID tehnologije
3722
3723
  * @param contraindication - Kontraindikacija koja se uklanja
3723
3724
  * @returns Ažurirana tehnologija
3724
3725
  */
3725
- removeContraindication(categoryId: string, subcategoryId: string, technologyId: string, contraindication: Contraindication): Promise<Technology | null>;
3726
+ removeContraindication(technologyId: string, contraindication: Contraindication): Promise<Technology | null>;
3726
3727
  /**
3727
3728
  * Dodaje benefit tehnologiji
3728
- * @param categoryId - ID kategorije
3729
- * @param subcategoryId - ID podkategorije
3730
3729
  * @param technologyId - ID tehnologije
3731
3730
  * @param benefit - Benefit koji se dodaje
3732
3731
  * @returns Ažurirana tehnologija
3733
3732
  */
3734
- addBenefit(categoryId: string, subcategoryId: string, technologyId: string, benefit: TreatmentBenefit): Promise<Technology | null>;
3733
+ addBenefit(technologyId: string, benefit: TreatmentBenefit): Promise<Technology | null>;
3735
3734
  /**
3736
3735
  * Uklanja benefit iz tehnologije
3737
- * @param categoryId - ID kategorije
3738
- * @param subcategoryId - ID podkategorije
3739
3736
  * @param technologyId - ID tehnologije
3740
3737
  * @param benefit - Benefit koji se uklanja
3741
3738
  * @returns Ažurirana tehnologija
3742
3739
  */
3743
- removeBenefit(categoryId: string, subcategoryId: string, technologyId: string, benefit: TreatmentBenefit): Promise<Technology | null>;
3740
+ removeBenefit(technologyId: string, benefit: TreatmentBenefit): Promise<Technology | null>;
3744
3741
  /**
3745
3742
  * Vraća sve blokirajuće uslove za tehnologiju
3746
- * @param categoryId - ID kategorije
3747
- * @param subcategoryId - ID podkategorije
3748
3743
  * @param technologyId - ID tehnologije
3749
3744
  * @returns Lista blokirajućih uslova
3750
3745
  */
3751
- getBlockingConditions(categoryId: string, subcategoryId: string, technologyId: string): Promise<BlockingCondition[]>;
3746
+ getBlockingConditions(technologyId: string): Promise<BlockingCondition[]>;
3752
3747
  /**
3753
3748
  * Vraća sve kontraindikacije za tehnologiju
3754
- * @param categoryId - ID kategorije
3755
- * @param subcategoryId - ID podkategorije
3756
3749
  * @param technologyId - ID tehnologije
3757
3750
  * @returns Lista kontraindikacija
3758
3751
  */
3759
- getContraindications(categoryId: string, subcategoryId: string, technologyId: string): Promise<Contraindication[]>;
3752
+ getContraindications(technologyId: string): Promise<Contraindication[]>;
3760
3753
  /**
3761
3754
  * Vraća sve benefite za tehnologiju
3762
- * @param categoryId - ID kategorije
3763
- * @param subcategoryId - ID podkategorije
3764
3755
  * @param technologyId - ID tehnologije
3765
3756
  * @returns Lista benefita
3766
3757
  */
3767
- getBenefits(categoryId: string, subcategoryId: string, technologyId: string): Promise<TreatmentBenefit[]>;
3758
+ getBenefits(technologyId: string): Promise<TreatmentBenefit[]>;
3768
3759
  /**
3769
3760
  * Ažurira zahteve sertifikacije za tehnologiju
3770
- * @param categoryId - ID kategorije
3771
- * @param subcategoryId - ID podkategorije
3772
3761
  * @param technologyId - ID tehnologije
3773
3762
  * @param certificationRequirement - Novi zahtevi sertifikacije
3774
3763
  * @returns Ažurirana tehnologija
3775
3764
  */
3776
- updateCertificationRequirement(categoryId: string, subcategoryId: string, technologyId: string, certificationRequirement: CertificationRequirement): Promise<Technology | null>;
3765
+ updateCertificationRequirement(technologyId: string, certificationRequirement: CertificationRequirement): Promise<Technology | null>;
3777
3766
  /**
3778
3767
  * Vraća zahteve sertifikacije za tehnologiju
3779
- * @param categoryId - ID kategorije
3780
- * @param subcategoryId - ID podkategorije
3781
3768
  * @param technologyId - ID tehnologije
3782
3769
  * @returns Zahtevi sertifikacije ili null ako tehnologija ne postoji
3783
3770
  */
3784
- getCertificationRequirement(categoryId: string, subcategoryId: string, technologyId: string): Promise<CertificationRequirement | null>;
3771
+ getCertificationRequirement(technologyId: string): Promise<CertificationRequirement | null>;
3772
+ /**
3773
+ * Proverava da li doktor ima odgovarajuću sertifikaciju za izvođenje tehnologije
3774
+ *
3775
+ * @param requiredCertification - Zahtevana sertifikacija za tehnologiju
3776
+ * @param practitionerCertification - Sertifikacija zdravstvenog radnika
3777
+ * @returns true ako zdravstveni radnik ima odgovarajuću sertifikaciju, false ako nema
3778
+ *
3779
+ * @example
3780
+ * const isValid = technologyService.validateCertification(
3781
+ * {
3782
+ * minimumLevel: CertificationLevel.DOCTOR,
3783
+ * requiredSpecialties: [CertificationSpecialty.INJECTABLES]
3784
+ * },
3785
+ * {
3786
+ * level: CertificationLevel.SPECIALIST,
3787
+ * specialties: [CertificationSpecialty.INJECTABLES, CertificationSpecialty.LASER]
3788
+ * }
3789
+ * );
3790
+ */
3791
+ validateCertification(requiredCertification: CertificationRequirement, practitionerCertification: PractitionerCertification): boolean;
3792
+ /**
3793
+ * Vraća sve tehnologije koje je zdravstveni radnik sertifikovan da izvodi
3794
+ * zajedno sa listama dozvoljenih familija, kategorija i podkategorija
3795
+ *
3796
+ * @param practitioner - Profil zdravstvenog radnika
3797
+ * @returns Objekat koji sadrži:
3798
+ * - technologies: Lista tehnologija koje zdravstveni radnik može da izvodi
3799
+ * - families: Lista familija procedura koje zdravstveni radnik može da izvodi
3800
+ * - categories: Lista ID-eva kategorija koje zdravstveni radnik može da izvodi
3801
+ * - subcategories: Lista ID-eva podkategorija koje zdravstveni radnik može da izvodi
3802
+ *
3803
+ * @example
3804
+ * const practitioner = {
3805
+ * certification: {
3806
+ * level: CertificationLevel.DOCTOR,
3807
+ * specialties: [CertificationSpecialty.INJECTABLES]
3808
+ * }
3809
+ * };
3810
+ * const allowedTechnologies = await technologyService.getAllowedTechnologies(practitioner);
3811
+ * console.log(allowedTechnologies.families); // [ProcedureFamily.AESTHETICS]
3812
+ * console.log(allowedTechnologies.categories); // ["category1", "category2"]
3813
+ * console.log(allowedTechnologies.subcategories); // ["subcategory1", "subcategory2"]
3814
+ */
3815
+ getAllowedTechnologies(practitioner: Practitioner): Promise<{
3816
+ technologies: Technology[];
3817
+ families: ProcedureFamily[];
3818
+ categories: string[];
3819
+ subcategories: string[];
3820
+ }>;
3785
3821
  }
3786
3822
 
3787
3823
  declare class BrandService extends BaseService {
@@ -4859,6 +4895,33 @@ declare class ProcedureService extends BaseService {
4859
4895
  * @param id - The ID of the procedure to deactivate
4860
4896
  */
4861
4897
  deactivateProcedure(id: string): Promise<void>;
4898
+ /**
4899
+ * Gets all procedures that a practitioner is certified to perform
4900
+ * @param practitioner - The practitioner's profile
4901
+ * @returns Object containing:
4902
+ * - procedures: List of procedures the practitioner can perform
4903
+ * - families: List of procedure families the practitioner can perform
4904
+ * - categories: List of category IDs the practitioner can perform
4905
+ * - subcategories: List of subcategory IDs the practitioner can perform
4906
+ *
4907
+ * @example
4908
+ * const practitioner = {
4909
+ * certification: {
4910
+ * level: CertificationLevel.DOCTOR,
4911
+ * specialties: [CertificationSpecialty.INJECTABLES]
4912
+ * }
4913
+ * };
4914
+ * const allowedProcedures = await procedureService.getAllowedProcedures(practitioner);
4915
+ * console.log(allowedProcedures.families); // [ProcedureFamily.AESTHETICS]
4916
+ * console.log(allowedProcedures.categories); // ["category1", "category2"]
4917
+ * console.log(allowedProcedures.subcategories); // ["subcategory1", "subcategory2"]
4918
+ */
4919
+ getAllowedProcedures(practitioner: Practitioner): Promise<{
4920
+ procedures: Procedure[];
4921
+ families: ProcedureFamily[];
4922
+ categories: string[];
4923
+ subcategories: string[];
4924
+ }>;
4862
4925
  }
4863
4926
 
4864
4927
  /**