major restructure

This commit is contained in:
buenosairesam
2026-01-20 05:31:26 -03:00
parent 27b32deba4
commit e4052374db
328 changed files with 1018 additions and 10018 deletions

View File

@@ -0,0 +1,158 @@
# language: es
# 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
Característica: Gestion de solicitudes de servicio
Como administrador del backoffice
Quiero gestionar todas las solicitudes del sistema
Para asegurar que se atiendan correctamente
Antecedentes:
Dado que estoy logueado como administrador
Y estoy en la seccion "Solicitudes" del backoffice
# ============================================
# VER Y FILTRAR SOLICITUDES
# ============================================
Escenario: Ver listado de todas las solicitudes
Cuando cargo la pagina de solicitudes
Entonces deberia ver un listado paginado
Y cada solicitud deberia mostrar:
| campo |
| ID |
| Dueno |
| Mascota |
| Servicios |
| Estado |
| Fecha |
Esquema del escenario: Filtrar solicitudes por estado
Cuando filtro por estado "<estado>"
Entonces solo deberia ver solicitudes con estado "<estado>"
Ejemplos:
| estado |
| Pendiente |
| Coordinado |
| Pagado |
| Completado |
| Cancelado |
Escenario: Buscar solicitud especifica
Cuando busco por email "maria@ejemplo.com"
Entonces deberia ver solo solicitudes de ese dueno
Escenario: Filtrar por rango de fechas
Cuando filtro desde "01/01/2024" hasta "31/01/2024"
Entonces solo deberia ver solicitudes de enero 2024
# ============================================
# ASIGNAR VETERINARIO MANUALMENTE
# ============================================
Escenario: Asignar veterinario a solicitud pendiente
Dado que hay una solicitud pendiente en "Palermo"
Y no fue aceptada por ningun veterinario
Cuando abro el detalle de la solicitud
Y hago click en "Asignar veterinario"
Entonces deberia ver lista de veterinarios con cobertura en Palermo
Cuando selecciono "Dra. Garcia"
Y selecciono fecha "15 de enero" hora "10:00"
Y confirmo la asignacion
Entonces la solicitud deberia pasar a estado "Coordinado"
Y deberia estar asignada a Dra. Garcia
Y el dueno deberia recibir notificacion
Y el veterinario deberia recibir notificacion
Escenario: Ver disponibilidad de veterinarios antes de asignar
Dado que estoy asignando un veterinario
Cuando veo la lista de veterinarios disponibles
Entonces deberia ver para cada uno:
| informacion |
| Nombre |
| Disponibilidad |
| Visitas del dia |
| Distancia a destino |
# ============================================
# CAMBIAR ESTADO MANUALMENTE
# ============================================
Escenario: Cambiar estado de solicitud
Dado que hay una solicitud en estado "Coordinado"
Y el pago se proceso pero el webhook fallo
Cuando abro la solicitud
Y hago click en "Cambiar estado"
Y selecciono "Pagado"
Y ingreso motivo "Pago confirmado manualmente - ID MP: 12345"
Y confirmo el cambio
Entonces la solicitud deberia pasar a "Pagado"
Y el cambio deberia registrarse en el historial
Y deberia quedar mi usuario como responsable del cambio
Regla: Solo ciertos cambios de estado son validos
Escenario: No puedo volver a estado anterior
Dado que hay una solicitud en estado "Completado"
Cuando intento cambiar el estado a "Pagado"
Entonces deberia ver error "No se puede volver a un estado anterior"
Escenario: Puedo cancelar desde cualquier estado
Dado que hay una solicitud en estado "Coordinado"
Cuando cambio el estado a "Cancelado"
Y ingreso motivo de cancelacion
Entonces la solicitud deberia cancelarse
# ============================================
# VER DETALLE COMPLETO
# ============================================
Escenario: Ver historial de cambios de una solicitud
Dado que hay una solicitud con varios cambios de estado
Cuando abro el detalle de la solicitud
Y voy a la pestaña "Historial"
Entonces deberia ver todos los cambios con:
| campo |
| Fecha y hora |
| Estado anterior |
| Estado nuevo |
| Usuario |
| Motivo |
Escenario: Ver informacion de pago
Dado que hay una solicitud pagada
Cuando abro el detalle
Entonces deberia ver seccion "Pago" con:
| campo |
| Monto |
| Fecha de pago |
| Metodo |
| ID operacion MP |
| Estado del pago |
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Reasignar veterinario
Dado que hay una solicitud asignada a "Dr. Lopez"
Y Dr. Lopez no puede asistir
Cuando abro la solicitud
Y hago click en "Reasignar"
Y selecciono otro veterinario
Y confirmo
Entonces Dr. Lopez deberia ser notificado de la desasignacion
Y el nuevo vet deberia ser notificado
Y el dueno deberia ser notificado del cambio
Escenario: Solicitud sin veterinarios disponibles
Dado que hay una solicitud pendiente en una zona remota
Y no hay veterinarios con cobertura en esa zona
Cuando intento asignar veterinario
Entonces deberia ver mensaje "No hay veterinarios disponibles"
Y deberia poder expandir la busqueda a zonas cercanas

View File

@@ -0,0 +1,131 @@
# language: es
# 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
Característica: Gestion de usuarios
Como administrador del backoffice
Quiero gestionar duenos y veterinarios
Para mantener la base de usuarios actualizada
Antecedentes:
Dado que estoy logueado como administrador
Y estoy en el backoffice
# ============================================
# GESTION DE DUENOS
# ============================================
Escenario: Buscar dueno de mascota
Dado que estoy en la seccion "Duenos"
Cuando busco "maria@ejemplo.com"
Entonces deberia ver a Maria Garcia en los resultados
Y deberia ver sus mascotas listadas
Y deberia ver cantidad de turnos
Escenario: Ver perfil completo de dueno
Dado que encontre a "Maria Garcia"
Cuando hago click en su perfil
Entonces deberia ver:
| seccion | contenido |
| Datos personales | Nombre, email, telefono |
| Direcciones | Direcciones registradas |
| Mascotas | Lista de mascotas |
| Historial | Solicitudes anteriores |
| Pagos | Historial de pagos |
Escenario: Editar datos de dueno
Dado que estoy viendo el perfil de un dueno
Cuando hago click en "Editar"
Y cambio el telefono a "1155559999"
Y guardo los cambios
Entonces el telefono deberia actualizarse
Y deberia registrarse quien hizo el cambio
Esquema del escenario: Filtrar duenos por tipo
Dado que estoy en la lista de duenos
Cuando filtro por tipo "<tipo>"
Entonces solo deberia ver usuarios <tipo>
Ejemplos:
| tipo |
| Registrados |
| Invitados |
# ============================================
# GESTION DE VETERINARIOS
# ============================================
Escenario: Ver lista de veterinarios
Cuando voy a la seccion "Veterinarios"
Entonces deberia ver listado de todos los vets
Y cada vet deberia mostrar:
| campo |
| Nombre |
| Matricula |
| Zonas |
| Estado |
| Visitas mes |
Escenario: Agregar nuevo veterinario
Dado que estoy en la seccion "Veterinarios"
Cuando hago click en "Agregar veterinario"
Y completo los datos:
| campo | valor |
| Nombre | Dr. Juan Perez |
| Matricula | MV-12345 |
| Email | jperez@ejemplo.com |
| Telefono | 1155551234 |
| Especialidades | Clinica general |
Y selecciono zonas de cobertura:
| zona |
| Palermo |
| Recoleta |
Y genero credenciales de acceso
Y guardo
Entonces deberia crearse el veterinario
Y deberia poder loguearse con sus credenciales
Escenario: Desactivar veterinario sin citas pendientes
Dado que el veterinario "Dr. Lopez" no tiene citas pendientes
Cuando abro su perfil
Y hago click en "Desactivar"
Y confirmo la desactivacion
Entonces Dr. Lopez deberia estar inactivo
Y no deberia recibir nuevas solicitudes
Y no deberia poder loguearse
Escenario: Intentar desactivar veterinario con citas pendientes
Dado que el veterinario "Dra. Garcia" tiene 3 citas pendientes
Cuando intento desactivarla
Entonces deberia ver advertencia "Tiene 3 citas pendientes"
Y deberia ver opciones:
| opcion |
| Reasignar citas y desactivar |
| Cancelar |
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Fusionar cuentas duplicadas
Dado que hay dos cuentas para el mismo dueno:
| cuenta | email | mascotas |
| Cuenta1 | maria@gmail.com | Luna |
| Cuenta2 | maria@hotmail.com | Rocky |
Cuando selecciono ambas cuentas
Y hago click en "Fusionar"
Y elijo Cuenta1 como principal
Y confirmo
Entonces deberia existir solo Cuenta1
Y deberia tener ambas mascotas
Y el historial deberia combinarse
Escenario: Convertir invitado a registrado
Dado que hay un usuario invitado con email "invitado@test.com"
Cuando abro su perfil
Y hago click en "Enviar invitacion a registrarse"
Entonces deberia enviarse email con link de registro
Y el usuario podra crear contraseña y activar cuenta

