spr migrated books, and tester

This commit is contained in:
buenosairesam
2025-12-31 09:07:27 -03:00
parent 21b8eab3cb
commit cccc6b5a93
136 changed files with 15763 additions and 472 deletions

View File

@@ -0,0 +1,104 @@
# Fuente: album/book/ops-templates/backoffice/01-gestion-solicitudes.md
# Drive: 05. ATC - Operaciones/Procedimientos
# Tests Backend: pytest tests/contracts/solicitudes/test_service_requests.py
# Tests Frontend: npx playwright test admin-requests.spec.ts
Feature: Gestion de solicitudes de servicio
Como administrador del backoffice
Quiero gestionar todas las solicitudes del sistema
Para asegurar que se atiendan correctamente
Background:
Given que estoy logueado como administrador
And estoy en la seccion "Solicitudes" del backoffice
# ============================================
# VER Y FILTRAR SOLICITUDES
# ============================================
Scenario: Ver listado de todas las solicitudes
When cargo la pagina de solicitudes
Then deberia ver un listado paginado
And cada solicitud deberia mostrar:
| campo |
| ID |
| Dueno |
| Mascota |
| Servicios |
| Estado |
| Fecha |
Scenario Outline: Filtrar solicitudes por estado
When filtro por estado "<estado>"
Then solo deberia ver solicitudes con estado "<estado>"
Examples:
| estado |
| Pendiente |
| Coordinado |
| Pagado |
| Completado |
| Cancelado |
# ============================================
# ASIGNAR VETERINARIO MANUALMENTE
# ============================================
Scenario: Asignar veterinario a solicitud pendiente
Given que hay una solicitud pendiente en "Palermo"
And no fue aceptada por ningun veterinario
When abro el detalle de la solicitud
And hago click en "Asignar veterinario"
Then deberia ver lista de veterinarios con cobertura en Palermo
When selecciono "Dra. Garcia"
And selecciono fecha "15 de enero" hora "10:00"
And confirmo la asignacion
Then la solicitud deberia pasar a estado "Coordinado"
And deberia estar asignada a Dra. Garcia
And el dueno deberia recibir notificacion
And el veterinario deberia recibir notificacion
# ============================================
# CAMBIAR ESTADO MANUALMENTE
# ============================================
Scenario: Cambiar estado de solicitud
Given que hay una solicitud en estado "Coordinado"
And el pago se proceso pero el webhook fallo
When abro la solicitud
And hago click en "Cambiar estado"
And selecciono "Pagado"
And ingreso motivo "Pago confirmado manualmente - ID MP: 12345"
And confirmo el cambio
Then la solicitud deberia pasar a "Pagado"
And el cambio deberia registrarse en el historial
Rule: Solo ciertos cambios de estado son validos
Scenario: No puedo volver a estado anterior
Given que hay una solicitud en estado "Completado"
When intento cambiar el estado a "Pagado"
Then deberia ver error "No se puede volver a un estado anterior"
Scenario: Puedo cancelar desde cualquier estado
Given que hay una solicitud en estado "Coordinado"
When cambio el estado a "Cancelado"
And ingreso motivo de cancelacion
Then la solicitud deberia cancelarse
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Reasignar veterinario
Given que hay una solicitud asignada a "Dr. Lopez"
And Dr. Lopez no puede asistir
When abro la solicitud
And hago click en "Reasignar"
And selecciono otro veterinario
And confirmo
Then Dr. Lopez deberia ser notificado de la desasignacion
And el nuevo vet deberia ser notificado
And el dueno deberia ser notificado del cambio

View File

@@ -0,0 +1,88 @@
# Fuente: album/book/ops-templates/backoffice/02-gestion-usuarios.md
# Drive: 05. ATC - Operaciones/Procedimientos
# Tests Backend: pytest tests/contracts/mascotas/test_pet_owners.py
# Tests Frontend: npx playwright test admin-users.spec.ts
Feature: Gestion de usuarios
Como administrador del backoffice
Quiero gestionar duenos y veterinarios
Para mantener la base de usuarios actualizada
Background:
Given que estoy logueado como administrador
And estoy en el backoffice
# ============================================
# GESTION DE DUENOS
# ============================================
Scenario: Buscar dueno de mascota
Given que estoy en la seccion "Duenos"
When busco "maria@ejemplo.com"
Then deberia ver a Maria Garcia en los resultados
And deberia ver sus mascotas listadas
Scenario: Ver perfil completo de dueno
Given que encontre a "Maria Garcia"
When hago click en su perfil
Then deberia ver:
| seccion | contenido |
| Datos personales | Nombre, email, telefono |
| Direcciones | Direcciones registradas |
| Mascotas | Lista de mascotas |
| Historial | Solicitudes anteriores |
Scenario: Editar datos de dueno
Given que estoy viendo el perfil de un dueno
When hago click en "Editar"
And cambio el telefono a "1155559999"
And guardo los cambios
Then el telefono deberia actualizarse
# ============================================
# GESTION DE VETERINARIOS
# ============================================
Scenario: Agregar nuevo veterinario
Given que estoy en la seccion "Veterinarios"
When hago click en "Agregar veterinario"
And completo los datos:
| campo | valor |
| Nombre | Dr. Juan Perez |
| Matricula | MV-12345 |
| Email | jperez@ejemplo.com |
| Telefono | 1155551234 |
And selecciono zonas de cobertura:
| zona |
| Palermo |
| Recoleta |
And genero credenciales de acceso
And guardo
Then deberia crearse el veterinario
And deberia poder loguearse con sus credenciales
Scenario: Intentar desactivar veterinario con citas pendientes
Given que el veterinario "Dra. Garcia" tiene 3 citas pendientes
When intento desactivarla
Then deberia ver advertencia "Tiene 3 citas pendientes"
And deberia ver opciones:
| opcion |
| Reasignar citas y desactivar |
| Cancelar |
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Fusionar cuentas duplicadas
Given que hay dos cuentas para el mismo dueno:
| cuenta | email | mascotas |
| Cuenta1 | maria@gmail.com | Luna |
| Cuenta2 | maria@hotmail.com | Rocky |
When selecciono ambas cuentas
And hago click en "Fusionar"
And elijo Cuenta1 como principal
And confirmo
Then deberia existir solo Cuenta1
And deberia tener ambas mascotas

View File

