- Prefijo v2: CVT - TRACEABILITY-MASTER.yml creado - Listo para integracion como submodulo Workspace: v2.0.0 | SIMCO: v4.0.0
16 KiB
16 KiB
Modulo Vacunacion
Proyecto: clinica-veterinaria Modulo: VET-002 Prioridad: P1 - Core Estado: Especificacion Fecha: 2026-01-07
1. DESCRIPCION GENERAL
El modulo de Vacunacion gestiona la cartilla digital de vacunas de cada mascota, incluyendo esquemas por especie/edad, recordatorios automaticos, control de lotes y generacion de certificados para SENASICA.
Proposito
- Registro de vacunas aplicadas
- Esquemas automaticos por especie
- Alertas de proximas vacunas
- Control de lotes y caducidad
- Certificados oficiales
- Reporte a SENASICA (rabia)
Alcance
- Todas las especies con vacunas
- Esquemas personalizables
- Recordatorios multicanal (email, SMS, push)
- Integracion con SENASICA
- Historial completo de inmunizaciones
2. ENTIDADES
2.1 vacuna (catalogo)
tabla: veterinaria.vacunas
descripcion: "Catalogo de vacunas disponibles"
campos:
- nombre: id
tipo: UUID
pk: true
- nombre: tenant_id
tipo: UUID
not_null: true
descripcion: "Null para vacunas globales"
- nombre: codigo
tipo: VARCHAR(20)
unique: true
descripcion: "Codigo interno"
- nombre: nombre
tipo: VARCHAR(200)
not_null: true
descripcion: "Nombre comercial"
- nombre: nombre_generico
tipo: VARCHAR(200)
descripcion: "Nombre generico/principio activo"
- nombre: fabricante
tipo: VARCHAR(100)
- nombre: especies_aplicables
tipo: UUID[]
descripcion: "Array de IDs de especies"
- nombre: enfermedades_previene
tipo: TEXT[]
descripcion: "Enfermedades que previene"
- nombre: via_administracion
tipo: ENUM
valores: ['subcutanea', 'intramuscular', 'intranasal', 'oral']
- nombre: dosis_ml
tipo: DECIMAL(4,2)
descripcion: "Dosis estandar en ml"
- nombre: requiere_refuerzo
tipo: BOOLEAN
default: true
- nombre: intervalo_refuerzo_dias
tipo: INTEGER
descripcion: "Dias entre aplicaciones"
- nombre: intervalo_anual_dias
tipo: INTEGER
default: 365
descripcion: "Frecuencia de refuerzo anual"
- nombre: edad_minima_semanas
tipo: INTEGER
descripcion: "Edad minima para aplicar"
- nombre: obligatoria
tipo: BOOLEAN
default: false
descripcion: "Si es obligatoria por ley"
- nombre: reportar_senasica
tipo: BOOLEAN
default: false
descripcion: "Si debe reportarse a SENASICA"
- nombre: precio_sugerido
tipo: DECIMAL(10,2)
- nombre: activo
tipo: BOOLEAN
default: true
indices:
- nombre: idx_vacuna_especies
tipo: GIN
campos: [especies_aplicables]
- nombre: idx_vacuna_senasica
campos: [reportar_senasica]
where: "reportar_senasica = true"
seeds:
# Caninos
- {codigo: 'PARVO', nombre: 'Parvovirus Canino', especies: ['CAN'], obligatoria: false}
- {codigo: 'MOQUILLO', nombre: 'Moquillo Canino', especies: ['CAN'], obligatoria: false}
- {codigo: 'QUINTUPLE', nombre: 'Quintuple Canina', especies: ['CAN'], obligatoria: false}
- {codigo: 'RABIA_CAN', nombre: 'Rabia Canina', especies: ['CAN'], obligatoria: true, reportar_senasica: true}
- {codigo: 'BORDETELLA', nombre: 'Bordetella (Tos de Perrera)', especies: ['CAN'], obligatoria: false}
# Felinos
- {codigo: 'TRIPLE_FEL', nombre: 'Triple Felina', especies: ['FEL'], obligatoria: false}
- {codigo: 'LEUCEMIA', nombre: 'Leucemia Felina', especies: ['FEL'], obligatoria: false}
- {codigo: 'RABIA_FEL', nombre: 'Rabia Felina', especies: ['FEL'], obligatoria: true, reportar_senasica: true}
2.2 esquema_vacunacion
tabla: veterinaria.esquemas_vacunacion
descripcion: "Esquemas de vacunacion por especie/edad"
campos:
- nombre: id
tipo: UUID
pk: true
- nombre: especie_id
tipo: UUID
fk: veterinaria.especies(id)
not_null: true
- nombre: nombre
tipo: VARCHAR(100)
not_null: true
descripcion: "Ej: Cachorro, Adulto, Senior"
- nombre: edad_inicio_semanas
tipo: INTEGER
descripcion: "Edad minima en semanas"
- nombre: edad_fin_semanas
tipo: INTEGER
descripcion: "Edad maxima en semanas (null = sin limite)"
- nombre: descripcion
tipo: TEXT
- nombre: activo
tipo: BOOLEAN
default: true
seeds:
- {especie: 'CAN', nombre: 'Cachorro (0-16 sem)', edad_inicio: 0, edad_fin: 16}
- {especie: 'CAN', nombre: 'Adulto (16+ sem)', edad_inicio: 16, edad_fin: null}
- {especie: 'FEL', nombre: 'Gatito (0-16 sem)', edad_inicio: 0, edad_fin: 16}
- {especie: 'FEL', nombre: 'Adulto (16+ sem)', edad_inicio: 16, edad_fin: null}
2.3 esquema_vacuna_detalle
tabla: veterinaria.esquema_vacuna_detalle
descripcion: "Vacunas incluidas en cada esquema"
campos:
- nombre: id
tipo: UUID
pk: true
- nombre: esquema_id
tipo: UUID
fk: veterinaria.esquemas_vacunacion(id)
not_null: true
on_delete: CASCADE
- nombre: vacuna_id
tipo: UUID
fk: veterinaria.vacunas(id)
not_null: true
- nombre: semana_aplicacion
tipo: INTEGER
descripcion: "Semana de edad para aplicar"
- nombre: orden
tipo: INTEGER
descripcion: "Orden de prioridad"
- nombre: es_refuerzo
tipo: BOOLEAN
default: false
descripcion: "Si es refuerzo de aplicacion anterior"
indices:
- nombre: uk_esquema_vacuna
campos: [esquema_id, vacuna_id, semana_aplicacion]
unique: true
seeds_cachorro:
# Esquema cachorro canino
- {esquema: 'Cachorro', vacuna: 'PARVO', semana: 6, orden: 1}
- {esquema: 'Cachorro', vacuna: 'QUINTUPLE', semana: 8, orden: 2}
- {esquema: 'Cachorro', vacuna: 'QUINTUPLE', semana: 12, orden: 3, es_refuerzo: true}
- {esquema: 'Cachorro', vacuna: 'RABIA_CAN', semana: 16, orden: 4}
2.4 vacunacion (aplicacion)
tabla: veterinaria.vacunaciones
descripcion: "Registro de vacunas aplicadas"
campos:
- nombre: id
tipo: UUID
pk: true
- nombre: tenant_id
tipo: UUID
not_null: true
- nombre: mascota_id
tipo: UUID
fk: veterinaria.mascotas(id)
not_null: true
- nombre: vacuna_id
tipo: UUID
fk: veterinaria.vacunas(id)
not_null: true
- nombre: fecha_aplicacion
tipo: DATE
not_null: true
- nombre: fecha_proxima
tipo: DATE
descripcion: "Fecha sugerida de proxima aplicacion"
- nombre: lote
tipo: VARCHAR(50)
descripcion: "Numero de lote"
- nombre: fecha_caducidad_lote
tipo: DATE
descripcion: "Caducidad del lote usado"
- nombre: fabricante
tipo: VARCHAR(100)
- nombre: veterinario_id
tipo: UUID
fk: core.usuarios(id)
not_null: true
descripcion: "Quien aplico"
- nombre: cedula_veterinario
tipo: VARCHAR(20)
descripcion: "Cedula profesional (para certificados)"
- nombre: consulta_id
tipo: UUID
fk: veterinaria.consultas(id)
descripcion: "Consulta donde se aplico (si aplica)"
- nombre: dosis_aplicada_ml
tipo: DECIMAL(4,2)
- nombre: via_administracion
tipo: ENUM
valores: ['subcutanea', 'intramuscular', 'intranasal', 'oral']
- nombre: sitio_aplicacion
tipo: VARCHAR(50)
descripcion: "Ej: muslo derecho, escapula"
- nombre: reaccion_adversa
tipo: BOOLEAN
default: false
- nombre: descripcion_reaccion
tipo: TEXT
- nombre: costo
tipo: DECIMAL(10,2)
- nombre: certificado_generado
tipo: BOOLEAN
default: false
- nombre: certificado_url
tipo: VARCHAR(500)
- nombre: reportado_senasica
tipo: BOOLEAN
default: false
- nombre: fecha_reporte_senasica
tipo: TIMESTAMP
- nombre: notas
tipo: TEXT
- nombre: created_at
tipo: TIMESTAMP
default: NOW()
indices:
- nombre: idx_vacunacion_mascota
campos: [mascota_id]
- nombre: idx_vacunacion_fecha
campos: [fecha_aplicacion DESC]
- nombre: idx_vacunacion_proxima
campos: [fecha_proxima]
where: "fecha_proxima IS NOT NULL"
- nombre: idx_vacunacion_senasica
campos: [reportado_senasica, fecha_aplicacion]
where: "reportado_senasica = false"
rls:
- policy: "tenant_isolation"
using: "tenant_id = current_tenant_id()"
2.5 recordatorio_vacuna
tabla: veterinaria.recordatorios_vacunas
descripcion: "Recordatorios programados"
campos:
- nombre: id
tipo: UUID
pk: true
- nombre: vacunacion_id
tipo: UUID
fk: veterinaria.vacunaciones(id)
not_null: true
on_delete: CASCADE
descripcion: "Vacunacion de referencia"
- nombre: fecha_recordatorio
tipo: DATE
not_null: true
descripcion: "Fecha para enviar recordatorio"
- nombre: tipo
tipo: ENUM
valores: ['7_dias_antes', '3_dias_antes', '1_dia_antes', 'dia_programado', 'vencido']
- nombre: canal
tipo: ENUM
valores: ['email', 'sms', 'push', 'whatsapp']
- nombre: enviado
tipo: BOOLEAN
default: false
- nombre: fecha_envio
tipo: TIMESTAMP
- nombre: error_envio
tipo: TEXT
indices:
- nombre: idx_recordatorio_fecha
campos: [fecha_recordatorio]
where: "enviado = false"
3. ESQUEMAS DE VACUNACION
3.1 Caninos (Perros)
cachorro_canino:
- semana_6:
vacuna: "Parvovirus"
nota: "Primera vacuna"
- semana_8:
vacuna: "Quintuple (Parvovirus, Moquillo, Hepatitis, Parainfluenza, Leptospirosis)"
nota: "Inicio de esquema completo"
- semana_12:
vacuna: "Quintuple (Refuerzo)"
nota: "Refuerzo obligatorio"
- semana_16:
vacuna: "Rabia"
nota: "Obligatoria por ley"
reportar_senasica: true
- semana_16:
vacuna: "Bordetella (opcional)"
nota: "Recomendada para perros en contacto con otros"
adulto_canino:
- anual:
vacunas: ["Quintuple", "Rabia"]
nota: "Refuerzos anuales"
- cada_6_meses:
vacuna: "Bordetella (opcional)"
nota: "Para perros sociales"
3.2 Felinos (Gatos)
gatito_felino:
- semana_8:
vacuna: "Triple Felina (Rinotraqueitis, Calicivirus, Panleucopenia)"
nota: "Primera vacuna"
- semana_12:
vacuna: "Triple Felina (Refuerzo)"
nota: "Refuerzo"
- semana_12:
vacuna: "Leucemia Felina"
nota: "Segun riesgo"
- semana_16:
vacuna: "Rabia"
nota: "Obligatoria"
reportar_senasica: true
adulto_felino:
- anual:
vacunas: ["Triple Felina", "Rabia"]
- anual_riesgo:
vacuna: "Leucemia Felina"
nota: "Solo gatos de exterior o conviviendo con positivos"
4. API ENDPOINTS
Vacunaciones
endpoints:
- method: GET
path: /api/v1/mascotas/{mascotaId}/vacunaciones
descripcion: "Historial de vacunas de una mascota"
query:
desde: date
hasta: date
response: Array de vacunaciones con detalles
- method: GET
path: /api/v1/mascotas/{mascotaId}/vacunaciones/pendientes
descripcion: "Vacunas pendientes segun esquema"
response: Array de vacunas sugeridas con fecha
- method: POST
path: /api/v1/mascotas/{mascotaId}/vacunaciones
descripcion: "Registrar aplicacion de vacuna"
body:
vacuna_id: string (requerido)
fecha_aplicacion: date (requerido)
lote: string
fabricante: string
via_administracion: string
sitio_aplicacion: string
dosis_ml: number
costo: number
notas: string
response: Vacunacion registrada + proxima fecha
- method: GET
path: /api/v1/vacunaciones/{id}
descripcion: "Detalle de una vacunacion"
response: Vacunacion completa
- method: PATCH
path: /api/v1/vacunaciones/{id}/reaccion
descripcion: "Registrar reaccion adversa"
body:
reaccion_adversa: boolean
descripcion_reaccion: string
response: Vacunacion actualizada
Certificados
- method: GET
path: /api/v1/vacunaciones/{id}/certificado
descripcion: "Generar certificado PDF"
response: PDF file
- method: POST
path: /api/v1/mascotas/{mascotaId}/cartilla
descripcion: "Generar cartilla completa PDF"
body:
incluir_proximas: boolean
response: PDF file
Recordatorios
- method: GET
path: /api/v1/recordatorios/pendientes
descripcion: "Recordatorios pendientes de envio"
query:
fecha: date (default: hoy)
response: Array de recordatorios
- method: POST
path: /api/v1/recordatorios/enviar
descripcion: "Procesar y enviar recordatorios"
body:
fecha: date
response: Resumen de envios
SENASICA
- method: GET
path: /api/v1/senasica/pendientes
descripcion: "Vacunas de rabia pendientes de reportar"
query:
desde: date
hasta: date
response: Array de vacunaciones
- method: POST
path: /api/v1/senasica/reportar
descripcion: "Generar reporte mensual SENASICA"
body:
mes: number
anio: number
response: Archivo de reporte + resumen
5. FLUJOS DE USUARIO
5.1 Aplicar Vacuna
1. Veterinario abre expediente de mascota
2. Ir a seccion "Vacunas"
3. Click "Nueva Vacunacion"
4. Sistema muestra:
- Vacunas sugeridas segun edad/especie
- Vacunas vencidas (alertas)
5. Seleccionar vacuna del catalogo
6. Completar datos:
- Lote
- Fabricante
- Via de administracion
- Sitio de aplicacion
7. Guardar
8. Sistema:
- Calcula proxima fecha
- Programa recordatorios
- Si es rabia, marca para SENASICA
9. Ofrecer generar certificado
5.2 Verificar Esquema
1. Abrir expediente de mascota
2. Ir a seccion "Vacunas"
3. Vista de timeline muestra:
- Vacunas aplicadas (verde)
- Vacunas pendientes segun esquema (amarillo)
- Vacunas vencidas (rojo)
4. Click en pendiente para aplicar
5. Click en aplicada para ver detalle/certificado
5.3 Procesar Recordatorios Diarios
1. Cron job diario (8am)
2. Sistema busca recordatorios con fecha = hoy
3. Por cada recordatorio:
- Obtener datos de mascota y propietario
- Preparar mensaje personalizado
- Enviar por canal configurado
- Marcar como enviado
4. Generar log de envios
5. Alertar errores a administrador
5.4 Generar Reporte SENASICA
1. Admin accede a seccion SENASICA
2. Selecciona mes/ano
3. Sistema genera reporte con:
- Total vacunas de rabia aplicadas
- Por especie (canino/felino)
- Por municipio
- Datos de veterinarios
4. Descargar en formato requerido
5. Marcar vacunaciones como reportadas
6. CERTIFICADO DE VACUNACION
Contenido del Certificado
certificado_vacunacion:
encabezado:
- Logo de clinica
- Nombre de clinica
- Direccion
- Telefono
- RFC
datos_mascota:
- Nombre
- Especie y raza
- Sexo
- Edad
- Color
- Microchip (si tiene)
- Foto
datos_propietario:
- Nombre completo
- Direccion
- Telefono
datos_vacunacion:
- Vacuna aplicada
- Fecha de aplicacion
- Lote
- Fabricante
- Fecha de proxima aplicacion
- Via y sitio de administracion
datos_veterinario:
- Nombre completo
- Cedula profesional
- Firma digital
pie:
- Numero de folio
- Fecha de emision
- QR de verificacion
7. INTEGRACION SENASICA
Requerimientos del Reporte
reporte_senasica:
frecuencia: "Mensual"
plazo: "Primeros 5 dias del mes siguiente"
datos_requeridos:
- Numero de vacunas de rabia aplicadas
- Desglose por especie (canino/felino)
- Municipio de aplicacion
- Clave de establecimiento
- Datos del MVZ responsable
formato:
- Excel con plantilla oficial
- O captura en sistema web SENASICA
8. VALIDACIONES
validaciones:
- regla: "Vacuna debe ser aplicable a la especie"
condicion: vacuna.especies_aplicables NOT CONTAINS mascota.especie_id
error: "Esta vacuna no aplica para esta especie"
- regla: "Edad minima para aplicar"
condicion: mascota.edad_semanas < vacuna.edad_minima_semanas
error: "La mascota no tiene la edad minima para esta vacuna"
- regla: "Lote no caducado"
condicion: fecha_aplicacion > fecha_caducidad_lote
error: "El lote de vacuna esta caducado"
- regla: "Veterinario con cedula para rabia"
condicion: vacuna.reportar_senasica AND NOT veterinario.cedula
error: "Se requiere cedula profesional para vacunas de rabia"
- regla: "No duplicar vacuna en mismo dia"
condicion: EXISTS vacunacion con misma vacuna y fecha
warning: "Ya existe una aplicacion de esta vacuna en la misma fecha"
9. DEPENDENCIAS
Depende de
veterinaria.mascotas- Paciente a vacunarveterinaria.propietarios- Para recordatorioscore.usuarios- Veterinario que aplicanotificaciones- Envio de recordatorios
Dependientes
veterinaria.consultas- Vinculo con consultareportes- Estadisticas de vacunacionfacturacion- Cobro de vacunas
Documento creado: 2026-01-07 Autor: Agente Orquestador Workspace Version: 1.0.0