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