@@ -0,0 +1,91 @@
# Fuente: album/book/ops-templates/backoffice/03-gestion-servicios.md
# Drive: 08. IT y Producto/Catalogo Servicios
# Tests Backend: pytest tests/contracts/productos/test_services.py
# Tests Frontend: npx playwright test admin-services.spec.ts
Feature: Gestion de servicios y precios
Como administrador
Quiero gestionar el catalogo de servicios
Para mantener la oferta actualizada
Background:
Given que estoy logueado como administrador
And estoy en la seccion "Servicios"
# ============================================
# VER CATALOGO DE SERVICIOS
# ============================================
Scenario: Ver listado de servicios
When cargo la pagina de servicios
Then deberia ver todos los servicios organizados por categoria
And cada servicio deberia mostrar:
| campo |
| Nombre |
| Categoria |
| Tipo mascota |
| Precio actual |
| Estado |
# ============================================
# CREAR Y EDITAR SERVICIOS
# ============================================
Scenario: Agregar nuevo servicio
When hago click en "Agregar servicio"
And completo los datos:
| campo | valor |
| Nombre | Vacuna Quintuple Felina |
| Descripcion | Protege contra 5 enfermedades |
| Categoria | Vacunacion |
| Tipo mascota | Gato |
| Precio | 15000 |
And guardo el servicio
Then el servicio deberia crearse
And deberia aparecer en el turnero para gatos
Scenario: Desactivar servicio
Given que existe el servicio "Servicio Antiguo"
When abro el servicio
And hago click en "Desactivar"
And confirmo
Then el servicio no deberia aparecer en el turnero
# ============================================
# GESTION DE PRECIOS
# ============================================
Scenario: Actualizar precio de servicio
Given que "Consulta clinica" tiene precio actual de 10000
When abro el servicio
And voy a la seccion "Precios"
And hago click en "Agregar precio"
And ingreso nuevo precio 12000
And selecciono fecha de vigencia "01/02/2024"
And guardo
Then deberia crearse el nuevo precio
And el precio anterior deberia quedar en historial
Rule: El precio se congela al crear la solicitud
Scenario: Cambio de precio no afecta solicitudes existentes
Given que hay una solicitud pendiente con "Consulta clinica" a 10000
When cambio el precio de "Consulta clinica" a 12000
Then la solicitud deberia mantener el precio de 10000
# ============================================
# CONFIGURAR COMBOS
# ============================================
Scenario: Crear combo de servicios
When voy a "Combos"
And hago click en "Agregar combo"
And configuro:
| campo | valor |
| Nombre | Plan Preventivo Felino |
| Servicios | Vacunacion, Desparasitacion |
| Precio combo | 25000 |
And guardo
Then el combo deberia crearse
And deberia aplicarse automaticamente en el turnero

View File

@@ -0,0 +1,86 @@
# Fuente: album/book/ops-templates/backoffice/04-reembolsos.md
# Drive: 07. Finanzas y contabilidad/Reembolsos
# Tests Backend: pytest tests/contracts/payments/test_refunds.py
# Tests Frontend: npx playwright test admin-refunds.spec.ts
Feature: Proceso de reembolso
Como administrador
Quiero procesar reembolsos de pagos
Para resolver cancelaciones y problemas
Background:
Given que estoy logueado como administrador
And estoy en el backoffice
# ============================================
# PROCESAR REEMBOLSO
# ============================================
Scenario: Reembolso total exitoso
Given que hay una solicitud pagada por 15000
And la visita fue cancelada
When abro la solicitud
And hago click en "Procesar reembolso"
And selecciono "Reembolso total"
And ingreso motivo "Cancelacion por indisponibilidad del veterinario"
And confirmo el reembolso
Then deberia enviarse la solicitud de reembolso a Mercado Pago
And deberia ver mensaje "Reembolso en proceso"
And el dueno deberia recibir email de confirmacion
Scenario: Reembolso parcial
Given que hay una solicitud pagada por 20000
And solo se realizo parte del servicio
When proceso reembolso parcial por 10000
And ingreso motivo "Servicio parcialmente completado"
And confirmo
Then deberia procesarse reembolso por 10000
And deberia quedar registro del monto reembolsado
# ============================================
# TIEMPOS DE ACREDITACION
# ============================================
Scenario Outline: Informar tiempo de acreditacion segun metodo
Given que el pago original fue con "<metodo>"
When proceso el reembolso
Then deberia informar al usuario:
"""
El reembolso se acreditara en <tiempo>
"""
Examples:
| metodo | tiempo |
| Tarjeta credito | 1-2 resumenes de cuenta |
| Tarjeta debito | 5-10 dias habiles |
| Dinero en cuenta MP | forma inmediata |
# ============================================
# VALIDACIONES
# ============================================
Scenario: No puedo reembolsar mas del monto pagado
Given que hay una solicitud pagada por 15000
When intento reembolsar 20000
Then deberia ver error "El monto supera el pago original"
Scenario: Reembolso duplicado
Given que ya procese un reembolso total para una solicitud
When intento procesar otro reembolso
Then deberia ver error "Esta solicitud ya fue reembolsada"
Scenario: Pago fuera de plazo de reembolso
Given que hay un pago de hace 200 dias
When intento reembolsar
Then deberia ver advertencia "Fuera de plazo de reembolso de MP (180 dias)"
# ============================================
# SEGUIMIENTO
# ============================================
Scenario: Ver estado del reembolso
Given que procese un reembolso hace 2 dias
When veo el detalle del reembolso
Then deberia ver el estado actual en Mercado Pago
And deberia ver historial de estados

View File

@@ -0,0 +1,97 @@
# Fuente: album/book/ops-templates/backoffice/05-reportes.md
# Drive: 07. Finanzas y contabilidad/Reportes
# Tests Backend: pytest tests/contracts/mascotas/test_stats.py
# Tests Frontend: npx playwright test admin-reports.spec.ts
Feature: Reportes y dashboard
Como administrador o gerente
Quiero ver metricas y generar reportes
Para tomar decisiones informadas
Background:
Given que estoy logueado como administrador
And estoy en el backoffice
# ============================================
# DASHBOARD
# ============================================
Scenario: Ver dashboard principal
When accedo al dashboard
Then deberia ver metricas resumidas:
| metrica | periodo |
| Solicitudes nuevas | Hoy |
| Visitas completadas | Semana |
| Ingresos | Mes |
| Veterinarios activos | Actual |
| Tasa de conversion | Mes |
Scenario: Ver grafico de tendencia
When veo el grafico de solicitudes
Then deberia ver la evolucion de los ultimos 30 dias
And deberia poder comparar con periodo anterior
# ============================================
# REPORTE DE SOLICITUDES
# ============================================
Scenario: Generar reporte de solicitudes
When voy a "Reportes" -> "Solicitudes"
And selecciono periodo "Enero 2024"
And hago click en "Generar"
Then deberia ver tabla con solicitudes del periodo
And deberia ver totales por estado
Scenario: Filtrar reporte por multiples criterios
When genero reporte con filtros:
| filtro | valor |
| Periodo | Enero 2024 |
| Zona | Palermo |
| Veterinario | Dra. Garcia |
Then deberia ver solo solicitudes que cumplan todos los criterios
# ============================================
# REPORTE DE INGRESOS
# ============================================
Scenario: Ver ingresos por periodo
When voy a "Reportes" -> "Ingresos"
And selecciono "Ultimo trimestre"
Then deberia ver:
| dato |
| Ingresos totales |
| Cantidad de pagos |
| Ticket promedio |
| Reembolsos realizados |
| Ingreso neto |
Scenario: Ingresos agrupados por veterinario
When agrupo el reporte por "Veterinario"
Then deberia ver para cada vet:
| dato |
| Visitas completadas |
| Ingresos generados |
| Porcentaje del total |
# ============================================
# EXPORTACION
# ============================================
Scenario Outline: Exportar reporte en diferentes formatos
Given que tengo un reporte generado
When hago click en "Exportar"
And selecciono formato "<formato>"
Then deberia descargarse el archivo en formato <formato>
Examples:
| formato |
| CSV |
| Excel |
| PDF |
Scenario: Exportar reporte grande de forma asincrona
Given que genere un reporte con mas de 10000 registros
When hago click en "Exportar"
Then deberia ver mensaje "Generando exportacion..."
And deberia recibir notificacion cuando este listo