View File

@@ -0,0 +1,131 @@
# language: es
# 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
Característica: Gestion de servicios y precios
Como administrador
Quiero gestionar el catalogo de servicios
Para mantener la oferta actualizada
Antecedentes:
Dado que estoy logueado como administrador
Y estoy en la seccion "Servicios"
# ============================================
# VER CATALOGO DE SERVICIOS
# ============================================
Escenario: Ver listado de servicios
Cuando cargo la pagina de servicios
Entonces deberia ver todos los servicios organizados por categoria
Y cada servicio deberia mostrar:
| campo |
| Nombre |
| Categoria |
| Tipo mascota |
| Precio actual |
| Estado |
Esquema del escenario: Filtrar servicios
Cuando filtro por <filtro> "<valor>"
Entonces solo deberia ver servicios que coincidan
Ejemplos:
| filtro | valor |
| categoria | Vacunacion |
| tipo_mascota | Gato |
| estado | Activo |
# ============================================
# CREAR Y EDITAR SERVICIOS
# ============================================
Escenario: Agregar nuevo servicio
Cuando hago click en "Agregar servicio"
Y completo los datos:
| campo | valor |
| Nombre | Vacuna Quintuple Felina |
| Descripcion | Protege contra 5 enfermedades |
| Categoria | Vacunacion |
| Tipo mascota | Gato |
| Precio | 15000 |
| Duracion | 30 minutos |
Y guardo el servicio
Entonces el servicio deberia crearse
Y deberia aparecer en el turnero para gatos
Escenario: Editar servicio existente
Dado que existe el servicio "Consulta clinica"
Cuando abro el servicio
Y cambio la descripcion
Y guardo
Entonces la descripcion deberia actualizarse
Y las solicitudes existentes no deberian afectarse
Escenario: Desactivar servicio
Dado que existe el servicio "Servicio Antiguo"
Cuando abro el servicio
Y hago click en "Desactivar"
Y confirmo
Entonces el servicio no deberia aparecer en el turnero
Y las solicitudes existentes deberian mantenerse
# ============================================
# GESTION DE PRECIOS
# ============================================
Escenario: Actualizar precio de servicio
Dado que "Consulta clinica" tiene precio actual de 10000
Cuando abro el servicio
Y voy a la seccion "Precios"
Y hago click en "Agregar precio"
Y ingreso nuevo precio 12000
Y selecciono fecha de vigencia "01/02/2024"
Y guardo
Entonces deberia crearse el nuevo precio
Y el precio anterior deberia quedar en historial
Y el nuevo precio deberia aplicar desde la fecha indicada
Escenario: Ver historial de precios
Dado que un servicio tuvo varios cambios de precio
Cuando veo la seccion "Precios"
Entonces deberia ver historial con:
| campo |
| Precio |
| Fecha desde |
| Fecha hasta |
| Usuario |
Regla: El precio se congela al crear la solicitud
Escenario: Cambio de precio no afecta solicitudes existentes
Dado que hay una solicitud pendiente con "Consulta clinica" a 10000
Cuando cambio el precio de "Consulta clinica" a 12000
Entonces la solicitud deberia mantener el precio de 10000
# ============================================
# CONFIGURAR COMBOS Y DEPENDENCIAS
# ============================================
Escenario: Crear combo de servicios
Cuando voy a "Combos"
Y hago click en "Agregar combo"
Y configuro:
| campo | valor |
| Nombre | Plan Preventivo Felino |
| Servicios | Vacunacion, Desparasitacion, Antipulgas |
| Precio combo | 25000 |
| Descuento | 20% |
Y guardo
Entonces el combo deberia crearse
Y deberia aplicarse automaticamente cuando se seleccionen esos servicios
Escenario: Configurar servicio dependiente
Dado que "Vacunacion" requiere "Consulta clinica"
Cuando configuro la dependencia
Entonces al seleccionar "Vacunacion" en el turnero
Y "Consulta clinica" deberia agregarse automaticamente
Y no deberia poder quitarse

View File

@@ -0,0 +1,141 @@
# language: es
# 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
Característica: Proceso de reembolso
Como administrador
Quiero procesar reembolsos de pagos
Para resolver cancelaciones y problemas
Antecedentes:
Dado que estoy logueado como administrador
Y estoy en el backoffice
# ============================================
# IDENTIFICAR PAGO A REEMBOLSAR
# ============================================
Escenario: Buscar solicitud pagada por ID de operacion
Cuando busco por ID de Mercado Pago "12345678"
Entonces deberia encontrar la solicitud asociada
Y deberia ver los detalles del pago
Escenario: Ver detalles de pago
Dado que encontre una solicitud pagada
Cuando veo la seccion de pago
Entonces deberia ver:
| campo |
| Monto pagado |
| Fecha de pago |
| Metodo de pago |
| ID operacion MP |
| Estado en MP |
# ============================================
# PROCESAR REEMBOLSO
# ============================================
Escenario: Reembolso total exitoso
Dado que hay una solicitud pagada por 15000
Y la visita fue cancelada
Cuando abro la solicitud
Y hago click en "Procesar reembolso"
Y selecciono "Reembolso total"
Y ingreso motivo "Cancelacion por indisponibilidad del veterinario"
Y confirmo el reembolso
Entonces deberia enviarse la solicitud de reembolso a Mercado Pago
Y deberia ver mensaje "Reembolso en proceso"
Y la solicitud deberia registrar el reembolso
Y el dueno deberia recibir email de confirmacion
Escenario: Reembolso parcial
Dado que hay una solicitud pagada por 20000
Y solo se realizo parte del servicio
Cuando proceso reembolso parcial por 10000
Y ingreso motivo "Servicio parcialmente completado"
Y confirmo
Entonces deberia procesarse reembolso por 10000
Y deberia quedar registro del monto reembolsado
Y deberia quedar registro del monto retenido
# ============================================
# TIEMPOS DE ACREDITACION
# ============================================
Esquema del escenario: Informar tiempo de acreditacion segun metodo
Dado que el pago original fue con "<metodo>"
Cuando proceso el reembolso
Entonces deberia informar al usuario:
"""
El reembolso se acreditara en <tiempo>
"""
Ejemplos:
| metodo | tiempo |
| Tarjeta credito | 1-2 resumenes de cuenta |
| Tarjeta debito | 5-10 dias habiles |
| Dinero en cuenta MP | forma inmediata |
| Transferencia | 5-10 dias habiles |
# ============================================
# VALIDACIONES Y ERRORES
# ============================================
Escenario: No puedo reembolsar mas del monto pagado
Dado que hay una solicitud pagada por 15000
Cuando intento reembolsar 20000
Entonces deberia ver error "El monto supera el pago original"
Escenario: Reembolso duplicado
Dado que ya procese un reembolso total para una solicitud
Cuando intento procesar otro reembolso
Entonces deberia ver error "Esta solicitud ya fue reembolsada"
Escenario: Pago fuera de plazo de reembolso
Dado que hay un pago de hace 200 dias
Cuando intento reembolsar
Entonces deberia ver advertencia "Fuera de plazo de reembolso de MP (180 dias)"
Y deberia sugerir "Contactar al dueno para solucion alternativa"
# ============================================
# SEGUIMIENTO
# ============================================
Escenario: Ver estado del reembolso
Dado que procese un reembolso hace 2 dias
Cuando veo el detalle del reembolso
Entonces deberia ver el estado actual en Mercado Pago
Y deberia ver historial de estados:
| estado | fecha |
| Solicitado | 01/01/2024 |
| En proceso | 01/01/2024 |
| Completado | 03/01/2024 |
Escenario: Reembolso rechazado por MP
Dado que Mercado Pago rechazo el reembolso
Cuando veo el estado
Entonces deberia ver "Reembolso rechazado"
Y deberia ver el motivo del rechazo
Y deberia poder contactar al dueno con alternativas
# ============================================
# REGISTRO Y AUDITORIA
# ============================================
Regla: Todos los reembolsos quedan registrados
Escenario: Ver historial de reembolsos
Cuando voy a "Reportes" -> "Reembolsos"
Entonces deberia ver lista de todos los reembolsos
Y cada uno deberia mostrar:
| campo |
| Solicitud |
| Monto original |
| Monto reembolso |
| Motivo |
| Procesado por |
| Fecha |
| Estado |

