feat: version 4.7.0 -- Agenda medica

Modulo clinic (habilitado por usuario): citas de pacientes para medicos con choques
bloqueantes (medico, paciente con cualquier medico, quirofano/bloqueos recurrentes y
horario de atencion), validados en transaccion con bloqueo de filas para que dos
recepcionistas no tomen el mismo hueco. Recepcion (alcance todos) y medico (alcance
propio). Vista Dia por columnas de medico, Semana y Lista; pacientes con historial;
bloqueos; configuracion de personal, horarios y tipos solo admin/superadmin. Capa de
citas en el calendario personal del medico. Migracion 036.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-28 12:57:43 -05:00
parent bdc62403f4
commit 1e25022630
29 changed files with 1649 additions and 34 deletions
+20 -1
View File
@@ -10,11 +10,30 @@
- Charset: `utf8mb4`
- Collation: `utf8mb4_unicode_ci`
Migración `034_meetings.sql` (v4.4.0): pendiente de aplicar tanto en desarrollo como en
Migración `034_meetings.sql` (v4.4.0): aplicada en desarrollo, pendiente en
producción. Crea tablas e índices de reuniones y amplía el tipo de entidad de notificaciones.
`DATETIME` se guarda como hora civil de `America/Guayaquil`; la conexión usa `dateStrings: true`.
La recurrencia se almacena como JSON de texto y se expande al consultar, sin filas por ocurrencia.
## Agenda médica (migración 036, v4.7.0)
`backend/database/migrations/036_clinic.sql` está creada y **no se ha aplicado** en ninguna BD.
Usa `utf8mb4`, FKs hacia `users`, `clinic_staff`, pacientes y tipos, e índices de rangos por
médico y por paciente. `DATETIME` se interpreta en hora civil de `America/Guayaquil`.
| Tabla | Uso |
|---|---|
| `clinic_staff` | permiso `all`/`own`, condición de médico, especialidad, color, activo, versión |
| `clinic_patients` | identificación única opcional, contacto mínimo, nacimiento, nota corta, versión |
| `clinic_schedules` | tramos por médico y día de semana, lunes=0 |
| `clinic_appointment_types` | nombre, duración, color y estado |
| `clinic_appointments` | cita, médico, paciente, tipo, estado, canal, cancelación y versión |
| `clinic_blocks` | bloqueo de médico, clase y recurrencia con las reglas de reuniones |
La reserva bloquea la fila `clinic_staff` del médico y la del paciente antes de verificar choques;
los cambios de horario y bloqueos se serializan por la misma fila del médico. La migración crea una fila inicial `all` para el superadmin más antiguo; el resto se habilita
desde la UI. No hay migración aplicada ni conexión a BD en este cambio.
## Fuente de verdad
- La base ya existe: sí (creada en dev el 2026-09-03, usuario `project_linkedcorp`).