View File

@@ -0,0 +1,91 @@
# Fuente: album/book/ops-templates/pet-owner/01-registro.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/common/test_users.py
# Tests Frontend: npx playwright test auth.spec.ts
Feature: Registro de usuario
Como visitante de la plataforma
Quiero poder crear una cuenta
Para gestionar mis mascotas y reservar turnos
# ============================================
# CAMINO FELIZ
# ============================================
Scenario: Registro exitoso con datos validos
Given que estoy en la pagina de registro
When ingreso email "nuevo@ejemplo.com"
And ingreso contraseña "Password123"
And confirmo contraseña "Password123"
And acepto los terminos y condiciones
And hago click en "Crear cuenta"
Then deberia ver mensaje "Te enviamos un email de verificacion"
And deberia recibir email de verificacion
Scenario: Verificar email y activar cuenta
Given que me registre con email "nuevo@ejemplo.com"
And recibi el email de verificacion
When hago click en el link de verificacion
Then mi cuenta deberia estar activa
And deberia ser redirigido al dashboard
# ============================================
# VALIDACIONES
# ============================================
Scenario Outline: Registro con datos invalidos
Given que estoy en la pagina de registro
When ingreso email "<email>"
And ingreso contraseña "<password>"
And confirmo contraseña "<confirmacion>"
And hago click en "Crear cuenta"
Then deberia ver error "<mensaje_error>"
Examples:
| email | password | confirmacion | mensaje_error |
| invalido | Password123 | Password123 | Email invalido |
| test@test.com | 123 | 123 | Contraseña muy corta |
| test@test.com | password | password | Debe contener al menos un numero |
| test@test.com | Password123 | Diferente123 | Las contraseñas no coinciden |
Scenario: Registro con email ya existente
Given que existe un usuario con email "existente@ejemplo.com"
And estoy en la pagina de registro
When ingreso email "existente@ejemplo.com"
And completo el resto del formulario correctamente
And hago click en "Crear cuenta"
Then deberia ver error "Este email ya esta registrado"
And deberia ver link "Recuperar contraseña"
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Registro linkea con cuenta invitado existente
# Usuario que reservo turno como invitado y ahora quiere registrarse
Given que existe un usuario invitado con email "invitado@ejemplo.com"
And ese usuario tiene una mascota "Luna" registrada
And estoy en la pagina de registro
When me registro con email "invitado@ejemplo.com"
And verifico mi cuenta
Then deberia ver mi mascota "Luna" en el dashboard
And deberia ver mis turnos anteriores
Scenario: Registro desde flujo de turnero
# Usuario empezo a reservar turno y decide crear cuenta
Given que estoy en el paso final del turnero
And ingrese mis datos de contacto
When hago click en "Crear cuenta para guardar mis datos"
Then deberia ver formulario simplificado
And mi email ya deberia estar pre-llenado
And solo deberia ingresar contraseña
Scenario: Reenviar email de verificacion
Given que me registre pero no verifique mi cuenta
And estoy en la pagina de login
When intento iniciar sesion
Then deberia ver "Tu cuenta no esta verificada"
And deberia ver boton "Reenviar email"
When hago click en "Reenviar email"
Then deberia recibir nuevo email de verificacion

View File

