clinica-veterinaria/docs/01-epicas/VET-001-mascotas-propietarios.md
rckrdmrd c461208a51 [SPRINT-7] docs: Agregar documentacion, schemas y reportes
- Epicas documentadas
- Schema de farmacia veterinaria
- Inventario de base de datos
- Reporte de ejecucion Sprint 7

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 08:53:42 -06:00

259 lines
6.5 KiB
Markdown

# VET-001: Mascotas y Propietarios
## Metadata
- **Codigo:** VET-001
- **Modulo:** Mascotas + Propietarios
- **Prioridad:** P0
- **Estado:** DDL Completado
- **Fase:** 1 - Core
## Descripcion
Sistema de gestion de mascotas (pacientes) y sus propietarios: registro completo de datos del animal, vinculacion con duenos, historial de pesos, identificacion por microchip, y estado del paciente.
## Objetivos
1. Registro completo de mascotas
2. Vinculacion mascota-propietario
3. Gestion multi-especie y razas
4. Identificacion por microchip
5. Historial de pesos
## Alcance
### Incluido
- CRUD de propietarios
- CRUD de mascotas con foto
- Catalogos de especies y razas
- Busqueda por microchip
- Historial de pesos
- Vinculacion de multiples propietarios
- Estados: activo, fallecido, perdido, dado_de_baja
### Excluido
- QR para expediente (fase posterior)
- App para propietarios (fase posterior)
- Portal de autoservicio
## Especies Soportadas
| Especie | Codigo | Vacunas Tipicas |
|---------|--------|-----------------|
| Canino (Perro) | CAN | Parvovirus, Moquillo, Rabia |
| Felino (Gato) | FEL | Triple Felina, Leucemia, Rabia |
| Ave | AVE | Variable segun tipo |
| Reptil | REP | Sin vacunas estandar |
| Roedor | ROE | Sin vacunas estandar |
| Pez | PEZ | Tratamientos de agua |
| Exotico | EXO | Segun especie |
## Modelo de Datos
### Tablas
**veterinaria.propietarios**
- id, tenant_id, partner_id (opcional)
- nombre, apellidos, telefono, telefono_emergencia
- email, direccion, rfc
- active
**veterinaria.mascotas**
- id, tenant_id, propietario_id
- especie_id, raza_id
- nombre, sexo, fecha_nacimiento, edad_aproximada
- color, peso_kg
- numero_chip, tiene_chip
- esterilizado, fecha_esterilizacion
- alergias, condiciones_especiales, notas
- foto_url, active
**veterinaria.especies** (Catalogo)
- id, tenant_id, nombre, nombre_cientifico
**veterinaria.razas** (Catalogo)
- id, tenant_id, especie_id, nombre
- tamanio_promedio, peso_promedio_kg
## Endpoints API
### Propietarios
| Metodo | Endpoint | Descripcion |
|--------|----------|-------------|
| GET | /propietarios | Listar propietarios |
| GET | /propietarios/:id | Detalle propietario |
| POST | /propietarios | Crear propietario |
| PUT | /propietarios/:id | Actualizar |
| DELETE | /propietarios/:id | Desactivar |
| GET | /propietarios/:id/mascotas | Mascotas del propietario |
### Mascotas
| Metodo | Endpoint | Descripcion |
|--------|----------|-------------|
| GET | /mascotas | Listar mascotas |
| GET | /mascotas/:id | Detalle mascota |
| POST | /mascotas | Registrar mascota |
| PUT | /mascotas/:id | Actualizar |
| DELETE | /mascotas/:id | Desactivar |
| GET | /mascotas/chip/:numero | Buscar por microchip |
| POST | /mascotas/:id/foto | Subir foto |
| GET | /mascotas/:id/historial-peso | Historial de pesos |
| POST | /mascotas/:id/peso | Registrar peso |
### Catalogos
| Metodo | Endpoint | Descripcion |
|--------|----------|-------------|
| GET | /especies | Listar especies |
| GET | /especies/:id/razas | Razas de especie |
| POST | /razas | Crear raza |
## Interfaz del Servicio
```typescript
interface MascotasService {
getAll(filters?: MascotaFilters): Promise<Mascota[]>;
getById(id: string): Promise<Mascota>;
create(data: CreateMascota): Promise<Mascota>;
update(id: string, data: UpdateMascota): Promise<Mascota>;
findByChip(numeroChip: string): Promise<Mascota | null>;
registrarPeso(mascotaId: string, pesoKg: number): Promise<void>;
getHistorialPeso(mascotaId: string): Promise<PesoHistorial[]>;
}
interface PropietariosService {
getAll(filters?: PropietarioFilters): Promise<Propietario[]>;
getById(id: string): Promise<Propietario>;
create(data: CreatePropietario): Promise<Propietario>;
getMascotas(propietarioId: string): Promise<Mascota[]>;
}
interface CreateMascota {
propietarioId: string;
especieId: string;
razaId?: string;
nombre: string;
sexo: SexoAnimal;
fechaNacimiento?: Date;
edadAproximada?: string;
color?: string;
pesoKg?: number;
numeroChip?: string;
esterilizado?: boolean;
alergias?: string;
}
```
## Flujos
### Registrar Nueva Mascota
```
1. Propietario llega a registrar mascota
2. Buscar si propietario existe (por telefono)
3. Si no existe, crear propietario
4. Crear registro de mascota:
- Seleccionar especie
- Seleccionar raza (opcional)
- Datos basicos (nombre, sexo, edad)
- Identificacion (chip si tiene)
- Tomar foto
5. Guardar y abrir expediente
```
### Buscar por Microchip
```
1. Escanear microchip
2. Buscar en base de datos
3. Si existe: mostrar expediente
4. Si no existe: opcion de registrar
5. Validar propietario actual
```
## Signos Vitales por Especie
| Especie | Temp Normal | FC Normal | FR Normal |
|---------|-------------|-----------|-----------|
| Canino | 38-39°C | 60-120 lpm | 10-30 rpm |
| Felino | 38-39°C | 120-180 lpm | 20-40 rpm |
| Conejo | 38.5-40°C | 130-325 lpm | 30-60 rpm |
| Ave | 40-42°C | Variable | Variable |
## Componentes Frontend
### MascotaCard
```typescript
interface MascotaCardProps {
mascota: Mascota;
onClick: () => void;
showOwner?: boolean;
}
// Muestra:
// - Foto de la mascota
// - Nombre y especie
// - Raza
// - Edad
// - Chip (si tiene)
// - Estado (activo/fallecido)
```
### MascotaForm
```typescript
interface MascotaFormProps {
propietarioId: string;
onSave: (mascota: Mascota) => void;
}
// Campos:
// - Nombre
// - Especie (dropdown)
// - Raza (dropdown filtrado por especie)
// - Sexo
// - Fecha nacimiento / Edad aproximada
// - Color
// - Peso
// - Microchip
// - Esterilizado
// - Alergias
// - Foto
```
## Entregables
| Entregable | Estado | Archivo |
|------------|--------|---------|
| DDL mascotas | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
| DDL propietarios | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
| mascotas.module.ts | Pendiente | `backend/modules/mascotas/` |
| propietarios.module.ts | Pendiente | `backend/modules/propietarios/` |
| MascotaCard.tsx | Pendiente | `frontend/components/` |
| MascotaForm.tsx | Pendiente | `frontend/components/` |
## Dependencias
### Depende de
- Auth/Tenants (erp-core)
### Bloquea a
- VET-002 (Vacunacion - requiere mascota)
- VET-003 (Desparasitaciones)
- VET-004 (Hospitalizacion)
- VET-005 (Estetica)
- Consultas veterinarias
## Criterios de Aceptacion
- [ ] CRUD propietarios funciona
- [ ] CRUD mascotas funciona
- [ ] Catalogos de especies/razas
- [ ] Busqueda por microchip
- [ ] Foto se sube correctamente
- [ ] Historial de peso funciona
- [ ] Vinculacion propietario-mascota
---
**Ultima actualizacion:** 2026-01-07