View File

@@ -0,0 +1,155 @@
# language: es
# 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
Característica: Reportes y dashboard
Como administrador o gerente
Quiero ver metricas y generar reportes
Para tomar decisiones informadas
Antecedentes:
Dado que estoy logueado como administrador
Y estoy en el backoffice
# ============================================
# DASHBOARD
# ============================================
Escenario: Ver dashboard principal
Cuando accedo al dashboard
Entonces deberia ver metricas resumidas:
| metrica | periodo |
| Solicitudes nuevas | Hoy |
| Visitas completadas | Semana |
| Ingresos | Mes |
| Veterinarios activos | Actual |
| Tasa de conversion | Mes |
Escenario: Dashboard actualiza periodicamente
Dado que estoy en el dashboard
Cuando pasan 5 minutos
Entonces los datos deberian actualizarse
Y deberia ver indicador de ultima actualizacion
Escenario: Ver grafico de tendencia
Cuando veo el grafico de solicitudes
Entonces deberia ver la evolucion de los ultimos 30 dias
Y deberia poder comparar con periodo anterior
# ============================================
# REPORTE DE SOLICITUDES
# ============================================
Escenario: Generar reporte de solicitudes
Cuando voy a "Reportes" -> "Solicitudes"
Y selecciono periodo "Enero 2024"
Y hago click en "Generar"
Entonces deberia ver tabla con solicitudes del periodo
Y deberia ver totales por estado:
| estado | cantidad |
| Pendiente | X |
| Coordinado | X |
| Pagado | X |
| Completado | X |
| Cancelado | X |
Escenario: Filtrar reporte por multiples criterios
Cuando genero reporte con filtros:
| filtro | valor |
| Periodo | Enero 2024 |
| Zona | Palermo |
| Veterinario | Dra. Garcia |
| Estado | Completado |
Entonces deberia ver solo solicitudes que cumplan todos los criterios
# ============================================
# REPORTE DE INGRESOS
# ============================================
Escenario: Ver ingresos por periodo
Cuando voy a "Reportes" -> "Ingresos"
Y selecciono "Ultimo trimestre"
Entonces deberia ver:
| dato |
| Ingresos totales |
| Cantidad de pagos |
| Ticket promedio |
| Reembolsos realizados |
| Ingreso neto |
Escenario: Ingresos agrupados por veterinario
Cuando agrupo el reporte por "Veterinario"
Entonces deberia ver para cada vet:
| dato |
| Visitas completadas |
| Ingresos generados |
| Porcentaje del total |
Y deberian estar ordenados de mayor a menor
Escenario: Ingresos agrupados por servicio
Cuando agrupo el reporte por "Servicio"
Entonces deberia ver los servicios mas vendidos
Y deberia ver el ingreso de cada uno
Y deberia ver la cantidad de veces realizado
# ============================================
# REPORTE DE VETERINARIOS
# ============================================
Escenario: Ver performance de veterinarios
Cuando voy a "Reportes" -> "Veterinarios"
Entonces deberia ver para cada veterinario:
| metrica |
| Visitas completadas |
| Calificacion promedio |
| Tasa de aceptacion |
| Tasa de cancelacion |
| Ingresos generados |
Escenario: Identificar veterinarios con problemas
Dado que el reporte muestra la tasa de cancelacion
Cuando ordeno por "Tasa de cancelacion" descendente
Entonces deberia ver primero los vets con mas cancelaciones
Y deberia poder investigar los motivos
# ============================================
# EXPORTACION
# ============================================
Esquema del escenario: Exportar reporte en diferentes formatos
Dado que tengo un reporte generado
Cuando hago click en "Exportar"
Y selecciono formato "<formato>"
Entonces deberia descargarse el archivo en formato <formato>
Ejemplos:
| formato |
| CSV |
| Excel |
| PDF |
Escenario: Exportar reporte grande de forma asincrona
Dado que genere un reporte con mas de 10000 registros
Cuando hago click en "Exportar"
Entonces deberia ver mensaje "Generando exportacion..."
Y deberia recibir notificacion cuando este listo
Y deberia poder descargar desde el centro de notificaciones
# ============================================
# REPORTES PROGRAMADOS
# ============================================
Escenario: Programar reporte semanal
Cuando voy a "Reportes" -> "Programados"
Y creo nuevo reporte programado:
| campo | valor |
| Tipo | Ingresos |
| Frecuencia | Semanal |
| Dia | Lunes |
| Destinatarios | gerencia@ejemplo.com |
Y guardo
Entonces deberia enviarse el reporte cada lunes
Y los destinatarios deberian recibirlo por email

View File

@@ -0,0 +1,92 @@
# language: es
# 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
Característica: Registro de usuario
Como visitante de la plataforma
Quiero poder crear una cuenta
Para gestionar mis mascotas y reservar turnos
# ============================================
# CAMINO FELIZ
# ============================================
Escenario: Registro exitoso con datos validos
Dado que estoy en la pagina de registro
Cuando ingreso email "nuevo@ejemplo.com"
Y ingreso contraseña "Password123"
Y confirmo contraseña "Password123"
Y acepto los terminos y condiciones
Y hago click en "Crear cuenta"
Entonces deberia ver mensaje "Te enviamos un email de verificacion"
Y deberia recibir email de verificacion
Escenario: Verificar email y activar cuenta
Dado que me registre con email "nuevo@ejemplo.com"
Y recibi el email de verificacion
Cuando hago click en el link de verificacion
Entonces mi cuenta deberia estar activa
Y deberia ser redirigido al dashboard
# ============================================
# VALIDACIONES
# ============================================
Esquema del escenario: Registro con datos invalidos
Dado que estoy en la pagina de registro
Cuando ingreso email "<email>"
Y ingreso contraseña "<password>"
Y confirmo contraseña "<confirmacion>"
Y hago click en "Crear cuenta"
Entonces deberia ver error "<mensaje_error>"
Ejemplos:
| 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 |
Escenario: Registro con email ya existente
Dado que existe un usuario con email "existente@ejemplo.com"
Y estoy en la pagina de registro
Cuando ingreso email "existente@ejemplo.com"
Y completo el resto del formulario correctamente
Y hago click en "Crear cuenta"
Entonces deberia ver error "Este email ya esta registrado"
Y deberia ver link "Recuperar contraseña"
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Registro linkea con cuenta invitado existente
# Usuario que reservo turno como invitado y ahora quiere registrarse
Dado que existe un usuario invitado con email "invitado@ejemplo.com"
Y ese usuario tiene una mascota "Luna" registrada
Y estoy en la pagina de registro
Cuando me registro con email "invitado@ejemplo.com"
Y verifico mi cuenta
Entonces deberia ver mi mascota "Luna" en el dashboard
Y deberia ver mis turnos anteriores
Escenario: Registro desde flujo de turnero
# Usuario empezo a reservar turno y decide crear cuenta
Dado que estoy en el paso final del turnero
Y ingrese mis datos de contacto
Cuando hago click en "Crear cuenta para guardar mis datos"
Entonces deberia ver formulario simplificado
Y mi email ya deberia estar pre-llenado
Y solo deberia ingresar contraseña
Escenario: Reenviar email de verificacion
Dado que me registre pero no verifique mi cuenta
Y estoy en la pagina de login
Cuando intento iniciar sesion
Entonces deberia ver "Tu cuenta no esta verificada"
Y deberia ver boton "Reenviar email"
Cuando hago click en "Reenviar email"
Entonces deberia recibir nuevo email de verificacion