@@ -0,0 +1,140 @@
# Fuente: album/book/ops-templates/pet-owner/02-reservar-turno.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/workflows/test_turnero_general.py
# Tests Frontend: npx playwright test turnero.spec.ts
# Relacionado: def/work_plan/10-flow-turnero.md
Feature: Reservar turno veterinario (Turnero)
Como dueno de mascota
Quiero reservar un turno veterinario a domicilio
Para que atiendan a mi mascota sin salir de casa
Background:
Given que estoy en la pagina del turnero
# ============================================
# VERIFICACION DE COBERTURA
# ============================================
Scenario: Verificar cobertura en zona disponible
When ingreso direccion "Av Santa Fe 1234, CABA"
Then deberia ver mensaje "Tenemos cobertura en tu zona"
And deberia poder continuar al siguiente paso
Scenario: Zona sin cobertura
When ingreso direccion "Calle Principal 100, Ushuaia"
Then deberia ver mensaje "Aun no tenemos cobertura en tu zona"
And deberia ver formulario "Avisame cuando lleguen"
# ============================================
# FLUJO COMPLETO POR TIPO DE USUARIO
# ============================================
Scenario Outline: Reservar turno como <tipo_usuario>
Given que soy un usuario <tipo_usuario>
And tengo cobertura en mi zona
When completo los datos de mi mascota:
| campo | valor |
| nombre | Luna |
| tipo | Gato |
| edad | 2 años |
| castrada | Si |
And selecciono servicios:
| servicio |
| Vacunacion |
And selecciono fechas preferidas:
| fecha | franja |
| 2024-01-15 | Mañana |
| 2024-01-16 | Tarde |
And completo datos de contacto con email "<email>"
And envio la solicitud
Then deberia crearse una solicitud en estado "Pendiente"
And el dueno deberia ser <estado_dueno>
And deberia recibir email de confirmacion
Examples:
| tipo_usuario | email | estado_dueno |
| invitado | nuevo@test.com | creado como invitado |
| registrado | user@test.com | mi cuenta existente |
| recurrente | conocido@test.com | identificado por email |
# ============================================
# SELECCION DE SERVICIOS
# ============================================
Scenario: Servicios filtrados por tipo de mascota
Given que agregue una mascota tipo "Gato"
When veo los servicios disponibles
Then deberia ver "Vacuna triple felina"
And deberia ver "Vacuna antirabica"
But no deberia ver "Vacuna sextuple canina"
Scenario: Consulta clinica se agrega automaticamente con vacunacion
Given que estoy seleccionando servicios
When selecciono "Vacunacion"
Then "Consulta clinica" deberia agregarse automaticamente
And deberia ver nota "Incluye revision general"
And no deberia poder quitar "Consulta clinica"
Scenario: Servicios combo con descuento
Given que estoy seleccionando servicios
When agrego los siguientes servicios:
| servicio |
| Vacunacion |
| Desparasitacion |
| Antipulgas |
Then deberia ver "Plan preventivo completo"
And el total deberia incluir descuento de combo
Scenario: Castracion no disponible para mascota castrada
Given que mi mascota esta marcada como castrada
When veo los servicios disponibles
Then no deberia ver "Castracion"
# ============================================
# DATOS DE CONTACTO Y CUENTA
# ============================================
Scenario: Pre-llenado de datos para usuario logueado
Given que estoy logueado como "maria@ejemplo.com"
And tengo registrada mascota "Firulais"
When inicio el flujo de turnero
Then mi direccion deberia estar pre-llenada
And deberia poder seleccionar "Firulais" de mis mascotas
And mis datos de contacto ya deberian estar completos
Scenario: Detectar usuario existente por email
Given que soy usuario invitado
And existe una cuenta con email "existente@ejemplo.com"
When ingreso email "existente@ejemplo.com" en datos de contacto
Then deberia ver "Ya tenes cuenta con este email"
And deberia ver opciones:
| opcion |
| Iniciar sesion |
| Continuar como invitado |
# ============================================
# EDGE CASES
# ============================================
Scenario: Usuario abandona flujo a mitad
Given que complete los datos de mascota
And cerre el navegador sin enviar
When vuelvo a la pagina del turnero
Then deberia poder recuperar mi progreso
# Nota: datos guardados en localStorage o session
Scenario: Multiples mascotas en una solicitud
Given que quiero atender a 2 mascotas
When agrego mascota "Luna" tipo "Gato"
And agrego mascota "Rocky" tipo "Perro"
And selecciono servicios para cada una
Then deberia crearse una solicitud con 2 mascotas
And el precio deberia reflejar ambas
Scenario: Franja horaria especifica
Given que solo puedo por la mañana
When selecciono franja "Mañana (9-12hs)"
Then la solicitud deberia registrar esa preferencia
# Nota: Es preferencia, no garantia

View File

@@ -0,0 +1,153 @@
# Fuente: album/book/ops-templates/pet-owner/03-gestion-mascotas.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_pets.py
# Tests Frontend: npx playwright test pets.spec.ts
Feature: Gestion de mascotas
Como dueno de mascota registrado
Quiero gestionar la informacion de mis mascotas
Para tenerla actualizada y acceder a su historial medico
Background:
Given que estoy logueado como dueno de mascota
And estoy en la seccion "Mis mascotas"
# ============================================
# AGREGAR MASCOTA
# ============================================
Scenario: Agregar mascota con datos minimos
When hago click en "Agregar mascota"
And completo el formulario:
| campo | valor |
| nombre | Luna |
| tipo | Gato |
And hago click en "Guardar"
Then deberia ver "Luna" en mi lista de mascotas
And Luna deberia aparecer disponible en el turnero
Scenario: Agregar mascota con datos completos
When hago click en "Agregar mascota"
And completo el formulario:
| campo | valor |
| nombre | Rocky |
| tipo | Perro |
| raza | Labrador |
| fecha_nacimiento | 2020-03-15 |
| peso | 25 |
| sexo | Macho |
| castrado | Si |
And subo una foto de Rocky
And hago click en "Guardar"
Then deberia ver "Rocky" con su foto en mi lista
And deberia ver badge "Castrado"
Scenario Outline: Validacion de datos de mascota
When intento agregar mascota con <campo> igual a "<valor>"
Then deberia ver error "<mensaje>"
Examples:
| campo | valor | mensaje |
| nombre | | El nombre es obligatorio |
| nombre | A | Nombre muy corto |
| tipo | | Selecciona el tipo |
| peso | -5 | El peso debe ser positivo |
| peso | 500 | Peso fuera de rango |
# ============================================
# EDITAR MASCOTA
# ============================================
Scenario: Editar peso de mascota
Given que tengo una mascota "Luna" con peso 4kg
When edito a Luna
And cambio el peso a 5kg
And guardo los cambios
Then Luna deberia mostrar peso "5 kg"
Scenario: Marcar mascota como castrada
Given que tengo una mascota "Rocky" no castrado
When edito a Rocky
And marco "Esta castrado"
And guardo los cambios
Then Rocky deberia mostrar badge "Castrado"
And el servicio "Castracion" no deberia aparecer para Rocky en el turnero
Scenario: Actualizar foto de mascota
Given que tengo una mascota "Luna" sin foto
When edito a Luna
And subo una nueva foto
And guardo los cambios
Then deberia ver la foto de Luna en su tarjeta
# ============================================
# ELIMINAR MASCOTA
# ============================================
Scenario: Eliminar mascota sin historial
Given que tengo una mascota "Nuevo" sin visitas
When hago click en "Eliminar" para Nuevo
And confirmo la eliminacion
Then Nuevo no deberia aparecer en mi lista
# Nota: Es soft delete
Scenario: Eliminar mascota con historial medico
Given que tengo una mascota "Luna" con visitas anteriores
When hago click en "Eliminar" para Luna
Then deberia ver advertencia "Luna tiene historial medico"
And deberia ver "El historial se conservara pero no podras verlo"
When confirmo la eliminacion
Then Luna no deberia aparecer en mi lista
Scenario: No puedo eliminar mascota con turno pendiente
Given que tengo una mascota "Rocky" con turno pendiente
When intento eliminar a Rocky
Then deberia ver error "Rocky tiene turnos pendientes"
And deberia ver sugerencia "Cancela los turnos primero"
# ============================================
# VER HISTORIAL MEDICO
# ============================================
Scenario: Ver historial de visitas de mascota
Given que tengo una mascota "Luna" con 3 visitas completadas
When hago click en Luna
And voy a la seccion "Historial"
Then deberia ver 3 visitas listadas
And deberian estar ordenadas por fecha descendente
Scenario: Ver detalle de visita
Given que tengo una mascota "Luna" con visitas
When veo el historial de Luna
And hago click en la primera visita
Then deberia ver:
| campo |
| Fecha |
| Veterinario |
| Diagnostico |
| Tratamiento |
| Medicamentos |
Scenario: Mascota sin historial
Given que tengo una mascota "Nuevo" recien agregada
When veo el perfil de Nuevo
Then la seccion "Historial" deberia estar vacia
And deberia ver mensaje "Aun no hay visitas registradas"
And deberia ver boton "Reservar primer turno"
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Mascota heredada de cuenta invitado
Given que me registre con email "juan@test.com"
And previamente reserve turno como invitado para "Firulais"
When voy a "Mis mascotas"
Then deberia ver "Firulais" en mi lista
And deberia ver su historial de visitas previas
Scenario: Razas filtradas por tipo
When agrego una mascota tipo "Gato"
Then las razas disponibles deberian ser razas de gato
And no deberia ver razas de perro como "Labrador"

