@primocaredentgroup/prescriptions-component 0.1.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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/_internal/client/PrescriptionsComponentClient.d.ts +25 -0
  4. package/dist/_internal/client/PrescriptionsComponentClient.d.ts.map +1 -0
  5. package/dist/_internal/client/PrescriptionsComponentClient.js +61 -0
  6. package/dist/_internal/client/PrescriptionsComponentClient.js.map +1 -0
  7. package/dist/_internal/client/index.d.ts +3 -0
  8. package/dist/_internal/client/index.d.ts.map +1 -0
  9. package/dist/_internal/client/index.js +2 -0
  10. package/dist/_internal/client/index.js.map +1 -0
  11. package/dist/_internal/client/types.d.ts +47 -0
  12. package/dist/_internal/client/types.d.ts.map +1 -0
  13. package/dist/_internal/client/types.js +2 -0
  14. package/dist/_internal/client/types.js.map +1 -0
  15. package/dist/_internal/component/convex.config.d.ts +7 -0
  16. package/dist/_internal/component/convex.config.d.ts.map +1 -0
  17. package/dist/_internal/component/convex.config.js +8 -0
  18. package/dist/_internal/component/convex.config.js.map +1 -0
  19. package/dist/_internal/component/functions.d.ts +9 -0
  20. package/dist/_internal/component/functions.d.ts.map +1 -0
  21. package/dist/_internal/component/functions.js +11 -0
  22. package/dist/_internal/component/functions.js.map +1 -0
  23. package/dist/_internal/component/index.d.ts +18 -0
  24. package/dist/_internal/component/index.d.ts.map +1 -0
  25. package/dist/_internal/component/index.js +20 -0
  26. package/dist/_internal/component/index.js.map +1 -0
  27. package/dist/_internal/component/schema.d.ts +2 -0
  28. package/dist/_internal/component/schema.d.ts.map +1 -0
  29. package/dist/_internal/component/schema.js +2 -0
  30. package/dist/_internal/component/schema.js.map +1 -0
  31. package/dist/_internal/react/PrescriptionsWidget.d.ts +18 -0
  32. package/dist/_internal/react/PrescriptionsWidget.d.ts.map +1 -0
  33. package/dist/_internal/react/PrescriptionsWidget.js +137 -0
  34. package/dist/_internal/react/PrescriptionsWidget.js.map +1 -0
  35. package/dist/_internal/react/index.d.ts +3 -0
  36. package/dist/_internal/react/index.d.ts.map +1 -0
  37. package/dist/_internal/react/index.js +2 -0
  38. package/dist/_internal/react/index.js.map +1 -0
  39. package/dist/client/index.d.ts +1 -0
  40. package/dist/client/index.js +1 -0
  41. package/dist/component/convex.config.d.ts +2 -0
  42. package/dist/component/convex.config.js +2 -0
  43. package/dist/component/index.d.ts +1 -0
  44. package/dist/component/index.js +1 -0
  45. package/dist/convex/lib/auth.d.ts +7 -0
  46. package/dist/convex/lib/auth.d.ts.map +1 -0
  47. package/dist/convex/lib/auth.js +38 -0
  48. package/dist/convex/lib/auth.js.map +1 -0
  49. package/dist/convex/lib/clinicalNormalize.d.ts +13 -0
  50. package/dist/convex/lib/clinicalNormalize.d.ts.map +1 -0
  51. package/dist/convex/lib/clinicalNormalize.js +82 -0
  52. package/dist/convex/lib/clinicalNormalize.js.map +1 -0
  53. package/dist/convex/lib/dental.d.ts +13 -0
  54. package/dist/convex/lib/dental.d.ts.map +1 -0
  55. package/dist/convex/lib/dental.js +79 -0
  56. package/dist/convex/lib/dental.js.map +1 -0
  57. package/dist/convex/lib/dynamicFieldsStrict.d.ts +9 -0
  58. package/dist/convex/lib/dynamicFieldsStrict.d.ts.map +1 -0
  59. package/dist/convex/lib/dynamicFieldsStrict.js +65 -0
  60. package/dist/convex/lib/dynamicFieldsStrict.js.map +1 -0
  61. package/dist/convex/lib/dynamicRules.d.ts +61 -0
  62. package/dist/convex/lib/dynamicRules.d.ts.map +1 -0
  63. package/dist/convex/lib/dynamicRules.js +221 -0
  64. package/dist/convex/lib/dynamicRules.js.map +1 -0
  65. package/dist/convex/lib/storage.d.ts +59 -0
  66. package/dist/convex/lib/storage.d.ts.map +1 -0
  67. package/dist/convex/lib/storage.js +120 -0
  68. package/dist/convex/lib/storage.js.map +1 -0
  69. package/dist/convex/lib/utils.d.ts +61 -0
  70. package/dist/convex/lib/utils.d.ts.map +1 -0
  71. package/dist/convex/lib/utils.js +135 -0
  72. package/dist/convex/lib/utils.js.map +1 -0
  73. package/dist/convex/lib/validation.d.ts +24 -0
  74. package/dist/convex/lib/validation.d.ts.map +1 -0
  75. package/dist/convex/lib/validation.js +333 -0
  76. package/dist/convex/lib/validation.js.map +1 -0
  77. package/dist/convex/mutations/digitalAssets.d.ts +54 -0
  78. package/dist/convex/mutations/digitalAssets.d.ts.map +1 -0
  79. package/dist/convex/mutations/digitalAssets.js +297 -0
  80. package/dist/convex/mutations/digitalAssets.js.map +1 -0
  81. package/dist/convex/mutations/operational.d.ts +38 -0
  82. package/dist/convex/mutations/operational.d.ts.map +1 -0
  83. package/dist/convex/mutations/operational.js +226 -0
  84. package/dist/convex/mutations/operational.js.map +1 -0
  85. package/dist/convex/mutations/phases.d.ts +45 -0
  86. package/dist/convex/mutations/phases.d.ts.map +1 -0
  87. package/dist/convex/mutations/phases.js +334 -0
  88. package/dist/convex/mutations/phases.js.map +1 -0
  89. package/dist/convex/mutations/prescriptions.d.ts +191 -0
  90. package/dist/convex/mutations/prescriptions.d.ts.map +1 -0
  91. package/dist/convex/mutations/prescriptions.js +1263 -0
  92. package/dist/convex/mutations/prescriptions.js.map +1 -0
  93. package/dist/convex/mutations/syncJobs.d.ts +37 -0
  94. package/dist/convex/mutations/syncJobs.d.ts.map +1 -0
  95. package/dist/convex/mutations/syncJobs.js +238 -0
  96. package/dist/convex/mutations/syncJobs.js.map +1 -0
  97. package/dist/convex/prescriptions/fields.d.ts +50 -0
  98. package/dist/convex/prescriptions/fields.d.ts.map +1 -0
  99. package/dist/convex/prescriptions/fields.js +242 -0
  100. package/dist/convex/prescriptions/fields.js.map +1 -0
  101. package/dist/convex/queries/dynamicFields.d.ts +27 -0
  102. package/dist/convex/queries/dynamicFields.d.ts.map +1 -0
  103. package/dist/convex/queries/dynamicFields.js +119 -0
  104. package/dist/convex/queries/dynamicFields.js.map +1 -0
  105. package/dist/convex/queries/prescriptions.d.ts +583 -0
  106. package/dist/convex/queries/prescriptions.d.ts.map +1 -0
  107. package/dist/convex/queries/prescriptions.js +208 -0
  108. package/dist/convex/queries/prescriptions.js.map +1 -0
  109. package/dist/convex/schema.d.ts +962 -0
  110. package/dist/convex/schema.d.ts.map +1 -0
  111. package/dist/convex/schema.js +434 -0
  112. package/dist/convex/schema.js.map +1 -0
  113. package/dist/convex/types.d.ts +267 -0
  114. package/dist/convex/types.d.ts.map +1 -0
  115. package/dist/convex/types.js +2 -0
  116. package/dist/convex/types.js.map +1 -0
  117. package/dist/react/index.d.ts +1 -0
  118. package/dist/react/index.js +1 -0
  119. package/dist/react/styles.css +54 -0
  120. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../convex/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgNA,wBAwWG"}
