@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,333 @@
|
|
|
1
|
+
import { evaluateCondition, getNestedValue, exists } from "./utils";
|
|
2
|
+
import { isValidToothNumber, canFormBridge, sortTeethByArchPosition } from "./dental";
|
|
3
|
+
// ============================================
|
|
4
|
+
// DOMAIN VALIDATION
|
|
5
|
+
// ============================================
|
|
6
|
+
/**
|
|
7
|
+
* Valida i dati clinici secondo le regole del flow.
|
|
8
|
+
*/
|
|
9
|
+
export function validateClinicalData(clinicalData, flowDefinition, forSignature = false) {
|
|
10
|
+
const errors = [];
|
|
11
|
+
// Applica le condizioni per determinare i campi required dinamici
|
|
12
|
+
const dynamicRequiredFields = new Set();
|
|
13
|
+
for (const condition of flowDefinition.conditions) {
|
|
14
|
+
if (evaluateCondition(clinicalData, condition.when)) {
|
|
15
|
+
if (condition.then.setFieldRequired?.required) {
|
|
16
|
+
dynamicRequiredFields.add(condition.then.setFieldRequired.fieldPath);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// Validazioni base
|
|
21
|
+
for (const validation of flowDefinition.validations) {
|
|
22
|
+
if (validation.type === "requiredFields" && validation.fieldPaths) {
|
|
23
|
+
for (const fieldPath of validation.fieldPaths) {
|
|
24
|
+
const value = getNestedValue(clinicalData, fieldPath);
|
|
25
|
+
if (!exists(value)) {
|
|
26
|
+
errors.push({
|
|
27
|
+
field: fieldPath,
|
|
28
|
+
message: validation.message || `Il campo ${fieldPath} è obbligatorio`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (validation.type === "customRule" && validation.rule) {
|
|
34
|
+
const customError = evaluateCustomRule(clinicalData, validation.rule);
|
|
35
|
+
if (customError) {
|
|
36
|
+
errors.push({
|
|
37
|
+
field: validation.rule,
|
|
38
|
+
message: validation.message,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Validazioni dinamiche
|
|
44
|
+
for (const fieldPath of dynamicRequiredFields) {
|
|
45
|
+
const value = getNestedValue(clinicalData, fieldPath);
|
|
46
|
+
if (!exists(value)) {
|
|
47
|
+
errors.push({
|
|
48
|
+
field: fieldPath,
|
|
49
|
+
message: `Il campo ${fieldPath} è obbligatorio in base alla configurazione`,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Validazioni specifiche per firma
|
|
54
|
+
if (forSignature) {
|
|
55
|
+
// Il paziente è sempre richiesto
|
|
56
|
+
if (!clinicalData.patient?.corePatientId) {
|
|
57
|
+
errors.push({
|
|
58
|
+
field: "patient.corePatientId",
|
|
59
|
+
message: "Il paziente è obbligatorio per la firma",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Il medico è sempre richiesto
|
|
63
|
+
if (!clinicalData.doctor?.coreDoctorId) {
|
|
64
|
+
errors.push({
|
|
65
|
+
field: "doctor.coreDoctorId",
|
|
66
|
+
message: "Il medico è obbligatorio per la firma",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// Il servizio protesico è sempre richiesto
|
|
70
|
+
if (!clinicalData.prostheticService?.serviceCode) {
|
|
71
|
+
errors.push({
|
|
72
|
+
field: "prostheticService.serviceCode",
|
|
73
|
+
message: "Il servizio protesico è obbligatorio per la firma",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Validazione application in base al tipo di servizio
|
|
77
|
+
if (requiresApplication(clinicalData.prostheticService?.serviceCode)) {
|
|
78
|
+
if (!clinicalData.application) {
|
|
79
|
+
errors.push({
|
|
80
|
+
field: "application",
|
|
81
|
+
message: "L'applicazione (dente/quadrante/arcata) è obbligatoria per questo servizio",
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const appError = validateApplication(clinicalData.application);
|
|
86
|
+
if (appError) {
|
|
87
|
+
errors.push(appError);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return errors;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Verifica se un servizio richiede l'applicazione.
|
|
96
|
+
*/
|
|
97
|
+
function requiresApplication(serviceCode) {
|
|
98
|
+
if (!serviceCode)
|
|
99
|
+
return false;
|
|
100
|
+
// Servizi che richiedono sempre un'applicazione specifica
|
|
101
|
+
const requiresApp = [
|
|
102
|
+
"CORONA",
|
|
103
|
+
"PONTE",
|
|
104
|
+
"FACCETTA",
|
|
105
|
+
"INTARSIO",
|
|
106
|
+
"IMPIANTO",
|
|
107
|
+
];
|
|
108
|
+
return requiresApp.some((s) => serviceCode.toUpperCase().includes(s));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Valida l'application in base al tipo.
|
|
112
|
+
* Ritorna un array di errori (può essere multiplo per BRIDGE).
|
|
113
|
+
*/
|
|
114
|
+
function validateApplication(application) {
|
|
115
|
+
if (!application)
|
|
116
|
+
return null;
|
|
117
|
+
switch (application.type) {
|
|
118
|
+
case "TOOTH":
|
|
119
|
+
if (!isValidToothNumber(application.toothNumber)) {
|
|
120
|
+
return {
|
|
121
|
+
field: "application.toothNumber",
|
|
122
|
+
message: "Numero dente non valido (deve essere tra 11 e 48)",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
case "MULTI_TOOTH": {
|
|
127
|
+
if (!application.teeth || application.teeth.length === 0) {
|
|
128
|
+
return {
|
|
129
|
+
field: "application.teeth",
|
|
130
|
+
message: "Selezionare almeno un dente",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Tutti validi
|
|
134
|
+
const invalidTooth = application.teeth.find((t) => !isValidToothNumber(t));
|
|
135
|
+
if (invalidTooth !== undefined) {
|
|
136
|
+
return {
|
|
137
|
+
field: "application.teeth",
|
|
138
|
+
message: `Numero dente non valido: ${invalidTooth}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Nessun duplicato
|
|
142
|
+
const uniqueTeeth = new Set(application.teeth);
|
|
143
|
+
if (uniqueTeeth.size !== application.teeth.length) {
|
|
144
|
+
return {
|
|
145
|
+
field: "application.teeth",
|
|
146
|
+
message: "Sono presenti denti duplicati",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case "BRIDGE": {
|
|
152
|
+
if (!application.teeth || application.teeth.length < 2) {
|
|
153
|
+
return {
|
|
154
|
+
field: "application.teeth",
|
|
155
|
+
message: "Un ponte richiede almeno 2 denti",
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// Tutti i numeri validi
|
|
159
|
+
const invalidBridgeTooth = application.teeth.find((t) => !isValidToothNumber(t.toothNumber));
|
|
160
|
+
if (invalidBridgeTooth) {
|
|
161
|
+
return {
|
|
162
|
+
field: "application.teeth",
|
|
163
|
+
message: `Numero dente non valido nel ponte: ${invalidBridgeTooth.toothNumber}`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Nessun duplicato
|
|
167
|
+
const bridgeNumbers = application.teeth.map((t) => t.toothNumber);
|
|
168
|
+
const uniqueBridge = new Set(bridgeNumbers);
|
|
169
|
+
if (uniqueBridge.size !== bridgeNumbers.length) {
|
|
170
|
+
return {
|
|
171
|
+
field: "application.teeth",
|
|
172
|
+
message: "Sono presenti denti duplicati nel ponte",
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// Tutti contigui nella stessa arcata
|
|
176
|
+
if (!canFormBridge(bridgeNumbers)) {
|
|
177
|
+
return {
|
|
178
|
+
field: "application.teeth",
|
|
179
|
+
message: "I denti del ponte devono essere tutti adiacenti nella stessa arcata",
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// Primo e ultimo nell'ordine devono essere pilastri
|
|
183
|
+
const sorted = sortTeethByArchPosition(bridgeNumbers);
|
|
184
|
+
const first = application.teeth.find((t) => t.toothNumber === sorted[0]);
|
|
185
|
+
const last = application.teeth.find((t) => t.toothNumber === sorted[sorted.length - 1]);
|
|
186
|
+
if (first?.role !== "abutment" || last?.role !== "abutment") {
|
|
187
|
+
return {
|
|
188
|
+
field: "application.teeth",
|
|
189
|
+
message: "Il primo e l'ultimo dente del ponte devono essere pilastri (abutment)",
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// Almeno 2 pilastri
|
|
193
|
+
const abutmentCount = application.teeth.filter((t) => t.role === "abutment").length;
|
|
194
|
+
if (abutmentCount < 2) {
|
|
195
|
+
return {
|
|
196
|
+
field: "application.teeth",
|
|
197
|
+
message: "Il ponte richiede almeno 2 denti pilastro (abutment)",
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case "QUADRANT":
|
|
203
|
+
if (application.quadrant < 1 || application.quadrant > 4) {
|
|
204
|
+
return {
|
|
205
|
+
field: "application.quadrant",
|
|
206
|
+
message: "Quadrante non valido (deve essere 1-4)",
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
break;
|
|
210
|
+
case "SEXTANT":
|
|
211
|
+
if (application.sextant < 1 || application.sextant > 6) {
|
|
212
|
+
return {
|
|
213
|
+
field: "application.sextant",
|
|
214
|
+
message: "Sestante non valido (deve essere 1-6)",
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
break;
|
|
218
|
+
case "ARCH":
|
|
219
|
+
if (!["UPPER", "LOWER"].includes(application.arch)) {
|
|
220
|
+
return {
|
|
221
|
+
field: "application.arch",
|
|
222
|
+
message: "Arcata non valida (deve essere UPPER o LOWER)",
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
case "FULL_MOUTH":
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Valuta regole custom (placeholder per estensioni future).
|
|
233
|
+
*/
|
|
234
|
+
function evaluateCustomRule(clinicalData, rule) {
|
|
235
|
+
// Esempio: "corona-requires-tooth"
|
|
236
|
+
if (rule === "corona-requires-tooth") {
|
|
237
|
+
const serviceCode = clinicalData.prostheticService?.serviceCode;
|
|
238
|
+
if (serviceCode?.toUpperCase().includes("CORONA")) {
|
|
239
|
+
return clinicalData.application?.type !== "TOOTH";
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Valida che le fasi richieste siano completate.
|
|
246
|
+
*/
|
|
247
|
+
export function validatePhaseCompletion(phases, phaseStatuses, clinicalData, conditions) {
|
|
248
|
+
const errors = [];
|
|
249
|
+
// Determina quali fasi sono required in base alle condizioni
|
|
250
|
+
const requiredPhases = new Set();
|
|
251
|
+
for (const phase of phases) {
|
|
252
|
+
if (phase.required) {
|
|
253
|
+
requiredPhases.add(phase.phaseTypeKey);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Applica condizioni
|
|
257
|
+
for (const condition of conditions) {
|
|
258
|
+
if (evaluateCondition(clinicalData, condition.when)) {
|
|
259
|
+
if (condition.then.setPhaseRequired) {
|
|
260
|
+
if (condition.then.setPhaseRequired.required) {
|
|
261
|
+
requiredPhases.add(condition.then.setPhaseRequired.phaseTypeKey);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
requiredPhases.delete(condition.then.setPhaseRequired.phaseTypeKey);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Verifica completamento
|
|
270
|
+
for (const phaseKey of requiredPhases) {
|
|
271
|
+
const status = phaseStatuses.get(phaseKey);
|
|
272
|
+
if (!status || !["DONE_OK", "SKIPPED"].includes(status)) {
|
|
273
|
+
const phase = phases.find((p) => p.phaseTypeKey === phaseKey);
|
|
274
|
+
errors.push({
|
|
275
|
+
field: `phase.${phaseKey}`,
|
|
276
|
+
message: `La fase "${phase?.label || phaseKey}" è obbligatoria`,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return errors;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Valida i requisiti per una prescrizione digitale.
|
|
284
|
+
* Se il tipo è DIGITAL, deve avere almeno 1 file STL.
|
|
285
|
+
*/
|
|
286
|
+
export function validateDigitalRequirements(prescriptionType, digitalAssets) {
|
|
287
|
+
const errors = [];
|
|
288
|
+
// Default a ANALOG se non specificato
|
|
289
|
+
const type = prescriptionType || "ANALOG";
|
|
290
|
+
if (type === "DIGITAL") {
|
|
291
|
+
const assets = digitalAssets || [];
|
|
292
|
+
if (assets.length === 0) {
|
|
293
|
+
errors.push({
|
|
294
|
+
field: "digitalAssets",
|
|
295
|
+
message: "Le prescrizioni digitali richiedono almeno un file STL",
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return errors;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Verifica che un utente possa eseguire un'azione.
|
|
303
|
+
*/
|
|
304
|
+
export function canUserPerformAction(userRole, action, prescriptionStatus) {
|
|
305
|
+
const rules = {
|
|
306
|
+
SECRETARY: {
|
|
307
|
+
create: ["*"], // Può sempre creare
|
|
308
|
+
updateDraft: ["DRAFT"],
|
|
309
|
+
submit: ["DRAFT"],
|
|
310
|
+
cancel: ["DRAFT", "PENDING_DOCTOR"],
|
|
311
|
+
},
|
|
312
|
+
DOCTOR: {
|
|
313
|
+
updateDraft: ["DRAFT", "PENDING_DOCTOR"],
|
|
314
|
+
sign: ["PENDING_DOCTOR"],
|
|
315
|
+
revise: ["SIGNED", "ERROR"],
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
const allowedStatuses = rules[userRole]?.[action];
|
|
319
|
+
if (!allowedStatuses) {
|
|
320
|
+
return {
|
|
321
|
+
allowed: false,
|
|
322
|
+
reason: `L'azione "${action}" non è permessa per il ruolo ${userRole}`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
if (allowedStatuses.includes("*") || allowedStatuses.includes(prescriptionStatus)) {
|
|
326
|
+
return { allowed: true };
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
allowed: false,
|
|
330
|
+
reason: `L'azione "${action}" non è permessa nello stato ${prescriptionStatus}`,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../convex/lib/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Genera un URL per l'upload di un file STL.
|
|
3
|
+
* Il client usa questo URL per caricare direttamente il file.
|
|
4
|
+
*/
|
|
5
|
+
export declare const generateStlUploadUrl: import("convex/server").RegisteredMutation<"public", {
|
|
6
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
7
|
+
}, Promise<{
|
|
8
|
+
uploadUrl: string;
|
|
9
|
+
}>>;
|
|
10
|
+
/**
|
|
11
|
+
* Conferma l'upload di un file STL.
|
|
12
|
+
* Chiamato dopo che il client ha caricato il file sull'URL generato.
|
|
13
|
+
*/
|
|
14
|
+
export declare const confirmStlUpload: import("convex/server").RegisteredMutation<"public", {
|
|
15
|
+
description?: string | undefined;
|
|
16
|
+
fileName: string;
|
|
17
|
+
fileSize: number;
|
|
18
|
+
mimeType: string;
|
|
19
|
+
storageId: string;
|
|
20
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
21
|
+
}, Promise<{
|
|
22
|
+
success: boolean;
|
|
23
|
+
asset: import("../lib/storage").DigitalAsset;
|
|
24
|
+
}>>;
|
|
25
|
+
/**
|
|
26
|
+
* Elimina un file STL da una prescrizione.
|
|
27
|
+
*/
|
|
28
|
+
export declare const deleteStlFile: import("convex/server").RegisteredMutation<"public", {
|
|
29
|
+
assetId: string;
|
|
30
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
31
|
+
}, Promise<{
|
|
32
|
+
success: boolean;
|
|
33
|
+
}>>;
|
|
34
|
+
/**
|
|
35
|
+
* Cambia il tipo di prescrizione (ANALOG <-> DIGITAL).
|
|
36
|
+
* Solo in stato DRAFT.
|
|
37
|
+
*/
|
|
38
|
+
export declare const setPrescriptionType: import("convex/server").RegisteredMutation<"public", {
|
|
39
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
40
|
+
prescriptionType: "ANALOG" | "DIGITAL";
|
|
41
|
+
}, Promise<{
|
|
42
|
+
success: boolean;
|
|
43
|
+
}>>;
|
|
44
|
+
/**
|
|
45
|
+
* Aggiorna la descrizione di un file STL.
|
|
46
|
+
*/
|
|
47
|
+
export declare const updateStlDescription: import("convex/server").RegisteredMutation<"public", {
|
|
48
|
+
assetId: string;
|
|
49
|
+
description: string;
|
|
50
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
51
|
+
}, Promise<{
|
|
52
|
+
success: boolean;
|
|
53
|
+
}>>;
|
|
54
|
+
//# sourceMappingURL=digitalAssets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digitalAssets.d.ts","sourceRoot":"","sources":["../../../convex/mutations/digitalAssets.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;GAmC/B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;GA8E3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;GAqExB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;GA2D9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;GAyD/B,CAAC"}
|