View File

@@ -0,0 +1,140 @@
# Fuente: album/book/ops-templates/pet-owner/04-pago-turno.md
# Drive: 07. Finanzas y contabilidad/Mercado Pago
# Tests Backend: pytest tests/contracts/payments/test_mercadopago.py
# Tests Frontend: npx playwright test payment.spec.ts
Feature: Pago de turno
Como dueno de mascota con turno coordinado
Quiero pagar mi turno online
Para confirmar la visita del veterinario
Background:
Given que tengo un turno en estado "Coordinado"
And el turno tiene asignado veterinario "Dra. Garcia"
And la fecha asignada es "15 de enero a las 10:00"
# ============================================
# FLUJO DE PAGO EXITOSO
# ============================================
Scenario: Pagar turno con tarjeta de credito
Given que estoy en el detalle de mi turno coordinado
When hago click en "Pagar"
Then deberia ser redirigido a Mercado Pago
And deberia ver el monto correcto
When selecciono "Tarjeta de credito"
And completo los datos de la tarjeta
And confirmo el pago
Then deberia volver a la plataforma
And deberia ver "Pago exitoso"
And el turno deberia estar en estado "Pagado"
Scenario: Recibir confirmacion de pago
Given que complete el pago exitosamente
Then deberia recibir email de confirmacion
And el email deberia contener:
| campo |
| Fecha del turno |
| Direccion |
| Veterinario asignado |
| Monto pagado |
| Numero de operacion |
# ============================================
# METODOS DE PAGO
# ============================================
Scenario Outline: Pagar con diferentes metodos
Given que estoy en Mercado Pago
When selecciono metodo "<metodo>"
And completo el pago
Then el pago deberia ser <resultado>
And el estado de acreditacion deberia ser "<acreditacion>"
Examples:
| metodo | resultado | acreditacion |
| Tarjeta credito | exitoso | inmediata |
| Tarjeta debito | exitoso | inmediata |
| Dinero en cuenta | exitoso | inmediata |
| Transferencia | pendiente | 1-2 dias |
| Rapipago | pendiente | hasta 24hs |
# ============================================
# MANEJO DE ERRORES
# ============================================
Scenario: Pago rechazado por fondos insuficientes
Given que estoy en Mercado Pago
When intento pagar con tarjeta sin fondos
Then deberia ver error "Fondos insuficientes"
And deberia poder reintentar con otra tarjeta
And el turno deberia seguir en estado "Coordinado"
Scenario: Usuario cancela el pago
Given que estoy en Mercado Pago
When hago click en "Volver al sitio"
Then deberia volver a la plataforma
And deberia ver mensaje "El pago fue cancelado"
And deberia ver boton "Reintentar pago"
And el turno deberia seguir en estado "Coordinado"
Scenario: Cierre de browser durante pago
Given que estoy en Mercado Pago
And cierro el navegador accidentalmente
When vuelvo a la plataforma
And voy a "Mis turnos"
Then deberia poder ver el estado real del pago
# Si se proceso: Pagado. Si no: Coordinado con opcion de pagar
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Link de pago expirado
Given que recibi el link de pago hace mas de 24 horas
When hago click en el link
Then deberia ver "Este link ha expirado"
And deberia ver "Contacta a soporte para generar uno nuevo"
Scenario: Intento pagar turno ya pagado
Given que mi turno ya esta en estado "Pagado"
When accedo al link de pago
Then deberia ver "Este turno ya fue pagado"
And deberia ver boton "Ver detalle del turno"
Scenario: Precio cambio desde la coordinacion
# Caso muy raro pero posible
Given que el precio del servicio aumento desde que se coordino
When voy a pagar
Then deberia ver el precio original acordado
# El precio se congela al momento de coordinacion
# ============================================
# INTEGRACION CON WEBHOOK
# ============================================
Rule: El estado del turno se actualiza via webhook de Mercado Pago
Scenario: Webhook confirma pago aprobado
Given que el usuario completo el pago en Mercado Pago
When Mercado Pago envia webhook con status "approved"
Then el turno deberia cambiar a estado "Pagado"
And el veterinario deberia recibir notificacion
And el usuario deberia recibir email de confirmacion
Scenario: Webhook informa pago pendiente
Given que el usuario pago con transferencia bancaria
When Mercado Pago envia webhook con status "pending"
Then el turno deberia quedarse en "Coordinado"
And deberia registrarse el pago pendiente
And el usuario deberia recibir email "Esperando acreditacion"
Scenario: Webhook falla pero pago se proceso
# Caso de error que requiere intervencion manual
Given que el usuario pago exitosamente
But el webhook fallo por error de red
Then el turno seguira en "Coordinado"
And el equipo de ops deberia recibir alerta
And deberian poder actualizar manualmente

View File

