- 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>
259 lines
6.5 KiB
Markdown
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
|