@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,334 @@
|
|
|
1
|
+
import { mutation } from "../_generated/server";
|
|
2
|
+
import { ConvexError, v } from "convex/values";
|
|
3
|
+
import { generateIdempotencyKey } from "../lib/utils";
|
|
4
|
+
import { requireIdentityUser, assertPrescriptionAccess } from "../lib/auth";
|
|
5
|
+
// ============================================
|
|
6
|
+
// PHASE MUTATIONS
|
|
7
|
+
// ============================================
|
|
8
|
+
// Helper per ottenere prescriptionRef (supporta sia vecchio che nuovo nome)
|
|
9
|
+
function getPrescriptionRef(doc) {
|
|
10
|
+
const ref = doc.prescriptionRef ?? doc.prescriptionId;
|
|
11
|
+
if (!ref)
|
|
12
|
+
throw new Error("Riferimento alla prescrizione non trovato");
|
|
13
|
+
return ref;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Aggiorna il feedback di una fase.
|
|
17
|
+
* Enforcement forward-only (non si può tornare indietro).
|
|
18
|
+
*/
|
|
19
|
+
export const updateFeedback = mutation({
|
|
20
|
+
args: {
|
|
21
|
+
phaseInstanceId: v.id("phaseInstances"),
|
|
22
|
+
outcome: v.union(v.literal("OK"), v.literal("KO"), v.null()),
|
|
23
|
+
comment: v.optional(v.string()),
|
|
24
|
+
},
|
|
25
|
+
handler: async (ctx, args) => {
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
let user;
|
|
28
|
+
try {
|
|
29
|
+
user = await requireIdentityUser(ctx);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error instanceof ConvexError)
|
|
33
|
+
throw error;
|
|
34
|
+
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
35
|
+
}
|
|
36
|
+
// 1. Carica fase
|
|
37
|
+
const phase = await ctx.db.get(args.phaseInstanceId);
|
|
38
|
+
if (!phase) {
|
|
39
|
+
throw new Error("Fase non trovata");
|
|
40
|
+
}
|
|
41
|
+
// 2. Carica prescrizione per verifiche
|
|
42
|
+
const prescriptionRef = getPrescriptionRef(phase);
|
|
43
|
+
const prescription = await ctx.db.get(prescriptionRef);
|
|
44
|
+
if (!prescription) {
|
|
45
|
+
throw new Error("Prescrizione non trovata");
|
|
46
|
+
}
|
|
47
|
+
assertPrescriptionAccess(user, prescription);
|
|
48
|
+
// 3. Verifica stato prescrizione
|
|
49
|
+
if (!["SIGNED", "SYNCED"].includes(prescription.status)) {
|
|
50
|
+
throw new Error(`Non è possibile aggiornare le fasi di una prescrizione in stato ${prescription.status}`);
|
|
51
|
+
}
|
|
52
|
+
// 4. Enforcement forward-only
|
|
53
|
+
// Se la fase è già DONE_OK o DONE_KO, non si può cambiare outcome
|
|
54
|
+
if (["DONE_OK", "DONE_KO"].includes(phase.status) && args.outcome !== null) {
|
|
55
|
+
// Può solo aggiungere commenti, non cambiare outcome
|
|
56
|
+
if (phase.feedback?.outcome !== args.outcome) {
|
|
57
|
+
throw new Error("Non è possibile modificare l'esito di una fase già completata");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// 6. Calcola nuovo status
|
|
61
|
+
let newStatus = phase.status;
|
|
62
|
+
if (args.outcome === "OK") {
|
|
63
|
+
newStatus = "DONE_OK";
|
|
64
|
+
}
|
|
65
|
+
else if (args.outcome === "KO") {
|
|
66
|
+
newStatus = "DONE_KO";
|
|
67
|
+
}
|
|
68
|
+
// 7. Aggiorna fase
|
|
69
|
+
await ctx.db.patch(args.phaseInstanceId, {
|
|
70
|
+
status: newStatus,
|
|
71
|
+
feedback: {
|
|
72
|
+
outcome: args.outcome,
|
|
73
|
+
comment: args.comment,
|
|
74
|
+
updatedBy: user._id,
|
|
75
|
+
updatedAt: now,
|
|
76
|
+
},
|
|
77
|
+
updatedAt: now,
|
|
78
|
+
});
|
|
79
|
+
// 8. Audit
|
|
80
|
+
await ctx.db.insert("auditEvents", {
|
|
81
|
+
auditEventId: 0, // Will be backfilled
|
|
82
|
+
prescriptionRef: prescriptionRef,
|
|
83
|
+
at: now,
|
|
84
|
+
actorUserId: user._id,
|
|
85
|
+
actorRole: user.role,
|
|
86
|
+
type: "PHASE_FEEDBACK_UPDATED",
|
|
87
|
+
payload: {
|
|
88
|
+
phaseTypeKey: phase.phaseTypeKey,
|
|
89
|
+
ordinal: phase.ordinal,
|
|
90
|
+
outcome: args.outcome,
|
|
91
|
+
comment: args.comment,
|
|
92
|
+
newStatus,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
return { success: true, newStatus };
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
/**
|
|
99
|
+
* Schedula un appuntamento per una fase.
|
|
100
|
+
* Crea un sync job per PrimoCore.
|
|
101
|
+
*/
|
|
102
|
+
export const scheduleAppointment = mutation({
|
|
103
|
+
args: {
|
|
104
|
+
phaseInstanceId: v.id("phaseInstances"),
|
|
105
|
+
startAt: v.number(),
|
|
106
|
+
endAt: v.number(),
|
|
107
|
+
doctorId: v.string(),
|
|
108
|
+
},
|
|
109
|
+
handler: async (ctx, args) => {
|
|
110
|
+
const now = Date.now();
|
|
111
|
+
let user;
|
|
112
|
+
try {
|
|
113
|
+
user = await requireIdentityUser(ctx);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (error instanceof ConvexError)
|
|
117
|
+
throw error;
|
|
118
|
+
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
119
|
+
}
|
|
120
|
+
// 1. Carica fase
|
|
121
|
+
const phase = await ctx.db.get(args.phaseInstanceId);
|
|
122
|
+
if (!phase) {
|
|
123
|
+
throw new Error("Fase non trovata");
|
|
124
|
+
}
|
|
125
|
+
// 2. Carica prescrizione
|
|
126
|
+
const prescriptionRef = getPrescriptionRef(phase);
|
|
127
|
+
const prescription = await ctx.db.get(prescriptionRef);
|
|
128
|
+
if (!prescription) {
|
|
129
|
+
throw new Error("Prescrizione non trovata");
|
|
130
|
+
}
|
|
131
|
+
assertPrescriptionAccess(user, prescription);
|
|
132
|
+
// 3. Aggiorna fase con appuntamento
|
|
133
|
+
await ctx.db.patch(args.phaseInstanceId, {
|
|
134
|
+
status: "SCHEDULED",
|
|
135
|
+
appointment: {
|
|
136
|
+
startAt: args.startAt,
|
|
137
|
+
endAt: args.endAt,
|
|
138
|
+
doctorId: args.doctorId,
|
|
139
|
+
},
|
|
140
|
+
updatedAt: now,
|
|
141
|
+
});
|
|
142
|
+
// 4. Crea sync job per PrimoCore
|
|
143
|
+
const idempotencyKey = generateIdempotencyKey(prescription._id, args.phaseInstanceId, String(phase.iteration), "UPSERT_APPOINTMENT");
|
|
144
|
+
const syncJobId = await ctx.db.insert("syncJobs", {
|
|
145
|
+
syncJobId: 0, // Will be backfilled
|
|
146
|
+
prescriptionRef: prescription._id,
|
|
147
|
+
target: "PRIMOCORE",
|
|
148
|
+
kind: "UPSERT_APPOINTMENT",
|
|
149
|
+
idempotencyKey,
|
|
150
|
+
requestPayload: {
|
|
151
|
+
phaseInstanceId: args.phaseInstanceId,
|
|
152
|
+
phaseTypeKey: phase.phaseTypeKey,
|
|
153
|
+
startAt: args.startAt,
|
|
154
|
+
endAt: args.endAt,
|
|
155
|
+
doctorId: args.doctorId,
|
|
156
|
+
patientId: prescription.patientId,
|
|
157
|
+
clinicId: prescription.clinicId,
|
|
158
|
+
},
|
|
159
|
+
status: "PENDING",
|
|
160
|
+
attempts: 0,
|
|
161
|
+
nextRetryAt: now,
|
|
162
|
+
createdAt: now,
|
|
163
|
+
updatedAt: now,
|
|
164
|
+
});
|
|
165
|
+
// 5. Audit
|
|
166
|
+
await ctx.db.insert("auditEvents", {
|
|
167
|
+
auditEventId: 0, // Will be backfilled
|
|
168
|
+
prescriptionRef: prescription._id,
|
|
169
|
+
at: now,
|
|
170
|
+
actorUserId: user._id,
|
|
171
|
+
actorRole: user.role,
|
|
172
|
+
type: "PHASE_APPOINTMENT_SCHEDULED",
|
|
173
|
+
payload: {
|
|
174
|
+
phaseTypeKey: phase.phaseTypeKey,
|
|
175
|
+
ordinal: phase.ordinal,
|
|
176
|
+
startAt: args.startAt,
|
|
177
|
+
endAt: args.endAt,
|
|
178
|
+
doctorId: args.doctorId,
|
|
179
|
+
syncJobId,
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
return { success: true, syncJobId };
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
/**
|
|
186
|
+
* Ripete una fase (se repeatable).
|
|
187
|
+
*/
|
|
188
|
+
export const repeatPhase = mutation({
|
|
189
|
+
args: {
|
|
190
|
+
phaseInstanceId: v.id("phaseInstances"),
|
|
191
|
+
reason: v.string(),
|
|
192
|
+
},
|
|
193
|
+
handler: async (ctx, args) => {
|
|
194
|
+
const now = Date.now();
|
|
195
|
+
let user;
|
|
196
|
+
try {
|
|
197
|
+
user = await requireIdentityUser(ctx);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (error instanceof ConvexError)
|
|
201
|
+
throw error;
|
|
202
|
+
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
203
|
+
}
|
|
204
|
+
// 1. Carica fase
|
|
205
|
+
const phase = await ctx.db.get(args.phaseInstanceId);
|
|
206
|
+
if (!phase) {
|
|
207
|
+
throw new Error("Fase non trovata");
|
|
208
|
+
}
|
|
209
|
+
// 2. Carica prescrizione e flow
|
|
210
|
+
const prescriptionRef = getPrescriptionRef(phase);
|
|
211
|
+
const prescription = await ctx.db.get(prescriptionRef);
|
|
212
|
+
if (!prescription) {
|
|
213
|
+
throw new Error("Prescrizione non trovata");
|
|
214
|
+
}
|
|
215
|
+
assertPrescriptionAccess(user, prescription);
|
|
216
|
+
const flow = await ctx.db
|
|
217
|
+
.query("flows")
|
|
218
|
+
.withIndex("by_flowKey_version", (q) => q.eq("flowKey", prescription.flowKey).eq("version", prescription.flowVersion))
|
|
219
|
+
.first();
|
|
220
|
+
if (!flow) {
|
|
221
|
+
throw new Error("Flow non trovato");
|
|
222
|
+
}
|
|
223
|
+
// 3. Verifica che la fase sia repeatable
|
|
224
|
+
const phaseDefinition = flow.definition.phases.find((p) => p.phaseTypeKey === phase.phaseTypeKey);
|
|
225
|
+
if (!phaseDefinition?.repeatable) {
|
|
226
|
+
throw new Error("Questa fase non può essere ripetuta");
|
|
227
|
+
}
|
|
228
|
+
// 4. Marca fase corrente come REPEAT
|
|
229
|
+
await ctx.db.patch(args.phaseInstanceId, {
|
|
230
|
+
status: "REPEAT",
|
|
231
|
+
updatedAt: now,
|
|
232
|
+
});
|
|
233
|
+
// 5. Crea nuova istanza della fase
|
|
234
|
+
const newPhaseId = await ctx.db.insert("phaseInstances", {
|
|
235
|
+
phaseInstanceId: 0, // Will be backfilled
|
|
236
|
+
prescriptionRef: prescription._id,
|
|
237
|
+
phaseTypeKey: phase.phaseTypeKey,
|
|
238
|
+
ordinal: phase.ordinal,
|
|
239
|
+
iteration: phase.iteration + 1,
|
|
240
|
+
status: "NOT_STARTED",
|
|
241
|
+
createdAt: now,
|
|
242
|
+
updatedAt: now,
|
|
243
|
+
});
|
|
244
|
+
// 6. Audit
|
|
245
|
+
await ctx.db.insert("auditEvents", {
|
|
246
|
+
auditEventId: 0, // Will be backfilled
|
|
247
|
+
prescriptionRef: prescription._id,
|
|
248
|
+
at: now,
|
|
249
|
+
actorUserId: user._id,
|
|
250
|
+
actorRole: user.role,
|
|
251
|
+
type: "PHASE_REPEATED",
|
|
252
|
+
payload: {
|
|
253
|
+
phaseTypeKey: phase.phaseTypeKey,
|
|
254
|
+
previousIteration: phase.iteration,
|
|
255
|
+
newIteration: phase.iteration + 1,
|
|
256
|
+
reason: args.reason,
|
|
257
|
+
newPhaseId,
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
return { success: true, newPhaseId };
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
/**
|
|
264
|
+
* Salta una fase (se non required).
|
|
265
|
+
*/
|
|
266
|
+
export const skipPhase = mutation({
|
|
267
|
+
args: {
|
|
268
|
+
phaseInstanceId: v.id("phaseInstances"),
|
|
269
|
+
reason: v.string(),
|
|
270
|
+
},
|
|
271
|
+
handler: async (ctx, args) => {
|
|
272
|
+
const now = Date.now();
|
|
273
|
+
let user;
|
|
274
|
+
try {
|
|
275
|
+
user = await requireIdentityUser(ctx);
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
if (error instanceof ConvexError)
|
|
279
|
+
throw error;
|
|
280
|
+
throw new ConvexError({ code: "UNAUTHORIZED", message: "Accesso non autorizzato" });
|
|
281
|
+
}
|
|
282
|
+
// 1. Carica fase
|
|
283
|
+
const phase = await ctx.db.get(args.phaseInstanceId);
|
|
284
|
+
if (!phase) {
|
|
285
|
+
throw new Error("Fase non trovata");
|
|
286
|
+
}
|
|
287
|
+
// 2. Carica prescrizione e flow
|
|
288
|
+
const prescriptionRef = getPrescriptionRef(phase);
|
|
289
|
+
const prescription = await ctx.db.get(prescriptionRef);
|
|
290
|
+
if (!prescription) {
|
|
291
|
+
throw new Error("Prescrizione non trovata");
|
|
292
|
+
}
|
|
293
|
+
assertPrescriptionAccess(user, prescription);
|
|
294
|
+
const flow = await ctx.db
|
|
295
|
+
.query("flows")
|
|
296
|
+
.withIndex("by_flowKey_version", (q) => q.eq("flowKey", prescription.flowKey).eq("version", prescription.flowVersion))
|
|
297
|
+
.first();
|
|
298
|
+
if (!flow) {
|
|
299
|
+
throw new Error("Flow non trovato");
|
|
300
|
+
}
|
|
301
|
+
// 3. Verifica che la fase non sia required
|
|
302
|
+
const phaseDefinition = flow.definition.phases.find((p) => p.phaseTypeKey === phase.phaseTypeKey);
|
|
303
|
+
if (phaseDefinition?.required) {
|
|
304
|
+
throw new Error("Non è possibile saltare una fase obbligatoria");
|
|
305
|
+
}
|
|
306
|
+
// 4. Aggiorna stato fase
|
|
307
|
+
await ctx.db.patch(args.phaseInstanceId, {
|
|
308
|
+
status: "SKIPPED",
|
|
309
|
+
feedback: {
|
|
310
|
+
outcome: null,
|
|
311
|
+
comment: args.reason,
|
|
312
|
+
updatedBy: user._id,
|
|
313
|
+
updatedAt: now,
|
|
314
|
+
},
|
|
315
|
+
updatedAt: now,
|
|
316
|
+
});
|
|
317
|
+
// 5. Audit
|
|
318
|
+
await ctx.db.insert("auditEvents", {
|
|
319
|
+
auditEventId: 0, // Will be backfilled
|
|
320
|
+
prescriptionRef: prescription._id,
|
|
321
|
+
at: now,
|
|
322
|
+
actorUserId: user._id,
|
|
323
|
+
actorRole: user.role,
|
|
324
|
+
type: "PHASE_SKIPPED",
|
|
325
|
+
payload: {
|
|
326
|
+
phaseTypeKey: phase.phaseTypeKey,
|
|
327
|
+
ordinal: phase.ordinal,
|
|
328
|
+
reason: args.reason,
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
return { success: true };
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
//# sourceMappingURL=phases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../convex/mutations/phases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { Id } from "../_generated/dataModel";
|
|
2
|
+
/**
|
|
3
|
+
* Crea una nuova bozza di prescrizione.
|
|
4
|
+
*
|
|
5
|
+
* VINCOLO CRITICO: Una sola prescrizione attiva per pdcItemId
|
|
6
|
+
*/
|
|
7
|
+
export declare const createDraft: import("convex/server").RegisteredMutation<"public", {
|
|
8
|
+
pdcItemId: string;
|
|
9
|
+
listinoId: string;
|
|
10
|
+
doctorId: string;
|
|
11
|
+
flowKey: string;
|
|
12
|
+
clinicId: string;
|
|
13
|
+
patientId: string;
|
|
14
|
+
}, Promise<{
|
|
15
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
16
|
+
revisionId: import("convex/values").GenericId<"clinicalRevisions">;
|
|
17
|
+
}>>;
|
|
18
|
+
/**
|
|
19
|
+
* Aggiorna i dati clinici (bozza).
|
|
20
|
+
* Solo se la revisione non è frozen.
|
|
21
|
+
*/
|
|
22
|
+
export declare const updateClinicalDraft: import("convex/server").RegisteredMutation<"public", {
|
|
23
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
24
|
+
clinicalDataPatch: {
|
|
25
|
+
prostheticService?: {
|
|
26
|
+
serviceCode?: string | undefined;
|
|
27
|
+
serviceLabel?: string | undefined;
|
|
28
|
+
} | undefined;
|
|
29
|
+
application?: {
|
|
30
|
+
type: "TOOTH";
|
|
31
|
+
toothNumber: number;
|
|
32
|
+
} | {
|
|
33
|
+
type: "MULTI_TOOTH";
|
|
34
|
+
teeth: number[];
|
|
35
|
+
} | {
|
|
36
|
+
type: "BRIDGE";
|
|
37
|
+
teeth: {
|
|
38
|
+
toothNumber: number;
|
|
39
|
+
role: "abutment" | "pontic";
|
|
40
|
+
}[];
|
|
41
|
+
} | {
|
|
42
|
+
type: "QUADRANT";
|
|
43
|
+
quadrant: number;
|
|
44
|
+
} | {
|
|
45
|
+
type: "SEXTANT";
|
|
46
|
+
sextant: number;
|
|
47
|
+
} | {
|
|
48
|
+
type: "ARCH";
|
|
49
|
+
arch: "UPPER" | "LOWER";
|
|
50
|
+
} | {
|
|
51
|
+
type: "FULL_MOUTH";
|
|
52
|
+
} | null | undefined;
|
|
53
|
+
shade?: string | null | undefined;
|
|
54
|
+
notePreparazione?: string | null | undefined;
|
|
55
|
+
lineaMargine?: string | null | undefined;
|
|
56
|
+
};
|
|
57
|
+
}, Promise<{
|
|
58
|
+
ok: boolean;
|
|
59
|
+
success: boolean;
|
|
60
|
+
clinicalHash: string;
|
|
61
|
+
clinicalValidationErrors: import("../types").ValidationError[];
|
|
62
|
+
}>>;
|
|
63
|
+
/**
|
|
64
|
+
* Invia prescrizione al medico.
|
|
65
|
+
* Cambia status da DRAFT a PENDING_DOCTOR.
|
|
66
|
+
*/
|
|
67
|
+
export declare const submitToDoctor: import("convex/server").RegisteredMutation<"public", {
|
|
68
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
69
|
+
}, Promise<{
|
|
70
|
+
success: boolean;
|
|
71
|
+
}>>;
|
|
72
|
+
/**
|
|
73
|
+
* Firma la prescrizione.
|
|
74
|
+
* Solo medico, solo in stato PENDING_DOCTOR.
|
|
75
|
+
*/
|
|
76
|
+
export declare const signPrescription: import("convex/server").RegisteredMutation<"public", {
|
|
77
|
+
signaturePayload: string;
|
|
78
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
79
|
+
}, Promise<{
|
|
80
|
+
success: boolean;
|
|
81
|
+
clinicalHash: string;
|
|
82
|
+
syncJobIds: Id<"syncJobs">[];
|
|
83
|
+
}>>;
|
|
84
|
+
/**
|
|
85
|
+
* Invia la prescrizione al laboratorio.
|
|
86
|
+
* Questa mutation semplifica il flusso: passa direttamente da DRAFT a SIGNED
|
|
87
|
+
* senza richiedere la firma del medico (auto-firma simulata).
|
|
88
|
+
*/
|
|
89
|
+
export declare const sendToLab: import("convex/server").RegisteredMutation<"public", {
|
|
90
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
91
|
+
}, Promise<{
|
|
92
|
+
success: boolean;
|
|
93
|
+
clinicalHash: string;
|
|
94
|
+
syncJobIds: Id<"syncJobs">[];
|
|
95
|
+
}>>;
|
|
96
|
+
/**
|
|
97
|
+
* Crea una nuova revisione dopo la firma.
|
|
98
|
+
* Permette di modificare una prescrizione già firmata.
|
|
99
|
+
*/
|
|
100
|
+
export declare const reviseAfterSignature: import("convex/server").RegisteredMutation<"public", {
|
|
101
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
102
|
+
reason: string;
|
|
103
|
+
}, Promise<{
|
|
104
|
+
success: boolean;
|
|
105
|
+
newRevisionId: import("convex/values").GenericId<"clinicalRevisions">;
|
|
106
|
+
newRevisionNumber: number;
|
|
107
|
+
}>>;
|
|
108
|
+
/**
|
|
109
|
+
* Annulla una prescrizione.
|
|
110
|
+
*/
|
|
111
|
+
export declare const cancelPrescription: import("convex/server").RegisteredMutation<"public", {
|
|
112
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
113
|
+
reason: string;
|
|
114
|
+
}, Promise<{
|
|
115
|
+
success: boolean;
|
|
116
|
+
}>>;
|
|
117
|
+
/**
|
|
118
|
+
* Marca una prescrizione come spedita al laboratorio.
|
|
119
|
+
* Per prescrizioni analogiche: traccia quando l'impronta fisica viene spedita.
|
|
120
|
+
*/
|
|
121
|
+
export declare const markAsShipped: import("convex/server").RegisteredMutation<"public", {
|
|
122
|
+
trackingNumber?: string | undefined;
|
|
123
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
124
|
+
}, Promise<{
|
|
125
|
+
success: boolean;
|
|
126
|
+
shippedAt: number;
|
|
127
|
+
}>>;
|
|
128
|
+
/**
|
|
129
|
+
* Rimuove il flag di spedizione (annulla spedizione).
|
|
130
|
+
*/
|
|
131
|
+
export declare const unmarkAsShipped: import("convex/server").RegisteredMutation<"public", {
|
|
132
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
133
|
+
}, Promise<{
|
|
134
|
+
success: boolean;
|
|
135
|
+
}>>;
|
|
136
|
+
/**
|
|
137
|
+
* Crea una prescrizione automaticamente quando il Calendario crea un appuntamento.
|
|
138
|
+
*
|
|
139
|
+
* CARATTERISTICHE:
|
|
140
|
+
* - Usa idempotencyKey per evitare duplicati (se la chiamata viene ritentata)
|
|
141
|
+
* - Salva uno snapshot dei dati dal Calendario (calendarData)
|
|
142
|
+
* - Pre-compila i dati clinici con le info disponibili
|
|
143
|
+
* - Ritorna la prescrizione esistente se idempotencyKey già usata
|
|
144
|
+
*
|
|
145
|
+
* @param idempotencyKey - Chiave univoca (es: "cal-{appointmentId}")
|
|
146
|
+
* @param calendarData - Snapshot dei dati dal Calendario
|
|
147
|
+
* @param clinicId, patientId, etc. - ID per i riferimenti
|
|
148
|
+
*/
|
|
149
|
+
export declare const createFromCalendar: import("convex/server").RegisteredMutation<"public", {
|
|
150
|
+
flowKey?: string | undefined;
|
|
151
|
+
pdcItemId: string;
|
|
152
|
+
listinoId: string;
|
|
153
|
+
doctorId: string;
|
|
154
|
+
clinicId: string;
|
|
155
|
+
patientId: string;
|
|
156
|
+
idempotencyKey: string;
|
|
157
|
+
calendarData: {
|
|
158
|
+
toothNumber?: string | undefined;
|
|
159
|
+
treatmentPlanName?: string | undefined;
|
|
160
|
+
nextAppointmentId?: string | undefined;
|
|
161
|
+
nextAppointmentDate?: number | undefined;
|
|
162
|
+
nextAppointmentPhaseId?: string | undefined;
|
|
163
|
+
nextAppointmentPhaseName?: string | undefined;
|
|
164
|
+
application: string;
|
|
165
|
+
patientFirstName: string;
|
|
166
|
+
patientLastName: string;
|
|
167
|
+
clinicName: string;
|
|
168
|
+
treatmentPlanId: string;
|
|
169
|
+
treatmentId: string;
|
|
170
|
+
treatmentName: string;
|
|
171
|
+
phaseId: string;
|
|
172
|
+
phaseName: string;
|
|
173
|
+
appointmentId: string;
|
|
174
|
+
appointmentDate: number;
|
|
175
|
+
operatorId: string;
|
|
176
|
+
operatorName: string;
|
|
177
|
+
};
|
|
178
|
+
}, Promise<{
|
|
179
|
+
success: boolean;
|
|
180
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
181
|
+
alreadyExisted: boolean;
|
|
182
|
+
message: string;
|
|
183
|
+
revisionId?: undefined;
|
|
184
|
+
} | {
|
|
185
|
+
success: boolean;
|
|
186
|
+
prescriptionId: import("convex/values").GenericId<"prescriptions">;
|
|
187
|
+
revisionId: import("convex/values").GenericId<"clinicalRevisions">;
|
|
188
|
+
alreadyExisted: boolean;
|
|
189
|
+
message: string;
|
|
190
|
+
}>>;
|
|
191
|
+
//# sourceMappingURL=prescriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prescriptions.d.ts","sourceRoot":"","sources":["../../../convex/mutations/prescriptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAkE7C;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;GA4JtB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+L9B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;GAqDzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;GAoK3B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;GAyMpB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;GAkF/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;GAiD7B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;GAgExB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;GAsD1B,CAAC;AAMH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsV7B,CAAC"}
|