@@ -0,0 +1,147 @@
# Fuente: album/book/ops-templates/pet-owner/05-historial-medico.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_visits.py
# Tests Frontend: npx playwright test medical-history.spec.ts
Feature: Ver historial medico
Como dueno de mascota
Quiero ver el historial medico de mis mascotas
Para tener registro de sus visitas y tratamientos
Background:
Given que estoy logueado como dueno de mascota
And tengo una mascota "Luna" con visitas completadas
# ============================================
# ACCESO AL HISTORIAL
# ============================================
Scenario: Acceder al historial desde mascotas
Given que estoy en "Mis mascotas"
When hago click en "Luna"
And voy a la seccion "Historial de visitas"
Then deberia ver lista de visitas de Luna
Scenario: Acceder al historial desde turnos
Given que estoy en "Mis turnos"
And filtro por "Completados"
When hago click en un turno de Luna
And hago click en "Ver informe medico"
Then deberia ver el informe de esa visita
# ============================================
# VISUALIZACION DE VISITAS
# ============================================
Scenario: Ver lista de visitas ordenadas
Given que Luna tiene visitas en las siguientes fechas:
| fecha |
| 2024-01-15 |
| 2023-11-20 |
| 2023-06-10 |
When veo el historial de Luna
Then deberia ver las visitas ordenadas de mas reciente a mas antigua
And la primera deberia ser del "15 de enero 2024"
Scenario: Ver detalle completo de informe
When hago click en una visita completada
Then deberia ver los siguientes datos:
| seccion | contenido |
| Informacion | Fecha, veterinario, servicios |
| Examen fisico | Peso, temperatura, FC, obs |
| Diagnostico | Descripcion del diagnostico |
| Tratamiento | Plan de tratamiento |
| Medicamentos | Lista con dosis y frecuencia |
| Estudios | Estudios solicitados y estado |
| Seguimiento | Recomendaciones, proximo control |
Scenario: Ver informe con medicamentos recetados
Given que la visita incluye medicamentos:
"""
1. Amoxicilina 250mg - 1 comprimido cada 12hs por 7 dias
2. Meloxicam 1.5mg - 1 comprimido por dia por 3 dias
"""
When veo el informe
Then deberia ver la lista de medicamentos
And cada medicamento deberia mostrar:
| campo |
| Nombre |
| Dosis |
| Frecuencia |
| Duracion |
# ============================================
# DESCARGA Y COMPARTIR
# ============================================
Scenario: Descargar informe como PDF
Given que estoy viendo un informe medico
When hago click en "Descargar PDF"
Then deberia descargarse un archivo PDF
And el PDF deberia contener toda la informacion del informe
And deberia tener el logo de Amar Mascotas
Scenario: Imprimir informe
Given que estoy viendo un informe medico
When hago click en "Imprimir"
Then deberia abrirse el dialogo de impresion
And el formato deberia ser optimizado para impresion
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Visita completada sin informe cargado
# El vet no cargo el informe todavia
Given que Luna tiene una visita marcada como "Completada"
But el veterinario no cargo el informe aun
When intento ver el informe
Then deberia ver mensaje "Informe pendiente"
And deberia ver "El veterinario esta completando el informe"
Scenario: Informe con estudios pendientes
Given que el informe solicita estudios de laboratorio
And los resultados aun no estan disponibles
When veo el informe
Then deberia ver seccion "Estudios solicitados"
And deberia ver estado "Pendiente de resultados"
And deberia ver nota "Se notificara cuando esten listos"
Scenario: Mascota con multiples visitas el mismo dia
# Raro pero posible: consulta de urgencia + seguimiento
Given que Luna tuvo 2 visitas el 15 de enero
When veo el historial
Then deberia ver ambas visitas listadas
And deberian estar diferenciadas por hora
# ============================================
# PERMISOS Y PRIVACIDAD
# ============================================
Rule: Solo el dueno puede ver el historial de su mascota
Scenario: Dueno ve historial de su mascota
Given que soy dueno de Luna
When accedo al historial de Luna
Then deberia poder verlo completo
Scenario: No puedo ver historial de mascota ajena
Given que existe mascota "Rocky" de otro dueno
When intento acceder al historial de Rocky
Then deberia ver error "No tienes acceso"
# 403 Forbidden
# ============================================
# BUSQUEDA Y FILTROS
# ============================================
Scenario: Filtrar historial por tipo de servicio
Given que Luna tiene visitas de vacunacion y consulta
When filtro por "Vacunacion"
Then solo deberia ver visitas de vacunacion
Scenario: Buscar en historial por fecha
When busco visitas del "2023"
Then solo deberia ver visitas del 2023
And no deberia ver visitas del 2024

View File

@@ -0,0 +1,109 @@
# Fuente: album/book/ops-templates/veterinarian/01-aceptar-solicitud.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/solicitudes/test_service_requests.py
# Tests Frontend: npx playwright test vet-requests.spec.ts
Feature: Aceptar o rechazar solicitudes de servicio
Como veterinario de la plataforma
Quiero revisar y responder a solicitudes en mi zona
Para gestionar mi agenda de visitas a domicilio
Background:
Given que estoy logueado como veterinario
And tengo cobertura en los barrios "Palermo" y "Recoleta"
And estoy en el dashboard de veterinario
# ============================================
# VER SOLICITUDES PENDIENTES
# ============================================
Scenario: Ver lista de solicitudes en mi zona
When veo la seccion "Solicitudes pendientes"
Then deberia ver solo solicitudes de "Palermo" y "Recoleta"
And no deberia ver solicitudes de otros barrios
Scenario: Ver detalle de solicitud
Given que hay una solicitud pendiente
When hago click en la solicitud
Then deberia ver:
| seccion | contenido |
| Dueno | Nombre, telefono, direccion |
| Mascota | Nombre, tipo, edad, foto |
| Servicios | Lista de servicios solicitados |
| Fechas | Fechas preferidas por el dueno |
| Historial | Visitas anteriores si las hay |
# ============================================
# ACEPTAR SOLICITUD
# ============================================
Scenario: Aceptar solicitud con fecha disponible
Given que hay una solicitud para el barrio "Palermo"
And el dueno prefiere fechas:
| fecha | franja |
| 2024-01-15 | Mañana |
| 2024-01-16 | Tarde |
And tengo disponibilidad el 15 de enero a las 10:00
When hago click en "Aceptar"
And selecciono fecha "15 de enero" hora "10:00"
And confirmo la aceptacion
Then la solicitud deberia pasar a estado "Coordinado"
And deberia quedar asignada a mi
And el dueno deberia recibir notificacion con mis datos
And la visita deberia aparecer en mi agenda
Scenario: Aceptar solicitud con datos de mascota que ya atendi
Given que hay una solicitud para mascota "Luna"
And yo atendi a "Luna" anteriormente
When veo el detalle de la solicitud
Then deberia ver badge "Paciente recurrente"
And deberia ver el historial de mis visitas anteriores a Luna
# ============================================
# RECHAZAR SOLICITUD
# ============================================
Scenario Outline: Rechazar solicitud con motivo
Given que hay una solicitud pendiente
When hago click en "Rechazar"
And selecciono motivo "<motivo>"
And confirmo el rechazo
Then la solicitud deberia desaparecer de mi lista
And deberia seguir visible para otros veterinarios
Examples:
| motivo |
| No tengo disponibilidad |
| Fuera de mi zona |
| No realizo este servicio |
| Otro |
# ============================================
# RACE CONDITIONS
# ============================================
Rule: Solo un veterinario puede aceptar cada solicitud
Scenario: Otro vet acepta mientras estoy viendo
Given que estoy viendo el detalle de una solicitud
And otro veterinario acepta la misma solicitud
When intento aceptarla
Then deberia ver error "Esta solicitud ya fue aceptada"
And deberia ser redirigido al listado
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Solicitud urgente destacada
Given que hay una solicitud marcada como "Urgente"
When veo el listado de solicitudes
Then deberia ver la solicitud con indicador de urgencia
And deberia aparecer primero en la lista
Scenario: No puedo aceptar con agenda completa
Given que tengo mi agenda completa para las fechas de la solicitud
When intento aceptar la solicitud
Then deberia ver advertencia "No tienes disponibilidad en las fechas preferidas"
And deberia poder proponer una fecha alternativa

