@blackcode_sa/metaestetics-api 1.15.16 → 1.15.17-staging.0

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.
Files changed (326) hide show
  1. package/dist/admin/index.d.mts +377 -222
  2. package/dist/admin/index.d.ts +377 -222
  3. package/dist/admin/index.js +625 -206
  4. package/dist/admin/index.mjs +624 -206
  5. package/dist/backoffice/index.d.mts +24 -0
  6. package/dist/backoffice/index.d.ts +24 -0
  7. package/dist/index.d.mts +292 -4
  8. package/dist/index.d.ts +292 -4
  9. package/dist/index.js +1142 -630
  10. package/dist/index.mjs +1137 -617
  11. package/package.json +2 -1
  12. package/src/__mocks__/firstore.ts +10 -10
  13. package/src/admin/aggregation/README.md +79 -79
  14. package/src/admin/aggregation/appointment/README.md +151 -129
  15. package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +2137 -2091
  16. package/src/admin/aggregation/appointment/index.ts +1 -1
  17. package/src/admin/aggregation/clinic/README.md +52 -52
  18. package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +966 -966
  19. package/src/admin/aggregation/clinic/index.ts +1 -1
  20. package/src/admin/aggregation/forms/README.md +13 -13
  21. package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
  22. package/src/admin/aggregation/forms/index.ts +1 -1
  23. package/src/admin/aggregation/index.ts +8 -8
  24. package/src/admin/aggregation/patient/README.md +27 -27
  25. package/src/admin/aggregation/patient/index.ts +1 -1
  26. package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
  27. package/src/admin/aggregation/practitioner/README.md +42 -42
  28. package/src/admin/aggregation/practitioner/index.ts +1 -1
  29. package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
  30. package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
  31. package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
  32. package/src/admin/aggregation/procedure/README.md +43 -43
  33. package/src/admin/aggregation/procedure/index.ts +1 -1
  34. package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
  35. package/src/admin/aggregation/reviews/index.ts +1 -1
  36. package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +689 -689
  37. package/src/admin/analytics/analytics.admin.service.ts +278 -278
  38. package/src/admin/analytics/index.ts +2 -2
  39. package/src/admin/booking/README.md +184 -125
  40. package/src/admin/booking/booking.admin.ts +1330 -1073
  41. package/src/admin/booking/booking.calculator.ts +850 -712
  42. package/src/admin/booking/booking.types.ts +76 -59
  43. package/src/admin/booking/index.ts +3 -3
  44. package/src/admin/booking/timezones-problem.md +185 -185
  45. package/src/admin/calendar/README.md +62 -7
  46. package/src/admin/calendar/calendar.admin.service.ts +345 -345
  47. package/src/admin/calendar/index.ts +2 -1
  48. package/src/admin/calendar/resource-calendar.admin.ts +198 -0
  49. package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
  50. package/src/admin/documentation-templates/index.ts +1 -1
  51. package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
  52. package/src/admin/free-consultation/index.ts +1 -1
  53. package/src/admin/index.ts +83 -83
  54. package/src/admin/logger/index.ts +78 -78
  55. package/src/admin/mailing/README.md +139 -139
  56. package/src/admin/mailing/appointment/appointment.mailing.service.ts +1253 -1253
  57. package/src/admin/mailing/appointment/index.ts +1 -1
  58. package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
  59. package/src/admin/mailing/base.mailing.service.ts +208 -208
  60. package/src/admin/mailing/clinicWelcome/clinicWelcome.mailing.ts +292 -292
  61. package/src/admin/mailing/clinicWelcome/index.ts +1 -1
  62. package/src/admin/mailing/clinicWelcome/templates/welcome.template.ts +225 -225
  63. package/src/admin/mailing/index.ts +5 -5
  64. package/src/admin/mailing/patientInvite/index.ts +2 -2
  65. package/src/admin/mailing/patientInvite/patientInvite.mailing.ts +415 -415
  66. package/src/admin/mailing/patientInvite/templates/invitation.template.ts +105 -105
  67. package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
  68. package/src/admin/mailing/practitionerInvite/index.ts +2 -2
  69. package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
  70. package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
  71. package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
  72. package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
  73. package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
  74. package/src/admin/notifications/index.ts +1 -1
  75. package/src/admin/notifications/notifications.admin.ts +818 -818
  76. package/src/admin/requirements/README.md +128 -128
  77. package/src/admin/requirements/index.ts +1 -1
  78. package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
  79. package/src/admin/users/index.ts +1 -1
  80. package/src/admin/users/user-profile.admin.ts +405 -405
  81. package/src/backoffice/constants/certification.constants.ts +13 -13
  82. package/src/backoffice/constants/index.ts +1 -1
  83. package/src/backoffice/errors/backoffice.errors.ts +181 -181
  84. package/src/backoffice/errors/index.ts +1 -1
  85. package/src/backoffice/expo-safe/README.md +26 -26
  86. package/src/backoffice/expo-safe/index.ts +41 -41
  87. package/src/backoffice/index.ts +5 -5
  88. package/src/backoffice/services/FIXES_README.md +102 -102
  89. package/src/backoffice/services/README.md +57 -57
  90. package/src/backoffice/services/analytics.service.proposal.md +863 -863
  91. package/src/backoffice/services/analytics.service.summary.md +143 -143
  92. package/src/backoffice/services/brand.service.ts +260 -260
  93. package/src/backoffice/services/category.service.ts +384 -384
  94. package/src/backoffice/services/constants.service.ts +385 -385
  95. package/src/backoffice/services/documentation-template.service.ts +202 -202
  96. package/src/backoffice/services/index.ts +10 -10
  97. package/src/backoffice/services/migrate-products.ts +116 -116
  98. package/src/backoffice/services/product.service.ts +557 -557
  99. package/src/backoffice/services/requirement.service.ts +235 -235
  100. package/src/backoffice/services/subcategory.service.ts +461 -461
  101. package/src/backoffice/services/technology.service.ts +1153 -1153
  102. package/src/backoffice/types/README.md +12 -12
  103. package/src/backoffice/types/admin-constants.types.ts +69 -69
  104. package/src/backoffice/types/brand.types.ts +29 -29
  105. package/src/backoffice/types/category.types.ts +67 -67
  106. package/src/backoffice/types/documentation-templates.types.ts +28 -28
  107. package/src/backoffice/types/index.ts +10 -10
  108. package/src/backoffice/types/procedure-product.types.ts +38 -38
  109. package/src/backoffice/types/product.types.ts +239 -239
  110. package/src/backoffice/types/requirement.types.ts +63 -63
  111. package/src/backoffice/types/static/README.md +18 -18
  112. package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
  113. package/src/backoffice/types/static/certification.types.ts +37 -37
  114. package/src/backoffice/types/static/contraindication.types.ts +19 -19
  115. package/src/backoffice/types/static/index.ts +6 -6
  116. package/src/backoffice/types/static/pricing.types.ts +16 -16
  117. package/src/backoffice/types/static/procedure-family.types.ts +14 -14
  118. package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
  119. package/src/backoffice/types/subcategory.types.ts +34 -34
  120. package/src/backoffice/types/technology.types.ts +168 -168
  121. package/src/backoffice/validations/index.ts +1 -1
  122. package/src/backoffice/validations/schemas.ts +164 -164
  123. package/src/config/__mocks__/firebase.ts +99 -99
  124. package/src/config/firebase.ts +78 -78
  125. package/src/config/index.ts +17 -17
  126. package/src/config/tiers.config.ts +255 -229
  127. package/src/errors/auth.error.ts +6 -6
  128. package/src/errors/auth.errors.ts +211 -211
  129. package/src/errors/clinic.errors.ts +32 -32
  130. package/src/errors/firebase.errors.ts +47 -47
  131. package/src/errors/user.errors.ts +99 -99
  132. package/src/index.backup.ts +407 -407
  133. package/src/index.ts +6 -6
  134. package/src/locales/en.ts +31 -31
  135. package/src/recommender/admin/index.ts +1 -1
  136. package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
  137. package/src/recommender/front/index.ts +1 -1
  138. package/src/recommender/front/services/onboarding.service.ts +5 -5
  139. package/src/recommender/front/services/recommender.service.ts +3 -3
  140. package/src/recommender/index.ts +1 -1
  141. package/src/services/PATIENTAUTH.MD +197 -197
  142. package/src/services/README.md +106 -106
  143. package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
  144. package/src/services/__tests__/auth/auth.setup.ts +298 -298
  145. package/src/services/__tests__/auth.service.test.ts +310 -310
  146. package/src/services/__tests__/base.service.test.ts +36 -36
  147. package/src/services/__tests__/user.service.test.ts +530 -530
  148. package/src/services/analytics/ARCHITECTURE.md +199 -199
  149. package/src/services/analytics/CLOUD_FUNCTIONS.md +225 -225
  150. package/src/services/analytics/GROUPED_ANALYTICS.md +501 -501
  151. package/src/services/analytics/QUICK_START.md +393 -393
  152. package/src/services/analytics/README.md +304 -304
  153. package/src/services/analytics/SUMMARY.md +141 -141
  154. package/src/services/analytics/TRENDS.md +380 -380
  155. package/src/services/analytics/USAGE_GUIDE.md +518 -518
  156. package/src/services/analytics/analytics-cloud.service.ts +222 -222
  157. package/src/services/analytics/analytics.service.ts +2148 -2148
  158. package/src/services/analytics/index.ts +4 -4
  159. package/src/services/analytics/review-analytics.service.ts +941 -941
  160. package/src/services/analytics/utils/appointment-filtering.utils.ts +138 -138
  161. package/src/services/analytics/utils/cost-calculation.utils.ts +182 -182
  162. package/src/services/analytics/utils/grouping.utils.ts +434 -434
  163. package/src/services/analytics/utils/stored-analytics.utils.ts +347 -347
  164. package/src/services/analytics/utils/time-calculation.utils.ts +186 -186
  165. package/src/services/analytics/utils/trend-calculation.utils.ts +200 -200
  166. package/src/services/appointment/README.md +17 -17
  167. package/src/services/appointment/appointment.service.ts +2943 -2941
  168. package/src/services/appointment/index.ts +1 -1
  169. package/src/services/appointment/utils/appointment.utils.ts +620 -620
  170. package/src/services/appointment/utils/extended-procedure.utils.ts +354 -354
  171. package/src/services/appointment/utils/form-initialization.utils.ts +516 -516
  172. package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
  173. package/src/services/appointment/utils/zone-management.utils.ts +468 -468
  174. package/src/services/appointment/utils/zone-photo.utils.ts +302 -302
  175. package/src/services/auth/auth.service.ts +1435 -1435
  176. package/src/services/auth/auth.v2.service.ts +961 -961
  177. package/src/services/auth/index.ts +7 -7
  178. package/src/services/auth/utils/error.utils.ts +90 -90
  179. package/src/services/auth/utils/firebase.utils.ts +49 -49
  180. package/src/services/auth/utils/index.ts +21 -21
  181. package/src/services/auth/utils/practitioner.utils.ts +125 -125
  182. package/src/services/base.service.ts +41 -41
  183. package/src/services/calendar/calendar.service.ts +1077 -1077
  184. package/src/services/calendar/calendar.v2.service.ts +1693 -1693
  185. package/src/services/calendar/calendar.v3.service.ts +313 -313
  186. package/src/services/calendar/externalCalendar.service.ts +178 -178
  187. package/src/services/calendar/index.ts +5 -5
  188. package/src/services/calendar/synced-calendars.service.ts +743 -743
  189. package/src/services/calendar/utils/appointment.utils.ts +265 -265
  190. package/src/services/calendar/utils/calendar-event.utils.ts +676 -676
  191. package/src/services/calendar/utils/clinic.utils.ts +237 -237
  192. package/src/services/calendar/utils/docs.utils.ts +157 -157
  193. package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
  194. package/src/services/calendar/utils/index.ts +8 -8
  195. package/src/services/calendar/utils/patient.utils.ts +198 -198
  196. package/src/services/calendar/utils/practitioner.utils.ts +221 -221
  197. package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
  198. package/src/services/clinic/README.md +204 -204
  199. package/src/services/clinic/__tests__/clinic-admin.service.test.ts +265 -265
  200. package/src/services/clinic/__tests__/clinic-group.service.test.ts +222 -222
  201. package/src/services/clinic/__tests__/clinic.service.test.ts +302 -302
  202. package/src/services/clinic/billing-transactions.service.ts +217 -217
  203. package/src/services/clinic/clinic-admin.service.ts +202 -202
  204. package/src/services/clinic/clinic-group.service.ts +310 -310
  205. package/src/services/clinic/clinic.service.ts +720 -720
  206. package/src/services/clinic/index.ts +5 -5
  207. package/src/services/clinic/practitioner-invite.service.ts +519 -519
  208. package/src/services/clinic/utils/admin.utils.ts +551 -551
  209. package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
  210. package/src/services/clinic/utils/clinic.utils.ts +1023 -1023
  211. package/src/services/clinic/utils/filter.utils.d.ts +23 -23
  212. package/src/services/clinic/utils/filter.utils.ts +462 -462
  213. package/src/services/clinic/utils/index.ts +10 -10
  214. package/src/services/clinic/utils/photos.utils.ts +188 -188
  215. package/src/services/clinic/utils/search.utils.ts +83 -83
  216. package/src/services/clinic/utils/tag.utils.ts +124 -124
  217. package/src/services/documentation-templates/documentation-template.service.ts +537 -537
  218. package/src/services/documentation-templates/filled-document.service.ts +597 -597
  219. package/src/services/documentation-templates/index.ts +2 -2
  220. package/src/services/index.ts +16 -15
  221. package/src/services/media/index.ts +1 -1
  222. package/src/services/media/media.service.ts +418 -418
  223. package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
  224. package/src/services/notifications/index.ts +1 -1
  225. package/src/services/notifications/notification.service.ts +215 -215
  226. package/src/services/patient/README.md +48 -48
  227. package/src/services/patient/To-Do.md +43 -43
  228. package/src/services/patient/__tests__/patient.service.test.ts +286 -286
  229. package/src/services/patient/index.ts +2 -2
  230. package/src/services/patient/patient.service.ts +1021 -1021
  231. package/src/services/patient/patientRequirements.service.ts +309 -309
  232. package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
  233. package/src/services/patient/utils/body-assessment.utils.ts +159 -159
  234. package/src/services/patient/utils/clinic.utils.ts +159 -159
  235. package/src/services/patient/utils/docs.utils.ts +142 -142
  236. package/src/services/patient/utils/hair-scalp-assessment.utils.ts +158 -158
  237. package/src/services/patient/utils/index.ts +9 -9
  238. package/src/services/patient/utils/location.utils.ts +126 -126
  239. package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
  240. package/src/services/patient/utils/medical.utils.ts +458 -458
  241. package/src/services/patient/utils/practitioner.utils.ts +260 -260
  242. package/src/services/patient/utils/pre-surgical-assessment.utils.ts +161 -161
  243. package/src/services/patient/utils/profile.utils.ts +510 -510
  244. package/src/services/patient/utils/sensitive.utils.ts +260 -260
  245. package/src/services/patient/utils/skin-quality-assessment.utils.ts +160 -160
  246. package/src/services/patient/utils/token.utils.ts +211 -211
  247. package/src/services/practitioner/README.md +145 -145
  248. package/src/services/practitioner/index.ts +1 -1
  249. package/src/services/practitioner/practitioner.service.ts +2355 -2354
  250. package/src/services/procedure/README.md +163 -163
  251. package/src/services/procedure/index.ts +1 -1
  252. package/src/services/procedure/procedure.service.ts +2521 -2521
  253. package/src/services/resource/README.md +119 -0
  254. package/src/services/resource/index.ts +1 -0
  255. package/src/services/resource/resource.service.ts +555 -0
  256. package/src/services/reviews/index.ts +1 -1
  257. package/src/services/reviews/reviews.service.ts +745 -745
  258. package/src/services/tier-enforcement.ts +240 -240
  259. package/src/services/user/index.ts +1 -1
  260. package/src/services/user/user.service.ts +533 -533
  261. package/src/services/user/user.v2.service.ts +467 -467
  262. package/src/types/analytics/analytics.types.ts +597 -597
  263. package/src/types/analytics/grouped-analytics.types.ts +173 -173
  264. package/src/types/analytics/index.ts +4 -4
  265. package/src/types/analytics/stored-analytics.types.ts +137 -137
  266. package/src/types/appointment/index.ts +524 -517
  267. package/src/types/calendar/index.ts +261 -260
  268. package/src/types/calendar/synced-calendar.types.ts +66 -66
  269. package/src/types/clinic/index.ts +530 -529
  270. package/src/types/clinic/practitioner-invite.types.ts +91 -91
  271. package/src/types/clinic/preferences.types.ts +159 -159
  272. package/src/types/clinic/rbac.types.ts +64 -63
  273. package/src/types/clinic/to-do +3 -3
  274. package/src/types/documentation-templates/index.ts +308 -308
  275. package/src/types/index.ts +50 -47
  276. package/src/types/notifications/README.md +77 -77
  277. package/src/types/notifications/index.ts +300 -300
  278. package/src/types/patient/aesthetic-analysis.types.ts +66 -66
  279. package/src/types/patient/allergies.ts +58 -58
  280. package/src/types/patient/body-assessment.types.ts +93 -93
  281. package/src/types/patient/hair-scalp-assessment.types.ts +98 -98
  282. package/src/types/patient/index.ts +279 -279
  283. package/src/types/patient/medical-info.types.ts +152 -152
  284. package/src/types/patient/patient-requirements.ts +92 -92
  285. package/src/types/patient/pre-surgical-assessment.types.ts +95 -95
  286. package/src/types/patient/skin-quality-assessment.types.ts +105 -105
  287. package/src/types/patient/token.types.ts +61 -61
  288. package/src/types/practitioner/index.ts +208 -208
  289. package/src/types/procedure/index.ts +189 -183
  290. package/src/types/profile/index.ts +39 -39
  291. package/src/types/resource/README.md +153 -0
  292. package/src/types/resource/index.ts +199 -0
  293. package/src/types/reviews/index.ts +132 -132
  294. package/src/types/tz-lookup.d.ts +4 -4
  295. package/src/types/user/index.ts +60 -60
  296. package/src/utils/TIMESTAMPS.md +176 -176
  297. package/src/utils/TimestampUtils.ts +241 -241
  298. package/src/utils/index.ts +1 -1
  299. package/src/validations/README.md +94 -0
  300. package/src/validations/appointment.schema.ts +589 -589
  301. package/src/validations/calendar.schema.ts +225 -225
  302. package/src/validations/clinic.schema.ts +494 -494
  303. package/src/validations/common.schema.ts +25 -25
  304. package/src/validations/documentation-templates/index.ts +1 -1
  305. package/src/validations/documentation-templates/template.schema.ts +220 -220
  306. package/src/validations/documentation-templates.schema.ts +10 -10
  307. package/src/validations/index.ts +21 -20
  308. package/src/validations/media.schema.ts +10 -10
  309. package/src/validations/notification.schema.ts +90 -90
  310. package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
  311. package/src/validations/patient/body-assessment.schema.ts +82 -82
  312. package/src/validations/patient/hair-scalp-assessment.schema.ts +70 -70
  313. package/src/validations/patient/medical-info.schema.ts +177 -177
  314. package/src/validations/patient/patient-requirements.schema.ts +84 -84
  315. package/src/validations/patient/pre-surgical-assessment.schema.ts +78 -78
  316. package/src/validations/patient/skin-quality-assessment.schema.ts +70 -70
  317. package/src/validations/patient/token.schema.ts +29 -29
  318. package/src/validations/patient.schema.ts +217 -217
  319. package/src/validations/practitioner.schema.ts +224 -224
  320. package/src/validations/procedure-product.schema.ts +41 -41
  321. package/src/validations/procedure.schema.ts +136 -124
  322. package/src/validations/profile-info.schema.ts +41 -41
  323. package/src/validations/resource.schema.ts +57 -0
  324. package/src/validations/reviews.schema.ts +195 -195
  325. package/src/validations/schemas.ts +109 -109
  326. package/src/validations/shared.schema.ts +78 -78