@@ -0,0 +1,434 @@
1
+ import { defineSchema, defineTable } from "convex/server";
2
+ import { v } from "convex/values";
3
+ // ============================================
4
+ // SCHEMA CONVEX - APP PRESCRIZIONI
5
+ // ============================================
6
+ // ============================================
7
+ // CONVENZIONI ID E SOFT DELETE
8
+ // ============================================
9
+ // Ogni tabella ha:
10
+ // - {nomeTabella}Id: ID numerico incrementale (es: prescriptionId, userId)
11
+ // - deleted_at: timestamp per soft delete (null = non eliminato)
12
+ //
13
+ // REGOLE:
14
+ // - MAI usare hard delete, sempre soft delete con deleted_at
15
+ // - Gli ID numerici sono gestiti dalla tabella "counters"
16
+ // - Tutte le query devono filtrare per deleted_at === undefined
17
+ // ============================================
18
+ // Flow Definition Types
19
+ const flowPhaseValidator = v.object({
20
+ phaseTypeKey: v.string(),
21
+ label: v.string(),
22
+ required: v.boolean(),
23
+ repeatable: v.boolean(),
24
+ requiredFields: v.array(v.string()),
25
+ appointmentRequired: v.boolean(),
26
+ });
27
+ const flowConditionValidator = v.object({
28
+ when: v.object({
29
+ fieldPath: v.string(),
30
+ op: v.union(v.literal("eq"), v.literal("neq"), v.literal("in"), v.literal("exists")),
31
+ value: v.optional(v.any()),
32
+ }),
33
+ then: v.object({
34
+ setPhaseRequired: v.optional(v.object({ phaseTypeKey: v.string(), required: v.boolean() })),
35
+ setFieldRequired: v.optional(v.object({ fieldPath: v.string(), required: v.boolean() })),
36
+ allowSkipToNext: v.optional(v.boolean()),
37
+ }),
38
+ });
39
+ const flowValidationValidator = v.object({
40
+ type: v.union(v.literal("requiredFields"), v.literal("customRule")),
41
+ rule: v.optional(v.string()),
42
+ fieldPaths: v.optional(v.array(v.string())),
43
+ message: v.string(),
44
+ });
45
+ const flowDefinitionValidator = v.object({
46
+ phases: v.array(flowPhaseValidator),
47
+ validations: v.array(flowValidationValidator),
48
+ conditions: v.array(flowConditionValidator),
49
+ });
50
+ // Bridge Element (tooth in a bridge with its role)
51
+ const bridgeElementValidator = v.object({
52
+ toothNumber: v.number(),
53
+ role: v.union(v.literal("abutment"), v.literal("pontic")),
54
+ });
55
+ // Application Types (where prosthetic is applied)
56
+ const applicationValidator = v.union(v.object({ type: v.literal("TOOTH"), toothNumber: v.number() }), v.object({ type: v.literal("MULTI_TOOTH"), teeth: v.array(v.number()) }), v.object({ type: v.literal("BRIDGE"), teeth: v.array(bridgeElementValidator) }), v.object({ type: v.literal("QUADRANT"), quadrant: v.number() }), v.object({ type: v.literal("SEXTANT"), sextant: v.number() }), v.object({ type: v.literal("ARCH"), arch: v.union(v.literal("UPPER"), v.literal("LOWER")) }), v.object({ type: v.literal("FULL_MOUTH") }));
57
+ // Clinical Data Schema
58
+ const clinicalDataValidator = v.object({
59
+ patient: v.object({ corePatientId: v.string() }),
60
+ clinic: v.object({ coreClinicId: v.string() }),
61
+ doctor: v.object({ coreDoctorId: v.string() }),
62
+ prostheticService: v.object({
63
+ pdcItemId: v.string(),
64
+ listinoId: v.string(),
65
+ serviceCode: v.string(),
66
+ serviceLabel: v.string(),
67
+ }),
68
+ application: v.optional(applicationValidator),
69
+ shade: v.optional(v.string()),
70
+ notePreparazione: v.optional(v.string()),
71
+ lineaMargine: v.optional(v.string()),
72
+ });
73
+ // Signature Schema
74
+ const signatureValidator = v.object({
75
+ signedAt: v.number(),
76
+ signedByDoctorId: v.string(),
77
+ signatureType: v.union(v.literal("weak-digital"), v.literal("auto-lab")),
78
+ signaturePayload: v.string(),
79
+ clinicalHash: v.string(),
80
+ });
81
+ // Phase Appointment Schema
82
+ const phaseAppointmentValidator = v.object({
83
+ coreAppointmentId: v.optional(v.string()),
84
+ startAt: v.optional(v.number()),
85
+ endAt: v.optional(v.number()),
86
+ doctorId: v.optional(v.string()),
87
+ });
88
+ // Phase Feedback Schema
89
+ const phaseFeedbackValidator = v.object({
90
+ outcome: v.union(v.literal("OK"), v.literal("KO"), v.null()),
91
+ comment: v.optional(v.string()),
92
+ updatedBy: v.string(),
93
+ updatedAt: v.number(),
94
+ });
95
+ // Core Refs Schema
96
+ const coreRefsValidator = v.object({
97
+ corePrescriptionId: v.optional(v.string()),
98
+ coreAppointmentIds: v.optional(v.array(v.string())),
99
+ });
100
+ // Lab Refs Schema
101
+ const labRefsValidator = v.object({
102
+ labRequestId: v.optional(v.string()),
103
+ lastLabStatus: v.optional(v.string()),
104
+ });
105
+ // Digital Asset Schema (file STL per prescrizioni digitali)
106
+ // Supporta sia Convex Storage che AWS S3 per permettere migrazione futura
107
+ const digitalAssetValidator = v.object({
108
+ assetId: v.string(), // ID univoco interno (uuid)
109
+ fileName: v.string(), // Nome originale file (es: "arcata_superiore.stl")
110
+ fileSize: v.number(), // Dimensione in bytes
111
+ mimeType: v.string(), // "model/stl", "application/sla", etc.
112
+ description: v.optional(v.string()), // Descrizione opzionale (es: "Arcata superiore")
113
+ // Storage info - permette di usare diversi provider
114
+ storageProvider: v.union(v.literal("CONVEX"), // Convex File Storage (per test/dev)
115
+ v.literal("S3") // AWS S3 (per produzione)
116
+ ),
117
+ storageId: v.string(), // CONVEX: storageId, S3: bucket/key path
118
+ storageUrl: v.optional(v.string()), // URL diretto (per S3 con URL firmati)
119
+ uploadedAt: v.number(),
120
+ uploadedBy: v.string(), // userId di chi ha caricato
121
+ });
122
+ // Calendar Data Schema (snapshot dal Calendario)
123
+ // Questi dati vengono passati dall'App Calendario quando crea automaticamente
124
+ // una prescrizione. Sono una "fotografia" dei dati al momento della creazione.
125
+ const calendarDataValidator = v.object({
126
+ // Dati paziente
127
+ patientFirstName: v.string(),
128
+ patientLastName: v.string(),
129
+ // Dati clinica
130
+ clinicName: v.string(),
131
+ // Dati piano di cura
132
+ treatmentPlanId: v.string(),
133
+ treatmentPlanName: v.optional(v.string()),
134
+ // Dati prestazione
135
+ treatmentId: v.string(),
136
+ treatmentName: v.string(),
137
+ // Dati fase corrente (che ha triggerato la creazione)
138
+ phaseId: v.string(),
139
+ phaseName: v.string(),
140
+ // Dove si applica la protesi
141
+ application: v.string(), // 'mouth', 'tooth', 'upper_arch', 'lower_arch'
142
+ toothNumber: v.optional(v.string()),
143
+ // Dati appuntamento che ha triggerato la creazione
144
+ appointmentId: v.string(),
145
+ appointmentDate: v.number(),
146
+ // Operatore (chi ha creato l'appuntamento nel Calendario)
147
+ operatorId: v.string(),
148
+ operatorName: v.string(),
149
+ // === PROSSIMO APPUNTAMENTO (opzionale) ===
150
+ // Se il Calendario ha già schedulato la fase successiva,
151
+ // passa questi dati per pre-popolare la phase instance
152
+ nextAppointmentId: v.optional(v.string()),
153
+ nextAppointmentDate: v.optional(v.number()),
154
+ nextAppointmentPhaseId: v.optional(v.string()), // es: "PROVA"
155
+ nextAppointmentPhaseName: v.optional(v.string()), // es: "Prova struttura"
156
+ });
157
+ // ============================================
158
+ // SCHEMA DEFINITION
159
+ // ============================================
160
+ export default defineSchema({
161
+ // COUNTERS - Gestione ID incrementali per ogni tabella
162
+ counters: defineTable({
163
+ tableName: v.string(),
164
+ lastId: v.number(),
165
+ }).index("by_tableName", ["tableName"]),
166
+ // FLOWS - Definizioni dei workflow
167
+ flows: defineTable({
168
+ flowId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
169
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
170
+ flowKey: v.string(),
171
+ version: v.number(),
172
+ status: v.union(v.literal("ACTIVE"), v.literal("DRAFT"), v.literal("ARCHIVED")),
173
+ createdAt: v.number(),
174
+ definition: flowDefinitionValidator,
175
+ })
176
+ .index("by_flowId", ["flowId"])
177
+ .index("by_flowKey", ["flowKey"])
178
+ .index("by_flowKey_version", ["flowKey", "version"])
179
+ .index("by_flowKey_status", ["flowKey", "status"]),
180
+ // PRESCRIPTIONS - Prescrizioni protesiche
181
+ prescriptions: defineTable({
182
+ prescriptionId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
183
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
184
+ clinicId: v.string(),
185
+ doctorId: v.string(),
186
+ patientId: v.string(),
187
+ pdcItemId: v.string(),
188
+ listinoId: v.string(),
189
+ flowKey: v.string(),
190
+ flowVersion: v.number(),
191
+ status: v.union(v.literal("DRAFT"), v.literal("PENDING_DOCTOR"), v.literal("SIGNED"), v.literal("SYNCED"), v.literal("ERROR"), v.literal("CANCELLED"), v.literal("SUPERSEDED")),
192
+ createdByUserId: v.string(),
193
+ createdAt: v.number(),
194
+ updatedAt: v.number(),
195
+ coreRefs: coreRefsValidator,
196
+ labRefs: labRefsValidator,
197
+ latestClinicalRevisionId: v.optional(v.id("clinicalRevisions")),
198
+ // === TIPO PRESCRIZIONE: DIGITALE vs ANALOGICA ===
199
+ // ANALOG = impronta fisica tradizionale
200
+ // DIGITAL = scansione intraorale con file STL
201
+ prescriptionType: v.optional(v.union(v.literal("ANALOG"), v.literal("DIGITAL"))), // Default ANALOG se non specificato (per retrocompatibilità)
202
+ // File STL per prescrizioni digitali (max 5 file)
203
+ // Obbligatorio almeno 1 file se prescriptionType === "DIGITAL"
204
+ digitalAssets: v.optional(v.array(digitalAssetValidator)),
205
+ // === TRACCIAMENTO SPEDIZIONE ===
206
+ // Per prescrizioni analogiche: quando l'impronta fisica viene spedita al lab
207
+ shippedAt: v.optional(v.number()), // Timestamp spedizione
208
+ shippedBy: v.optional(v.string()), // userId di chi ha spedito
209
+ trackingNumber: v.optional(v.string()), // Numero tracking corriere (opzionale)
210
+ // === CAMPI PER INTEGRAZIONE CALENDARIO ===
211
+ // Chiave di idempotenza per evitare duplicati dalle chiamate del Calendario
212
+ // Formato: "cal-{appointmentId}" o altro identificativo univoco
213
+ idempotencyKey: v.optional(v.string()),
214
+ // Snapshot dei dati dal Calendario al momento della creazione
215
+ calendarData: v.optional(calendarDataValidator),
216
+ // === CATALOGO CAMPI DINAMICI ===
217
+ // Valori dei campi dal catalogo: Record<fieldId, value>
218
+ // Salvato come stringa JSON per flessibilità dei tipi
219
+ valuesByFieldId: v.optional(v.string()), // Default "{}" per retrocompatibilità
220
+ // Riferimento alla versione del ruleset usata (se presente)
221
+ rulesetVersionId: v.optional(v.id("rulesetVersions")),
222
+ })
223
+ .index("by_prescriptionId", ["prescriptionId"])
224
+ .index("by_pdcItemId", ["pdcItemId"])
225
+ .index("by_clinicId_status", ["clinicId", "status"])
226
+ .index("by_patientId", ["patientId"])
227
+ .index("by_doctorId", ["doctorId"])
228
+ .index("by_status", ["status"])
229
+ // Indice per trovare velocemente per idempotencyKey
230
+ .index("by_idempotencyKey", ["idempotencyKey"]),
231
+ // CLINICAL REVISIONS - Revisioni cliniche (APPEND-ONLY)
232
+ clinicalRevisions: defineTable({
233
+ clinicalRevisionId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
234
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
235
+ // Supporta sia vecchio nome (prescriptionId) che nuovo (prescriptionRef) per migrazione
236
+ prescriptionId: v.optional(v.id("prescriptions")), // DEPRECATED: vecchio nome
237
+ prescriptionRef: v.optional(v.id("prescriptions")), // Nuovo nome per riferimento
238
+ revisionNumber: v.number(),
239
+ clinicalData: clinicalDataValidator,
240
+ clinicalHash: v.string(),
241
+ signature: v.union(signatureValidator, v.null()),
242
+ frozen: v.boolean(),
243
+ createdAt: v.number(),
244
+ })
245
+ .index("by_clinicalRevisionId", ["clinicalRevisionId"])
246
+ .index("by_prescriptionId", ["prescriptionId"]) // Per dati esistenti
247
+ .index("by_prescriptionRef", ["prescriptionRef"])
248
+ .index("by_prescriptionRef_revisionNumber", ["prescriptionRef", "revisionNumber"]),
249
+ // OPERATIONAL DATA - Dati operativi (non clinici)
250
+ operationalData: defineTable({
251
+ operationalDataId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
252
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
253
+ // Supporta sia vecchio nome che nuovo per migrazione
254
+ prescriptionId: v.optional(v.id("prescriptions")), // DEPRECATED: vecchio nome
255
+ prescriptionRef: v.optional(v.id("prescriptions")), // Nuovo nome per riferimento
256
+ noteInterne: v.optional(v.string()),
257
+ allegati: v.optional(v.array(v.object({
258
+ fileId: v.string(),
259
+ fileName: v.string(),
260
+ uploadedAt: v.number(),
261
+ uploadedBy: v.string(),
262
+ }))),
263
+ uiState: v.optional(v.any()),
264
+ })
265
+ .index("by_operationalDataId", ["operationalDataId"])
266
+ .index("by_prescriptionId", ["prescriptionId"]) // Per dati esistenti
267
+ .index("by_prescriptionRef", ["prescriptionRef"]),
268
+ // PHASE INSTANCES - Istanze delle fasi del workflow
269
+ phaseInstances: defineTable({
270
+ phaseInstanceId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
271
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
272
+ // Supporta sia vecchio nome che nuovo per migrazione
273
+ prescriptionId: v.optional(v.id("prescriptions")), // DEPRECATED: vecchio nome
274
+ prescriptionRef: v.optional(v.id("prescriptions")), // Nuovo nome per riferimento
275
+ phaseTypeKey: v.string(),
276
+ ordinal: v.number(),
277
+ iteration: v.number(),
278
+ status: v.union(v.literal("NOT_STARTED"), v.literal("SCHEDULED"), v.literal("DONE_OK"), v.literal("DONE_KO"), v.literal("SKIPPED"), v.literal("REPEAT")),
279
+ appointment: v.optional(phaseAppointmentValidator),
280
+ feedback: v.optional(phaseFeedbackValidator),
281
+ createdAt: v.number(),
282
+ updatedAt: v.number(),
283
+ })
284
+ .index("by_phaseInstanceId", ["phaseInstanceId"])
285
+ .index("by_prescriptionId", ["prescriptionId"]) // Per dati esistenti
286
+ .index("by_prescriptionRef", ["prescriptionRef"])
287
+ .index("by_prescriptionRef_ordinal", ["prescriptionRef", "ordinal"]),
288
+ // SNAPSHOTS - Read-model PrimoCore
289
+ snapshots: defineTable({
290
+ snapshotId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
291
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
292
+ entityType: v.union(v.literal("PATIENT"), v.literal("PDC_ITEM"), v.literal("APPOINTMENT"), v.literal("DOCTOR"), v.literal("CLINIC")),
293
+ entityId: v.string(),
294
+ data: v.any(),
295
+ fetchedAt: v.number(),
296
+ })
297
+ .index("by_snapshotId", ["snapshotId"])
298
+ .index("by_entityType_entityId", ["entityType", "entityId"]),
299
+ // AUDIT EVENTS - Log di audit (APPEND-ONLY)
300
+ auditEvents: defineTable({
301
+ auditEventId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
302
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
303
+ // Supporta sia vecchio nome che nuovo per migrazione
304
+ prescriptionId: v.optional(v.id("prescriptions")), // DEPRECATED: vecchio nome
305
+ prescriptionRef: v.optional(v.id("prescriptions")), // Nuovo nome per riferimento
306
+ at: v.number(),
307
+ actorUserId: v.string(),
308
+ actorRole: v.union(v.literal("SECRETARY"), v.literal("DOCTOR"), v.literal("SYSTEM")),
309
+ type: v.string(),
310
+ payload: v.any(),
311
+ })
312
+ .index("by_auditEventId", ["auditEventId"])
313
+ .index("by_prescriptionId", ["prescriptionId"]) // Per dati esistenti
314
+ .index("by_prescriptionRef", ["prescriptionRef"])
315
+ .index("by_at", ["at"])
316
+ .index("by_actorUserId", ["actorUserId"]),
317
+ // SYNC JOBS - Outbox per sincronizzazione (con retry)
318
+ syncJobs: defineTable({
319
+ syncJobId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
320
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
321
+ // Supporta sia vecchio nome che nuovo per migrazione
322
+ prescriptionId: v.optional(v.id("prescriptions")), // DEPRECATED: vecchio nome
323
+ prescriptionRef: v.optional(v.id("prescriptions")), // Nuovo nome per riferimento
324
+ target: v.union(v.literal("PRIMOCORE"), v.literal("LAB")),
325
+ kind: v.union(v.literal("POST_CLINICAL"), v.literal("UPSERT_APPOINTMENT"), v.literal("LAB_REQUEST")),
326
+ idempotencyKey: v.string(),
327
+ requestPayload: v.any(),
328
+ status: v.union(v.literal("PENDING"), v.literal("RUNNING"), v.literal("OK"), v.literal("FAILED")),
329
+ attempts: v.number(),
330
+ lastError: v.optional(v.string()),
331
+ nextRetryAt: v.number(),
332
+ createdAt: v.number(),
333
+ updatedAt: v.number(),
334
+ })
335
+ .index("by_syncJobId", ["syncJobId"])
336
+ .index("by_status_nextRetryAt", ["status", "nextRetryAt"])
337
+ .index("by_prescriptionId", ["prescriptionId"]) // Per dati esistenti
338
+ .index("by_prescriptionRef", ["prescriptionRef"])
339
+ .index("by_idempotencyKey", ["idempotencyKey"]),
340
+ // USERS - Utenti (per mock login)
341
+ users: defineTable({
342
+ userId: v.optional(v.number()), // ID numerico incrementale (opzionale per backfill)
343
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
344
+ email: v.string(),
345
+ name: v.string(),
346
+ role: v.union(v.literal("SECRETARY"), v.literal("DOCTOR")),
347
+ clinicId: v.string(),
348
+ coreDoctorId: v.optional(v.string()),
349
+ active: v.boolean(),
350
+ // RBAC per Builder - ruolo admin separato dal ruolo funzionale
351
+ // "user" = default, nessun accesso builder
352
+ // "admin" = può modificare draft, vedere audit
353
+ // "superadmin" = può pubblicare e attivare versioni
354
+ adminRole: v.optional(v.union(v.literal("user"), v.literal("admin"), v.literal("superadmin"))), // Default "user" se non specificato
355
+ })
356
+ .index("by_userId", ["userId"])
357
+ .index("by_email", ["email"])
358
+ .index("by_clinicId", ["clinicId"]),
359
+ // ============================================
360
+ // BUILDER - Gestione Ruleset per Wizard Prescrizioni
361
+ // ============================================
362
+ // RULESETS - Draft modificabili
363
+ rulesets: defineTable({
364
+ rulesetId: v.optional(v.number()), // ID numerico incrementale
365
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
366
+ name: v.string(), // Nome del ruleset
367
+ description: v.optional(v.string()), // Descrizione opzionale
368
+ rulesJson: v.string(), // JSON delle regole (draft)
369
+ createdBy: v.string(), // userId di chi ha creato
370
+ createdAt: v.number(),
371
+ updatedAt: v.number(),
372
+ })
373
+ .index("by_rulesetId", ["rulesetId"])
374
+ .index("by_updatedAt", ["updatedAt"]),
375
+ // RULESET VERSIONS - Versioni pubblicate (IMMUTABILI)
376
+ rulesetVersions: defineTable({
377
+ rulesetVersionId: v.optional(v.number()), // ID numerico incrementale
378
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
379
+ rulesetId: v.id("rulesets"), // Riferimento al ruleset parent
380
+ versionNumber: v.number(), // Numero versione incrementale per ruleset
381
+ nameSnapshot: v.string(), // Snapshot del nome al momento della pubblicazione
382
+ descriptionSnapshot: v.optional(v.string()), // Snapshot descrizione
383
+ rulesJsonSnapshot: v.string(), // Snapshot JSON regole (IMMUTABILE)
384
+ publishedBy: v.string(), // userId di chi ha pubblicato
385
+ publishedAt: v.number(),
386
+ })
387
+ .index("by_rulesetVersionId", ["rulesetVersionId"])
388
+ .index("by_rulesetId", ["rulesetId"])
389
+ .index("by_rulesetId_versionNumber", ["rulesetId", "versionNumber"])
390
+ .index("by_publishedAt", ["publishedAt"]),
391
+ // ACTIVE RULESETS - Puntatore alla versione attiva (per scope)
392
+ activeRulesets: defineTable({
393
+ key: v.string(), // "global" per ora, in futuro "clinic:{clinicId}"
394
+ rulesetId: v.id("rulesets"), // Ruleset selezionato
395
+ versionId: v.id("rulesetVersions"), // Versione attiva
396
+ activatedBy: v.string(), // userId di chi ha attivato
397
+ activatedAt: v.number(),
398
+ })
399
+ .index("by_key", ["key"]),
400
+ // BUILDER AUDIT LOGS - Log azioni builder
401
+ builderAuditLogs: defineTable({
402
+ builderAuditLogId: v.optional(v.number()), // ID numerico incrementale
403
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
404
+ actorId: v.string(), // userId che ha eseguito l'azione
405
+ action: v.union(v.literal("create_ruleset"), v.literal("update_draft"), v.literal("publish_version"), v.literal("set_active_global")),
406
+ targetType: v.union(v.literal("ruleset"), v.literal("rulesetVersion"), v.literal("activeRuleset")),
407
+ targetId: v.string(), // ID del target (come stringa per flessibilità)
408
+ metadataJson: v.optional(v.string()), // Metadata aggiuntivi in JSON
409
+ createdAt: v.number(),
410
+ })
411
+ .index("by_builderAuditLogId", ["builderAuditLogId"])
412
+ .index("by_createdAt", ["createdAt"])
413
+ .index("by_actorId", ["actorId"]),
414
+ // ============================================
415
+ // CATALOGO CAMPI PRESCRIZIONE - Source of Truth
416
+ // ============================================
417
+ // PRESCRIPTION FIELD CATALOG - Catalogo campi dinamici per prescrizioni
418
+ prescriptionFieldCatalog: defineTable({
419
+ fieldId: v.string(), // ID univoco IMMUTABILE (slug es: "patient_age")
420
+ deleted_at: v.optional(v.number()), // Soft delete timestamp
421
+ label: v.string(), // Label visualizzato in UI (modificabile)
422
+ description: v.optional(v.string()), // Descrizione/help text opzionale
423
+ type: v.union(v.literal("text"), v.literal("number"), v.literal("date"), v.literal("select"), v.literal("checkbox")),
424
+ options: v.optional(v.array(v.string())), // Opzioni per select
425
+ status: v.union(v.literal("active"), v.literal("deprecated")),
426
+ createdAt: v.number(),
427
+ updatedAt: v.number(),
428
+ createdBy: v.string(), // userId di chi ha creato
429
+ })
430
+ .index("by_fieldId", ["fieldId"])
431
+ .index("by_status", ["status"])
432
+ .index("by_createdAt", ["createdAt"]),
433
+ });
434
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../convex/schema.ts"],"names":[],"mappings":"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"}