@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.
- package/LICENSE +21 -0
- package/README.md +84 -0
- package/dist/_internal/client/PrescriptionsComponentClient.d.ts +25 -0
- package/dist/_internal/client/PrescriptionsComponentClient.d.ts.map +1 -0
- package/dist/_internal/client/PrescriptionsComponentClient.js +61 -0
- package/dist/_internal/client/PrescriptionsComponentClient.js.map +1 -0
- package/dist/_internal/client/index.d.ts +3 -0
- package/dist/_internal/client/index.d.ts.map +1 -0
- package/dist/_internal/client/index.js +2 -0
- package/dist/_internal/client/index.js.map +1 -0
- package/dist/_internal/client/types.d.ts +47 -0
- package/dist/_internal/client/types.d.ts.map +1 -0
- package/dist/_internal/client/types.js +2 -0
- package/dist/_internal/client/types.js.map +1 -0
- package/dist/_internal/component/convex.config.d.ts +7 -0
- package/dist/_internal/component/convex.config.d.ts.map +1 -0
- package/dist/_internal/component/convex.config.js +8 -0
- package/dist/_internal/component/convex.config.js.map +1 -0
- package/dist/_internal/component/functions.d.ts +9 -0
- package/dist/_internal/component/functions.d.ts.map +1 -0
- package/dist/_internal/component/functions.js +11 -0
- package/dist/_internal/component/functions.js.map +1 -0
- package/dist/_internal/component/index.d.ts +18 -0
- package/dist/_internal/component/index.d.ts.map +1 -0
- package/dist/_internal/component/index.js +20 -0
- package/dist/_internal/component/index.js.map +1 -0
- package/dist/_internal/component/schema.d.ts +2 -0
- package/dist/_internal/component/schema.d.ts.map +1 -0
- package/dist/_internal/component/schema.js +2 -0
- package/dist/_internal/component/schema.js.map +1 -0
- package/dist/_internal/react/PrescriptionsWidget.d.ts +18 -0
- package/dist/_internal/react/PrescriptionsWidget.d.ts.map +1 -0
- package/dist/_internal/react/PrescriptionsWidget.js +137 -0
- package/dist/_internal/react/PrescriptionsWidget.js.map +1 -0
- package/dist/_internal/react/index.d.ts +3 -0
- package/dist/_internal/react/index.d.ts.map +1 -0
- package/dist/_internal/react/index.js +2 -0
- package/dist/_internal/react/index.js.map +1 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +1 -0
- package/dist/component/convex.config.d.ts +2 -0
- package/dist/component/convex.config.js +2 -0
- package/dist/component/index.d.ts +1 -0
- package/dist/component/index.js +1 -0
- package/dist/convex/lib/auth.d.ts +7 -0
- package/dist/convex/lib/auth.d.ts.map +1 -0
- package/dist/convex/lib/auth.js +38 -0
- package/dist/convex/lib/auth.js.map +1 -0
- package/dist/convex/lib/clinicalNormalize.d.ts +13 -0
- package/dist/convex/lib/clinicalNormalize.d.ts.map +1 -0
- package/dist/convex/lib/clinicalNormalize.js +82 -0
- package/dist/convex/lib/clinicalNormalize.js.map +1 -0
- package/dist/convex/lib/dental.d.ts +13 -0
- package/dist/convex/lib/dental.d.ts.map +1 -0
- package/dist/convex/lib/dental.js +79 -0
- package/dist/convex/lib/dental.js.map +1 -0
- package/dist/convex/lib/dynamicFieldsStrict.d.ts +9 -0
- package/dist/convex/lib/dynamicFieldsStrict.d.ts.map +1 -0
- package/dist/convex/lib/dynamicFieldsStrict.js +65 -0
- package/dist/convex/lib/dynamicFieldsStrict.js.map +1 -0
- package/dist/convex/lib/dynamicRules.d.ts +61 -0
- package/dist/convex/lib/dynamicRules.d.ts.map +1 -0
- package/dist/convex/lib/dynamicRules.js +221 -0
- package/dist/convex/lib/dynamicRules.js.map +1 -0
- package/dist/convex/lib/storage.d.ts +59 -0
- package/dist/convex/lib/storage.d.ts.map +1 -0
- package/dist/convex/lib/storage.js +120 -0
- package/dist/convex/lib/storage.js.map +1 -0
- package/dist/convex/lib/utils.d.ts +61 -0
- package/dist/convex/lib/utils.d.ts.map +1 -0
- package/dist/convex/lib/utils.js +135 -0
- package/dist/convex/lib/utils.js.map +1 -0
- package/dist/convex/lib/validation.d.ts +24 -0
- package/dist/convex/lib/validation.d.ts.map +1 -0
- package/dist/convex/lib/validation.js +333 -0
- package/dist/convex/lib/validation.js.map +1 -0
- package/dist/convex/mutations/digitalAssets.d.ts +54 -0
- package/dist/convex/mutations/digitalAssets.d.ts.map +1 -0
- package/dist/convex/mutations/digitalAssets.js +297 -0
- package/dist/convex/mutations/digitalAssets.js.map +1 -0
- package/dist/convex/mutations/operational.d.ts +38 -0
- package/dist/convex/mutations/operational.d.ts.map +1 -0
- package/dist/convex/mutations/operational.js +226 -0
- package/dist/convex/mutations/operational.js.map +1 -0
- package/dist/convex/mutations/phases.d.ts +45 -0
- package/dist/convex/mutations/phases.d.ts.map +1 -0
- package/dist/convex/mutations/phases.js +334 -0
- package/dist/convex/mutations/phases.js.map +1 -0
- package/dist/convex/mutations/prescriptions.d.ts +191 -0
- package/dist/convex/mutations/prescriptions.d.ts.map +1 -0
- package/dist/convex/mutations/prescriptions.js +1263 -0
- package/dist/convex/mutations/prescriptions.js.map +1 -0
- package/dist/convex/mutations/syncJobs.d.ts +37 -0
- package/dist/convex/mutations/syncJobs.d.ts.map +1 -0
- package/dist/convex/mutations/syncJobs.js +238 -0
- package/dist/convex/mutations/syncJobs.js.map +1 -0
- package/dist/convex/prescriptions/fields.d.ts +50 -0
- package/dist/convex/prescriptions/fields.d.ts.map +1 -0
- package/dist/convex/prescriptions/fields.js +242 -0
- package/dist/convex/prescriptions/fields.js.map +1 -0
- package/dist/convex/queries/dynamicFields.d.ts +27 -0
- package/dist/convex/queries/dynamicFields.d.ts.map +1 -0
- package/dist/convex/queries/dynamicFields.js +119 -0
- package/dist/convex/queries/dynamicFields.js.map +1 -0
- package/dist/convex/queries/prescriptions.d.ts +583 -0
- package/dist/convex/queries/prescriptions.d.ts.map +1 -0
- package/dist/convex/queries/prescriptions.js +208 -0
- package/dist/convex/queries/prescriptions.js.map +1 -0
- package/dist/convex/schema.d.ts +962 -0
- package/dist/convex/schema.d.ts.map +1 -0
- package/dist/convex/schema.js +434 -0
- package/dist/convex/schema.js.map +1 -0
- package/dist/convex/types.d.ts +267 -0
- package/dist/convex/types.d.ts.map +1 -0
- package/dist/convex/types.js +2 -0
- package/dist/convex/types.js.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.js +1 -0
- package/dist/react/styles.css +54 -0
- 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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"}
|