From de373aaba337526dd494ab0e631eaa780dfa823c Mon Sep 17 00:00:00 2001 From: Abhijit Date: Thu, 15 Oct 2026 15:24:06 +0530 Subject: [PATCH] 1. Cohort sessions can be saved with different schedule types. 2. Patient search is fixed. 3. Patient export now includes session attendance. 4. Updating a cohort time, slot, or type updates its sessions. 5. Maximum session count is increased. 6.Global Setting updated added new config of dynamich schedule 7.Capture at 15 and 30 seesion some diff vitals --- backend/src/models/Cohort.js | 1 + backend/src/models/CohortSession.js | 2 + backend/src/models/Settings.js | 9 ++ backend/src/routes/cohorts.js | 37 ++++- backend/src/routes/matching.js | 16 ++ backend/src/routes/onboarding.js | 7 +- backend/src/routes/programSessions.js | 2 + backend/src/routes/reports.js | 32 +++- backend/src/routes/settings.js | 19 ++- backend/src/services/google.js | 17 +- backend/src/services/matching.js | 37 ++++- backend/src/services/programSessions.js | 148 +++++++++++++++++- backend/src/services/schedule.js | 79 ++++++++-- backend/src/services/settings.js | 43 ++++- backend/src/utils/serialize.js | 17 +- frontend/public/email-logo.png | Bin 64421 -> 74018 bytes .../src/components/SessionVitalsModal.jsx | 4 + frontend/src/views/virtualpr/cohorts/form.jsx | 84 ++++++++-- .../src/views/virtualpr/matching/index.jsx | 22 ++- .../src/views/virtualpr/onboarding/index.jsx | 23 ++- .../src/views/virtualpr/settings/index.jsx | 101 +++++++++++- 21 files changed, 630 insertions(+), 70 deletions(-) diff --git a/backend/src/models/Cohort.js b/backend/src/models/Cohort.js index 3ef3681..b003f67 100644 --- a/backend/src/models/Cohort.js +++ b/backend/src/models/Cohort.js @@ -6,6 +6,7 @@ const cohortSchema = new mongoose.Schema( startDate: { type: Date, required: true }, slot: { type: String, required: true, trim: true }, language: { type: String, default: '', trim: true }, + scheduleId: { type: String, default: '', trim: true }, // blank means Normal; otherwise an extra schedule id diseaseType: { type: String, default: '', trim: true }, status: { type: String, diff --git a/backend/src/models/CohortSession.js b/backend/src/models/CohortSession.js index 51751fe..7be5faf 100644 --- a/backend/src/models/CohortSession.js +++ b/backend/src/models/CohortSession.js @@ -17,6 +17,8 @@ const assessmentSchema = new mongoose.Schema( eq5d3l: { type: String, default: '', trim: true }, sgrq: { type: String, default: '', trim: true }, sitToStand: { type: String, default: '', trim: true }, + rpeRest: { type: String, default: '', trim: true }, + rpeActivity: { type: String, default: '', trim: true }, o2Regular: { type: String, default: '', trim: true }, o2WithExercise: { type: String, default: '', trim: true }, }, diff --git a/backend/src/models/Settings.js b/backend/src/models/Settings.js index 89bc793..4eca159 100644 --- a/backend/src/models/Settings.js +++ b/backend/src/models/Settings.js @@ -50,6 +50,15 @@ const settingsSchema = new mongoose.Schema( matchingPriority: { type: [String], default: ['language', 'slot', 'weekday', 'disease'] }, matchingCron: { type: String, default: '0 7 * * 6' }, piiRetentionDays: { type: Number, default: 365 }, + cohortSchedules: { // extra schedules, each with its own weekdays and meeting count + type: [{ + id: { type: String, required: true, trim: true }, + name: { type: String, required: true, trim: true }, + weekdays: { type: [Number], default: [] }, + upcomingSessionCount: { type: Number, default: 30 }, + }], + default: [], + }, whatsappAdminIds: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }], whatsappReminderRules: { type: [reminderRuleSchema], default: [] }, whatsappTaskGapMinMs: { type: Number, default: 15000 }, diff --git a/backend/src/routes/cohorts.js b/backend/src/routes/cohorts.js index dbe26ed..d263412 100644 --- a/backend/src/routes/cohorts.js +++ b/backend/src/routes/cohorts.js @@ -6,10 +6,10 @@ import { Role } from '../models/Role.js'; import { User } from '../models/User.js'; import { OnboardedPatient } from '../models/OnboardedPatient.js'; import { toCohortDto, userLanguages } from '../utils/serialize.js'; -import { assertCohortStartDate, buildCohortName, toYmd, upcomingSessionDates, ymdToDate } from '../services/schedule.js'; +import { assertCohortStartDate, buildCohortName, scheduleSessionCount, scheduleWeekdays, toYmd, upcomingSessionDates, ymdToDate } from '../services/schedule.js'; import { releaseCohortPatients, syncCohortPatients } from '../services/cohorts.js'; import { activateManualCohort } from '../services/matching.js'; -import { persistCohortSessions } from '../services/programSessions.js'; +import { ensureSessionRecords, persistCohortSessions, rescheduleOpenSessions } from '../services/programSessions.js'; import { CohortSession } from '../models/CohortSession.js'; import { assertConfiguredSlot, getAppSettings } from '../services/settings.js'; import { toCohortSessionDto } from '../utils/serialize.js'; @@ -25,8 +25,18 @@ const cohortPayload = Joi.object({ diseaseType: Joi.string().trim().allow('', null), patients: Joi.array().items(objectId).default([]), durationMinutes: Joi.number().min(15).max(180).optional(), + scheduleId: Joi.string().trim().allow('', null), }); +// Saved extra-schedule id to its weekdays. Blank means Normal. +async function chosenWeekdays(scheduleId) { + const id = String(scheduleId || '').trim(); + if (!id) return null; + const days = await scheduleWeekdays(id); + if (!days) throw Boom.badRequest('Select a schedule from Settings.'); + return days; +} + async function assertVirtualPrt(userId) { const user = await User.findById(userId).populate('role'); if (!user || !user.isActive) throw Boom.badRequest('Invalid Virtual PRT'); @@ -113,6 +123,7 @@ export function cohortRoutes(server) { }, handler: async (request) => { const { startDate, slot, virtualPrt, patients } = request.payload; + const scheduleId = String(request.payload.scheduleId || '').trim(); const settings = await getAppSettings(); const durationMinutes = request.payload.durationMinutes || settings.defaultDurationMinutes || 60; await assertConfiguredSlot(slot); @@ -126,7 +137,7 @@ export function cohortRoutes(server) { throw Boom.badRequest(`A cohort can have at most ${settings.maxPatientsPerCohort || 10} patients.`); } try { - await assertCohortStartDate(startDate, virtualPrt, language); + await assertCohortStartDate(startDate, virtualPrt, language, await chosenWeekdays(scheduleId)); } catch (err) { throw Boom.badRequest(err.message); } @@ -136,6 +147,7 @@ export function cohortRoutes(server) { startDate: ymdToDate(startDate), slot, language, + scheduleId, diseaseType: request.payload.diseaseType || '', status: 'active', virtualPrt, @@ -168,14 +180,15 @@ export function cohortRoutes(server) { pre: [{ method: requirePermission('cohorts', 'view') }], validate: { params: Joi.object({ id: objectId.required() }), - query: Joi.object({ count: Joi.number().min(1).max(40) }), + query: Joi.object({ count: Joi.number().min(1).max(60) }), }, }, handler: async (request) => { const cohort = await findCohort(request); const stored = await CohortSession.find({ cohort: cohort._id }).sort({ index: 1 }); if (stored.length) return { items: stored.map(toCohortSessionDto) }; - const dates = await upcomingSessionDates(toYmd(cohort.startDate), cohort.virtualPrt?._id || cohort.virtualPrt, request.query.count, cohort.language); + const ownCount = await scheduleSessionCount(cohort.scheduleId); + const dates = await upcomingSessionDates(toYmd(cohort.startDate), cohort.virtualPrt?._id || cohort.virtualPrt, ownCount || request.query.count, cohort.language, await scheduleWeekdays(cohort.scheduleId)); return { items: dates.map((date) => ({ date, slot: cohort.slot, status: 'scheduled' })) }; }, }); @@ -196,7 +209,14 @@ export function cohortRoutes(server) { const previousName = cohort.name; const previousPrtId = String(cohort.virtualPrt?._id || cohort.virtualPrt || ''); const hadGroup = Boolean(cohort.whatsappGroupJid); + const previousStart = toYmd(cohort.startDate); + const previousSchedule = String(cohort.scheduleId || '').trim(); + const previousSlot = String(cohort.slot || ''); const { startDate, slot, virtualPrt, patients } = request.payload; + const scheduleId = String(request.payload.scheduleId || '').trim(); + const scheduleChanged = previousStart !== String(startDate) + || previousSchedule !== scheduleId + || previousSlot !== String(slot || ''); const settings = await getAppSettings(); const durationMinutes = request.payload.durationMinutes || settings.defaultDurationMinutes || 60; await assertConfiguredSlot(slot); @@ -210,7 +230,7 @@ export function cohortRoutes(server) { throw Boom.badRequest(`A cohort can have at most ${settings.maxPatientsPerCohort || 10} patients.`); } try { - await assertCohortStartDate(startDate, virtualPrt, language); + await assertCohortStartDate(startDate, virtualPrt, language, await chosenWeekdays(scheduleId)); } catch (err) { throw Boom.badRequest(err.message); } @@ -218,6 +238,7 @@ export function cohortRoutes(server) { cohort.startDate = ymdToDate(startDate); cohort.slot = slot; cohort.language = language; + cohort.scheduleId = scheduleId; cohort.diseaseType = request.payload.diseaseType || cohort.diseaseType || ''; cohort.virtualPrt = virtualPrt; cohort.patients = patients; @@ -229,7 +250,9 @@ export function cohortRoutes(server) { await onCohortUpdated(cohort._id, { previousName, previousPrtId, hadGroup }).catch((err) => { console.error(`[whatsapp] cohort update failed: ${err?.message || err}`); }); - await persistCohortSessions(cohort); + if (scheduleChanged) await rescheduleOpenSessions(cohort); + else if (await CohortSession.countDocuments({ cohort: cohort._id })) await ensureSessionRecords(cohort); + else await persistCohortSessions(cohort); const ready = await Cohort.findById(cohort._id) .populate('virtualPrt', 'firstName lastName email') .populate({ path: 'patients', match: { reviewStatus: 'confirmed' }, select: 'name mobile whatsappOptOut' }); diff --git a/backend/src/routes/matching.js b/backend/src/routes/matching.js index 3759c59..404ec44 100644 --- a/backend/src/routes/matching.js +++ b/backend/src/routes/matching.js @@ -19,6 +19,7 @@ import { resolveReassignment, retargetProposal, runMatching, + setProposalSchedule, } from '../services/matching.js'; const objectId = Joi.string().hex().length(24); @@ -136,6 +137,21 @@ export function matchingRoutes(server) { }, }); + server.route({ + method: 'PATCH', + path: '/api/matching/proposals/{id}/schedule', + options: { + pre: [{ method: requirePermission('matching', 'edit') }], + validate: { + params: Joi.object({ id: objectId.required() }), + payload: Joi.object({ + scheduleId: Joi.string().trim().allow('').required(), + }), + }, + }, + handler: async (request) => setProposalSchedule(request.params.id, request.payload.scheduleId), + }); + server.route({ method: 'POST', path: '/api/matching/proposals/{id}/confirm', diff --git a/backend/src/routes/onboarding.js b/backend/src/routes/onboarding.js index 67459cb..4ee9823 100644 --- a/backend/src/routes/onboarding.js +++ b/backend/src/routes/onboarding.js @@ -262,10 +262,11 @@ export function onboardingRoutes(server) { const searchFilter = {}; if (search) { const term = String(search).trim(); - const hashes = [hashMobile(term), hashName(term)].filter(Boolean); + const mobileHash = hashMobile(term); + const nameHash = hashName(term); searchFilter.$or = []; - if (hashes[0]) searchFilter.$or.push({ mobileHash: hashes[0] }); - if (hashes[1]) searchFilter.$or.push({ nameHash: hashes[1] }); + if (mobileHash) searchFilter.$or.push({ mobileHash }); + if (nameHash) searchFilter.$or.push({ nameHash }); if (!searchFilter.$or.length) searchFilter.$or.push({ _id: null }); } const filter = mergeFilters(await onboardingScopeFilter(request), extra, searchFilter); diff --git a/backend/src/routes/programSessions.js b/backend/src/routes/programSessions.js index 763ffe6..035babc 100644 --- a/backend/src/routes/programSessions.js +++ b/backend/src/routes/programSessions.js @@ -179,6 +179,8 @@ export function programSessionRoutes(server) { eq5d3l: Joi.string().allow('', null), sgrq: Joi.string().allow('', null), sitToStand: Joi.string().allow('', null), + rpeRest: Joi.string().allow('', null), + rpeActivity: Joi.string().allow('', null), o2Regular: Joi.string().allow('', null), o2WithExercise: Joi.string().allow('', null), }), diff --git a/backend/src/routes/reports.js b/backend/src/routes/reports.js index ed5c4e1..2d0d9ee 100644 --- a/backend/src/routes/reports.js +++ b/backend/src/routes/reports.js @@ -29,6 +29,12 @@ function toCsv(rows) { return rows.map((row) => row.map(csvEscape).join(',')).join('\n'); } +// P when that patient attended the meeting, A when they did not. +function sessionMark(session, patientId) { + const record = (session.records || []).find((item) => String(item.patient?._id || item.patient) === patientId); + return record?.attended ? 'P' : 'A'; +} + export function reportRoutes(server) { server.route({ method: 'GET', @@ -195,17 +201,35 @@ export function reportRoutes(server) { rows = [['PRT', 'Used', 'Max', 'Idle', 'Sessions', 'Cancelled'], ...items]; } else { const patients = await listOnboardedForReports({ virtualPrtId: scopedPrt(request), diseaseType: request.query.diseaseType || undefined }); - const stats = await patientProgramStats(patients.map((item) => item._id)); - rows = [['Name', 'Mobile', 'Disease', 'Cohort', 'PRT', 'Attendance'], ...patients.map((patient) => { - const progress = stats.get(String(patient._id)) || { attended: 0, total: 0 }; + const cohortIds = [...new Set(patients.map((patient) => patient.cohort?._id).filter(Boolean))]; + const sessions = cohortIds.length + ? await CohortSession.find({ cohort: { $in: cohortIds }, status: 'completed' }) + .select('cohort index date records.patient records.attended') + .sort({ index: 1, date: 1 }) + : []; + const byCohort = new Map(); + for (const session of sessions) { + const id = String(session.cohort); + const list = byCohort.get(id) || []; + list.push(session); + byCohort.set(id, list); + } + const widest = [...byCohort.values()].reduce((max, list) => Math.max(max, list.length), 0); + const headers = ['Name', 'Mobile', 'Disease', 'Cohort', 'PRT', 'Start date', ...Array.from({ length: widest }, (_, index) => `Session ${index + 1}`)]; + rows = [headers, ...patients.map((patient) => { const pii = readOnboardedPii(patient); + const cohortId = patient.cohort?._id ? String(patient.cohort._id) : ''; + const meetings = cohortId ? (byCohort.get(cohortId) || []) : []; + const marks = meetings.map((session) => sessionMark(session, String(patient._id))); + while (marks.length < widest) marks.push(''); // shorter cohorts leave the extra session cells blank return [ pii.name, pii.mobile, patient.diseaseType || '', patient.cohort?.name || '', patient.assignedEducator ? `${patient.assignedEducator.firstName} ${patient.assignedEducator.lastName}` : '', - `${progress.attended}/${progress.total}`, + patient.cohort?.startDate ? toYmd(patient.cohort.startDate) : '', + ...marks, ]; })]; } diff --git a/backend/src/routes/settings.js b/backend/src/routes/settings.js index d7c8a80..6b77bb2 100644 --- a/backend/src/routes/settings.js +++ b/backend/src/routes/settings.js @@ -1,6 +1,7 @@ import Joi from 'joi'; import Boom from '@hapi/boom'; import { credentials } from '../plugins/auth.js'; +import { Cohort } from '../models/Cohort.js'; import { getAppSettings, normalizeSettingsPayload, toSettingsDto } from '../services/settings.js'; function requireSuperAdmin(request, h) { @@ -17,7 +18,7 @@ const settingsPayload = Joi.object({ slotDurationMinutes: Joi.number().min(15).max(180).required(), cohortStartWeekdays: Joi.array().items(Joi.number().integer().min(0).max(6)).min(1).required(), repeatIntervalDays: Joi.number().integer().min(1).max(30).required(), - upcomingSessionCount: Joi.number().integer().min(1).max(40).required(), + upcomingSessionCount: Joi.number().integer().min(1).max(60).required(), defaultDurationMinutes: Joi.number().min(15).max(180).required(), skipHolidays: Joi.boolean().required(), skipPrtLeave: Joi.boolean().required(), @@ -30,6 +31,12 @@ const settingsPayload = Joi.object({ matchingPriority: Joi.array().items(Joi.string().trim().min(1)).min(1).required(), matchingCron: Joi.string().trim().min(1).required(), piiRetentionDays: Joi.number().integer().min(1).max(3650).optional(), + cohortSchedules: Joi.array().items(Joi.object({ + id: Joi.string().trim().allow('', null), + name: Joi.string().trim().min(1).required(), + weekdays: Joi.array().items(Joi.number().integer().min(0).max(6)).min(1).required(), + upcomingSessionCount: Joi.number().integer().min(1).max(60).required(), + })).default([]), }); export function settingsRoutes(server) { @@ -48,7 +55,15 @@ export function settingsRoutes(server) { }, handler: async (request) => { const settings = await getAppSettings(); - Object.assign(settings, normalizeSettingsPayload(request.payload)); + const next = normalizeSettingsPayload(request.payload); + const removed = (settings.cohortSchedules || []) + .map((row) => row.id) + .filter((id) => !next.cohortSchedules.some((row) => row.id === id)); + if (removed.length) { + const used = await Cohort.countDocuments({ scheduleId: { $in: removed } }); + if (used) throw Boom.badRequest('A cohort is still using a schedule you removed.'); + } + Object.assign(settings, next); await settings.save(); return toSettingsDto(settings); }, diff --git a/backend/src/services/google.js b/backend/src/services/google.js index c7e4642..5983b4e 100644 --- a/backend/src/services/google.js +++ b/backend/src/services/google.js @@ -234,12 +234,14 @@ export async function createCalendarEvent(user, { } } +// Updates an existing Google event and keeps the same Meet link. No new invite. export async function updateCalendarEvent(user, eventId, { title, start, end, timeZone, description = '', + recurrence = null, }) { if (!eventId) return null; if (!user.google?.refreshToken && !user.google?.accessToken) { @@ -247,16 +249,19 @@ export async function updateCalendarEvent(user, eventId, { } const auth = oauthClientFor(user); const calendar = google.calendar({ version: 'v3', auth }); + const requestBody = { + summary: title, + description: description || undefined, + start: { dateTime: start, timeZone }, + end: { dateTime: end, timeZone }, + }; + if (Array.isArray(recurrence) && recurrence.length) requestBody.recurrence = recurrence; try { const { data } = await calendar.events.patch({ calendarId: 'primary', eventId, - requestBody: { - summary: title, - description: description || undefined, - start: { dateTime: start, timeZone }, - end: { dateTime: end, timeZone }, - }, + sendUpdates: 'none', + requestBody, }); return { id: data.id, diff --git a/backend/src/services/matching.js b/backend/src/services/matching.js index 3d90a04..ffca1a5 100644 --- a/backend/src/services/matching.js +++ b/backend/src/services/matching.js @@ -7,7 +7,7 @@ import { User } from '../models/User.js'; import { addPatientToCohort, removePatientFromCohort, syncCohortPatients } from './cohorts.js'; import { notifyCohortConfirmed, notifyReassignment } from './notify.js'; import { persistCohortSessions } from './programSessions.js'; -import { addDays, assertCohortStartDate, buildCohortName, toYmd, todayYmd, weekdayOf, ymdToDate } from './schedule.js'; +import { addDays, assertCohortStartDate, buildCohortName, scheduleWeekdays, toYmd, todayYmd, upcomingSessionDates, weekdayOf, ymdToDate } from './schedule.js'; import { assertConfiguredSlot, getAppSettings, slotLabel, WEEKDAY_LABELS } from './settings.js'; import { readOnboardedPii } from './cryptoPii.js'; import { toCohortDto, userLanguages } from '../utils/serialize.js'; @@ -425,12 +425,45 @@ async function fieldNoticesForCohort(cohort) { return [...seen.values()]; } +// Sets the schedule on a proposed cohort and moves the start if that weekday is not allowed. +export async function setProposalSchedule(proposalId, scheduleId) { + const cohort = await Cohort.findById(proposalId); + if (!cohort) throw Boom.notFound('Proposed cohort not found'); + if (cohort.status !== 'proposed') throw Boom.badRequest('Only a proposed cohort can change schedule.'); + const id = String(scheduleId || '').trim(); + const weekdays = id ? await scheduleWeekdays(id) : null; + if (id && !weekdays) throw Boom.badRequest('Select a schedule from Settings.'); + cohort.scheduleId = id; + if (weekdays && !weekdays.includes(weekdayOf(toYmd(cohort.startDate)))) { + const dates = await upcomingSessionDates(toYmd(cohort.startDate), cohort.virtualPrt, 1, cohort.language, weekdays); + if (!dates[0]) throw Boom.badRequest('No date matches this schedule.'); + cohort.startDate = ymdToDate(dates[0]); + cohort.name = buildCohortName({ slot: cohort.slot, language: cohort.language, startDate: dates[0] }); + } + await cohort.save(); + await OnboardedPatient.updateMany({ cohort: cohort._id }, { $set: { sessionDate: cohort.startDate } }); + const ready = await Cohort.findById(cohort._id) + .populate('virtualPrt', 'firstName lastName email') + .populate({ path: 'patients', select: 'name mobile whatsappOptOut' }); + return toCohortDto(ready); +} + +// Confirms a proposal, moves a Sunday or past start onto a valid day, then creates sessions. export async function confirmCohort(cohortId) { const cohort = await Cohort.findById(cohortId).populate('virtualPrt').populate('patients'); if (!cohort) throw Boom.notFound('Cohort not found'); if (cohort.status !== 'proposed') throw Boom.badRequest('Only proposed cohorts can be confirmed from matching.'); const startYmd = toYmd(cohort.startDate); - if (startYmd < todayYmd(env.APP_TIMEZONE)) { + const weekdays = await scheduleWeekdays(cohort.scheduleId); + const today = todayYmd(env.APP_TIMEZONE); + const startsOnSunday = weekdayOf(startYmd) === 0; + if (startsOnSunday || (weekdays && startYmd < today)) { + const from = startYmd < today ? today : startYmd; + const dates = await upcomingSessionDates(from, cohort.virtualPrt?._id || cohort.virtualPrt, 1, cohort.language, weekdays); + if (!dates[0]) throw Boom.badRequest('No upcoming date matches this schedule.'); + cohort.startDate = ymdToDate(dates[0]); + cohort.name = buildCohortName({ slot: cohort.slot, language: cohort.language, startDate: dates[0] }); + } else if (startYmd < today) { cohort.startDate = ymdToDate(nextStartDateForWeekday(weekdayOf(startYmd))); cohort.name = buildCohortName({ slot: cohort.slot, language: cohort.language, startDate: toYmd(cohort.startDate) }); } diff --git a/backend/src/services/programSessions.js b/backend/src/services/programSessions.js index 933f922..e06c96b 100644 --- a/backend/src/services/programSessions.js +++ b/backend/src/services/programSessions.js @@ -15,6 +15,9 @@ import { toYmd, todayYmd, upcomingSessionDates, + scheduleSessionCount, + scheduleWeekdays, + weekdayOf, } from './schedule.js'; import { getAppSettings } from './settings.js'; import { toCohortSessionDto } from '../utils/serialize.js'; @@ -60,9 +63,12 @@ function recordsFor(ids) { return ids.map((patient) => ({ patient, attended: false, pre: {}, post: {} })); } +// Creates the session list once. If rows exist, only adds dates when the list is short. export async function persistCohortSessions(cohort) { const settings = await getAppSettings(); - const needed = Math.min(Math.max(Number(settings.upcomingSessionCount) || 30, 1), 40); + const ownCount = await scheduleSessionCount(cohort.scheduleId); + const needed = Math.min(Math.max(Number(ownCount || settings.upcomingSessionCount) || 30, 1), 60); + const weekdays = await scheduleWeekdays(cohort.scheduleId); const existing = await CohortSession.find({ cohort: cohort._id }).sort({ index: 1, date: 1 }); const active = existing.filter((session) => session.status !== 'cancelled'); const patients = patientIds(cohort); @@ -73,6 +79,7 @@ export async function persistCohortSessions(cohort) { cohort.virtualPrt?._id || cohort.virtualPrt, needed, cohort.language, + weekdays, ); if (!dates.length) return []; await CohortSession.insertMany(dates.map((date, index) => ({ @@ -105,6 +112,111 @@ export async function persistCohortSessions(cohort) { return CohortSession.find({ cohort: cohort._id }).sort({ index: 1 }); } +// Next dates from today or the new start, skipping Sunday, holiday, leave, and completed dates. +async function collectSessionDates(from, cohort, count, weekdays, blocked) { + const dates = []; + const prtId = cohort.virtualPrt?._id || cohort.virtualPrt; + let cursor = from; + for (let guard = 0; dates.length < count && guard < 8; guard += 1) { + const batch = await upcomingSessionDates( + cursor, + prtId, + Math.min(60, count - dates.length + blocked.size + 5), + cohort.language, + weekdays, + ); + if (!batch.length) break; + for (const date of batch) { + if (date < from || blocked.has(date) || dates.includes(date)) continue; + dates.push(date); + if (dates.length >= count) break; + } + const next = addDays(batch[batch.length - 1], 1); + if (next <= cursor) break; + cursor = next; + } + return dates.slice(0, count); +} + +// Moves the existing Google event onto the new dates. The Meet link stays. +async function syncExistingMeetSeries(cohort, sessions) { + const linked = sessions.find((session) => session.googleEventId); + if (!linked) return; + const open = sessions + .filter((session) => session.status !== 'completed') + .sort((a, b) => String(a.date).localeCompare(String(b.date))); + if (!open.length) return; + const host = await sessionHost(linked, cohort); + if (!host?.google?.refreshToken && !host?.google?.accessToken) return; + const settings = await getAppSettings(); + const weekdays = await scheduleWeekdays(cohort.scheduleId); + const first = open[0]; + const last = open[open.length - 1]; + const times = slotDateTimes(first.date, first.slot || cohort.slot, cohort.durationMinutes || settings.defaultDurationMinutes || 60); + try { + await updateCalendarEvent(host, linked.googleEventId, { + title: `PR Session ยท ${cohort.name}`, + description: `Pulmonary rehab repeat meetings for ${cohort.name} (${open.length} upcoming sessions).`, + start: times.start, + end: times.end, + timeZone: env.APP_TIMEZONE, + recurrence: sessionRecurrence({ + firstDate: first.date, + lastDate: last.date, + interval: settings.repeatIntervalDays, + startTime: times.startTime, + timeZone: env.APP_TIMEZONE, + includeDates: open.map((session) => session.date), + weekdays, + }), + }); + } catch (err) { + console.error(`[meet] series update failed: ${err?.message || err}`); + } +} + +// Replaces sessions that are not completed. Completed sessions stay. +export async function rescheduleOpenSessions(cohort) { + const settings = await getAppSettings(); + const ownCount = await scheduleSessionCount(cohort.scheduleId); + const cap = Math.min(Math.max(Number(ownCount || settings.upcomingSessionCount) || 30, 1), 60); + const weekdays = await scheduleWeekdays(cohort.scheduleId); + const existing = await CohortSession.find({ cohort: cohort._id }).sort({ index: 1, date: 1 }); + const completed = existing.filter((session) => session.status === 'completed'); + const open = existing.filter((session) => session.status !== 'completed'); + const remaining = Math.max(0, cap - completed.length); + const today = todayYmd(env.APP_TIMEZONE); + const startYmd = toYmd(cohort.startDate); + const from = startYmd >= today ? startYmd : today; + const blocked = new Set(completed.map((session) => session.date)); + const dates = remaining + ? await collectSessionDates(from, cohort, remaining, weekdays, blocked) + : []; + const link = existing.find((session) => session.googleEventId) || {}; + if (open.length) await CohortSession.deleteMany({ _id: { $in: open.map((session) => session._id) } }); + let index = completed.reduce((max, session) => Math.max(max, session.index || 0), 0); + if (dates.length) { + await CohortSession.insertMany(dates.map((date) => { + index += 1; + return { + cohort: cohort._id, + index, + date, + slot: cohort.slot, + status: 'scheduled', + googleEventId: link.googleEventId || '', + meetUrl: link.meetUrl || '', + htmlLink: link.htmlLink || '', + records: recordsFor(patientIds(cohort)), + }; + })); + } + await ensureSessionRecords(cohort); + const sessions = await CohortSession.find({ cohort: cohort._id }).sort({ index: 1 }); + await syncExistingMeetSeries(cohort, sessions); + return sessions; +} + export async function ensureSessionRecords(cohort) { const patients = patientIds(cohort).map(String); if (!patients.length) return; @@ -122,7 +234,32 @@ export async function ensureSessionRecords(cohort) { } } +// Next date for an extra schedule, skipping unticked days, Sunday, holiday, and leave. +async function nextWeekdayAppendDate(cohort, weekdays) { + const settings = await getAppSettings(); + const allowed = new Set(weekdays.map(Number)); + const last = await CohortSession.findOne({ cohort: cohort._id }).sort({ date: -1, index: -1 }); + let cursor = last?.date ? addDays(last.date, 1) : toYmd(cohort.startDate); + const horizon = addDays(cursor, 80); + const holidays = settings.skipHolidays !== false + ? await holidayDatesBetween(cursor, horizon, cohort.language) + : new Set(); + const prtId = cohort.virtualPrt?._id || cohort.virtualPrt; + for (let guard = 0; guard < 400; guard += 1) { + const weekdayBlocked = !allowed.has(weekdayOf(cursor)); + const sundayBlocked = weekdayOf(cursor) === 0; + const holidayBlocked = settings.skipHolidays !== false && holidays.has(cursor); + const leaveBlocked = settings.skipPrtLeave !== false && await leaveCoversDate(prtId, cursor); + if (!weekdayBlocked && !sundayBlocked && !holidayBlocked && !leaveBlocked) return cursor; + cursor = addDays(cursor, 1); + } + return cursor; +} + +// Next date after the last session. Extra schedules use weekdays. Normal uses the interval. export async function nextAppendDate(cohort) { + const weekdays = await scheduleWeekdays(cohort.scheduleId); + if (weekdays) return nextWeekdayAppendDate(cohort, weekdays); const settings = await getAppSettings(); const interval = Math.max(1, Number(settings.repeatIntervalDays) || 2); const last = await CohortSession.findOne({ cohort: cohort._id }).sort({ date: -1, index: -1 }); @@ -133,9 +270,10 @@ export async function nextAppendDate(cohort) { : new Set(); const prtId = cohort.virtualPrt?._id || cohort.virtualPrt; for (let guard = 0; guard < 400; guard += 1) { + const sundayBlocked = weekdayOf(cursor) === 0; const holidayBlocked = settings.skipHolidays !== false && holidays.has(cursor); const leaveBlocked = settings.skipPrtLeave !== false && await leaveCoversDate(prtId, cursor); - if (!holidayBlocked && !leaveBlocked) return cursor; + if (!sundayBlocked && !holidayBlocked && !leaveBlocked) return cursor; cursor = addDays(cursor, interval); } return cursor; @@ -273,6 +411,7 @@ export async function ensureMeetForCohort(cohort) { } const settings = await getAppSettings(); + const weekdays = await scheduleWeekdays(cohort.scheduleId); const first = sessions[0]; const last = sessions[sessions.length - 1]; const times = slotDateTimes(first.date, first.slot || cohort.slot, cohort.durationMinutes || settings.defaultDurationMinutes || 60); @@ -292,6 +431,7 @@ export async function ensureMeetForCohort(cohort) { startTime: times.startTime, timeZone: env.APP_TIMEZONE, includeDates: sessions.map((session) => session.date), + weekdays, }), }); await applyMeetToSessions(sessions, event, first.slot || cohort.slot); @@ -478,6 +618,8 @@ export async function saveSessionRecords(session, records = [], { completed } = eq5d3l: incoming.assessment.eq5d3l ?? previous.eq5d3l ?? '', sgrq: incoming.assessment.sgrq ?? previous.sgrq ?? '', sitToStand: incoming.assessment.sitToStand ?? previous.sitToStand ?? '', + rpeRest: incoming.assessment.rpeRest ?? previous.rpeRest ?? '', + rpeActivity: incoming.assessment.rpeActivity ?? previous.rpeActivity ?? '', o2Regular: incoming.assessment.o2Regular ?? previous.o2Regular ?? '', o2WithExercise: incoming.assessment.o2WithExercise ?? previous.o2WithExercise ?? '', }; @@ -575,7 +717,7 @@ export async function listOnboardedForReports({ virtualPrtId, diseaseType, cohor if (diseaseType) filter.diseaseType = diseaseType; if (cohortId) filter.cohort = cohortId; return OnboardedPatient.find(filter) - .populate('cohort', 'name slot language diseaseType virtualPrt') + .populate('cohort', 'name slot language diseaseType virtualPrt startDate') .populate('assignedEducator', 'firstName lastName email') .populate('onboardedBy', 'firstName lastName email') .sort({ name: 1 }); diff --git a/backend/src/services/schedule.js b/backend/src/services/schedule.js index 333628c..2d5fdd9 100644 --- a/backend/src/services/schedule.js +++ b/backend/src/services/schedule.js @@ -73,9 +73,38 @@ export async function leaveCoversDate(userId, ymd) { return Boolean(leave); } -export async function assertCohortStartDate(startYmd, virtualPrtId, language) { +// Weekdays for an extra schedule. Blank id means Normal, which uses the repeat interval. +export async function scheduleWeekdays(scheduleId) { + const id = String(scheduleId || '').trim(); + if (!id) return null; const settings = await getAppSettings(); - if (!isAllowedStartWeekday(startYmd, settings.cohortStartWeekdays)) { + const row = (settings.cohortSchedules || []).find((item) => item.id === id); + if (!row) return null; + const days = [...new Set((row.weekdays || []).map(Number))].filter((day) => day >= 1 && day <= 6); + return days.length ? days : null; +} + +// Meeting cap for an extra schedule. Blank id uses the Normal meetings-per-cohort number. +export async function scheduleSessionCount(scheduleId) { + const id = String(scheduleId || '').trim(); + if (!id) return null; + const settings = await getAppSettings(); + const row = (settings.cohortSchedules || []).find((item) => item.id === id); + const count = Number(row?.upcomingSessionCount); + if (!Number.isFinite(count) || count < 1) return null; + return Math.min(Math.round(count), 60); +} + +// Rejects Sunday, a holiday, leave, or a weekday this schedule does not meet. +export async function assertCohortStartDate(startYmd, virtualPrtId, language, weekdays = null) { + if (weekdayOf(startYmd) === 0) throw new Error('A cohort cannot meet on Sunday.'); + const settings = await getAppSettings(); + const allowed = Array.isArray(weekdays) && weekdays.length ? weekdays.map(Number).filter((day) => day !== 0) : null; + if (allowed) { + if (!allowed.includes(weekdayOf(startYmd))) { + throw new Error(`This schedule only meets on ${formatWeekdays(allowed)}.`); + } + } else if (!isAllowedStartWeekday(startYmd, settings.cohortStartWeekdays)) { throw new Error(`A new cohort can only start on ${formatWeekdays(settings.cohortStartWeekdays)}.`); } if (settings.skipHolidays !== false) { @@ -119,8 +148,10 @@ export function slotDateTimes(date, slot, durationMinutes = 60) { return { startTime, endTime, start, end }; } +// True when the date is on the Normal interval and is not Sunday, a holiday, or leave. export async function isCohortSessionOn(startYmd, virtualPrtId, targetYmd, language) { if (!startYmd || !targetYmd || targetYmd < startYmd) return false; + if (weekdayOf(targetYmd) === 0) return false; const settings = await getAppSettings(); const interval = Math.max(1, Number(settings.repeatIntervalDays) || 2); const start = parseYmd(startYmd); @@ -135,39 +166,63 @@ export async function isCohortSessionOn(startYmd, virtualPrtId, targetYmd, langu return true; } -export async function upcomingSessionDates(startYmd, virtualPrtId, count, language) { +const RRULE_DAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA']; + +// Builds meeting dates. Normal uses the interval. An extra schedule uses its weekdays. Sunday, holiday, and leave are skipped. +export async function upcomingSessionDates(startYmd, virtualPrtId, count, language, weekdays = null) { const settings = await getAppSettings(); - const needed = Math.min(Math.max(Number(count) || settings.upcomingSessionCount || 30, 1), 40); - const interval = Math.max(1, Number(settings.repeatIntervalDays) || 2); + const needed = Math.min(Math.max(Number(count) || settings.upcomingSessionCount || 30, 1), 60); + const allowed = Array.isArray(weekdays) && weekdays.length ? new Set(weekdays.map(Number)) : null; + const interval = allowed ? 1 : Math.max(1, Number(settings.repeatIntervalDays) || 2); const horizon = addDays(startYmd, needed * interval * 8); const holidays = settings.skipHolidays !== false ? await holidayDatesBetween(startYmd, horizon, language) : new Set(); const dates = []; let cursor = startYmd; let guard = 0; while (dates.length < needed && guard < 400) { + const sundayBlocked = weekdayOf(cursor) === 0; + const weekdayBlocked = allowed ? !allowed.has(weekdayOf(cursor)) : false; const holidayBlocked = settings.skipHolidays !== false && holidays.has(cursor); const leaveBlocked = settings.skipPrtLeave !== false && await leaveCoversDate(virtualPrtId, cursor); - if (!holidayBlocked && !leaveBlocked) dates.push(cursor); + if (!weekdayBlocked && !sundayBlocked && !holidayBlocked && !leaveBlocked) dates.push(cursor); cursor = addDays(cursor, interval); guard += 1; } return dates; } -export function sessionRecurrence({ firstDate, lastDate, interval, startTime, timeZone, includeDates }) { +// Google repeat rule. Sunday is excluded. An extra schedule repeats weekly on its days. +export function sessionRecurrence({ firstDate, lastDate, interval, startTime, timeZone, includeDates, weekdays = null }) { const include = new Set(includeDates || []); - const step = Math.max(1, Number(interval) || 2); + const allowed = Array.isArray(weekdays) && weekdays.some((day) => Number(day) >= 1 && Number(day) <= 6) + ? new Set(weekdays.map(Number).filter((day) => day >= 1 && day <= 6)) + : null; + const step = allowed ? 1 : Math.max(1, Number(interval) || 2); const time = `${String(startTime || '09:00').replace(':', '')}00`.slice(0, 6); const stamp = (ymd) => `${String(ymd).replace(/-/g, '')}T${time}`; let cursor = firstDate; let count = 0; const exdates = []; - while (cursor <= lastDate && count < 80) { - count += 1; - if (include.size && !include.has(cursor)) exdates.push(cursor); + let guard = 0; + while (cursor <= lastDate && count < 120 && guard < 500) { + guard += 1; + const sunday = weekdayOf(cursor) === 0; + const weekdayBlocked = allowed ? !allowed.has(weekdayOf(cursor)) : false; + if (sunday && !allowed) { + count += 1; + exdates.push(cursor); + } else if (!weekdayBlocked && !sunday) { + count += 1; + if (include.size && !include.has(cursor)) exdates.push(cursor); + } cursor = addDays(cursor, step); } - const lines = [`RRULE:FREQ=DAILY;INTERVAL=${step};COUNT=${Math.max(count, 1)}`]; + const byDay = allowed + ? [...allowed].sort((a, b) => a - b).map((day) => RRULE_DAYS[day]).filter(Boolean).join(',') + : ''; + const lines = [byDay + ? `RRULE:FREQ=WEEKLY;BYDAY=${byDay};COUNT=${Math.max(count, 1)}` + : `RRULE:FREQ=DAILY;INTERVAL=${step};COUNT=${Math.max(count, 1)}`]; if (exdates.length) { lines.push(`EXDATE;TZID=${timeZone || 'Asia/Kolkata'}:${exdates.map(stamp).join(',')}`); } diff --git a/backend/src/services/settings.js b/backend/src/services/settings.js index 5079e27..98a6f82 100644 --- a/backend/src/services/settings.js +++ b/backend/src/services/settings.js @@ -1,4 +1,5 @@ import Boom from '@hapi/boom'; +import crypto from 'node:crypto'; import { Settings } from '../models/Settings.js'; const TIME = /^\d{2}:\d{2}$/; @@ -29,7 +30,7 @@ export const DEFAULT_SETTINGS = { defaultDurationMinutes: 60, skipHolidays: true, skipPrtLeave: true, - languages: ['Tamil', 'Telagu', 'Hindi', 'Malayalam', 'Bangali', 'Kannda', 'Marathi'], + languages: ['Tamil', 'Telugu', 'Hindi', 'Malayalam', 'Bengali', 'Kannada', 'Marathi'], paymentStatuses: ['Unpaid', 'Paid', 'Partial'], genders: ['Male', 'Female', 'Other'], diseaseTypes: ['ILD', 'OAD'], @@ -38,6 +39,7 @@ export const DEFAULT_SETTINGS = { matchingPriority: ['language', 'slot', 'weekday', 'disease'], matchingCron: '0 7 * * 6', piiRetentionDays: 365, + cohortSchedules: [], whatsappAdminIds: [], whatsappReminderRules: [], whatsappTaskGapMinMs: 15000, @@ -86,19 +88,45 @@ export function normalizeSlots(slots, durationMinutes = 60) { return next; } +// Keeps meetings per cohort between 1 and 60. +function meetingCount(value, fallback) { + const n = Number(value); + const base = Number.isFinite(n) && n >= 1 ? n : Number(fallback) || 30; + return Math.min(Math.max(Math.round(base), 1), 60); +} + +// Each extra schedule needs a name, a day other than Sunday, and its own meeting count. +function normalizeCohortSchedules(rows, fallbackCount) { + const next = []; + const seen = new Set(); + for (const row of rows || []) { + const name = String(row?.name || '').trim(); + const weekdays = [...new Set((row?.weekdays || []).map(Number))] + .filter((day) => day >= 1 && day <= 6) + .sort((a, b) => a - b); + if (!name) throw Boom.badRequest('Each extra schedule needs a name.'); + if (!weekdays.length) throw Boom.badRequest(`${name} needs a day other than Sunday. Sunday is always skipped.`); + let id = String(row?.id || '').trim(); + if (!id || seen.has(id)) id = crypto.randomUUID(); + seen.add(id); + next.push({ id, name, weekdays, upcomingSessionCount: meetingCount(row?.upcomingSessionCount, fallbackCount) }); + } + return next; +} + export function normalizeSettingsPayload(payload = {}) { const slotDurationMinutes = Number(payload.slotDurationMinutes ?? DEFAULT_SETTINGS.slotDurationMinutes); if (slotDurationMinutes < 15 || slotDurationMinutes > 180) throw Boom.badRequest('Slot duration must be between 15 and 180 minutes.'); const repeatIntervalDays = Number(payload.repeatIntervalDays ?? DEFAULT_SETTINGS.repeatIntervalDays); if (repeatIntervalDays < 1 || repeatIntervalDays > 30) throw Boom.badRequest('Repeat interval must be between 1 and 30 days.'); const upcomingSessionCount = Number(payload.upcomingSessionCount ?? DEFAULT_SETTINGS.upcomingSessionCount); - if (upcomingSessionCount < 1 || upcomingSessionCount > 40) throw Boom.badRequest('Upcoming session count must be between 1 and 40.'); + if (upcomingSessionCount < 1 || upcomingSessionCount > 60) throw Boom.badRequest('Upcoming session count must be between 1 and 60.'); const defaultDurationMinutes = Number(payload.defaultDurationMinutes ?? DEFAULT_SETTINGS.defaultDurationMinutes); if (defaultDurationMinutes < 15 || defaultDurationMinutes > 180) throw Boom.badRequest('Meeting duration must be between 15 and 180 minutes.'); const cohortStartWeekdays = [...new Set((payload.cohortStartWeekdays ?? DEFAULT_SETTINGS.cohortStartWeekdays).map(Number))] - .filter((day) => day >= 0 && day <= 6) + .filter((day) => day >= 1 && day <= 6) .sort((a, b) => a - b); - if (!cohortStartWeekdays.length) throw Boom.badRequest('Select at least one weekday for cohort start dates.'); + if (!cohortStartWeekdays.length) throw Boom.badRequest('Select at least one weekday other than Sunday for cohort start dates.'); return { slots: normalizeSlots(payload.slots ?? DEFAULT_SETTINGS.slots, slotDurationMinutes), slotDurationMinutes, @@ -117,6 +145,7 @@ export function normalizeSettingsPayload(payload = {}) { matchingPriority: cleanStrings(payload.matchingPriority ?? DEFAULT_SETTINGS.matchingPriority, 'matching priority'), matchingCron: String(payload.matchingCron || DEFAULT_SETTINGS.matchingCron).trim() || DEFAULT_SETTINGS.matchingCron, piiRetentionDays: Math.min(Math.max(Number(payload.piiRetentionDays ?? DEFAULT_SETTINGS.piiRetentionDays) || 365, 1), 3650), + cohortSchedules: normalizeCohortSchedules(payload.cohortSchedules ?? DEFAULT_SETTINGS.cohortSchedules, upcomingSessionCount), }; } @@ -175,6 +204,12 @@ export function toSettingsDto(settings) { matchingPriority: settings.matchingPriority?.length ? settings.matchingPriority : DEFAULT_SETTINGS.matchingPriority, matchingCron: settings.matchingCron || DEFAULT_SETTINGS.matchingCron, piiRetentionDays: settings.piiRetentionDays || DEFAULT_SETTINGS.piiRetentionDays, + cohortSchedules: (settings.cohortSchedules || []).map((row) => ({ + id: row.id, + name: row.name, + weekdays: row.weekdays || [], + upcomingSessionCount: meetingCount(row.upcomingSessionCount, settings.upcomingSessionCount || DEFAULT_SETTINGS.upcomingSessionCount), + })), }; } diff --git a/backend/src/utils/serialize.js b/backend/src/utils/serialize.js index cd1e511..6f8fc38 100644 --- a/backend/src/utils/serialize.js +++ b/backend/src/utils/serialize.js @@ -1,4 +1,5 @@ import { readOnboardedPii } from '../services/cryptoPii.js'; +import { toYmd, weekdayOf } from '../services/schedule.js'; export function userLanguages(user) { const fromArray = (user?.languages || []).map((item) => String(item || '').trim()).filter(Boolean); @@ -208,7 +209,7 @@ export function toOnboardedPatientDto(item) { ? { id: String(item.assignedEducator) } : null, cohort: item.cohort && typeof item.cohort === 'object' - ? { id: String(item.cohort._id), name: item.cohort.name, startDate: item.cohort.startDate, slot: item.cohort.slot, language: item.cohort.language || '' } + ? { id: String(item.cohort._id), name: item.cohort.name, startDate: toYmd(item.cohort.startDate), slot: item.cohort.slot, language: item.cohort.language || '' } : item.cohort ? { id: String(item.cohort) } : null, @@ -242,23 +243,17 @@ function userBrief(user) { return { id: String(user) }; } -function weekdayFromDate(value) { - if (!value) return null; - const date = value instanceof Date ? value : new Date(value); - if (Number.isNaN(date.getTime())) return null; - return date.getDay(); -} - export function toCohortDto(cohort) { if (!cohort) return null; const patients = Array.isArray(cohort.patients) ? cohort.patients : []; return { id: String(cohort._id), name: cohort.name, - startDate: cohort.startDate, - weekday: weekdayFromDate(cohort.startDate), + startDate: toYmd(cohort.startDate), + weekday: cohort.startDate ? weekdayOf(toYmd(cohort.startDate)) : null, slot: cohort.slot || '', language: cohort.language || '', + scheduleId: cohort.scheduleId || '', diseaseType: cohort.diseaseType || '', status: cohort.status || 'active', needsReassignment: Boolean(cohort.needsReassignment), @@ -355,6 +350,8 @@ export function toCohortSessionDto(session) { eq5d3l: record.assessment?.eq5d3l || '', sgrq: record.assessment?.sgrq || '', sitToStand: record.assessment?.sitToStand || '', + rpeRest: record.assessment?.rpeRest || '', + rpeActivity: record.assessment?.rpeActivity || '', o2Regular: record.assessment?.o2Regular || '', o2WithExercise: record.assessment?.o2WithExercise || '', }, diff --git a/frontend/public/email-logo.png b/frontend/public/email-logo.png index cb98756d6e6aef5998e1efb3cde216ee2f75b917..50c5066b48481aedeceef2d3208724dac39946a0 100644 GIT binary patch literal 74018 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 H>NP8CYvO|9I zBJA4cCH8a$*4W>f+UV}A@ZWUDXDN1!b}jo-wKEDk9iEzQ#v0QqK3AZ~-)%qrnzJ%o zkcAD3ZH7*ZLbVz3ql|yS=waN%rJ7LZjRztQL4P3Q$xxhTiP^ul9ZitTOjgYdrSTzD zuC1r0qLXW8*C$1aV;k?IAf#A6CA}uCvkt=(#}D_Y>Ygxg9^8M-;Y9hgLqT@^wThjO ztq9GOzQ(k_T3L*YK#2?xfoi!9MGsOFhdo8(!S%MfK=W*F?cGPj4cf(TYimdvuD_;8qb9iKSMyU;~)3$IP|H{ z;RHze^{1>Qwqd20I$^{FGm`z%m+A|wF;DfmAELXc=DWR&eOW9}ez7rml{w^Np&| z#Ud_7<+AdmwTL)cjh`PonYeNNb%}2@2Nc8xxoVcJH|Qx;r$}~Xq182g!Hqw=iZd5k zDObI1J;?|47eml~t?!roQ2)?9O9{pd#G&jtwTqn0_-dO>9bnB2XR z1!Uc1;iJh4>M@K;Pg_T=iZYg4-|4)}CP=gP#$aSr8aAIwsy!ZY@V184#KH?nI_B_o z9D1>PC_8?X6-G8H(H_q}{d%80S(92L;lR$JB2Knru$*+`&XXPBLtw74<5kq zi=aX1MTVm#nq(Jt+tYJy-rCbQ53h^CbW<8Qo5auEcT)ghd-fE_?LiOz0WY*zC~1u0 zKA5eW=97nona5;K{c?f7^}4%%Y|K}=uUkuLpO|{IPacGi!+GH{)}+MQVtR@} z9d84}%w`G8CZw|$W<4Goeypa1jdVqHFDT+-$ec1%=RZAut=(_@$24{W>z>idQ}u4c#H$kgwwz4%j9V;kBNT3k!; zXyM_wGKq1i4pUnJgBLIrM(olt5TEWF!&Rc>du=i83moa2XwUL4PGvwb;9r86h^ua}7NjzIUny_$3U6SqLq4{cA1*_0Q{vz)QSiw|7OmwOY+PL z^}zvCLn5n@n=(>#SG8O3VsA-~s3<<3fIpP%gS-dqDKzV(yaydgs()3)aM+6LV6^;4 zaLP0>55T!y!8i$xEb2N3s?+WWqUrgh*i^Br(`4mN8mQxLg~UIFFI|<+QVU{zf`#UO zltH2hEP=r$CZKJ-EDQ5$$J- z?FIUJn{3{u^VkPsi}h^8wAaVpAW{Gb{>>D!jir^fP7$Q&iE!lM1;xJbg5zP%lh+T`0;^Bo>C&!v!&jkW;3QZd6P`jj{Te2Drv% z^FwVYz$VWEJLfu1Qo(YUVCz1Fg}jU)ME1G60qoUq66LtP(g3q^w%y(mNrtB^V`(^8 z>xEaOGG$9owj_^wo%-xoN~)qfWz<}l#>IGeX>nmoi^}QOJXySAuu~D?2G@A~P?xu) zzZTb@*JZht_|6}Ax%pPOmI`DO*yaX+GQ7`@^I|MDcCD|k9$%drKZ%+e##MKHD)5$n z4_#*-JD)$_nG%h=^kJT+G!wHf8XUf+B6I~l1h;k%^Y&eK16c zz6=O)p}u*L0c^7|2f?(Sc6h=zkb6~lw5hRP7bY?j#Z+iyn=;Y4{4tNleiJkQ;Q5l z0ElAh0T)YbcoJiYswMfqv>Y#A{K}Ggz@yxlj8*NC?k8VHBdK>k7+&5qP|2U&cD@31 z#2~Hifnz$87FEI9fR#*MEgNmhunQoM3d>jqDUg=wCI>;s+nZySXGPP&lcvKR2Wh~A zS{vU>t9Q0Y^ATHF=(S%hs;vHC=JUh<(5SbM!KbD8@K=%Ea z#_Rh&jw+jFV|bF98(&tRQcm#ju`6Zu(%OeT!ricNkScJ%faFpz5Zz`t93rx^Uo6cB zT!sUjS;QptfQL7P6;GnmCH!!+dBMGLR&+qjG!12Yi^Uj&Q-x@t=*NuPX|t!d8yzeQ zyQUT-HjLX~zdbq6LBgv=8Ohy61DYL)3mIRk(Ervo!j9m7_`^4DN!_)-H3>>$nD(0X zsd^MT6ZT4g8VYs+Ec*apX-u8U>#=Xri&B(|)aT@<8?5O0OUSg4!U|a{G>{bYuVjm( zr`m`Y<(yu<@hv`fpRC zL+7Ze;Blt9t|)ZW;aUjlXK~q#qmJB_J|gujq9c(luBUuk#NM*g3uV$=q@f#eoEY=Z z@9ye$?#^*^ykO(B4hzD-`b6jvP6@gXyUYhuQS&SvECjrxfSDL#vfB#44;T zUGPv8p%_9yMOSkLal8q~uWcXRhlHHTcE`BF@*zlxdU>$n&1U+m>AcoP!$MpukDTHE+#=zIuY#?j0WI={r%c35oK9@W{SfT3ur_0p zNfKIb7EYf~Ihto!NT?}4GBi*N^IdVNXK`YH^6V62WNz?ZZlpZ=(Xp_lIZ>bmmD#A*=X7j-aO?HFqLWYre!+rb>x#`=W!&6~aJYlC;u@ zoYdMw5N`^L)i?r5yCmg4tdOnrNk?gL+YwhQBN6c)aP=&as@Wmnox3`}Xdkhs%x_^V z8zfh)b+|p#Grm6i-4*rlGiVz~y#1(k0W=Vc1HYg7p7BKr+3&powavNJFcjFcz>#=q zBme}$kjz%-dTt!qd|q7K`9*59FLi3*xp4bQ0~H2+!vHt_e*CDf`tX^WwUPwzQD|`X zt5_{ow3U;sutZhM6uwc4?JCV#;Zn0dOvCmGS?fs-Dts;0;^y7FB1jvqlOMMlQ>>am?YQ{ub z&+rzJIb{kn7Z_$ob0aywg{*~|vhzEYX5d^pI(F70oLr;vM>3LkCCjI8*?s+~yI&Vx zqn`IfEWn~aWwh?BOZNoB=WCWH?u5d~pUWhp;JKBDrjM*1SGnVd z!G=C+2sCVU>FzC}=w<|$nT#fze>@5s9<+B$vUxUFiGP2;=O_NNf{KQC7HgZWnr-&v zp(yI( ztSCkogB~}V=Oo8`^8U*_nL=$0?y}rcFSvlxKQ`xMSSPQiowCXvp+|$WXKGr0FPbF* znlx>!|6ZWS{eC8ep*hyRk$WU1%x7U3;e%}H&$!!eK3~l;&?w#I^R$4$ox&LbA{tN3 zn=CbjSN@?ja!X|TIEaR9whJ;drqUF?P*IMYSYB@UGGHfTh)kECrLCjo^qUx+%Ql5! zC`rVs*!6lDVw_06=>p~JpN26ELmcJ?iI1P`UV1^4<#qX9ANTahOg@(2{(lsagV zzKVl`^HV2lOq?oHmy#c<5Y&m&A_=XyP%jY0D7lt#CqZ^6KvE;K?31M4c&4hS?Rxgy z4-xMin!8|RClbn8`#r+It(L;s&Kycil-ZQ->O!dmxNzRs$?0Eadh>;xqMcsXDqg`P zj`^Hs_@`M(KtZ1KxO0R_Db_Z6u5XX)fD;Ph=LPHX@j^#n1JPm>jkuOm1LvjD#aCa7 zDlSoI174oiTiWzZEnW~~=`rN+pE_Ra9smL16X7)}Il72wr_pI1e?>!YsycDIT#arW z#ek6=<_Q^eqkrm(o0Ts+hb!}`Qp+YVj9o%^O@1r&uI$`hn>LOvfAfHN!9U>8{OGz5 zi5Yz5+NrKh9|6@~$DZVihk{l<4Pm{D6D_(T+k5tkAUgDEqF3q|2+8zyNYa4z2qnGH zBGFrhm*n*%=LFatxB_{&{7vL(Sdezn^z~|p)4LuB7cxBKdzDAG?qHHG&uok z3o;XFn7n4eVE$g1g+2Nv4Phwcpk?+NpF-MnpMH)8NEaZn{`4@KozI)g9oCj?qs+t> zsrzoXv~2*Ye`?$~D%%$CpA3;ew&-I9zj)+D*U4S^_k2|w>#@xSJIc+M{tdO4G0^U$ zIm}aQaIc~=*?IhQlOpP=>4Pidy6uY=+X525lIbY~QHb@1XBQtYFkxZicXLNo~s9UIQ=fSeRw3gdrTwX-Bit1Uj0NMM+o9HEm6ZiL;*0j8eT`DapIu1+1Qz`o@;LPUL(5-}&p)~xoja)RTGHi_N%~qDdO^wo* z{)T%*QI>hi$R}hnz2$-{a86o!Prpo`I7CN}C&UH^MmeF+j$y}e1$8#7j#}n&4us?z zP8~j=arEoQ4IxiG3>Zv4K(dDf2SAO`~q@mR;PP& zUb9+hOr zT{A==^{$;}LB60F{Ug5M|2sS!$@Cf9{mF=%%?2nD!*Q3_>b-a;gkqrTZ`8`>4BKxV z!ll!tp;O4m9c{}0I3}K1fPAdR@H8LxeXlbDgU$fDg*K z>`=%ZH#kiY)^Od{KL8---dq0e^9wqX<7SDUuEx_W91BKbLDa zDxkAKqQX-T-?DVwQ%{tqroCT@ZhhZ~`BcRfag)cLO_)VJ~oe!DPdvA5Qr(Tkb-ycTmSYN>l*vpx@dD3-(jTyx|eE#|?jQdUc?w$12x zNX|TYk6(X1?9gHWeSTsb-c~#zoPAJG;T;xHKja=E)|6T{Wv$Y+xN@W-y_q|}*yBm- z;2%PsB~;2QL`XZEn6KUonnjq8q^Gz2n(d%YPnaT|`R-}Rc;fra*=aU*4DIzU+|G*y zfMR2{$G;su4&eC39?=-FC(MwhdWz7WUKzL4xBPA=PkXrxWS)dH4Ekk{(1)BsrO&sO zi6@F!Qt|2?i3^7rQh^HT#Zl))%nUFfxC!|#-kyjm&t!ZxjHpNUp-GkVLof@9Y6A1X zG@O?)9Ztt3lXmY2OaMCKHCK$EG2#EdI{hkPXOo?tS2qhD_P0UHW0<*n_-qdaw5$CgIPJaS#gK_Vn8k zxZ+;5pIcc?hr~Ti(y|VD*)C1I_B>oDq2H1ZX$~6r2k3huVu+C(n zrlZU8fwVc_P=_dVWbl*-su?$3B!W6X*N<45j)>8NL+3~wIXmW6I(D^2ByYTo5UR^Y zdR+_lr{AnbHG~Ttg#f14d+U=G+1G@a~B8&gG~@>DY+1KcBae5XfBi!Mw2p-mF|~A|bTrxS<)vUQe{3UU zAbKZs{{!Qmfwoqf7q^jytNcJy@Wr6_7e*E{@{~!V3gtkuSf0=mB~SCl6%LM*kxz-E zG?YspdF1@fpN(*X@jgS?oQWZtcpto5MA%>D8V#mc)-=9ff5^?Xu0qj=!DgT=0B_Y2 z;C@ZULQ2@>od|zXTTfEhv7$j&7s|tL)%aqbVcVg^7k+sUjmbKP2Av)Dp2zBgvQ9K& zQNIXYh6uhU{j}q&TF|Dy$dYx;vg^`x0N>-`Q)#z_o1G{0Ik!JFa5C=?W4T@TOZ6!& z`seWus>p`Zm>mwKejPDzCopvP$1^?C#!gDv8iiXDX%`n81uzGd_GCQ+^i=_Ps4N)( z@n{jmlxCKa73fc2%%+XS+FU`uq+F>J+O@s86~Pa*y7YWvVO?a8xR!Zj7g9T3Ay_-! zJ3DZw)#Us?wcM(RaxN8-qIv_?2Ki3Ng?=>PDi0Y`|f{ay&`gz!h>^Y+=bA zX}4VBewQ-CE~p)SE8XTvS6EbK>%x5pIIcLHRR+DYE7%Z&de{7apDR9Nv6yL7S7sRC z?qHlH(-i*v=D?1BdL}6OBuF*37f z>M#s%m1E3*A5%?WM2Z3X8a69$i}pBj9agmw!US!v%$LN?x64oXqbY=_OV0|E?R4sV zeK5OL4VtUrH#%>a10r2+BSl*bY5Vis?EdR?SOKgu>BugWi9;F{~S$OEw;<;N}IX!!ig{+@Q97FP0k!jHmM!#B8{;Qq8 znRkB2cj=|7IwCgs&FzQ1)cRi3-Gm1s2B3xGPC0Qun7b7yWgnz#t6NGv^e2~Q&I2j) zPylD-j}3CT9i5|=KKmvq&*s{i;(m}G4fb|ZI~QZfI9Ytym6V^u#d?3$0Hc}vxx0g^ z98|WgDD&`C0;f(8I+#tr#_LTK?V!mF?{Cxk(NILEB~X&?oQTs`(pzYpX{M^lbj0Fi zdYxvz+^O%0R>4~DrGL)L6QtV~Txg;<7wLZ>cCk(_C&V}p-k_p(c5rwA&E|km3ngZY zXr0nLa3R!6S1>2uVZ~lOL`&@)cfm%ulxnySr*er*}; zmABAAd@k+WvZ1G-LzP)r<&d-BvS-- z_sZO45WvmxyKfc#s|ZkX2LVdb|9;I``=AvrXJHsj$b3>H26BM3D9M4B7kJrl-YOE^ z-BG^}XUm@&l&8CC0c0F{aSD9aMyk%tGZz{zB*}!QP;uCS3^NyO*Gk?W4L-y=0cNsC zMX=(pClS;bEN{@pt%U*VdvpdfI~{2uJ}V1^TGEUO5@oeD-P$OdFp?4(x*!#*A6M!G zW2C%|iJSU^XB_}U>qgPVu<9`;`( z7v z1nE>_L##7N+$sH3_NH`wh9GJPkP;56z3RF(b)n3I!Q4gg)pVED_To|2+E;rw5{@J$ zTq*6~B6J#RjCXJ)+1c$})*~ii|H<;P^w+HBNy!y;&6K}|=M)FV+ zqfMjq94 z?jZ8ULkU`(@SyjVWih!vUwxxc|JUGOohxNR49GmqU!z*(jAlWT0%jitP7J>|&Tvk# zOwAXi*kf zS+@W62f9`V2~8u4Xnj$@xA37c|2wEJ&xPrX-(c?HS0)@JXuETsv8z`e)5!{rIl7t# zR3;kQrbdZcUeY&pMyYeL`$qVwdq8~GB2I5O**k-^?oEE3pEE;xPk8BGz~(9S5T>;p zP^plV7rPt7Qicly9+<6OrrdnVcHyBzit8pWDI|6W2&g3$z~CLlM2UPalmyf^K-HdA z!deUaVLXDKdmZ{`VL@40QxX70TtxlZnh?OjMWw`|8;|(Se8ALk4EHX|FtsMK&3zGQ;oJ2is zj${|VJ{Z^#y7jLlx>*d{8(dq ztuL)Hys&@WpX3jS4IExx9(iN&6$Wgv0vxbC0qpzA+f1%sxZ*i>+iBgdmpE$t+#d4> zuDNDKye8wuF3)zKzJ|IBIfIkiIWh``04kVjwAOOXGzTf>V0JcV4Wu&+4$27RifTZP zF{?wS6fzDjGapQhLi&}+dYI(09wpmrd;`JcO8qysx~5({n=2KV0k>m)a`R)^AqF%e z`kC|ZQ5*T(!Dmr)F){=8K=I!b&j=H?Mg#qXUm7zKPg(@LzDvVni6u!%QwK`qR*2}n zR1@Ry&3Vz@!kI{cv)+X2k4XBzM+wt(e(8+s^jS7ys-fhLn#{LOPIqR8@ugu0`p=VK z@_=>(ksIAi^rid?((;p1evW%}s4IP2PkY&YM#m_%#AZ8uJ0&DSdS^n=N^1j+={_K0 zE&ZDBFCN`hy;Cm0r<_@NV{fD%5U)^b3UhDIHfSWcpu}w=!o&+r`>r!I`g14Emd%II zFG(-uPGSJ6iAg1o$4{0qkrOng1ORn`LV+guaB!^5NM|dpc3szwr1Uiiyqi(}0|&;CaL5I&U;-3uWDH{g2Ygx6<`Y(-D5 zW2JaiUU5H`pHHJA*WT#bp5soF2NBa&?x8dnc_?39U<0MESW#VCI5KFg5GRW)%@wrl zG6oEmA)97i=bzWioAqmi#;Nqk>d8nRu{cSw^`gENDpJ^jjCDs!^28U zgC@df|IIw&mR2B=jvVJC|9be&97QeI(-c`!qjpzhsgzg3*NAB{SXyT@O}dmH2)^?s z!7jHC6y#qyt@(9D`!*DCX53T#;vOy1G|ZTvv8##uKQ}Qkld>Bq0T9*~EQkqZlQI>0 z9p`8>C-Z6uM28c97Vwtio8JSUqgk+p&>O@P>z9N*|AepgSHs2j{A-flNuh3tltxb8 z!;~(^BMUTPX@5}ivm5rSwnZPR2=|s;lMi`6Sz2S@?32co*_22HV+WUF>$~m$JL0ET zEv@t6x(~jKI6Gv)?2!h&p^V<+{%Qpp+x6K}y3n$V3lMhCk2TGW)$o!haux<_^ok3F z40=`m^~f5-|IP|Mb5obC7cby`NAEVMIP@`a7UkTX-*lQsyB_YHh;ZqKfG>;PBz;_r zao4tcwk+rqM4@Ufv?hIJP59cWLi1y$spk%f-FGsn*>xYUz-(&d#?r5h6u@DERIEj zsex;SiGv=7M5oSGKuy8-OL*rg1j2~(@*F6knV={H>n3a+?f#vcXG**jT}SXNIIRJ! zB>~D7A&8D#*&HKyvJC`)x8O-}A@7?Rz!e>YJf3)DF2Dex)S*4)nYYJ50!9BLV(Izy zVMgaffNLuH^r0vnoBG-AZGCP9C`{u+Kd3k#1fiR z{gZjMuhNZN>KTv^_+h9mM3Q}@)@|FLDRaJBcgD^Z3wWcFYcrXC8&JHa~4GYN}Vv}ix5q|FXn$pG_fsTtdOTd_s`Qi znDZOe#He|L%gBojtJXn_rwdB; zS2%@o3(1;O96oR{Ytm#^kN1}uVX#7DgbT%L1p1#Ij%(J3kwBb_%7U@wUl#p@jEo#2 z$-=9}wKvXcSi*BN~LVG~i={36M2>_+)IWfNIfP--*`) z9G7a2i|FML*rK`sYXSQ-G#M0_#vAF*LXx|qMB+aXNr-vk-stYZ1p9~49Gs;(XG_N@ zXZukYM44l9BjGKVy44|t>-W3H?R7?-0=cJQt@$`pE=elUy)F6IjP|s<`X_zkQoslo z3;`iTxpHPskqKjmdaOFUmP3(hx?Rq1Ce?VT$T21YeD*T9H%;b<_`m2L6_(fB^Wf}v zlR%lND`)6$58tSv6n@Z*SDQ4DP~gZ#CvcEC@cB#Qc5Qk|$r2{NO{{LBewofbh0lJ6 zWqKAY@CO}_PV*RU>cs{p$$1yFb`tkZ;^Ol6_>V8|Cr7Ex?E#ian~YClQ&xImZ%vP* zrLB5v6f6Dc?y4~|w6PyY`h&-VzPwE*loZUSx7-d~D3h4$vKXVsGtSAL{{Cs%CxEXu zhDjMaR5gUY)|JkX)4tiE-gYL7!dMrJHj!ol+V5EPo%NT6+piWbbj zQcTaIAv@ft=HGtEx>hE+%ZTU>JWpLhAlxY@53zD^aL2%#heQC+2ny`OsK#fMg{LR; zG~SxdHFG>)pwH(s89$J7OF3FLW=?TqNGbA0)k_?M4l*gK+%NSdN;K)y-$1XC zv*DUddrl`$XL8NOe#b*qcl^_E;tdjUHUUCz5TVKFCd{N9$!NO0Bw}BoC-&E&x%i@5 zWHELZu0bfjtMl4tvI4zAjXX{fk6oc_p0amk=>aXo&R5Pu=L1@~7YP`0R)(k&cxCsw z2Dl--Y1{LwtY-{P{l|nje?^zjl$pLUr9sqSshAO{HC&zSy3m`7WFp`E(x#mX&8Hz< zz`1S`S|l%yrC;Ap8VASXwg`P>8QN1epLppCoUQFvZS(n+H(M9=I;bd%m=I6ZC6as! zmKF%y%szh_l{t5=`^u*!-6OxW{;cv`S}zpKh?Rb6eS}ay;xis?ZZ}$2HqjhnMViGS zsfv4}MA-)l+!6lF@jQ{VOKoJp4GD8QuIuk#1WJ|q-}qJi3ClYbYY&8nOUi$V;SZ+C zERzJLC*iozFj?}9bYeAjc&uHrIKR^)F_7RDIyH*f8-PEY(hqq^&5LD}m+t1pDPi$f{kH-XYnL4XEa$P(`ED+ z3g2;VvfwxG2YCm1u_@Ic26xYeChz#$zeMf%UD1*Xb9 zDL>?RGq1u25T@=sYL`RDn@i1NFE(9OjPjV@%dD0S+KxS0Q@3Lk8OMW*`$~=W^6FPJ z@e6n|CrDZGSaVf3&&h4zZ6pORF&P}9G8Ah2FdB;*$`VQ33~Pw-O~Jl% z7Lrvzx(u69)NseUzDyzlV-~H6*d~aoq&uB7zI*j2fHdcmiV1d81o3YdnwuR^9a+5n z{sOtbbkq7v7E8S7?4uha>4zMco0pN zm3RSqNl?E?S;QmdABS=d?6MHrdjjK%!YPd#A_A*PyIGH_$Eu+d^ss5ME*nJn{9MQr z&!pzc%;is=v3oP%X{kU7?BAi@+R;L+1G$J4*2*-+mLC8VcuC}?U(Bhpv_->#LgIcR zqgGfq@96|`-0cJ+%C1pBB)w498elP>YrOeI_ZtORRQ`2>Q(0|t`PZQG&CW4jW!F+@xF(BTQahk;4hCE!8fB5K- zy3muYtn5dkRe~f8Nw_0Vh)|}|1((=m%hYId(U~^)W6%ROEcu#+%+rgeBK(i@f5e|l zks*caZ^rjiYr0oZtUElmY{Ak*czB3YpmIr1&s~)`vXK5S5P4Ei5)p()N>e%!9nm7| zKR0^w<)R(&kjIcFrli~3k_7i#GlBd!As9e1{{WrIu~yX**HHyE@3(G50~J~p(2Ug+ zN~WxPQHy1382w*}*+@XzOQG6xlG%-rwXz;uNqQv`-r7^_P{0+KQoyU41gxUv6KHa2 zV_r@5dpkmUuo6}yByCd?F2NLFESDOpK#CnFotfl*-ZAma-Q4`Hf4X67pY~mnyNA5h ze6uZF$@oSrFam5)wyXN+#y4iT-I)Z2_+uPomk2vg&qFWKA^eR0Zz=yzCtcn<;%+8F z2ZB^_<0Z)~2`bEEf(d6pWmxN8Cu`2L!1M;YHv`-W81kYU%x z`nnLH-&uyc$>X;l+Lyf#H}`)-+AQ+}=3Zl)h;F;$11l#EA4MYK_Brn45=@CRQPk$QenZGcU{$^@cJ1FutZs`@z0yG`G#0wg2y#VGGurxlzi_E-&r( zE=-6Hi-#31;)etXMSz6}L=J+pBbP*3&{`=ZVLX+aHYO%$ZZ5v+@BMCN&%5WvgnIy= z>XYR!$d)bf`nymiSn_@BSzS|uky96k3q zg-`RoTo$4ulv|QzlOD7`q+t*^y1F6?-{dK^?US71|IMI0#u!BsKu)k58R{5N8^B?RV2>BN40 zHhXy2S{_NMhw2}^2k>J3=NMcKLDUB}#rZ{J>au`%y4B&8Sjs2yt_4dD*j&KPQ607-93Sh)%*AFG7F`FDcf*lgPrTs~RGjq;0g=<0CDt>gv>| z)!&Xb6oa?_jRn$wd_!F8RGlS{#K9h zrTd#ak=lFTHC4@v=K{in$Q`OPM#qG@gIch70LuCwR4q_LRqF23L=O$+xS$Z1UV<~pzQ0}$XgqW@;X-jE&2!9hAi8@Nvi@=;BiKHVMG>@)$Kk)0wex04!UE6oD zrc$h?L9LI+A3}2y5e<2=0BaK!;C4iXiGMcv@^9hA+akDR*@e z?+l^}*pwj6$@G1;l`97C_t?69n(p-lvoW-DKa2iDXT^C*9pq7#Ad+Q3ND~EyKN4BM z10OPf&DCQw?!<%N)!5v8{ASJ8g1d?j8h9~-_wa|ZW+%LURSo&?57v0|bdzc4r>Xda zn1c6gX>0rH7v>Z|qU*-@yH5QOBI$Nkp3-qHgVica=(i6sk`E<%^Ul&bgGuYX=;B!sxw2fbR_T5?VSA!3*3dm z{7YPde~Mm$|0@s>zN@5&pmL#O+bLPNh%X<+t2n!@^(QZ1Wnt^qp<(#>;848$jWj0B zH8K>Xpp-xJ!n975vtIvw;fpUbLzSE1Zy^+jb&7W4UIG1eg4L}g*%RyzC4XozkWZo@ zBv)SHI(c|7ObTU0{C>#13pbFIX=W!0ANs3W3KzQDk4Umz$f2Hhqu4@csWnV5d2fIoPeO+lI~54njbPf2^Z zYg%Le>n8kJbS7zUrEZtEA6&C|oc%7YHLbEz*#iyL->e?@z4>RFp8jj(58wJ7UlKj_ zCd)112xN{?RKq-9Dh}-0vyU_hku{3s@kCXTUjLHu1ULh*e@MZ3s0e@j%`g)F#@p+| zK%vVh_{TFeBLv&^0<8-KQrue42fWgr>dP16DR2+uy{KWX0xT>fb^Qfjr6NlJev;^S z4zp0KBE)?=BL}xijHft6lZ`UlFczUi^4Uq!MZ;jIWU?P^YC4p;zf&R93r1}EX_38-^1T&=t4i1(}M9(XyFG42xP!jiRD_eHNZ6ZtO5=Ct}iZ1gM>%{ zQOf1N1gFGiWGv$g^vAi?F0tTEFup>n*642J+dnL+!SZ3US?@y6);wTMH&!*uf%~<&b0XdPEws0!l_(4P({FGw# z$Y}I7<&z~Ee|(zH?M+FK)QExhCy3tma;T3zV!@!x-0ViqNCl8VAQ&oeYGt(~tIfas zYkveK9?Veqd?K_x7!u)Cw#zm6Tb8Uh04w0?Kek;7C7e0Kf;f-j0wS`Z0@qblrgngA zdR=N82x%vCI3m6qrpf2$=Y=4bmOKvn^91D(Y| z*(|~&%#5Ia4L0PGL_@==$N}k|^v4_^_!_L=4>aE;8rGdYe*|^@_ArnAD)tTZU&a|; zI;f-mtT1MJhCZbVkkH>TXYfXzZeIiUgrz)PjMZYYnc2Gwq3=9f>NQ~+BO&yzuC=zR zGXGfptjru)x^1s(WyC zr$psL9O8!ZrDVGNCr$oLoRZJi>xB)$8c1B=4s_}RCcM{%iXi3sNmNMyvu^*}?*nC; zy@cGLWYcm`jvSe_hEA`W2b#z?2sch#XwYL}H(#|h=5HWM-n$jZCp#r?f!eU-Z*?pJ z#3EgFh)h*ej0Jyt8Xi7lns^v75U+CMHTp$GNML6IiG+yHLuo{XXK!7}MCbE0v*{EU0^5Qssi%2OO zUSD(5l`Vyu2b!AY*T6lQIYjZEit_zAN0jnkGDdi17)FU+U@=U@0SqCkhagUg$Dx%X zx(r|XF3-o`VFj+7`;fGPV^{#1xMwXvQ4b{Xo1!J{FTzq7S!GmCf&L}-y;{X)FBWVs z($tx)_@qS>)`$&bco+5uWDNK_09+%D>rjsDPG?+Jdq42-JYgD^8sdxw zt_qkrR~jkL7`^|sRY!8d>32^+WJ?a9p$E3x84d~H0p9;U_NKGSQzFJZHkn$8MY!Mhr46EbiXa+!zqLC^m9p|+Iy(9Qx zCy7Voy9ygB2ShwdMnw;mj~Id<8~%XOAl^IV)c{YV)Z-DAg_Snf<>l)u<>koYg7?nI zcbqtBY`~${{!c*?9A79<^utBj3B(4Fia^|NQcbw4T@PEjO-kba;^c2!y5>S;JpMFb(|R@Yx9UPK5Ni zh>Mu+YX2x3cW$blO?KbFRg)RpPw5%}^dZ{B0JfdW#U;y`cIdCxD<5|43O? zRM?K#HQ~zJMvD&YHa+?4Gw`6>+!!}zn)OZWEiHwQl$R6trs0v)x)AkZr&U$(xSHGE zX+Bj-kal}%F}-4@_)56YdcPj6T*G5A-P9q1;W$5;H8nPF&0+l%-V~VA3+Aer>5To) zE90s{cYc?A7xN@KGubOa5!&{#o!lP0v$1Tu?f5(admP}5oYW;hS3hrijbQ3;f&^K7 zMB4O_2=w<>!fa}O;s>;(Qs2jB?LSIb^o1vYKOdlDwQ2uNTpV5 zsX`fk=;vk_T+mLqDnqI4rLyW|0#D7PBPw2nE}!{La|ECGB92ZAXTSVHm*O!sUHJfk zU$juyDAZao0|$wRJ(>P|lcDiLLqQCx35CabGIVlUFj?*P;Ux#@ks?i6@Q4s3Dr{O;6PRNy}=xjrl)Dkc8&gIn`%I$0Zx5ea}s zdHIr?j{(A&z_CLA``TOQ;n=&}%fYv?*NM;?-2n-~SkvOL4QI}Gf~s37piD0DPj9zy zXe{t?tCO?O^JjKOa3h2xH23A4%sbG#qv#^YlIve<1mh{Ka(rk;FQZ z?CobzRY*t(;+@6cFn2PkXhi%7!VM~DnCXgFwB|Z?|MR9u4ElH2QEo^-64IL$3|h@s zJ>{bc85?L8Nm1-+3ar~Rxuhd^Dg^nCKF$GHtCeb-F%xFFftPlQ#*`gbADT{qT22&= zb@=o4_v6X*hD{_0Q&E)_{WVH3>FP{ww<{Jx<$nGTW~=4O4y^v&?9qP)d$o=^fe`#m zAX>P)4=4n-2#uFQhTzDhbeGZ;U4^I76{tvjGSA z2Y3QbvZdw~f^(dA{SEx?k@@wpAoK|5f7-hat|qiD3rQ%UBhpJiiu44D6p@YsN|#;( zNJr(-Ye?ulBGMG8B1#QN6$AnTD!mFQBy@O)gx=wcGk;=c*4#gE*E;Lmd&=HtpGEE7 zy2%^5Muob>pz$)pVGS=5YjjqV;hS)OYTR{HfacY7=9vbO7aTn&n101r`)e1WEpv9j zy{~Y53w|HgHn+TAwa+iBj}|!fq?XY>SRXC$+5{g2;O--0eb?QCp1lN{1f84zwt84~0^X`wJH>0T-gTc`|8?aC~ zrK^Mj{X|Y_{;NlO9Zx)-wz6Fwo=BT>YzEEL39H7VSD^e_oL!g|!w!zTbt<42_r=p< zS?S~ywPYEdnDFcl4lb&>A|BIM!28_>G98|`h(PCa>9g5&LxqNG*8 zD}^9X&ds7yn77MpGCF$C_jBl^3T@R)ZNeJ&b>fn$w!m?mZMBCn2$XM#`LIsJbf}MZ?c?QLs>-P$)s!n`(N|B&DW}jA0G&r2> z*XcF4jed-a)j#$Rg&BxO^gvSz9AF$FikY5olAm?w;XMlD8nw%-s#~}oQZzJguigoF zSfPtvvxjxHk@e2eO< zWe)F?=AckY=h3qq@IR{=)ld9XUL8j?G5`AZvCMZ@FfGxIwsUUKz{vd6gloh0DYCTQ zPw@#7rn5#_bnWa@Qc{JG2;7lT;sH@R9kEV@BgIu8%r)NoF?X)tWpydhK!h^2eWC#$ zG#9jZi!!_gvZS+GELL~Ap1c?hW{`L-h3)Dj zc3jk}XwCm{jX$#eq4^N}d2|#XZsX_H@Z)9)olgv#ufFs6hzmBGvK45YMq4tOb4FD~x{{*4cgmmBtf{wOJv z%>F)5qQ1^Zv`jwUBpFn8JC!v(k`pb3`fFh_e}lRNGS?#(thwP&9k->*R0v$Y##|*HX-7%v9fRB*d({(Ue$)IaI>(0|{n^W2>Cfh2oLM(|M$HxD0gDTC7RuLt zh5rC)sz2pW@t8PLcopk*Ya?X3#}UG(jiY4vRWI|>eZ&MPU4NGiIF1{65TQSyCi_u# zm-nVz+i#{wrjhwSlNCo673R65wxVdM9(PEm+}p0oyexKX$+{JtyK3>d0FNng{LXMa&il}g~te1Rg$&{;F` z%-jBoHTAGn%CmN=ejNT_rOvR#9>E<#j3)-);=<%%N+H&VCwmhg9zBGO!vmPXFsu^G z+OWfMrhWnBFJOY!&u8^^K5+?bx&?xz@o55uQ<$%kfi2%@pkEG2W|~dGEvXOiY)~%j zEv(>6&X#vBj_`PDa)O*>Rs9%YbL|(fjx*uBtqag2%*9k_P2951>sJTdZ@MF)&tpK< zBHqq;c^F4&6AD{eqdc>XNxTDh31G$rT~mN-p(Xk zmFPU3WqF>NJYIDfE0A+tg?F^nq@)gK5>MJUOx>QJ5996l4soR23#AsiNtW>`t(#Vz z8p)z>BY1W9c^tTU?mW{*sUpcdf_fo9d?>7_dlz{f9DB3a7SAW^I`A6V=BVgJ3F4T3 zzR_pu{?Z0mvc6OlAR&`-STc+xnTB=Wm)k z%wa#ll6`AUzu$Ry;rzGe%t_0lnOlmp0QR(WRZ!cDk!c>+T=meJw0+V1-u*l2eNI}CUH8$TJ%LgnfI!)Iu z!WYU->==SW#1mJ`qb9s@eHc>kvIk z_?GCt|6}B`bRDJP&Mh$zuU}jo?+!cl6v+-_k20ZSUX9gAFZ-F8@G)i|ub%T@QLPoP z_Buo>7puNpRV&Widi_2Q!r;xJvnE^X3~J>1+syY&a_V!6sfXg!h+#~WSu0xK<}a5O?Kdi!*C>svNfYnJ>=C;O35>!yyt3!HA!47WsqdR=QQoPSCDdkcZE zs1m`21gkPavHiET=p~-9L0;+>F9u$}B8`rDeo+fxfXg@_lVBd<9q>=fa%f_Xwhn;vx{dA`;HSuy zKbfGfRkiA2Pme1lxNRS4;^Ne!0gY>T8IU&^;^^IYuedAN=1Tx?aM zVplRbUG`QXrfBZEuiBLd6nX(x2W^NlaykuDZ|Z2jKL!#)9Fe>nr1cFJbB z`q$zN^pn$0u)QahleI_wH!7P^vyp53z0EWLdxUy_lyi0mgp~)R`7^@K>-Mx!bxDeB z^N+-rGQtc#Ys5E=4q-8B&aG)UmS72Ew<^op)gFY73d5Uq=TV*IWj^KdZCp_tba5ct zB6Mov7sT)jCU$V7z<79Q9*gXjG<#G#X?HXT4F3A>mlBL-SImcZ(ah6b)W^e=jj%^~=Ybd$9MOpyRX8jSbT%kxc)Bt6A|jtx0NXEp5nAf^ zeV)VQhtuJSSXVY3>6^#4FCmKv><;0LVRzo}CUc%kuTOY+^wN`8a0XEf#%xq=~g*jg?&Fj0M}92a(1%Pt{v*1ELRp^(3CXQpdY_I$9wvs{=J1Z+*Go z?nVw`{Hb5&Y#bzCw|akIZ6Zo6p3S3CIh`%ikP(;Ep>1Fs{j``+OkfoLCSf?6D%oH- zE)KbwmCvZJ>zvrR@^&Mf?{2V9YV{hU7Rw#7gLZ}_e%5SD=`SDpw(}wmXSQ$4nH%)$ zW*2ax2UAH=zWz6;dPR+;A2@XA&Fik>As>G_`E8jkGe0kd zC`)3@zyLNcw4VRB k_5TX?%wMl-yaBpYJ-y8D6&{x*CnFu*dj?w78i=U>09xP#djJ3c literal 64421 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 day > 0 && day <= 6)); + if (!startDate) return ''; + const cursor = new Date(`${String(startDate).slice(0, 10)}T00:00:00`); + if (Number.isNaN(cursor.getTime()) || !allowed.size) return ''; + for (let i = 0; i < 14; i += 1) { + if (allowed.has(cursor.getDay())) { + const pad = (n) => String(n).padStart(2, '0'); + return `${cursor.getFullYear()}-${pad(cursor.getMonth() + 1)}-${pad(cursor.getDate())}`; + } + cursor.setDate(cursor.getDate() + 1); + } + return ''; +} + export default function CohortForm() { const { id } = useParams(); const isEdit = Boolean(id); @@ -38,7 +55,10 @@ export default function CohortForm() { const [saving, setSaving] = useState(false); const { settings } = useSettings(); const startWeekdays = settings?.cohortStartWeekdays || [1, 2]; - const sessionCount = settings?.upcomingSessionCount || 30; + const schedules = settings?.cohortSchedules || []; + const chosenSchedule = schedules.find((item) => item.id === form.scheduleId); + const allowedDays = (chosenSchedule?.weekdays?.length ? chosenSchedule.weekdays.map(Number) : startWeekdays).filter((day) => day !== 0); + const sessionCount = chosenSchedule?.upcomingSessionCount || settings?.upcomingSessionCount || 30; useEffect(() => { api('/api/users/virtual-prts').then((d) => setPrts(d.items || [])).catch(() => {}); @@ -55,8 +75,10 @@ export default function CohortForm() { }, [patientSearch]); useEffect(() => { - if (!isEdit) return; + if (!isEdit) return undefined; + let active = true; api(`/api/cohorts/${id}`).then((c) => { + if (!active) return; setForm({ name: c.name || '', startDate: c.startDate ? String(c.startDate).slice(0, 10) : '', @@ -64,12 +86,26 @@ export default function CohortForm() { virtualPrt: c.virtualPrt?.id || '', language: c.language || '', diseaseType: c.diseaseType || '', + scheduleId: c.scheduleId || '', patients: (c.patients || []).map((p) => p.id), }); setSelectedDetails((c.patients || []).map((p) => ({ id: p.id, name: p.name, mobile: p.mobile, whatsappOptOut: p.whatsappOptOut }))); setSessionSummary({ completed: c.sessionsCompleted || 0, planned: c.sessionsPlanned || 0 }); - }).catch((err) => setError(err.message)); - api(`/api/cohorts/${id}/sessions?count=${sessionCount}`).then((d) => setSessions(d.items || [])).catch(() => {}); + }).catch((err) => { + if (active) setError(err.message); + }); + return () => { active = false; }; + }, [id, isEdit]); + + useEffect(() => { + if (!isEdit) return undefined; + let active = true; + api(`/api/cohorts/${id}/sessions?count=${sessionCount}`).then((d) => { + if (active) setSessions(d.items || []); + }).catch(() => { + if (active) setSessions([]); + }); + return () => { active = false; }; }, [id, isEdit, sessionCount]); useEffect(() => { @@ -141,12 +177,12 @@ export default function CohortForm() { {error ?
{error}
: null}

