major restructure
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 |
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user