diff --git a/AGENTS.md b/AGENTS.md index 1c1caaf..97db98c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -86,7 +86,8 @@ README унаследован от Bambolo и местами устарел: в - `sync_doctors_and_zones.php` — потенциально разрушительная операция: она создаёт временные таблицы, очищает основные `pnd_zones`/`pnd_doctors`, переносит данные и удаляет временные таблицы. - Не запускать этот скрипт автоматически для проверки. Сначала использовать режим dry-run или отдельную тестовую БД и явно проверить подключения. - После миграции МИС рабочие слоты врачей находятся в `SimpleSchedule`; старую цепочку `Event`/`Action`/`ActionProperty_Time` для расписания не использовать. -- Рабочее время дня вычислять по всем действующим амбулаторным слотам `SimpleSchedule`, независимо от `ticket`. Исключать удалённые, отключённые, сверхурочные и нулевые слоты, а также строки с `absence_reason`. +- Рабочее время дня вычислять по всем действующим слотам присутствия врача в учреждении (`amb`, `external`, `internal`) независимо от `ticket`; заполненные номерки тоже расширяют диапазон активности. Исключать удалённые, отключённые и нулевые слоты, а также строки с `absence_reason`. +- Интервалы `SimpleSchedule.schedule_type = 'home'` относятся к работе на дому и не должны входить в отображаемый диапазон присутствия врача. - `SimpleSchedule.ticket` ссылается на `TicketInfo.id`; `NULL` означает свободный слот. Для синхронизации только рабочих часов `TicketInfo` не читать и пациентские данные не переносить. - ID врачей и участков сейчас совпадают с внешними ID старой МИС. Не менять эту семантику без миграционного плана. - Поле `pnd_doctors.schedule` содержит JSON вида `YYYY-MM-DD => {start, end}` либо `null`; при изменениях сохранять обратную совместимость формата. diff --git a/app/engine/cron/data_sync/sync_doctors_and_zones.php b/app/engine/cron/data_sync/sync_doctors_and_zones.php index dac77d2..3f300d3 100644 --- a/app/engine/cron/data_sync/sync_doctors_and_zones.php +++ b/app/engine/cron/data_sync/sync_doctors_and_zones.php @@ -169,9 +169,8 @@ function getDoctorSchedule($src, $doctorId) WHERE ss.person = {$doctorId} AND ss.deleted = 0 AND COALESCE(ss.disabled, 0) = 0 - AND COALESCE(ss.overtime, 0) = 0 AND ss.absence_reason IS NULL - AND ss.schedule_type = 'amb' + AND ss.schedule_type IN ('amb', 'external', 'internal') AND ss.start_time IS NOT NULL AND ss.end_time IS NOT NULL AND ss.end_time > ss.start_time