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