@@ -1,183 +1,189 @@
1
- import {
2
- BlockingCondition,
3
- CertificationRequirement,
4
- ProcedureFamily,
5
- } from "../../backoffice/types";
6
- import {
7
- ContraindicationDynamic,
8
- TreatmentBenefitDynamic,
9
- } from "../../backoffice/types/admin-constants.types";
10
- import { Requirement } from "../../backoffice/types/requirement.types";
11
- import { Category } from "../../backoffice/types/category.types";
12
- import { Subcategory } from "../../backoffice/types/subcategory.types";
13
- import { Technology } from "../../backoffice/types/technology.types";
14
- import { Product } from "../../backoffice/types/product.types";
15
- import { ClinicInfo, DoctorInfo } from "../../types/";
16
- import { ProcedureReviewInfo } from "../reviews";
17
- import { TechnologyDocumentationTemplate } from "../../backoffice/types/technology.types";
18
- import {
19
- PricingMeasure,
20
- Currency,
21
- } from "../../backoffice/types/static/pricing.types";
22
- import { MediaResource } from "../../services/media/media.service";
23
- import type { ProcedureProduct } from "../../backoffice/types/procedure-product.types";
24
-
25
- /**
26
- * Procedure represents a specific medical procedure that can be performed by a practitioner in a clinic
27
- * It inherits properties from technology and adds clinic/practitioner specific details
28
- */
29
- export interface Procedure {
30
- /** Unique identifier of the procedure */
31
- id: string;
32
- /** Name of the procedure */
33
- name: string;
34
- /** Lowercase version of the name for case-insensitive search */
35
- nameLower: string;
36
- /** Photos of the procedure */
37
- photos?: MediaResource[];
38
- /** Detailed description of the procedure */
39
- description: string;
40
- /** Family of procedures this belongs to (aesthetics/surgery) */
41
- family: ProcedureFamily;
42
- /** Category this procedure belongs to */
43
- category: Category;
44
- /** Subcategory this procedure belongs to */
45
- subcategory: Subcategory;
46
- /** Technology used in this procedure */
47
- technology: Technology;
48
- /** Default product used in this procedure (optional for consultations) */
49
- product?: Product;
50
- /** Default price of the procedure */
51
- price: number;
52
- /** Currency for the price */
53
- currency: Currency;
54
- /** How the price is measured (per ml, per zone, etc.) - for default product*/
55
- pricingMeasure: PricingMeasure;
56
- /** Duration of the procedure in minutes */
57
- productsMetadata?: ProcedureProduct[];
58
- duration: number;
59
- /** Blocking conditions that prevent this procedure */
60
- blockingConditions: BlockingCondition[];
61
- /** Treatment benefits of this procedure */
62
- treatmentBenefits: TreatmentBenefitDynamic[];
63
- /** A list of just the string IDs of the treatment benefits, for efficient querying. */
64
- treatmentBenefitIds: string[];
65
- /** Contraindications of this procedure */
66
- contraindications: ContraindicationDynamic[];
67
- /** A list of just the string IDs of the contraindications, for efficient querying. */
68
- contraindicationIds: string[];
69
- /** Pre-procedure requirements */
70
- preRequirements: Requirement[];
71
- /** Post-procedure requirements */
72
- postRequirements: Requirement[];
73
- /** Certification requirements for performing this procedure */
74
- certificationRequirement: CertificationRequirement;
75
- /** Documentation templates required for this procedure */
76
- documentationTemplates: TechnologyDocumentationTemplate[];
77
- /** ID of the practitioner who performs this procedure */
78
- practitionerId: string;
79
- /** ID of the clinic branch where this procedure is performed */
80
- clinicBranchId: string;
81
- /** Aggregated clinic information */
82
- clinicInfo: ClinicInfo;
83
- /** Aggregated doctor information */
84
- doctorInfo: DoctorInfo;
85
- /** Aggregated review information for this procedure */
86
- reviewInfo: ProcedureReviewInfo;
87
- /** Whether this procedure is active */
88
- isActive: boolean;
89
- /** When this procedure was created */
90
- createdAt: Date;
91
- /** When this procedure was last updated */
92
- updatedAt: Date;
93
- }
94
-
95
- /**
96
- * Data required to create a new procedure
97
- */
98
- export interface CreateProcedureData {
99
- name: string;
100
- /** Lowercase version of the name for case-insensitive search */
101
- nameLower: string;
102
- description: string;
103
- family: ProcedureFamily;
104
- categoryId: string;
105
- subcategoryId: string;
106
- technologyId: string;
107
- productId?: string;
108
- price: number;
109
- productsMetadata?: {
110
- productId: string;
111
- price: number;
112
- currency: Currency;
113
- pricingMeasure: PricingMeasure;
114
- isDefault?: boolean;
115
- }[];
116
- currency: Currency;
117
- pricingMeasure: PricingMeasure;
118
- duration: number;
119
- practitionerId: string;
120
- clinicBranchId: string;
121
- photos?: MediaResource[];
122
- }
123
-
124
- /**
125
- * Data that can be updated for an existing procedure
126
- */
127
- export interface UpdateProcedureData {
128
- name?: string;
129
- /** Lowercase version of the name for case-insensitive search */
130
- nameLower?: string;
131
- description?: string;
132
- price?: number;
133
- currency?: Currency;
134
- pricingMeasure?: PricingMeasure;
135
- productsMetadata?: {
136
- productId: string;
137
- price: number;
138
- currency: Currency;
139
- pricingMeasure: PricingMeasure;
140
- isDefault?: boolean;
141
- }[];
142
- duration?: number;
143
- isActive?: boolean;
144
- practitionerId?: string;
145
- categoryId?: string;
146
- subcategoryId?: string;
147
- technologyId?: string;
148
- productId?: string;
149
- clinicBranchId?: string;
150
- photos?: MediaResource[];
151
- }
152
-
153
- /**
154
- * Collection name for procedures in Firestore
155
- */
156
- export const PROCEDURES_COLLECTION = "procedures";
157
-
158
- /**
159
- * Aggregated summary information for a procedure.
160
- * Used in arrays within Clinic and Practitioner documents for quick display.
161
- */
162
- export interface ProcedureSummaryInfo {
163
- id: string;
164
- name: string;
165
- description?: string;
166
- photo?: string; // Still using empty string if no source found
167
- family: ProcedureFamily;
168
- categoryName: string; // Use names for aggregation
169
- subcategoryName: string; // Use names for aggregation
170
- technologyName: string; // Use names for aggregation
171
- brandName?: string; // Added: Name of the brand used (if applicable)
172
- productName?: string; // Added: Name of the product used (if applicable)
173
- price: number;
174
- priceMin?: number;
175
- priceMax?: number;
176
- pricingMeasure: PricingMeasure;
177
- currency: Currency;
178
- duration: number;
179
- clinicId: string;
180
- clinicName: string;
181
- practitionerId: string;
182
- practitionerName: string;
183
- }
1
+ import {
2
+ BlockingCondition,
3
+ CertificationRequirement,
4
+ ProcedureFamily,
5
+ } from "../../backoffice/types";
6
+ import {
7
+ ContraindicationDynamic,
8
+ TreatmentBenefitDynamic,
9
+ } from "../../backoffice/types/admin-constants.types";
10
+ import { Requirement } from "../../backoffice/types/requirement.types";
11
+ import { Category } from "../../backoffice/types/category.types";
12
+ import { Subcategory } from "../../backoffice/types/subcategory.types";
13
+ import { Technology } from "../../backoffice/types/technology.types";
14
+ import { Product } from "../../backoffice/types/product.types";
15
+ import { ClinicInfo, DoctorInfo } from "../../types/";
16
+ import { ProcedureReviewInfo } from "../reviews";
17
+ import { TechnologyDocumentationTemplate } from "../../backoffice/types/technology.types";
18
+ import {
19
+ PricingMeasure,
20
+ Currency,
21
+ } from "../../backoffice/types/static/pricing.types";
22
+ import { MediaResource } from "../../services/media/media.service";
23
+ import type { ProcedureProduct } from "../../backoffice/types/procedure-product.types";
24
+ import type { ResourceRequirement } from "../resource";
25
+
26
+ /**
27
+ * Procedure represents a specific medical procedure that can be performed by a practitioner in a clinic
28
+ * It inherits properties from technology and adds clinic/practitioner specific details
29
+ */
30
+ export interface Procedure {
31
+ /** Unique identifier of the procedure */
32
+ id: string;
33
+ /** Name of the procedure */
34
+ name: string;
35
+ /** Lowercase version of the name for case-insensitive search */
36
+ nameLower: string;
37
+ /** Photos of the procedure */
38
+ photos?: MediaResource[];
39
+ /** Detailed description of the procedure */
40
+ description: string;
41
+ /** Family of procedures this belongs to (aesthetics/surgery) */
42
+ family: ProcedureFamily;
43
+ /** Category this procedure belongs to */
44
+ category: Category;
45
+ /** Subcategory this procedure belongs to */
46
+ subcategory: Subcategory;
47
+ /** Technology used in this procedure */
48
+ technology: Technology;
49
+ /** Default product used in this procedure (optional for consultations) */
50
+ product?: Product;
51
+ /** Default price of the procedure */
52
+ price: number;
53
+ /** Currency for the price */
54
+ currency: Currency;
55
+ /** How the price is measured (per ml, per zone, etc.) - for default product*/
56
+ pricingMeasure: PricingMeasure;
57
+ /** Duration of the procedure in minutes */
58
+ productsMetadata?: ProcedureProduct[];
59
+ duration: number;
60
+ /** Blocking conditions that prevent this procedure */
61
+ blockingConditions: BlockingCondition[];
62
+ /** Treatment benefits of this procedure */
63
+ treatmentBenefits: TreatmentBenefitDynamic[];
64
+ /** A list of just the string IDs of the treatment benefits, for efficient querying. */
65
+ treatmentBenefitIds: string[];
66
+ /** Contraindications of this procedure */
67
+ contraindications: ContraindicationDynamic[];
68
+ /** A list of just the string IDs of the contraindications, for efficient querying. */
69
+ contraindicationIds: string[];
70
+ /** Pre-procedure requirements */
71
+ preRequirements: Requirement[];
72
+ /** Post-procedure requirements */
73
+ postRequirements: Requirement[];
74
+ /** Certification requirements for performing this procedure */
75
+ certificationRequirement: CertificationRequirement;
76
+ /** Documentation templates required for this procedure */
77
+ documentationTemplates: TechnologyDocumentationTemplate[];
78
+ /** ID of the practitioner who performs this procedure */
79
+ practitionerId: string;
80
+ /** ID of the clinic branch where this procedure is performed */
81
+ clinicBranchId: string;
82
+ /** Aggregated clinic information */
83
+ clinicInfo: ClinicInfo;
84
+ /** Aggregated doctor information */
85
+ doctorInfo: DoctorInfo;
86
+ /** Aggregated review information for this procedure */
87
+ reviewInfo: ProcedureReviewInfo;
88
+ /** Optional resources required for this procedure (e.g., surgery room, device) */
89
+ resourceRequirements?: ResourceRequirement[];
90
+ /** Whether this procedure is active */
91
+ isActive: boolean;
92
+ /** When this procedure was created */
93
+ createdAt: Date;
94
+ /** When this procedure was last updated */
95
+ updatedAt: Date;
96
+ }
97
+
98
+ /**
99
+ * Data required to create a new procedure
100
+ */
101
+ export interface CreateProcedureData {
102
+ name: string;
103
+ /** Lowercase version of the name for case-insensitive search */
104
+ nameLower: string;
105
+ description: string;
106
+ family: ProcedureFamily;
107
+ categoryId: string;
108
+ subcategoryId: string;
109
+ technologyId: string;
110
+ productId?: string;
111
+ price: number;
112
+ productsMetadata?: {
113
+ productId: string;
114
+ price: number;
115
+ currency: Currency;
116
+ pricingMeasure: PricingMeasure;
117
+ isDefault?: boolean;
118
+ }[];
119
+ currency: Currency;
120
+ pricingMeasure: PricingMeasure;
121
+ duration: number;
122
+ practitionerId: string;
123
+ clinicBranchId: string;
124
+ photos?: MediaResource[];
125
+ resourceRequirements?: ResourceRequirement[];
126
+ }
127
+
128
+ /**
129
+ * Data that can be updated for an existing procedure
130
+ */
131
+ export interface UpdateProcedureData {
132
+ name?: string;
133
+ /** Lowercase version of the name for case-insensitive search */
134
+ nameLower?: string;
135
+ description?: string;
136
+ price?: number;
137
+ currency?: Currency;
138
+ pricingMeasure?: PricingMeasure;
139
+ productsMetadata?: {
140
+ productId: string;
141
+ price: number;
142
+ currency: Currency;
143
+ pricingMeasure: PricingMeasure;
144
+ isDefault?: boolean;
145
+ }[];
146
+ duration?: number;
147
+ isActive?: boolean;
148
+ practitionerId?: string;
149
+ categoryId?: string;
150
+ subcategoryId?: string;
151
+ technologyId?: string;
152
+ productId?: string;
153
+ clinicBranchId?: string;
154
+ photos?: MediaResource[];
155
+ resourceRequirements?: ResourceRequirement[];
156
+ }
157
+
158
+ /**
159
+ * Collection name for procedures in Firestore
160
+ */
161
+ export const PROCEDURES_COLLECTION = "procedures";
162
+
163
+ /**
164
+ * Aggregated summary information for a procedure.
165
+ * Used in arrays within Clinic and Practitioner documents for quick display.
166
+ */
167
+ export interface ProcedureSummaryInfo {
168
+ id: string;
169
+ name: string;
170
+ description?: string;
171
+ photo?: string; // Still using empty string if no source found
172
+ family: ProcedureFamily;
173
+ categoryName: string; // Use names for aggregation
174
+ subcategoryName: string; // Use names for aggregation
175
+ technologyName: string; // Use names for aggregation
176
+ brandName?: string; // Added: Name of the brand used (if applicable)
177
+ productName?: string; // Added: Name of the product used (if applicable)
178
+ price: number;
179
+ priceMin?: number;
180
+ priceMax?: number;
181
+ pricingMeasure: PricingMeasure;
182
+ currency: Currency;
183
+ duration: number;
184
+ clinicId: string;
185
+ clinicName: string;
186
+ practitionerId: string;
187
+ practitionerName: string;
188
+ resourceRequirements?: ResourceRequirement[];
189
+ }
@@ -1,39 +1,39 @@
1
- import { Timestamp } from "firebase-admin/firestore";
2
- import { ClinicLocation, ClinicContactInfo } from "../clinic";
3
- import { PractitionerCertification } from "../practitioner";
4
- import { Gender } from "../patient";
5
- /**
6
- * Interface for clinic profile information
7
- */
8
- export interface ClinicInfo {
9
- id: string;
10
- featuredPhoto: string;
11
- name: string;
12
- description?: string | null;
13
- location: ClinicLocation;
14
- contactInfo: ClinicContactInfo;
15
- }
16
-
17
- /**
18
- * Interface for practitioner profile information
19
- */
20
- export interface PractitionerProfileInfo {
21
- id: string;
22
- practitionerPhoto: string | null;
23
- name: string;
24
- email: string;
25
- phone: string | null;
26
- certification: PractitionerCertification;
27
- }
28
-
29
- /**
30
- * Interface for patient profile information
31
- */
32
- export interface PatientProfileInfo {
33
- id: string;
34
- fullName: string;
35
- email: string;
36
- phone: string | null;
37
- dateOfBirth: Timestamp;
38
- gender: Gender;
39
- }
1
+ import { Timestamp } from "firebase-admin/firestore";
2
+ import { ClinicLocation, ClinicContactInfo } from "../clinic";
3
+ import { PractitionerCertification } from "../practitioner";
4
+ import { Gender } from "../patient";
5
+ /**
6
+ * Interface for clinic profile information
7
+ */
8
+ export interface ClinicInfo {
9
+ id: string;
10
+ featuredPhoto: string;
11
+ name: string;
12
+ description?: string | null;
13
+ location: ClinicLocation;
14
+ contactInfo: ClinicContactInfo;
15
+ }
16
+
17
+ /**
18
+ * Interface for practitioner profile information
19
+ */
20
+ export interface PractitionerProfileInfo {
21
+ id: string;
22
+ practitionerPhoto: string | null;
23
+ name: string;
24
+ email: string;
25
+ phone: string | null;
26
+ certification: PractitionerCertification;
27
+ }
28
+
29
+ /**
30
+ * Interface for patient profile information
31
+ */
32
+ export interface PatientProfileInfo {
33
+ id: string;
34
+ fullName: string;
35
+ email: string;
36
+ phone: string | null;
37
+ dateOfBirth: Timestamp;
38
+ gender: Gender;
39
+ }
@@ -0,0 +1,153 @@
1
+ # Resource Types (`Api/src/types/resource/`)
2
+
3
+ Type definitions for the Clinic Resources system. These types are used across the API package, Cloud Functions, and the ClinicApp frontend (via the `@blackcode_sa/metaestetics-api` package).
4
+
5
+ ## File: `index.ts`
6
+
7
+ ### Collection Constants
8
+
9
+ | Constant | Value | Description |
10
+ |----------|-------|-------------|
11
+ | `RESOURCES_COLLECTION` | `"resources"` | Subcollection under clinics |
12
+ | `RESOURCE_INSTANCES_SUBCOLLECTION` | `"instances"` | Subcollection under resources |
13
+ | `RESOURCE_CALENDAR_SUBCOLLECTION` | `"calendar"` | Subcollection under instances |
14
+
15
+ ### Firestore Path
16
+
17
+ ```
18
+ clinics/{clinicId}/resources/{resourceId}
19
+ clinics/{clinicId}/resources/{resourceId}/instances/{instanceId}
20
+ clinics/{clinicId}/resources/{resourceId}/instances/{instanceId}/calendar/{eventId}
21
+ ```
22
+
23
+ ### Enums
24
+
25
+ #### `ResourceCategory`
26
+ Categorizes the type of physical resource.
27
+
28
+ | Value | Description |
29
+ |-------|-------------|
30
+ | `MEDICAL_DEVICE` | Medical equipment (e.g., laser machine) |
31
+ | `ROOM` | General room (e.g., consultation room) |
32
+ | `SURGERY_SUITE` | Operating/surgery room |
33
+ | `EQUIPMENT` | General equipment |
34
+ | `OTHER` | Uncategorized |
35
+
36
+ #### `ResourceStatus`
37
+ Tracks the operational state of a resource or instance.
38
+
39
+ | Value | Description |
40
+ |-------|-------------|
41
+ | `ACTIVE` | Available for booking |
42
+ | `INACTIVE` | Soft-deleted or disabled |
43
+ | `MAINTENANCE` | Temporarily unavailable |
44
+
45
+ ### Interfaces
46
+
47
+ #### `Resource`
48
+ The main resource definition owned by a clinic branch.
49
+
50
+ | Field | Type | Description |
51
+ |-------|------|-------------|
52
+ | `id` | `string` | Unique identifier |
53
+ | `clinicBranchId` | `string` | Owning clinic branch |
54
+ | `name` | `string` | Display name |
55
+ | `nameLower` | `string` | Lowercase for case-insensitive search |
56
+ | `category` | `ResourceCategory` | Type of resource |
57
+ | `description` | `string?` | Optional description |
58
+ | `quantity` | `number` | Number of physical instances |
59
+ | `status` | `ResourceStatus` | Current status |
60
+ | `linkedProcedureIds` | `string[]` | Procedures requiring this resource |
61
+ | `createdAt` | `Timestamp` | Creation timestamp |
62
+ | `updatedAt` | `Timestamp` | Last update timestamp |
63
+
64
+ #### `ResourceInstance`
65
+ A single physical unit of a resource. Each instance has its own calendar.
66
+
67
+ | Field | Type | Description |
68
+ |-------|------|-------------|
69
+ | `id` | `string` | Unique identifier |
70
+ | `resourceId` | `string` | Parent resource ID |
71
+ | `clinicBranchId` | `string` | Owning clinic branch |
72
+ | `label` | `string` | Auto-generated: `"{Resource.name} #{index}"` |
73
+ | `index` | `number` | 1-based index |
74
+ | `status` | `ResourceStatus` | Current status |
75
+ | `createdAt` / `updatedAt` | `Timestamp` | Timestamps |
76
+
77
+ #### `ResourceCalendarEvent`
78
+ A calendar event on a resource instance. Can be a booking event (auto-created during appointment creation) or a blocking event (manually created by admin for maintenance/downtime).
79
+
80
+ | Field | Type | Description |
81
+ |-------|------|-------------|
82
+ | `id` | `string` | Unique identifier |
83
+ | `resourceId` | `string` | Parent resource |
84
+ | `resourceInstanceId` | `string` | Specific instance |
85
+ | `clinicBranchId` | `string` | Clinic branch |
86
+ | `eventType` | `CalendarEventType` | `RESOURCE_BOOKING` for bookings, `BLOCKING` for manual blocks |
87
+ | `appointmentId` | `string?` | Linked appointment (only for booking events) |
88
+ | `procedureId` | `string?` | Procedure requiring this resource (only for booking events) |
89
+ | `practitionerId` | `string?` | Practitioner performing procedure (only for booking events) |
90
+ | `patientId` | `string?` | Patient for the appointment (only for booking events) |
91
+ | `eventTime` | `CalendarEventTime` | Start and end times |
92
+ | `status` | `CalendarEventStatus` | `CONFIRMED` for blocking events, mirrors appointment status for bookings |
93
+ | `eventName` | `string` | Display name |
94
+ | `description` | `string?` | Optional description (primarily for blocking events) |
95
+ | `createdAt` / `updatedAt` | `Timestamp` | Timestamps |
96
+
97
+ #### `ResourceRequirement`
98
+ Lightweight reference stored on procedures.
99
+
100
+ | Field | Type | Description |
101
+ |-------|------|-------------|
102
+ | `resourceId` | `string` | ID of the required resource |
103
+ | `resourceName` | `string` | Snapshot of resource name |
104
+ | `resourceCategory` | `ResourceCategory` | Snapshot of category |
105
+
106
+ #### `ResourceBookingInfo`
107
+ Stored on the appointment after resource allocation.
108
+
109
+ | Field | Type | Description |
110
+ |-------|------|-------------|
111
+ | `resourceId` | `string` | Booked resource |
112
+ | `resourceName` | `string` | Resource name snapshot |
113
+ | `resourceInstanceId` | `string` | Allocated instance |
114
+ | `resourceInstanceLabel` | `string` | Instance label (e.g., "Room #2") |
115
+ | `calendarEventId` | `string` | Calendar event on instance |
116
+
117
+ #### `CreateResourceData` / `UpdateResourceData`
118
+ Input types for resource CRUD operations. See source for field details.
119
+
120
+ #### `CreateResourceBlockingEventParams`
121
+ Parameters for creating a blocking event on a resource instance.
122
+
123
+ | Field | Type | Description |
124
+ |-------|------|-------------|
125
+ | `clinicBranchId` | `string` | Clinic branch |
126
+ | `resourceId` | `string` | Parent resource |
127
+ | `resourceInstanceId` | `string` | Target instance |
128
+ | `eventName` | `string` | Display name (e.g., "Maintenance") |
129
+ | `eventTime` | `CalendarEventTime` | Block start and end times |
130
+ | `description` | `string?` | Optional reason for the block |
131
+
132
+ #### `UpdateResourceBlockingEventParams`
133
+ Parameters for updating an existing blocking event. Only provided fields are updated.
134
+
135
+ | Field | Type | Description |
136
+ |-------|------|-------------|
137
+ | `clinicBranchId` | `string` | Clinic branch |
138
+ | `resourceId` | `string` | Parent resource |
139
+ | `resourceInstanceId` | `string` | Target instance |
140
+ | `eventId` | `string` | ID of the event to update |
141
+ | `eventName` | `string?` | New display name |
142
+ | `eventTime` | `CalendarEventTime?` | New time range |
143
+ | `description` | `string?` | New description |
144
+
145
+ ### Related Type Extensions
146
+
147
+ This system also extends existing types:
148
+
149
+ - **`Procedure`** (`types/procedure/index.ts`): Added optional `resourceRequirements?: ResourceRequirement[]`
150
+ - **`Appointment`** (`types/appointment/index.ts`): Added optional `resourceBookings?: ResourceBookingInfo[]`
151
+ - **`CalendarEventType`** (`types/calendar/index.ts`): Added `RESOURCE_BOOKING = "resource_booking"`
152
+
153
+ See [main Resource System README](../../../docs/RESOURCE_SYSTEM.md) for the full system overview.