View File

@@ -0,0 +1,141 @@
# language: es
# 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
Característica: 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
Antecedentes:
Dado que estoy en la pagina del turnero
# ============================================
# VERIFICACION DE COBERTURA
# ============================================
Escenario: Verificar cobertura en zona disponible
Cuando ingreso direccion "Av Santa Fe 1234, CABA"
Entonces deberia ver mensaje "Tenemos cobertura en tu zona"
Y deberia poder continuar al siguiente paso
Escenario: Zona sin cobertura
Cuando ingreso direccion "Calle Principal 100, Ushuaia"
Entonces deberia ver mensaje "Aun no tenemos cobertura en tu zona"
Y deberia ver formulario "Avisame cuando lleguen"
# ============================================
# FLUJO COMPLETO POR TIPO DE USUARIO
# ============================================
Esquema del escenario: Reservar turno como <tipo_usuario>
Dado que soy un usuario <tipo_usuario>
Y tengo cobertura en mi zona
Cuando completo los datos de mi mascota:
| campo | valor |
| nombre | Luna |
| tipo | Gato |
| edad | 2 años |
| castrada | Si |
Y selecciono servicios:
| servicio |
| Vacunacion |
Y selecciono fechas preferidas:
| fecha | franja |
| 2024-01-15 | Mañana |
| 2024-01-16 | Tarde |
Y completo datos de contacto con email "<email>"
Y envio la solicitud
Entonces deberia crearse una solicitud en estado "Pendiente"
Y el dueno deberia ser <estado_dueno>
Y deberia recibir email de confirmacion
Ejemplos:
| 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
# ============================================
Escenario: Servicios filtrados por tipo de mascota
Dado que agregue una mascota tipo "Gato"
Cuando veo los servicios disponibles
Entonces deberia ver "Vacuna triple felina"
Y deberia ver "Vacuna antirabica"
Pero no deberia ver "Vacuna sextuple canina"
Escenario: Consulta clinica se agrega automaticamente con vacunacion
Dado que estoy seleccionando servicios
Cuando selecciono "Vacunacion"
Entonces "Consulta clinica" deberia agregarse automaticamente
Y deberia ver nota "Incluye revision general"
Y no deberia poder quitar "Consulta clinica"
Escenario: Servicios combo con descuento
Dado que estoy seleccionando servicios
Cuando agrego los siguientes servicios:
| servicio |
| Vacunacion |
| Desparasitacion |
| Antipulgas |
Entonces deberia ver "Plan preventivo completo"
Y el total deberia incluir descuento de combo
Escenario: Castracion no disponible para mascota castrada
Dado que mi mascota esta marcada como castrada
Cuando veo los servicios disponibles
Entonces no deberia ver "Castracion"
# ============================================
# DATOS DE CONTACTO Y CUENTA
# ============================================
Escenario: Pre-llenado de datos para usuario logueado
Dado que estoy logueado como "maria@ejemplo.com"
Y tengo registrada mascota "Firulais"
Cuando inicio el flujo de turnero
Entonces mi direccion deberia estar pre-llenada
Y deberia poder seleccionar "Firulais" de mis mascotas
Y mis datos de contacto ya deberian estar completos
Escenario: Detectar usuario existente por email
Dado que soy usuario invitado
Y existe una cuenta con email "existente@ejemplo.com"
Cuando ingreso email "existente@ejemplo.com" en datos de contacto
Entonces deberia ver "Ya tenes cuenta con este email"
Y deberia ver opciones:
| opcion |
| Iniciar sesion |
| Continuar como invitado |
# ============================================
# EDGE CASES
# ============================================
Escenario: Usuario abandona flujo a mitad
Dado que complete los datos de mascota
Y cerre el navegador sin enviar
Cuando vuelvo a la pagina del turnero
Entonces deberia poder recuperar mi progreso
# Nota: datos guardados en localStorage o session
Escenario: Multiples mascotas en una solicitud
Dado que quiero atender a 2 mascotas
Cuando agrego mascota "Luna" tipo "Gato"
Y agrego mascota "Rocky" tipo "Perro"
Y selecciono servicios para cada una
Entonces deberia crearse una solicitud con 2 mascotas
Y el precio deberia reflejar ambas
Escenario: Franja horaria especifica
Dado que solo puedo por la mañana
Cuando selecciono franja "Mañana (9-12hs)"
Entonces la solicitud deberia registrar esa preferencia
# Nota: Es preferencia, no garantia

View File

@@ -0,0 +1,154 @@
# language: es
# 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
Característica: Gestion de mascotas
Como dueno de mascota registrado
Quiero gestionar la informacion de mis mascotas
Para tenerla actualizada y acceder a su historial medico
Antecedentes:
Dado que estoy logueado como dueno de mascota
Y estoy en la seccion "Mis mascotas"
# ============================================
# AGREGAR MASCOTA
# ============================================
Escenario: Agregar mascota con datos minimos
Cuando hago click en "Agregar mascota"
Y completo el formulario:
| campo | valor |
| nombre | Luna |
| tipo | Gato |
Y hago click en "Guardar"
Entonces deberia ver "Luna" en mi lista de mascotas
Y Luna deberia aparecer disponible en el turnero
Escenario: Agregar mascota con datos completos
Cuando hago click en "Agregar mascota"
Y completo el formulario:
| campo | valor |
| nombre | Rocky |
| tipo | Perro |
| raza | Labrador |
| fecha_nacimiento | 2020-03-15 |
| peso | 25 |
| sexo | Macho |
| castrado | Si |
Y subo una foto de Rocky
Y hago click en "Guardar"
Entonces deberia ver "Rocky" con su foto en mi lista
Y deberia ver badge "Castrado"
Esquema del escenario: Validacion de datos de mascota
Cuando intento agregar mascota con <campo> igual a "<valor>"
Entonces deberia ver error "<mensaje>"
Ejemplos:
| 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
# ============================================
Escenario: Editar peso de mascota
Dado que tengo una mascota "Luna" con peso 4kg
Cuando edito a Luna
Y cambio el peso a 5kg
Y guardo los cambios
Entonces Luna deberia mostrar peso "5 kg"
Escenario: Marcar mascota como castrada
Dado que tengo una mascota "Rocky" no castrado
Cuando edito a Rocky
Y marco "Esta castrado"
Y guardo los cambios
Entonces Rocky deberia mostrar badge "Castrado"
Y el servicio "Castracion" no deberia aparecer para Rocky en el turnero
Escenario: Actualizar foto de mascota
Dado que tengo una mascota "Luna" sin foto
Cuando edito a Luna
Y subo una nueva foto
Y guardo los cambios
Entonces deberia ver la foto de Luna en su tarjeta
# ============================================
# ELIMINAR MASCOTA
# ============================================
Escenario: Eliminar mascota sin historial
Dado que tengo una mascota "Nuevo" sin visitas
Cuando hago click en "Eliminar" para Nuevo
Y confirmo la eliminacion
Entonces Nuevo no deberia aparecer en mi lista
# Nota: Es soft delete
Escenario: Eliminar mascota con historial medico
Dado que tengo una mascota "Luna" con visitas anteriores
Cuando hago click en "Eliminar" para Luna
Entonces deberia ver advertencia "Luna tiene historial medico"
Y deberia ver "El historial se conservara pero no podras verlo"
Cuando confirmo la eliminacion
Entonces Luna no deberia aparecer en mi lista
Escenario: No puedo eliminar mascota con turno pendiente
Dado que tengo una mascota "Rocky" con turno pendiente
Cuando intento eliminar a Rocky
Entonces deberia ver error "Rocky tiene turnos pendientes"
Y deberia ver sugerencia "Cancela los turnos primero"
# ============================================
# VER HISTORIAL MEDICO
# ============================================
Escenario: Ver historial de visitas de mascota
Dado que tengo una mascota "Luna" con 3 visitas completadas
Cuando hago click en Luna
Y voy a la seccion "Historial"
Entonces deberia ver 3 visitas listadas
Y deberian estar ordenadas por fecha descendente
Escenario: Ver detalle de visita
Dado que tengo una mascota "Luna" con visitas
Cuando veo el historial de Luna
Y hago click en la primera visita
Entonces deberia ver:
| campo |
| Fecha |
| Veterinario |
| Diagnostico |
| Tratamiento |
| Medicamentos |
Escenario: Mascota sin historial
Dado que tengo una mascota "Nuevo" recien agregada
Cuando veo el perfil de Nuevo
Entonces la seccion "Historial" deberia estar vacia
Y deberia ver mensaje "Aun no hay visitas registradas"
Y deberia ver boton "Reservar primer turno"
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Mascota heredada de cuenta invitado
Dado que me registre con email "juan@test.com"
Y previamente reserve turno como invitado para "Firulais"
Cuando voy a "Mis mascotas"
Entonces deberia ver "Firulais" en mi lista
Y deberia ver su historial de visitas previas
Escenario: Razas filtradas por tipo
Cuando agrego una mascota tipo "Gato"
Entonces las razas disponibles deberian ser razas de gato
Y no deberia ver razas de perro como "Labrador"