- Start date must be {formatWeekdays(startWeekdays) || 'a configured weekday'} + {chosenSchedule + ? `This schedule meets on ${formatWeekdays(allowedDays)} and plans ${chosenSchedule.upcomingSessionCount || sessionCount} meetings.` + : `Start date must be ${formatWeekdays(startWeekdays) || 'a configured weekday'}. Meetings then repeat ${formatInterval(settings?.repeatIntervalDays)}.`} {settings?.skipHolidays !== false || settings?.skipPrtLeave !== false - ? `, and not fall on ${[settings?.skipHolidays !== false ? 'a holiday' : null, settings?.skipPrtLeave !== false ? 'Virtual PRT leave' : null].filter(Boolean).join(' or ')}` - : ''}. - Meetings then repeat {formatInterval(settings?.repeatIntervalDays)} - {settings?.skipHolidays !== false || settings?.skipPrtLeave !== false ? ', skipping blocked days' : ''}. + ? ` Skipped ${[settings?.skipHolidays !== false ? 'holidays' : null, settings?.skipPrtLeave !== false ? 'Virtual PRT leave' : null].filter(Boolean).join(' and ')} do not count as a meeting.` + : ''}

@@ -155,14 +191,36 @@ export default function CohortForm() {
Auto-created as timeslot - language weekday.
+ + Schedule + + Start date setForm((f) => ({ ...f, startDate }))} required - filterDate={(date) => startWeekdays.includes(date.getDay())} - placeholder={formatWeekdays(startWeekdays) || 'Select date'} + filterDate={(date) => date.getDay() !== 0 && allowedDays.includes(date.getDay())} + placeholder={formatWeekdays(allowedDays) || 'Select date'} /> @@ -236,7 +294,9 @@ export default function CohortForm() {
Upcoming sessions

- Repeats {formatInterval(settings?.repeatIntervalDays)} from the start date + {chosenSchedule + ? `Meets on ${formatWeekdays(allowedDays)} for ${chosenSchedule.upcomingSessionCount || sessionCount} meetings` + : `Repeats ${formatInterval(settings?.repeatIntervalDays)} from the start date`} {settings?.skipHolidays !== false || settings?.skipPrtLeave !== false ? ', skipping blocked days' : ''}.

diff --git a/frontend/src/views/virtualpr/matching/index.jsx b/frontend/src/views/virtualpr/matching/index.jsx index ac975e5..38110c5 100644 --- a/frontend/src/views/virtualpr/matching/index.jsx +++ b/frontend/src/views/virtualpr/matching/index.jsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react'; import { Button, Card, CardBody, Col, Container, Row, Table } from 'react-bootstrap'; import { Link } from 'react-router'; import PageBreadcrumb from '@/components/PageBreadcrumb'; -import { WEEKDAY_LABELS } from '@/hooks/useSettings'; +import { WEEKDAY_LABELS, useSettings } from '@/hooks/useSettings'; import { api } from '@/lib/api'; function weekdayLabel(weekday) { @@ -34,6 +34,8 @@ export default function MatchingPage() { const [info, setInfo] = useState(''); const [notes, setNotes] = useState([]); const [busy, setBusy] = useState(''); + const { settings } = useSettings(); + const schedules = settings?.cohortSchedules || []; const loadEmptySlots = async (items) => { const ids = [...new Set((items || []).map((cohort) => cohort.virtualPrt?.id).filter(Boolean))]; @@ -158,6 +160,24 @@ export default function MatchingPage() {
+
{(cohort.patients || []).map((patient) => (
diff --git a/frontend/src/views/virtualpr/onboarding/index.jsx b/frontend/src/views/virtualpr/onboarding/index.jsx index 2a5e340..b2df15b 100644 --- a/frontend/src/views/virtualpr/onboarding/index.jsx +++ b/frontend/src/views/virtualpr/onboarding/index.jsx @@ -217,8 +217,29 @@ export default function OnboardingPage() {
{ e.preventDefault(); setPage(0); setQuery(search); }}>
- setSearch(e.target.value)} /> + { + const value = e.target.value; + setSearch(value); + if (!value.trim()) { + setPage(0); + setQuery(''); + } + }} /> + {search ? ( + + ) : null}