View File

@@ -0,0 +1,99 @@
# Fuente: album/book/ops-templates/veterinarian/02-gestion-agenda.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_availability.py
# Tests Frontend: npx playwright test vet-schedule.spec.ts
Feature: Gestion de agenda veterinaria
Como veterinario
Quiero gestionar mi calendario y disponibilidad
Para organizar mis visitas a domicilio eficientemente
Background:
Given que estoy logueado como veterinario
And estoy en la seccion "Mi agenda"
# ============================================
# VER AGENDA
# ============================================
Scenario: Ver calendario semanal
When veo mi agenda en vista semanal
Then deberia ver los 7 dias de la semana
And deberia ver mis visitas programadas
And cada visita deberia mostrar hora y nombre del paciente
Scenario: Ver visitas con codigo de color por estado
Given que tengo visitas en diferentes estados
When veo mi agenda
Then las visitas deberian mostrarse con colores:
| estado | color |
| Coordinado | amarillo |
| Pagado | verde |
| En progreso | azul |
| Completado | gris |
# ============================================
# CONFIGURAR DISPONIBILIDAD SEMANAL
# ============================================
Scenario: Configurar horario laboral
When voy a "Configuracion" -> "Mi disponibilidad"
And configuro mi horario:
| dia | trabajo | desde | hasta | pausa_desde | pausa_hasta |
| Lunes | Si | 09:00 | 18:00 | 13:00 | 14:00 |
| Martes | Si | 09:00 | 18:00 | 13:00 | 14:00 |
| Miercoles | Si | 09:00 | 18:00 | 13:00 | 14:00 |
| Jueves | Si | 09:00 | 18:00 | 13:00 | 14:00 |
| Viernes | Si | 09:00 | 15:00 | | |
| Sabado | No | | | | |
| Domingo | No | | | | |
And guardo la configuracion
Then mi disponibilidad deberia actualizarse
And no deberia recibir solicitudes fuera de ese horario
# ============================================
# BLOQUEAR DIAS ESPECIFICOS
# ============================================
Scenario: Marcar dia como no disponible
Given que necesito el 20 de enero libre
When hago click en el dia 20 de enero en el calendario
And selecciono "Marcar como no disponible"
And ingreso motivo "Vacaciones"
And confirmo
Then el dia 20 deberia mostrarse como bloqueado
And no deberia poder aceptar solicitudes para ese dia
Scenario: Bloquear rango de fechas
Given que tomo vacaciones del 15 al 22 de enero
When voy a "Agregar indisponibilidad"
And selecciono fecha inicio "15 de enero"
And selecciono fecha fin "22 de enero"
And ingreso motivo "Vacaciones"
And confirmo
Then todos esos dias deberian mostrarse como bloqueados
# ============================================
# IMPACTO EN SOLICITUDES
# ============================================
Rule: Los bloqueos no afectan visitas ya aceptadas
Scenario: Bloquear dia con visita ya aceptada
Given que tengo una visita aceptada para el 15 de enero
When intento bloquear el 15 de enero
Then deberia ver advertencia "Tienes una visita programada ese dia"
And deberia poder elegir:
| opcion |
| Cancelar el bloqueo |
| Bloquear y contactar al dueno |
Rule: Cambios de disponibilidad solo afectan solicitudes futuras
Scenario: Cambiar horario no afecta visitas existentes
Given que tengo una visita a las 17:00 el lunes
When cambio mi horario del lunes para terminar a las 16:00
And guardo los cambios
Then la visita de las 17:00 deberia mantenerse
And deberia ver advertencia sobre la inconsistencia

View File

@@ -0,0 +1,127 @@
# Fuente: album/book/ops-templates/veterinarian/03-realizar-visita.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_visits.py
# Tests Frontend: npx playwright test vet-visit.spec.ts
Feature: Realizar visita y crear informe medico
Como veterinario
Quiero registrar la atencion medica de mis visitas
Para mantener el historial clinico del paciente
Background:
Given que estoy logueado como veterinario
And tengo una visita programada para hoy con mascota "Luna"
And la visita esta en estado "Pagado"
# ============================================
# INICIAR VISITA
# ============================================
Scenario: Ver informacion antes de la visita
When accedo al detalle de la visita
Then deberia ver la direccion para llegar
And deberia ver el telefono del dueno para confirmar
And deberia ver los servicios a realizar
And deberia ver el historial previo de Luna
Scenario: Iniciar visita al llegar
Given que llegue al domicilio
When hago click en "Iniciar visita"
Then el estado deberia cambiar a "En progreso"
And deberia registrarse la hora de inicio
And deberia habilitarse el boton "Crear informe"
# ============================================
# CREAR INFORME MEDICO
# ============================================
Scenario: Completar informe con examen fisico
Given que la visita esta en progreso
When voy a "Crear informe"
And completo el examen fisico:
| campo | valor |
| Peso | 4.5 kg |
| Temperatura | 38.5 °C |
| Frecuencia cardiaca | 120 lpm |
| Frecuencia resp | 25 rpm |
| Mucosas | Rosadas |
| Hidratacion | Normal |
And guardo el informe
Then el examen fisico deberia guardarse
Scenario: Agregar diagnostico y tratamiento
Given que complete el examen fisico
When agrego el diagnostico:
"""
Otitis externa bilateral leve.
Paciente presenta prurito y secrecion ceruminosa.
Sin signos de infeccion secundaria.
"""
And agrego el tratamiento:
"""
Limpieza de oidos con solucion fisiologica.
Aplicacion de gotas oticas antibioticas.
Control en 7 dias.
"""
And guardo el informe
Then el diagnostico y tratamiento deberian guardarse
Scenario: Recetar medicamentos
Given que estoy creando el informe
When agrego medicamentos:
| nombre | dosis | frecuencia | duracion |
| Otomax gotas | 5 gotas | cada 12 horas | 7 dias |
| Meloxicam 1.5mg | 1 comp | cada 24 horas | 3 dias |
And guardo el informe
Then los medicamentos deberian aparecer en el informe
And el dueno podra verlos desde su cuenta
# ============================================
# COMPLETAR VISITA
# ============================================
Scenario: Completar visita con informe
Given que el informe esta completo
When hago click en "Completar visita"
And confirmo la finalizacion
Then la visita deberia pasar a estado "Completado"
And deberia generarse factura electronica (AFIP)
And el dueno deberia recibir notificacion
And el informe deberia ser visible para el dueno
Scenario: No puedo completar sin informe
Given que la visita esta en progreso
But no cree ningun informe
When intento completar la visita
Then deberia ver error "Debes crear el informe antes de completar"
# ============================================
# GUARDADO AUTOMATICO
# ============================================
Rule: El informe se guarda automaticamente
Scenario: Guardado automatico cada 30 segundos
Given que estoy escribiendo el informe
When pasan 30 segundos
Then deberia ver indicador "Guardado automaticamente"
Scenario: Recuperar informe despues de desconexion
Given que estaba escribiendo el informe
And perdi conexion a internet
When recupero la conexion
Then deberia recuperar mi progreso
And no deberia perder lo que escribi
# ============================================
# CASOS ESPECIALES
# ============================================
Scenario: Cancelar visita in situ
Given que llegue al domicilio
But el dueno no esta
When marco la visita como "Cancelada in situ"
And selecciono motivo "Dueno ausente"
Then la visita deberia marcarse como cancelada
And deberia generarse cargo por visita fallida