View File

@@ -0,0 +1,141 @@
# language: es
# 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
Característica: Pago de turno
Como dueno de mascota con turno coordinado
Quiero pagar mi turno online
Para confirmar la visita del veterinario
Antecedentes:
Dado que tengo un turno en estado "Coordinado"
Y el turno tiene asignado veterinario "Dra. Garcia"
Y la fecha asignada es "15 de enero a las 10:00"
# ============================================
# FLUJO DE PAGO EXITOSO
# ============================================
Escenario: Pagar turno con tarjeta de credito
Dado que estoy en el detalle de mi turno coordinado
Cuando hago click en "Pagar"
Entonces deberia ser redirigido a Mercado Pago
Y deberia ver el monto correcto
Cuando selecciono "Tarjeta de credito"
Y completo los datos de la tarjeta
Y confirmo el pago
Entonces deberia volver a la plataforma
Y deberia ver "Pago exitoso"
Y el turno deberia estar en estado "Pagado"
Escenario: Recibir confirmacion de pago
Dado que complete el pago exitosamente
Entonces deberia recibir email de confirmacion
Y el email deberia contener:
| campo |
| Fecha del turno |
| Direccion |
| Veterinario asignado |
| Monto pagado |
| Numero de operacion |
# ============================================
# METODOS DE PAGO
# ============================================
Esquema del escenario: Pagar con diferentes metodos
Dado que estoy en Mercado Pago
Cuando selecciono metodo "<metodo>"
Y completo el pago
Entonces el pago deberia ser <resultado>
Y el estado de acreditacion deberia ser "<acreditacion>"
Ejemplos:
| 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
# ============================================
Escenario: Pago rechazado por fondos insuficientes
Dado que estoy en Mercado Pago
Cuando intento pagar con tarjeta sin fondos
Entonces deberia ver error "Fondos insuficientes"
Y deberia poder reintentar con otra tarjeta
Y el turno deberia seguir en estado "Coordinado"
Escenario: Usuario cancela el pago
Dado que estoy en Mercado Pago
Cuando hago click en "Volver al sitio"
Entonces deberia volver a la plataforma
Y deberia ver mensaje "El pago fue cancelado"
Y deberia ver boton "Reintentar pago"
Y el turno deberia seguir en estado "Coordinado"
Escenario: Cierre de browser durante pago
Dado que estoy en Mercado Pago
Y cierro el navegador accidentalmente
Cuando vuelvo a la plataforma
Y voy a "Mis turnos"
Entonces deberia poder ver el estado real del pago
# Si se proceso: Pagado. Si no: Coordinado con opcion de pagar
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Link de pago expirado
Dado que recibi el link de pago hace mas de 24 horas
Cuando hago click en el link
Entonces deberia ver "Este link ha expirado"
Y deberia ver "Contacta a soporte para generar uno nuevo"
Escenario: Intento pagar turno ya pagado
Dado que mi turno ya esta en estado "Pagado"
Cuando accedo al link de pago
Entonces deberia ver "Este turno ya fue pagado"
Y deberia ver boton "Ver detalle del turno"
Escenario: Precio cambio desde la coordinacion
# Caso muy raro pero posible
Dado que el precio del servicio aumento desde que se coordino
Cuando voy a pagar
Entonces deberia ver el precio original acordado
# El precio se congela al momento de coordinacion
# ============================================
# INTEGRACION CON WEBHOOK
# ============================================
Regla: El estado del turno se actualiza via webhook de Mercado Pago
Escenario: Webhook confirma pago aprobado
Dado que el usuario completo el pago en Mercado Pago
Cuando Mercado Pago envia webhook con status "approved"
Entonces el turno deberia cambiar a estado "Pagado"
Y el veterinario deberia recibir notificacion
Y el usuario deberia recibir email de confirmacion
Escenario: Webhook informa pago pendiente
Dado que el usuario pago con transferencia bancaria
Cuando Mercado Pago envia webhook con status "pending"
Entonces el turno deberia quedarse en "Coordinado"
Y deberia registrarse el pago pendiente
Y el usuario deberia recibir email "Esperando acreditacion"
Escenario: Webhook falla pero pago se proceso
# Caso de error que requiere intervencion manual
Dado que el usuario pago exitosamente
Pero el webhook fallo por error de red
Entonces el turno seguira en "Coordinado"
Y el equipo de ops deberia recibir alerta
Y deberian poder actualizar manualmente

View File

