@peopl-health/nexus 5.67.3 → 5.67.4
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.
|
@@ -194,6 +194,7 @@ const escalationReviewSchema = new mongoose.Schema({
|
|
|
194
194
|
followUpDecision: { type: Number, default: null },
|
|
195
195
|
draftDueAt: { type: Date, default: null },
|
|
196
196
|
draftAttempts: { type: Number, default: 0 },
|
|
197
|
+
draftFailedAt: { type: Date, default: null },
|
|
197
198
|
doctorAlerts: { type: [doctorAlertSchema], default: [] },
|
|
198
199
|
doctorAlertDueAt: { type: Date, default: null },
|
|
199
200
|
doctorAlertKind: { type: String, enum: ['initial', 'realert', null], default: null },
|
|
@@ -1118,7 +1118,7 @@ async function generateBotDraft({ id, lease = null } = {}) {
|
|
|
1118
1118
|
};
|
|
1119
1119
|
const saved = await getEscalationReview().findOneAndUpdate(
|
|
1120
1120
|
{ _id: review._id, status: { $in: DOCUMENTING_STATUSES }, draftDueAt: lease, drafts: { $size: (review.drafts ?? []).length } },
|
|
1121
|
-
{ $push: { drafts: entry }, $set: { status: 'draft_ready', draftDueAt: null }, $unset: { identityBlock: '' } },
|
|
1121
|
+
{ $push: { drafts: entry }, $set: { status: 'draft_ready', draftDueAt: null, draftFailedAt: null }, $unset: { identityBlock: '' } },
|
|
1122
1122
|
{ new: true },
|
|
1123
1123
|
).lean();
|
|
1124
1124
|
if (saved) await audit(saved, DRAFT_OPERATOR, null, { action: 'draft_saved', draftNumber: saved.drafts.length });
|
|
@@ -1811,6 +1811,7 @@ async function syncEscalationReviewCase({ id, syncedBy, requestId = null } = {})
|
|
|
1811
1811
|
|
|
1812
1812
|
module.exports = {
|
|
1813
1813
|
BOOKKEEPING,
|
|
1814
|
+
DOCUMENTING_STATUSES,
|
|
1814
1815
|
PRE_DECISION_STATUSES,
|
|
1815
1816
|
_resetEscalationReviewIndexes,
|
|
1816
1817
|
addCallLog,
|
|
@@ -3,7 +3,7 @@ const { createIntervalSweeper } = require('../utils/intervalSweeper');
|
|
|
3
3
|
const { withTimeout } = require('../utils/timeoutUtils');
|
|
4
4
|
const { getEscalationReview } = require('../models/escalationReviewModel');
|
|
5
5
|
|
|
6
|
-
const { BOOKKEEPING, generateBotDraft } = require('./escalationReviewService');
|
|
6
|
+
const { BOOKKEEPING, DOCUMENTING_STATUSES, generateBotDraft } = require('./escalationReviewService');
|
|
7
7
|
|
|
8
8
|
const SWEEP_LIMIT = 1;
|
|
9
9
|
const DEFAULT_SWEEP_INTERVAL_MS = 30 * 1000;
|
|
@@ -34,6 +34,14 @@ async function draftReview(EscalationReview, { _id, draftDueAt, draftAttempts =
|
|
|
34
34
|
escalationReviewId: String(_id), attempts: draftAttempts + 1,
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
+
if (retry && !willRetry) {
|
|
38
|
+
const marked = await EscalationReview.updateOne(
|
|
39
|
+
{ _id, draftDueAt: lease, closedAt: null, status: { $in: DOCUMENTING_STATUSES } },
|
|
40
|
+
{ $set: { draftDueAt: null, draftFailedAt: new Date() } },
|
|
41
|
+
BOOKKEEPING,
|
|
42
|
+
);
|
|
43
|
+
if (marked.matchedCount) return false;
|
|
44
|
+
}
|
|
37
45
|
await EscalationReview.updateOne(
|
|
38
46
|
{ _id, draftDueAt: lease },
|
|
39
47
|
willRetry
|