View File

@@ -0,0 +1,83 @@
# Fuente: album/book/ops-templates/veterinarian/04-zonas-cobertura.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_veterinarians.py
# Tests Frontend: npx playwright test vet-coverage.spec.ts
Feature: Gestionar zonas de cobertura
Como veterinario
Quiero definir en que zonas atiendo
Para recibir solo solicitudes que puedo cubrir
Background:
Given que estoy logueado como veterinario
And estoy en la seccion "Mi cobertura"
# ============================================
# VER ZONAS ACTUALES
# ============================================
Scenario: Ver mapa con mis zonas de cobertura
When cargo la pagina de cobertura
Then deberia ver un mapa de la ciudad
And mis zonas cubiertas deberian estar resaltadas
And deberia ver un listado de barrios seleccionados
Scenario: Ver estadisticas por zona
Given que tengo cobertura en "Palermo" y "Recoleta"
When veo el detalle de mis zonas
Then deberia ver para cada zona:
| metrica |
| Solicitudes este mes |
| Visitas completadas |
| Otros vets en la zona |
# ============================================
# AGREGAR ZONAS
# ============================================
Scenario: Agregar barrio desde el mapa
Given que no tengo cobertura en "Belgrano"
When hago click en "Belgrano" en el mapa
And confirmo agregar la zona
Then "Belgrano" deberia aparecer en mi lista de zonas
And deberia empezar a ver solicitudes de Belgrano
Scenario: Agregar multiples zonas a la vez
When selecciono los barrios:
| barrio |
| Colegiales |
| Chacarita |
| Villa Crespo |
And hago click en "Agregar seleccionados"
Then los 3 barrios deberian agregarse a mi cobertura
# ============================================
# QUITAR ZONAS
# ============================================
Scenario: Quitar zona de cobertura
Given que tengo cobertura en "Recoleta"
When hago click en "X" junto a "Recoleta"
And confirmo quitar la zona
Then "Recoleta" no deberia estar en mi lista
And no deberia ver nuevas solicitudes de Recoleta
# ============================================
# IMPACTO EN SOLICITUDES
# ============================================
Rule: Los cambios de zona afectan solo solicitudes nuevas
Scenario: Agregar zona muestra solicitudes existentes
Given que no tengo cobertura en "Belgrano"
And hay 3 solicitudes pendientes en Belgrano
When agrego "Belgrano" a mi cobertura
Then deberia ver las 3 solicitudes pendientes de Belgrano
Scenario: Quitar zona no afecta visitas aceptadas
Given que tengo cobertura en "Recoleta"
And tengo una visita aceptada en Recoleta para mañana
When quito "Recoleta" de mi cobertura
Then la visita de mañana deberia mantenerse
But no deberia ver nuevas solicitudes de Recoleta

View File

@@ -0,0 +1,100 @@
# Fuente: album/book/ops-templates/veterinarian/05-historial-pacientes.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_visits.py
# Tests Frontend: npx playwright test vet-history.spec.ts
Feature: Ver historial de pacientes
Como veterinario
Quiero acceder al historial medico de pacientes
Para tener contexto clinico en mis atenciones
Background:
Given que estoy logueado como veterinario
And estoy en la seccion "Historia clinica"
# ============================================
# BUSCAR PACIENTES
# ============================================
Scenario Outline: Buscar paciente por diferentes criterios
When busco por <criterio> con valor "<valor>"
Then deberia ver resultados que coincidan
Examples:
| criterio | valor |
| nombre dueno | Maria Garcia |
| nombre mascota | Luna |
| telefono | 1155551234 |
| email | maria@ejemplo.com |
Scenario: Busqueda sin resultados
When busco "ZZZZZ paciente inexistente"
Then deberia ver mensaje "No se encontraron resultados"
And deberia ver sugerencia "Verifica la ortografia"
# ============================================
# VER FICHA DE MASCOTA
# ============================================
Scenario: Ver ficha completa de mascota
Given que encontre a la mascota "Luna"
When hago click en Luna
Then deberia ver la ficha con:
| seccion | contenido |
| Datos basicos | Nombre, tipo, raza, edad, peso |
| Foto | Foto de la mascota |
| Dueno | Nombre y contacto del dueno |
| Vacunacion | Estado de vacunas |
| Historial | Lista de visitas |
# ============================================
# VER HISTORIAL DE VISITAS
# ============================================
Scenario: Ver listado de visitas
Given que estoy viendo la ficha de "Luna"
And Luna tiene 5 visitas completadas
When veo la seccion "Historial de visitas"
Then deberia ver las 5 visitas listadas
And deberian estar ordenadas de mas reciente a mas antigua
Scenario: Ver informe de visita de otro veterinario
Given que Luna fue atendida por "Dra. Rodriguez"
And yo no la atendi en esa visita
When hago click en esa visita
Then deberia poder ver el informe completo
# Para continuidad de atencion
# ============================================
# FILTROS Y NAVEGACION
# ============================================
Scenario: Filtrar historial por tipo de servicio
Given que estoy viendo el historial de "Luna"
When filtro por servicio "Vacunacion"
Then solo deberia ver visitas de vacunacion
Scenario: Filtrar por mis atenciones
Given que estoy viendo el historial de "Luna"
And Luna fue atendida por varios veterinarios
When marco "Solo mis atenciones"
Then solo deberia ver las visitas que yo realice
# ============================================
# PERMISOS
# ============================================
Rule: Veterinarios pueden ver historial de pacientes que atendieron
Scenario: Puedo ver historial de paciente que atendi
Given que yo atendi a "Luna" al menos una vez
When busco a Luna
Then deberia poder ver su historial completo
Scenario: Puedo ver historial de paciente con solicitud pendiente
Given que hay una solicitud pendiente para "Rocky"
And la solicitud esta en mi zona
When busco a Rocky
Then deberia poder ver su historial
# Para evaluar si acepto la solicitud