@@ -0,0 +1,148 @@
# language: es
# 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
Característica: Ver historial medico
Como dueno de mascota
Quiero ver el historial medico de mis mascotas
Para tener registro de sus visitas y tratamientos
Antecedentes:
Dado que estoy logueado como dueno de mascota
Y tengo una mascota "Luna" con visitas completadas
# ============================================
# ACCESO AL HISTORIAL
# ============================================
Escenario: Acceder al historial desde mascotas
Dado que estoy en "Mis mascotas"
Cuando hago click en "Luna"
Y voy a la seccion "Historial de visitas"
Entonces deberia ver lista de visitas de Luna
Escenario: Acceder al historial desde turnos
Dado que estoy en "Mis turnos"
Y filtro por "Completados"
Cuando hago click en un turno de Luna
Y hago click en "Ver informe medico"
Entonces deberia ver el informe de esa visita
# ============================================
# VISUALIZACION DE VISITAS
# ============================================
Escenario: Ver lista de visitas ordenadas
Dado que Luna tiene visitas en las siguientes fechas:
| fecha |
| 2024-01-15 |
| 2023-11-20 |
| 2023-06-10 |
Cuando veo el historial de Luna
Entonces deberia ver las visitas ordenadas de mas reciente a mas antigua
Y la primera deberia ser del "15 de enero 2024"
Escenario: Ver detalle completo de informe
Cuando hago click en una visita completada
Entonces 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 |
Escenario: Ver informe con medicamentos recetados
Dado 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
"""
Cuando veo el informe
Entonces deberia ver la lista de medicamentos
Y cada medicamento deberia mostrar:
| campo |
| Nombre |
| Dosis |
| Frecuencia |
| Duracion |
# ============================================
# DESCARGA Y COMPARTIR
# ============================================
Escenario: Descargar informe como PDF
Dado que estoy viendo un informe medico
Cuando hago click en "Descargar PDF"
Entonces deberia descargarse un archivo PDF
Y el PDF deberia contener toda la informacion del informe
Y deberia tener el logo de Amar Mascotas
Escenario: Imprimir informe
Dado que estoy viendo un informe medico
Cuando hago click en "Imprimir"
Entonces deberia abrirse el dialogo de impresion
Y el formato deberia ser optimizado para impresion
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Visita completada sin informe cargado
# El vet no cargo el informe todavia
Dado que Luna tiene una visita marcada como "Completada"
Pero el veterinario no cargo el informe aun
Cuando intento ver el informe
Entonces deberia ver mensaje "Informe pendiente"
Y deberia ver "El veterinario esta completando el informe"
Escenario: Informe con estudios pendientes
Dado que el informe solicita estudios de laboratorio
Y los resultados aun no estan disponibles
Cuando veo el informe
Entonces deberia ver seccion "Estudios solicitados"
Y deberia ver estado "Pendiente de resultados"
Y deberia ver nota "Se notificara cuando esten listos"
Escenario: Mascota con multiples visitas el mismo dia
# Raro pero posible: consulta de urgencia + seguimiento
Dado que Luna tuvo 2 visitas el 15 de enero
Cuando veo el historial
Entonces deberia ver ambas visitas listadas
Y deberian estar diferenciadas por hora
# ============================================
# PERMISOS Y PRIVACIDAD
# ============================================
Regla: Solo el dueno puede ver el historial de su mascota
Escenario: Dueno ve historial de su mascota
Dado que soy dueno de Luna
Cuando accedo al historial de Luna
Entonces deberia poder verlo completo
Escenario: No puedo ver historial de mascota ajena
Dado que existe mascota "Rocky" de otro dueno
Cuando intento acceder al historial de Rocky
Entonces deberia ver error "No tienes acceso"
# 403 Forbidden
# ============================================
# BUSQUEDA Y FILTROS
# ============================================
Escenario: Filtrar historial por tipo de servicio
Dado que Luna tiene visitas de vacunacion y consulta
Cuando filtro por "Vacunacion"
Entonces solo deberia ver visitas de vacunacion
Escenario: Buscar en historial por fecha
Cuando busco visitas del "2023"
Entonces solo deberia ver visitas del 2023
Y no deberia ver visitas del 2024

View File

@@ -0,0 +1,129 @@
# language: es
# 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
Característica: 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
Antecedentes:
Dado que estoy logueado como veterinario
Y tengo cobertura en los barrios "Palermo" y "Recoleta"
Y estoy en el dashboard de veterinario
# ============================================
# VER SOLICITUDES PENDIENTES
# ============================================
Escenario: Ver lista de solicitudes en mi zona
Cuando veo la seccion "Solicitudes pendientes"
Entonces deberia ver solo solicitudes de "Palermo" y "Recoleta"
Y no deberia ver solicitudes de otros barrios
Escenario: Ver detalle de solicitud
Dado que hay una solicitud pendiente
Cuando hago click en la solicitud
Entonces 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
# ============================================
Escenario: Aceptar solicitud con fecha disponible
Dado que hay una solicitud para el barrio "Palermo"
Y el dueno prefiere fechas:
| fecha | franja |
| 2024-01-15 | Mañana |
| 2024-01-16 | Tarde |
Y tengo disponibilidad el 15 de enero a las 10:00
Cuando hago click en "Aceptar"
Y selecciono fecha "15 de enero" hora "10:00"
Y confirmo la aceptacion
Entonces la solicitud deberia pasar a estado "Coordinado"
Y deberia quedar asignada a mi
Y el dueno deberia recibir notificacion con mis datos
Y la visita deberia aparecer en mi agenda
Escenario: Aceptar solicitud con datos de mascota que ya atendi
Dado que hay una solicitud para mascota "Luna"
Y yo atendi a "Luna" anteriormente
Cuando veo el detalle de la solicitud
Entonces deberia ver badge "Paciente recurrente"
Y deberia ver el historial de mis visitas anteriores a Luna
# ============================================
# RECHAZAR SOLICITUD
# ============================================
Esquema del escenario: Rechazar solicitud con motivo
Dado que hay una solicitud pendiente
Cuando hago click en "Rechazar"
Y selecciono motivo "<motivo>"
Y confirmo el rechazo
Entonces la solicitud deberia desaparecer de mi lista
Y deberia seguir visible para otros veterinarios
Ejemplos:
| motivo |
| No tengo disponibilidad |
| Fuera de mi zona |
| No realizo este servicio |
| Otro |
Escenario: Rechazar sin seleccionar motivo
Dado que hay una solicitud pendiente
Cuando hago click en "Rechazar"
Y confirmo sin seleccionar motivo
Entonces deberia poder rechazar igual
# El motivo es opcional
# ============================================
# RACE CONDITIONS
# ============================================
Regla: Solo un veterinario puede aceptar cada solicitud
Escenario: Otro vet acepta mientras estoy viendo
Dado que estoy viendo el detalle de una solicitud
Y otro veterinario acepta la misma solicitud
Cuando intento aceptarla
Entonces deberia ver error "Esta solicitud ya fue aceptada"
Y deberia ser redirigido al listado
Escenario: Solicitud desaparece cuando otro la acepta
Dado que estoy viendo el listado de solicitudes
Y otro veterinario acepta una solicitud
Entonces esa solicitud deberia desaparecer de mi lista
# Idealmente en tiempo real via websocket
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Solicitud urgente destacada
Dado que hay una solicitud marcada como "Urgente"
Cuando veo el listado de solicitudes
Entonces deberia ver la solicitud con indicador de urgencia
Y deberia aparecer primero en la lista
Escenario: Solicitud con multiples mascotas
Dado que hay una solicitud para 2 mascotas
Cuando veo el detalle
Entonces deberia ver informacion de ambas mascotas
Y deberia ver nota sobre tiempo estimado adicional
Escenario: No puedo aceptar con agenda completa
Dado que tengo mi agenda completa para las fechas de la solicitud
Cuando intento aceptar la solicitud
Entonces deberia ver advertencia "No tienes disponibilidad en las fechas preferidas"
Y deberia poder proponer una fecha alternativa

View File

@@ -0,0 +1,134 @@
# language: es
# 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
Característica: Gestion de agenda veterinaria
Como veterinario
Quiero gestionar mi calendario y disponibilidad
Para organizar mis visitas a domicilio eficientemente
Antecedentes:
Dado que estoy logueado como veterinario
Y estoy en la seccion "Mi agenda"
# ============================================
# VER AGENDA
# ============================================
Escenario: Ver calendario semanal
Cuando veo mi agenda en vista semanal
Entonces deberia ver los 7 dias de la semana
Y deberia ver mis visitas programadas
Y cada visita deberia mostrar hora y nombre del paciente
Escenario: Ver visitas con codigo de color por estado
Dado que tengo visitas en diferentes estados
Cuando veo mi agenda
Entonces las visitas deberian mostrarse con colores:
| estado | color |
| Coordinado | amarillo |
| Pagado | verde |
| En progreso | azul |
| Completado | gris |
Escenario: Ver detalle de visita desde el calendario
Dado que tengo una visita programada para hoy
Cuando hago click en la visita
Entonces deberia ver popup con:
| campo | valor |
| Hora | 10:00 - 11:00 |
| Dueno | Maria Garcia |
| Direccion | Av Santa Fe 1234 |
| Mascota | Luna (Gato, 3 años) |
| Servicios | Vacunacion, Consulta |
| Estado pago | Pagado |
Y deberia ver boton "Ver detalle completo"
# ============================================
# CONFIGURAR DISPONIBILIDAD SEMANAL
# ============================================
Escenario: Configurar horario laboral
Cuando voy a "Configuracion" -> "Mi disponibilidad"
Y 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 | | | | |
Y guardo la configuracion
Entonces mi disponibilidad deberia actualizarse
Y no deberia recibir solicitudes fuera de ese horario
# ============================================
# BLOQUEAR DIAS ESPECIFICOS
# ============================================
Escenario: Marcar dia como no disponible
Dado que necesito el 20 de enero libre
Cuando hago click en el dia 20 de enero en el calendario
Y selecciono "Marcar como no disponible"
Y ingreso motivo "Vacaciones"
Y confirmo
Entonces el dia 20 deberia mostrarse como bloqueado
Y no deberia poder aceptar solicitudes para ese dia
Escenario: Bloquear rango de fechas
Dado que tomo vacaciones del 15 al 22 de enero
Cuando voy a "Agregar indisponibilidad"
Y selecciono fecha inicio "15 de enero"
Y selecciono fecha fin "22 de enero"
Y ingreso motivo "Vacaciones"
Y confirmo
Entonces todos esos dias deberian mostrarse como bloqueados
Escenario: Desbloquear dia
Dado que tengo el 20 de enero bloqueado
Y ya no necesito ese dia libre
Cuando hago click en el dia bloqueado
Y selecciono "Quitar bloqueo"
Entonces el dia deberia estar disponible nuevamente
# ============================================
# IMPACTO EN SOLICITUDES
# ============================================
Regla: Los bloqueos no afectan visitas ya aceptadas
Escenario: Bloquear dia con visita ya aceptada
Dado que tengo una visita aceptada para el 15 de enero
Cuando intento bloquear el 15 de enero
Entonces deberia ver advertencia "Tienes una visita programada ese dia"
Y deberia poder elegir:
| opcion |
| Cancelar el bloqueo |
| Bloquear y contactar al dueno |
Regla: Cambios de disponibilidad solo afectan solicitudes futuras
Escenario: Cambiar horario no afecta visitas existentes
Dado que tengo una visita a las 17:00 el lunes
Cuando cambio mi horario del lunes para terminar a las 16:00
Y guardo los cambios
Entonces la visita de las 17:00 deberia mantenerse
Y deberia ver advertencia sobre la inconsistencia
# ============================================
# NAVEGACION
# ============================================
Escenario: Navegar entre semanas
Cuando hago click en "Semana siguiente"
Entonces deberia ver el calendario de la proxima semana
Y deberia poder volver con "Semana anterior"
Escenario: Ir a fecha especifica
Cuando hago click en el selector de fecha
Y selecciono "15 de marzo"
Entonces deberia ver la semana que contiene el 15 de marzo

View File

@@ -0,0 +1,159 @@
# language: es
# 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
Característica: Realizar visita y crear informe medico
Como veterinario
Quiero registrar la atencion medica de mis visitas
Para mantener el historial clinico del paciente
Antecedentes:
Dado que estoy logueado como veterinario
Y tengo una visita programada para hoy con mascota "Luna"
Y la visita esta en estado "Pagado"
# ============================================
# INICIAR VISITA
# ============================================
Escenario: Ver informacion antes de la visita
Cuando accedo al detalle de la visita
Entonces deberia ver la direccion para llegar
Y deberia ver el telefono del dueno para confirmar
Y deberia ver los servicios a realizar
Y deberia ver el historial previo de Luna
Escenario: Iniciar visita al llegar
Dado que llegue al domicilio
Cuando hago click en "Iniciar visita"
Entonces el estado deberia cambiar a "En progreso"
Y deberia registrarse la hora de inicio
Y deberia habilitarse el boton "Crear informe"
# ============================================
# CREAR INFORME MEDICO
# ============================================
Escenario: Completar informe con examen fisico
Dado que la visita esta en progreso
Cuando voy a "Crear informe"
Y 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 |
Y guardo el informe
Entonces el examen fisico deberia guardarse
Escenario: Agregar diagnostico y tratamiento
Dado que complete el examen fisico
Cuando agrego el diagnostico:
"""
Otitis externa bilateral leve.
Paciente presenta prurito y secrecion ceruminosa.
Sin signos de infeccion secundaria.
"""
Y agrego el tratamiento:
"""
Limpieza de oidos con solucion fisiologica.
Aplicacion de gotas oticas antibioticas.
Control en 7 dias.
"""
Y guardo el informe
Entonces el diagnostico y tratamiento deberian guardarse
Escenario: Recetar medicamentos
Dado que estoy creando el informe
Cuando 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 |
Y guardo el informe
Entonces los medicamentos deberian aparecer en el informe
Y el dueno podra verlos desde su cuenta
Escenario: Solicitar estudios complementarios
Dado que necesito estudios de laboratorio
Cuando agrego estudio:
| tipo | indicaciones |
| Hemograma completo | Ayuno de 8 horas |
| Perfil hepatico | Para control pre-quirurgico |
Y guardo el informe
Entonces los estudios deberian quedar registrados
Y deberian mostrarse como "Pendientes de resultado"
# ============================================
# COMPLETAR VISITA
# ============================================
Escenario: Completar visita con informe
Dado que el informe esta completo
Cuando hago click en "Completar visita"
Y confirmo la finalizacion
Entonces la visita deberia pasar a estado "Completado"
Y deberia generarse factura electronica (AFIP)
Y el dueno deberia recibir notificacion
Y el informe deberia ser visible para el dueno
Escenario: No puedo completar sin informe
Dado que la visita esta en progreso
Pero no cree ningun informe
Cuando intento completar la visita
Entonces deberia ver error "Debes crear el informe antes de completar"
# ============================================
# GUARDADO AUTOMATICO
# ============================================
Regla: El informe se guarda automaticamente
Escenario: Guardado automatico cada 30 segundos
Dado que estoy escribiendo el informe
Cuando pasan 30 segundos
Entonces deberia ver indicador "Guardado automaticamente"
Escenario: Recuperar informe despues de desconexion
Dado que estaba escribiendo el informe
Y perdi conexion a internet
Cuando recupero la conexion
Entonces deberia recuperar mi progreso
Y no deberia perder lo que escribi
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Visita con multiples mascotas
Dado que la visita incluye a "Luna" y "Rocky"
Cuando creo el informe
Entonces deberia crear un informe separado para cada mascota
Y ambos informes deberian estar asociados a la misma visita
Escenario: Cancelar visita in situ
Dado que llegue al domicilio
Pero el dueno no esta
Cuando marco la visita como "Cancelada in situ"
Y selecciono motivo "Dueno ausente"
Entonces la visita deberia marcarse como cancelada
Y deberia generarse cargo por visita fallida
# Segun politicas de la empresa
Escenario: Emergencia durante visita rutinaria
Dado que estoy en una consulta de vacunacion
Y detecto una condicion que requiere atencion urgente
Cuando agrego servicio "Consulta de urgencia"
Entonces deberia poder documentar ambos servicios
Y el precio deberia ajustarse
Escenario: Derivar a clinica
Dado que el paciente necesita atencion en clinica
Cuando marco "Derivacion a clinica"
Y especifico el motivo
Entonces deberia quedar registrada la derivacion
Y el dueno deberia recibir instrucciones

View File

@@ -0,0 +1,121 @@
# language: es
# 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
Característica: Gestionar zonas de cobertura
Como veterinario
Quiero definir en que zonas atiendo
Para recibir solo solicitudes que puedo cubrir
Antecedentes:
Dado que estoy logueado como veterinario
Y estoy en la seccion "Mi cobertura"
# ============================================
# VER ZONAS ACTUALES
# ============================================
Escenario: Ver mapa con mis zonas de cobertura
Cuando cargo la pagina de cobertura
Entonces deberia ver un mapa de la ciudad
Y mis zonas cubiertas deberian estar resaltadas
Y deberia ver un listado de barrios seleccionados
Escenario: Ver estadisticas por zona
Dado que tengo cobertura en "Palermo" y "Recoleta"
Cuando veo el detalle de mis zonas
Entonces deberia ver para cada zona:
| metrica |
| Solicitudes este mes |
| Visitas completadas |
| Otros vets en la zona |
# ============================================
# AGREGAR ZONAS
# ============================================
Escenario: Agregar barrio desde el mapa
Dado que no tengo cobertura en "Belgrano"
Cuando hago click en "Belgrano" en el mapa
Y confirmo agregar la zona
Entonces "Belgrano" deberia aparecer en mi lista de zonas
Y deberia empezar a ver solicitudes de Belgrano
Escenario: Agregar barrio desde el buscador
Cuando busco "Nuñez" en el buscador de barrios
Y selecciono "Nuñez" de los resultados
Y confirmo agregar la zona
Entonces "Nuñez" deberia aparecer en mi lista
Escenario: Agregar multiples zonas a la vez
Cuando selecciono los barrios:
| barrio |
| Colegiales |
| Chacarita |
| Villa Crespo |
Y hago click en "Agregar seleccionados"
Entonces los 3 barrios deberian agregarse a mi cobertura
# ============================================
# QUITAR ZONAS
# ============================================
Escenario: Quitar zona de cobertura
Dado que tengo cobertura en "Recoleta"
Cuando hago click en "X" junto a "Recoleta"
Y confirmo quitar la zona
Entonces "Recoleta" no deberia estar en mi lista
Y no deberia ver nuevas solicitudes de Recoleta
Escenario: Quitar zona con solicitudes pendientes
Dado que tengo cobertura en "Palermo"
Y hay solicitudes pendientes en Palermo que no acepte
Cuando intento quitar "Palermo"
Entonces deberia ver advertencia "Hay X solicitudes pendientes en esta zona"
Y deberia poder confirmar de todas formas
# Las solicitudes pendientes siguen disponibles para otros vets
# ============================================
# IMPACTO EN SOLICITUDES
# ============================================
Regla: Los cambios de zona afectan solo solicitudes nuevas
Escenario: Agregar zona muestra solicitudes existentes
Dado que no tengo cobertura en "Belgrano"
Y hay 3 solicitudes pendientes en Belgrano
Cuando agrego "Belgrano" a mi cobertura
Entonces deberia ver las 3 solicitudes pendientes de Belgrano
Escenario: Quitar zona no afecta visitas aceptadas
Dado que tengo cobertura en "Recoleta"
Y tengo una visita aceptada en Recoleta para mañana
Cuando quito "Recoleta" de mi cobertura
Entonces la visita de mañana deberia mantenerse
Pero no deberia ver nuevas solicitudes de Recoleta
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Zona no disponible en el sistema
Dado que quiero cubrir "Barrio Nuevo"
Pero ese barrio no esta en el sistema
Cuando busco "Barrio Nuevo"
Entonces deberia ver mensaje "Zona no encontrada"
Y deberia ver opcion "Solicitar que agreguen esta zona"
Escenario: Zona con baja demanda
Dado que agrego una zona con poca actividad
Cuando pasan 30 dias sin solicitudes
Entonces deberia recibir sugerencia "Considera expandir tu cobertura"
Escenario: Zona saturada de veterinarios
Dado que quiero agregar "Palermo"
Y hay muchos veterinarios cubriendo Palermo
Cuando agrego la zona
Entonces deberia ver nota "Esta zona tiene alta cobertura de veterinarios"
# Informativo, no bloquea

View File

@@ -0,0 +1,157 @@
# language: es
# 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
Característica: Ver historial de pacientes
Como veterinario
Quiero acceder al historial medico de pacientes
Para tener contexto clinico en mis atenciones
Antecedentes:
Dado que estoy logueado como veterinario
Y estoy en la seccion "Historia clinica"
# ============================================
# BUSCAR PACIENTES
# ============================================
Esquema del escenario: Buscar paciente por diferentes criterios
Cuando busco por <criterio> con valor "<valor>"
Entonces deberia ver resultados que coincidan
Ejemplos:
| criterio | valor |
| nombre dueno | Maria Garcia |
| nombre mascota | Luna |
| telefono | 1155551234 |
| email | maria@ejemplo.com |
Escenario: Busqueda sin resultados
Cuando busco "ZZZZZ paciente inexistente"
Entonces deberia ver mensaje "No se encontraron resultados"
Y deberia ver sugerencia "Verifica la ortografia"
Escenario: Busqueda con multiples resultados
Cuando busco "Garcia"
Y hay varios duenos con apellido Garcia
Entonces deberia ver lista de coincidencias
Y cada resultado deberia mostrar:
| campo |
| Nombre completo |
| Email |
| Mascotas |
# ============================================
# VER FICHA DE MASCOTA
# ============================================
Escenario: Ver ficha completa de mascota
Dado que encontre a la mascota "Luna"
Cuando hago click en Luna
Entonces 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 |
Escenario: Ver grafico de peso historico
Dado que estoy viendo la ficha de "Luna"
Y Luna tuvo multiples visitas con peso registrado
Cuando veo la seccion "Evolucion"
Entonces deberia ver grafico de peso en el tiempo
Y deberia poder detectar tendencias
# ============================================
# VER HISTORIAL DE VISITAS
# ============================================
Escenario: Ver listado de visitas
Dado que estoy viendo la ficha de "Luna"
Y Luna tiene 5 visitas completadas
Cuando veo la seccion "Historial de visitas"
Entonces deberia ver las 5 visitas listadas
Y deberian estar ordenadas de mas reciente a mas antigua
Y cada visita deberia mostrar:
| campo |
| Fecha |
| Veterinario |
| Servicios |
| Diagnostico |
Escenario: Ver informe de visita de otro veterinario
Dado que Luna fue atendida por "Dra. Rodriguez"
Y yo no la atendi en esa visita
Cuando hago click en esa visita
Entonces deberia poder ver el informe completo
# Para continuidad de atencion
Escenario: Ver informe detallado
Cuando hago click en una visita
Entonces deberia ver el informe con:
| seccion | contenido |
| Examen fisico | Peso, temperatura, signos vitales |
| Diagnostico | Descripcion del diagnostico |
| Tratamiento | Plan de tratamiento indicado |
| Medicamentos | Lista con dosis y duracion |
| Estudios | Estudios solicitados y resultados |
| Observaciones | Notas adicionales |
# ============================================
# FILTROS Y NAVEGACION
# ============================================
Escenario: Filtrar historial por tipo de servicio
Dado que estoy viendo el historial de "Luna"
Cuando filtro por servicio "Vacunacion"
Entonces solo deberia ver visitas de vacunacion
Escenario: Filtrar historial por fecha
Dado que estoy viendo el historial de "Luna"
Cuando filtro por año "2023"
Entonces solo deberia ver visitas del 2023
Escenario: Filtrar por mis atenciones
Dado que estoy viendo el historial de "Luna"
Y Luna fue atendida por varios veterinarios
Cuando marco "Solo mis atenciones"
Entonces solo deberia ver las visitas que yo realice
# ============================================
# PERMISOS
# ============================================
Regla: Veterinarios pueden ver historial de pacientes que atendieron
Escenario: Puedo ver historial de paciente que atendi
Dado que yo atendi a "Luna" al menos una vez
Cuando busco a Luna
Entonces deberia poder ver su historial completo
Escenario: Puedo ver historial de paciente con solicitud pendiente
Dado que hay una solicitud pendiente para "Rocky"
Y la solicitud esta en mi zona
Cuando busco a Rocky
Entonces deberia poder ver su historial
# Para evaluar si acepto la solicitud
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Paciente sin historial previo
Dado que busco a "Nuevo" que nunca fue atendido
Cuando veo su ficha
Entonces el historial deberia estar vacio
Y deberia ver mensaje "Sin visitas registradas"
Escenario: Dueno con multiples mascotas
Dado que busque al dueno "Maria Garcia"
Y Maria tiene 3 mascotas
Cuando veo su perfil
Entonces deberia ver las 3 mascotas listadas
Y deberia poder navegar al historial de cada una