major restructure
This commit is contained in:
79
cfg/amar/atlas/books/feature-form-samples/CLAUDE.md
Normal file
79
cfg/amar/atlas/books/feature-form-samples/CLAUDE.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Ops Templates Sample Book
|
||||
|
||||
## Purpose
|
||||
**SAMPLE DATA** - Example filled ops/support templates for demonstration and testing purposes. These are realistic examples to work with while actual definitions are pending from ops/support team.
|
||||
|
||||
Use these to:
|
||||
- Understand the template structure
|
||||
- Test tooling and workflows
|
||||
- Demo the feature-flow pipeline
|
||||
|
||||
Real templates will follow the same structure but with validated content.
|
||||
|
||||
## Structure
|
||||
|
||||
```
|
||||
ops-templates-sample/
|
||||
├── pet-owner/ # 5 flows for pet owners
|
||||
│ ├── 01-registro.md
|
||||
│ ├── 02-reservar-turno.md
|
||||
│ ├── 03-gestion-mascotas.md
|
||||
│ ├── 04-pago-turno.md
|
||||
│ └── 05-historial-medico.md
|
||||
├── veterinarian/ # 5 flows for vets
|
||||
│ ├── 01-aceptar-solicitud.md
|
||||
│ ├── 02-gestion-agenda.md
|
||||
│ ├── 03-realizar-visita.md
|
||||
│ ├── 04-zonas-cobertura.md
|
||||
│ └── 05-historial-pacientes.md
|
||||
└── backoffice/ # 5 flows for admins
|
||||
├── 01-gestion-solicitudes.md
|
||||
├── 02-gestion-usuarios.md
|
||||
├── 03-gestion-servicios.md
|
||||
├── 04-reembolsos.md
|
||||
└── 05-reportes.md
|
||||
```
|
||||
|
||||
## Template Format
|
||||
|
||||
Each file follows the standard ops template:
|
||||
|
||||
```markdown
|
||||
# [Nombre del Flujo]
|
||||
|
||||
## Tipo de usuario
|
||||
## Donde empieza
|
||||
## Que quiere hacer el usuario
|
||||
## Pasos
|
||||
## Que deberia pasar
|
||||
## Problemas comunes
|
||||
## Casos especiales
|
||||
## Flujos relacionados
|
||||
## Notas tecnicas
|
||||
```
|
||||
|
||||
## Corresponding Gherkin
|
||||
|
||||
Each template has corresponding `.feature` files in:
|
||||
- `album/book/gherkin-sample/es/` - Spanish keywords (Dado/Cuando/Entonces)
|
||||
- `album/book/gherkin-sample/en/` - English keywords (Given/When/Then)
|
||||
|
||||
## Usage
|
||||
|
||||
1. **Support/Ops**: Use templates to document new flows
|
||||
2. **Dev**: Convert templates to Gherkin specs
|
||||
3. **QA**: Use Gherkin to derive test cases
|
||||
4. **Product**: Review templates for completeness
|
||||
|
||||
## Source Template
|
||||
|
||||
The base template is at: `album/template/ops-flow/plantilla-flujo.md`
|
||||
|
||||
## Coverage
|
||||
|
||||
| Area | Flows | Status |
|
||||
|------|-------|--------|
|
||||
| Pet Owner | 5 | Complete |
|
||||
| Veterinarian | 5 | Complete |
|
||||
| Backoffice | 5 | Complete |
|
||||
| **Total** | **15** | |
|
||||
335
cfg/amar/atlas/books/feature-form-samples/detail.html
Normal file
335
cfg/amar/atlas/books/feature-form-samples/detail.html
Normal file
@@ -0,0 +1,335 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ filename }} - Ops Template</title>
|
||||
<style>
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
font-family: system-ui, -apple-system, sans-serif;
|
||||
background: #f8fafc;
|
||||
color: #1e293b;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.container { max-width: 800px; margin: 0 auto; padding: 2rem 1rem; }
|
||||
header { margin-bottom: 1.5rem; }
|
||||
.breadcrumb { font-size: 0.9rem; color: #64748b; margin-bottom: 0.5rem; }
|
||||
.breadcrumb a { color: #15803d; text-decoration: none; }
|
||||
.breadcrumb a:hover { text-decoration: underline; }
|
||||
h1 { font-size: 1.5rem; color: #15803d; }
|
||||
.meta {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.5rem;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.meta span {
|
||||
background: #f1f5f9;
|
||||
padding: 0.2rem 0.5rem;
|
||||
border-radius: 4px;
|
||||
color: #64748b;
|
||||
}
|
||||
.meta .sample { background: #fef3c7; color: #92400e; }
|
||||
|
||||
/* Form-like styling */
|
||||
.form-card {
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
overflow: hidden;
|
||||
}
|
||||
.form-header {
|
||||
background: linear-gradient(135deg, #15803d, #22c55e);
|
||||
color: white;
|
||||
padding: 1rem 1.5rem;
|
||||
}
|
||||
.form-header h2 { font-size: 1.1rem; font-weight: 600; }
|
||||
.form-body { padding: 1.5rem; }
|
||||
|
||||
.field {
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
||||
.field:last-child { margin-bottom: 0; }
|
||||
.field-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
color: #64748b;
|
||||
margin-bottom: 0.35rem;
|
||||
}
|
||||
.field-label .edit-icon {
|
||||
cursor: pointer;
|
||||
opacity: 0.5;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.field-label .edit-icon:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.field-value {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 6px;
|
||||
padding: 0.75rem;
|
||||
font-size: 0.95rem;
|
||||
color: #1e293b;
|
||||
min-height: 2.5rem;
|
||||
}
|
||||
.field-value:focus-within {
|
||||
border-color: #15803d;
|
||||
outline: none;
|
||||
box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.1);
|
||||
}
|
||||
.field-value.multiline {
|
||||
min-height: 4rem;
|
||||
}
|
||||
.field-value ul, .field-value ol {
|
||||
margin: 0;
|
||||
padding-left: 1.25rem;
|
||||
}
|
||||
.field-value li {
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.field-value p {
|
||||
margin: 0 0 0.5rem 0;
|
||||
}
|
||||
.field-value p:last-child { margin-bottom: 0; }
|
||||
.field-textarea {
|
||||
display: none;
|
||||
width: 100%;
|
||||
min-height: 100px;
|
||||
padding: 0.75rem;
|
||||
font-size: 0.95rem;
|
||||
font-family: inherit;
|
||||
border: 1px solid #15803d;
|
||||
border-radius: 6px;
|
||||
resize: vertical;
|
||||
box-shadow: 0 0 0 3px rgba(21, 128, 61, 0.1);
|
||||
}
|
||||
.field.editing .field-value { display: none; }
|
||||
.field.editing .field-textarea { display: block; }
|
||||
|
||||
/* Special field styles */
|
||||
.field-steps .field-value {
|
||||
counter-reset: step;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
.field-steps ol {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
.field-steps li {
|
||||
position: relative;
|
||||
padding-left: 2rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.field-steps li::before {
|
||||
counter-increment: step;
|
||||
content: counter(step);
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
background: #15803d;
|
||||
color: white;
|
||||
border-radius: 50%;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.field-problems .field-value {
|
||||
background: #fef2f2;
|
||||
border-color: #fecaca;
|
||||
}
|
||||
.field-problems li::before {
|
||||
content: '!';
|
||||
color: #dc2626;
|
||||
font-weight: bold;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.field-special .field-value {
|
||||
background: #fffbeb;
|
||||
border-color: #fde68a;
|
||||
}
|
||||
|
||||
.field-technical .field-value {
|
||||
background: #f0fdf4;
|
||||
border-color: #bbf7d0;
|
||||
font-family: 'JetBrains Mono', monospace;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.field-technical code {
|
||||
background: #dcfce7;
|
||||
padding: 0.1rem 0.35rem;
|
||||
border-radius: 3px;
|
||||
font-size: 0.85em;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
margin-top: 1.5rem;
|
||||
padding: 1rem;
|
||||
background: #f0fdf4;
|
||||
border: 1px solid #bbf7d0;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.sidebar h3 { font-size: 0.8rem; color: #15803d; margin-bottom: 0.75rem; text-transform: uppercase; }
|
||||
.sidebar a {
|
||||
display: block;
|
||||
color: #15803d;
|
||||
text-decoration: none;
|
||||
padding: 0.35rem 0;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.sidebar a:hover { text-decoration: underline; }
|
||||
|
||||
footer {
|
||||
margin-top: 2rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid #e2e8f0;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
footer a { color: #15803d; text-decoration: none; }
|
||||
footer a:hover { text-decoration: underline; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<div class="breadcrumb">
|
||||
<a href="/">Album</a> / <a href="/book/ops-templates/">Ops Templates</a> / {{ user_type }}
|
||||
</div>
|
||||
<h1>{{ filename.replace('.md', '').replace('-', ' ').title() }}</h1>
|
||||
<div class="meta">
|
||||
<span>{{ user_type }}</span>
|
||||
<span class="sample">Sample</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="form-card">
|
||||
<div class="form-header">
|
||||
<h2>User Flow Template</h2>
|
||||
</div>
|
||||
<div class="form-body" id="form-content">
|
||||
<!-- Content will be parsed and inserted here -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sidebar">
|
||||
<h3>Related</h3>
|
||||
<a href="/book/gherkin/es/{{ user_type }}/{{ filename.replace('.md', '.feature') }}">Gherkin (Spanish)</a>
|
||||
<a href="/book/gherkin/en/{{ user_type }}/{{ filename.replace('.md', '.feature') }}">Gherkin (English)</a>
|
||||
<a href="/book/feature-flow/">Feature Flow Pipeline</a>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<a href="/book/ops-templates/">← All Templates</a>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const rawContent = {{ content | tojson }};
|
||||
|
||||
function parseMarkdown(md) {
|
||||
const sections = {};
|
||||
let currentSection = null;
|
||||
let currentContent = [];
|
||||
|
||||
const lines = md.split('\n');
|
||||
|
||||
for (const line of lines) {
|
||||
if (line.startsWith('## ')) {
|
||||
if (currentSection) {
|
||||
sections[currentSection] = currentContent.join('\n').trim();
|
||||
}
|
||||
currentSection = line.replace('## ', '').trim();
|
||||
currentContent = [];
|
||||
} else if (line.startsWith('# ')) {
|
||||
sections['_title'] = line.replace('# ', '').trim();
|
||||
} else if (currentSection) {
|
||||
currentContent.push(line);
|
||||
}
|
||||
}
|
||||
if (currentSection) {
|
||||
sections[currentSection] = currentContent.join('\n').trim();
|
||||
}
|
||||
return sections;
|
||||
}
|
||||
|
||||
function formatContent(content) {
|
||||
if (!content) return '';
|
||||
|
||||
// Convert markdown lists to HTML
|
||||
let html = content
|
||||
.replace(/^(\d+)\.\s+(.*)$/gm, '<li>$2</li>')
|
||||
.replace(/^-\s+(.*)$/gm, '<li>$1</li>')
|
||||
.replace(/`([^`]+)`/g, '<code>$1</code>');
|
||||
|
||||
// Wrap consecutive li elements in ul/ol
|
||||
if (html.includes('<li>')) {
|
||||
if (content.match(/^\d+\./m)) {
|
||||
html = '<ol>' + html + '</ol>';
|
||||
} else {
|
||||
html = '<ul>' + html + '</ul>';
|
||||
}
|
||||
}
|
||||
|
||||
// Convert line breaks to paragraphs for non-list content
|
||||
if (!html.includes('<li>')) {
|
||||
html = html.split('\n').filter(l => l.trim()).map(l => '<p>' + l + '</p>').join('');
|
||||
}
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function createField(label, content, className = '') {
|
||||
if (!content) return '';
|
||||
return `
|
||||
<div class="field ${className}">
|
||||
<label class="field-label">${label} <span class="edit-icon" onclick="toggleEdit(this)" title="Edit field">✎</span></label>
|
||||
<div class="field-value ${content.includes('\n') ? 'multiline' : ''}">${formatContent(content)}</div>
|
||||
<textarea class="field-textarea">${content}</textarea>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
function toggleEdit(icon) {
|
||||
const field = icon.closest('.field');
|
||||
field.classList.toggle('editing');
|
||||
if (field.classList.contains('editing')) {
|
||||
field.querySelector('.field-textarea').focus();
|
||||
}
|
||||
}
|
||||
|
||||
const sections = parseMarkdown(rawContent);
|
||||
const container = document.getElementById('form-content');
|
||||
|
||||
const fieldMap = [
|
||||
{ key: 'Tipo de usuario', label: 'Tipo de Usuario', class: '' },
|
||||
{ key: 'Donde empieza', label: 'Punto de Entrada', class: '' },
|
||||
{ key: 'Que quiere hacer el usuario', label: 'Objetivo del Usuario', class: '' },
|
||||
{ key: 'Pasos', label: 'Pasos', class: 'field-steps' },
|
||||
{ key: 'Que deberia pasar', label: 'Resultado Esperado', class: '' },
|
||||
{ key: 'Problemas comunes', label: 'Problemas Comunes', class: 'field-problems' },
|
||||
{ key: 'Casos especiales', label: 'Casos Especiales', class: 'field-special' },
|
||||
{ key: 'Flujos relacionados', label: 'Flujos Relacionados', class: '' },
|
||||
{ key: 'Notas tecnicas', label: 'Notas Tecnicas', class: 'field-technical' },
|
||||
];
|
||||
|
||||
let html = '';
|
||||
for (const field of fieldMap) {
|
||||
if (sections[field.key]) {
|
||||
html += createField(field.label, sections[field.key], field.class);
|
||||
}
|
||||
}
|
||||
container.innerHTML = html;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,92 @@
|
||||
# Gestion de Solicitudes de Servicio
|
||||
|
||||
## Tipo de usuario
|
||||
Administrador / Operaciones
|
||||
|
||||
## Donde empieza
|
||||
Backoffice `/admin/` -> Dashboard o Seccion "Solicitudes"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Ver, filtrar y gestionar todas las solicitudes de servicio del sistema
|
||||
|
||||
## Pasos - Ver solicitudes
|
||||
|
||||
1. Acceder al backoffice
|
||||
2. Ir a seccion "Solicitudes"
|
||||
3. Ver listado con todas las solicitudes
|
||||
4. Usar filtros para encontrar solicitudes especificas:
|
||||
- Por estado (Pendiente, Coordinado, Pagado, Completado, Cancelado)
|
||||
- Por fecha
|
||||
- Por barrio/zona
|
||||
- Por veterinario
|
||||
- Por dueno
|
||||
|
||||
## Pasos - Ver detalle de solicitud
|
||||
|
||||
1. Click en una solicitud del listado
|
||||
2. Ver toda la informacion:
|
||||
- Datos del dueno
|
||||
- Datos de la mascota
|
||||
- Servicios solicitados
|
||||
- Fechas preferidas
|
||||
- Veterinario asignado (si hay)
|
||||
- Estado de pago
|
||||
- Historial de cambios de estado
|
||||
|
||||
## Pasos - Asignar veterinario manualmente
|
||||
|
||||
1. Abrir solicitud en estado "Pendiente"
|
||||
2. Click en "Asignar veterinario"
|
||||
3. Ver lista de vets disponibles en la zona
|
||||
4. Seleccionar veterinario
|
||||
5. Seleccionar fecha y hora
|
||||
6. Confirmar asignacion
|
||||
7. Sistema notifica al vet y al dueno
|
||||
|
||||
## Pasos - Cambiar estado manualmente
|
||||
|
||||
1. Abrir solicitud
|
||||
2. Click en "Cambiar estado"
|
||||
3. Seleccionar nuevo estado
|
||||
4. Ingresar motivo (si aplica)
|
||||
5. Confirmar
|
||||
6. Se registra en el historial
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Vision completa de todas las solicitudes
|
||||
- Capacidad de intervenir cuando algo falla
|
||||
- Trazabilidad de cambios
|
||||
- Notificaciones a las partes afectadas
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Solicitud sin vet disponible en la zona
|
||||
- Usuario pago pero webhook fallo
|
||||
- Vet no puede asistir y hay que reasignar
|
||||
- Dueno quiere cancelar pero ya pago
|
||||
- Solicitudes duplicadas del mismo dueno
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Solicitud urgente sin vets disponibles
|
||||
- Reasignacion a ultimo momento
|
||||
- Cancelacion con reembolso
|
||||
- Solicitud con datos incompletos
|
||||
- Dueno no responde a confirmaciones
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Proceso de reembolso
|
||||
- Gestion de usuarios
|
||||
- Reportes
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /solicitudes/api/v1/service-requests/` (listado con filtros)
|
||||
- `GET /solicitudes/api/v1/service-requests/{id}/` (detalle)
|
||||
- `PATCH /solicitudes/api/v1/service-requests/{id}/` (asignar vet)
|
||||
- `PATCH /solicitudes/api/v1/change-service-request-state/` (cambiar estado)
|
||||
- Estados validos: pending, coordinated, payed, completed, cancelled
|
||||
- Permisos: solo staff puede ver todas las solicitudes
|
||||
@@ -0,0 +1,106 @@
|
||||
# Gestion de Usuarios
|
||||
|
||||
## Tipo de usuario
|
||||
Administrador / Operaciones
|
||||
|
||||
## Donde empieza
|
||||
Backoffice `/admin/` -> Seccion "Usuarios" o "Duenos" / "Veterinarios"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Administrar duenos de mascotas y veterinarios del sistema
|
||||
|
||||
## Pasos - Ver/Buscar duenos
|
||||
|
||||
1. Ir a "Duenos de mascotas"
|
||||
2. Ver listado de todos los duenos
|
||||
3. Usar buscador (nombre, email, telefono)
|
||||
4. Filtrar por:
|
||||
- Tipo (Registrado / Invitado)
|
||||
- Fecha de registro
|
||||
- Con/sin turnos activos
|
||||
|
||||
## Pasos - Ver detalle de dueno
|
||||
|
||||
1. Click en un dueno
|
||||
2. Ver informacion completa:
|
||||
- Datos personales
|
||||
- Direcciones registradas
|
||||
- Mascotas
|
||||
- Historial de solicitudes
|
||||
- Historial de pagos
|
||||
|
||||
## Pasos - Editar dueno
|
||||
|
||||
1. En el detalle, click "Editar"
|
||||
2. Modificar campos permitidos:
|
||||
- Nombre
|
||||
- Telefono
|
||||
- Email
|
||||
- Direccion
|
||||
3. Guardar cambios
|
||||
|
||||
## Pasos - Gestionar veterinarios
|
||||
|
||||
1. Ir a "Veterinarios"
|
||||
2. Ver listado con:
|
||||
- Nombre y matricula
|
||||
- Zonas de cobertura
|
||||
- Estado (Activo/Inactivo)
|
||||
- Turnos del mes
|
||||
|
||||
## Pasos - Agregar nuevo veterinario
|
||||
|
||||
1. Click en "Agregar veterinario"
|
||||
2. Completar datos:
|
||||
- Nombre completo
|
||||
- Numero de matricula
|
||||
- Email
|
||||
- Telefono
|
||||
- Especialidades
|
||||
- Zonas de cobertura inicial
|
||||
3. Crear credenciales de acceso
|
||||
4. Guardar
|
||||
|
||||
## Pasos - Desactivar veterinario
|
||||
|
||||
1. Abrir perfil del vet
|
||||
2. Click en "Desactivar"
|
||||
3. Confirmar
|
||||
4. Vet deja de recibir solicitudes
|
||||
5. Visitas ya aceptadas se mantienen o se reasignan
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Gestion completa de usuarios del sistema
|
||||
- Capacidad de corregir datos erroneos
|
||||
- Alta/baja de veterinarios
|
||||
- Vision del estado de cada usuario
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Duenos duplicados (se registraron con email diferente)
|
||||
- Vet quiere darse de baja pero tiene citas pendientes
|
||||
- Email incorrecto y no reciben notificaciones
|
||||
- Cuenta de invitado que quiere convertirse en registrada
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Fusionar cuentas duplicadas
|
||||
- Transferir mascota a otro dueno
|
||||
- Vet de vacaciones temporalmente
|
||||
- Cambio de numero de matricula
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Gestion de solicitudes (ver historial por usuario)
|
||||
- Reportes (filtrar por usuario)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /mascotas/api/v1/pet-owners/` (duenos)
|
||||
- `GET /mascotas/api/v1/veterinarians/` (vets)
|
||||
- `POST /mascotas/api/v1/veterinarians/` (crear vet)
|
||||
- `PATCH /mascotas/api/v1/veterinarians/{id}/` (editar/desactivar)
|
||||
- Permisos: solo staff puede modificar usuarios
|
||||
- Soft delete para mantener historial
|
||||
@@ -0,0 +1,98 @@
|
||||
# Gestion de Servicios y Precios
|
||||
|
||||
## Tipo de usuario
|
||||
Administrador
|
||||
|
||||
## Donde empieza
|
||||
Backoffice `/admin/` -> Seccion "Servicios" o Django Admin -> Productos
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Administrar el catalogo de servicios veterinarios y sus precios
|
||||
|
||||
## Pasos - Ver servicios
|
||||
|
||||
1. Ir a "Servicios"
|
||||
2. Ver listado de todos los servicios
|
||||
3. Filtrar por:
|
||||
- Categoria (Vacunacion, Consulta, Cirugia, etc.)
|
||||
- Tipo de mascota (Perro, Gato, Ambos)
|
||||
- Estado (Activo/Inactivo)
|
||||
|
||||
## Pasos - Agregar nuevo servicio
|
||||
|
||||
1. Click en "Agregar servicio"
|
||||
2. Completar datos:
|
||||
- Nombre del servicio
|
||||
- Descripcion
|
||||
- Categoria
|
||||
- Tipo de mascota aplicable
|
||||
- Precio base
|
||||
- Duracion estimada
|
||||
- Requiere otros servicios (dependencias)
|
||||
3. Guardar
|
||||
|
||||
## Pasos - Editar servicio
|
||||
|
||||
1. Abrir servicio existente
|
||||
2. Modificar campos
|
||||
3. Guardar
|
||||
4. Cambios aplican a nuevas solicitudes
|
||||
|
||||
## Pasos - Gestionar precios
|
||||
|
||||
1. Abrir servicio
|
||||
2. Ir a seccion "Precios"
|
||||
3. Ver precio actual
|
||||
4. Para cambiar precio:
|
||||
- Click "Agregar precio"
|
||||
- Ingresar monto
|
||||
- Definir fecha de vigencia
|
||||
- Guardar
|
||||
5. Precio anterior queda en historial
|
||||
|
||||
## Pasos - Configurar combos
|
||||
|
||||
1. Ir a "Combos" o "Paquetes"
|
||||
2. Crear nuevo combo:
|
||||
- Nombre del combo
|
||||
- Servicios incluidos
|
||||
- Precio del combo (con descuento)
|
||||
- Condiciones de aplicacion
|
||||
3. Guardar
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Catalogo actualizado de servicios
|
||||
- Precios correctos en el turnero
|
||||
- Combos aplicados automaticamente
|
||||
- Historial de precios para facturacion
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Cambio de precio afecta solicitudes ya creadas
|
||||
- Servicio deprecado pero con solicitudes pendientes
|
||||
- Combo no se aplica automaticamente
|
||||
- Precio diferente por zona/vet
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Servicio con precio variable (depende de peso mascota)
|
||||
- Servicio estacional (solo ciertas epocas)
|
||||
- Promocion temporal
|
||||
- Precio especial por vet
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Turnero (muestra servicios disponibles)
|
||||
- Facturacion (usa precios)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /productos/api/v1/services/` (servicios)
|
||||
- `POST /productos/api/v1/services/` (crear)
|
||||
- `PATCH /productos/api/v1/services/{id}/` (editar)
|
||||
- `GET /productos/api/v1/prices/` (precios)
|
||||
- `POST /productos/api/v1/prices/` (nuevo precio)
|
||||
- Modelo Price tiene fecha de vigencia
|
||||
- Precio se congela al momento de crear solicitud
|
||||
@@ -0,0 +1,82 @@
|
||||
# Proceso de Reembolso
|
||||
|
||||
## Tipo de usuario
|
||||
Administrador / Operaciones
|
||||
|
||||
## Donde empieza
|
||||
Backoffice -> Solicitud pagada -> "Procesar reembolso" o Seccion "Pagos"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Procesar un reembolso para un turno que fue cancelado despues del pago
|
||||
|
||||
## Pasos - Identificar solicitud a reembolsar
|
||||
|
||||
1. Buscar la solicitud por:
|
||||
- ID de solicitud
|
||||
- Nombre del dueno
|
||||
- Numero de operacion de Mercado Pago
|
||||
2. Verificar que esta en estado "Pagado"
|
||||
3. Verificar que el pago fue exitoso
|
||||
|
||||
## Pasos - Procesar reembolso
|
||||
|
||||
1. Abrir detalle de la solicitud
|
||||
2. Click en "Procesar reembolso"
|
||||
3. Ver informacion del pago:
|
||||
- Monto pagado
|
||||
- Fecha de pago
|
||||
- Metodo de pago
|
||||
- ID de operacion MP
|
||||
4. Seleccionar tipo de reembolso:
|
||||
- Total
|
||||
- Parcial (ingresar monto)
|
||||
5. Ingresar motivo del reembolso
|
||||
6. Confirmar
|
||||
7. Sistema procesa reembolso en Mercado Pago
|
||||
8. Actualizar estado de la solicitud
|
||||
|
||||
## Pasos - Verificar reembolso
|
||||
|
||||
1. Ir a seccion "Pagos" o historial de la solicitud
|
||||
2. Verificar que el reembolso fue procesado
|
||||
3. Ver estado del reembolso en Mercado Pago
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Reembolso procesado en Mercado Pago
|
||||
- Dueno recibe el dinero (segun tiempos de MP)
|
||||
- Solicitud actualiza estado
|
||||
- Registro en el historial
|
||||
- Dueno notificado por email
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Reembolso parcial no soportado por el metodo de pago
|
||||
- Plazo de reembolso vencido (politica de MP)
|
||||
- Dueno reclama que no recibio el dinero
|
||||
- Reembolso duplicado por error
|
||||
- Pago original en disputa
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Reembolso por mala atencion
|
||||
- Reembolso parcial (solo algunos servicios)
|
||||
- Visita incompleta (reembolso proporcional)
|
||||
- Dueno quiere credito en vez de reembolso
|
||||
- Reembolso fuera de plazo (solucion alternativa)
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Gestion de solicitudes
|
||||
- Cancelacion de turno
|
||||
- Atencion al cliente
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- API Mercado Pago: `POST /v1/payments/{id}/refunds`
|
||||
- Tiempos de acreditacion:
|
||||
- Tarjeta credito: 1-2 estados de cuenta
|
||||
- Tarjeta debito: 5-10 dias habiles
|
||||
- Dinero en cuenta MP: inmediato
|
||||
- Plazo maximo para reembolso: 180 dias desde el pago
|
||||
- Se debe guardar log de todos los reembolsos
|
||||
@@ -0,0 +1,99 @@
|
||||
# Reportes y Dashboard
|
||||
|
||||
## Tipo de usuario
|
||||
Administrador / Gerencia
|
||||
|
||||
## Donde empieza
|
||||
Backoffice `/admin/` -> Dashboard o Seccion "Reportes"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Ver metricas del negocio, generar reportes y analizar datos
|
||||
|
||||
## Pasos - Ver dashboard
|
||||
|
||||
1. Acceder al backoffice
|
||||
2. Ver dashboard principal con:
|
||||
- Solicitudes del dia/semana/mes
|
||||
- Ingresos del periodo
|
||||
- Visitas completadas
|
||||
- Conversion (solicitudes -> pagos)
|
||||
- Vets activos
|
||||
|
||||
## Pasos - Generar reporte de solicitudes
|
||||
|
||||
1. Ir a "Reportes" -> "Solicitudes"
|
||||
2. Seleccionar rango de fechas
|
||||
3. Filtrar por:
|
||||
- Estado
|
||||
- Zona
|
||||
- Veterinario
|
||||
- Tipo de servicio
|
||||
4. Click "Generar"
|
||||
5. Ver tabla con resultados
|
||||
6. Opcion de exportar (CSV/Excel)
|
||||
|
||||
## Pasos - Generar reporte de ingresos
|
||||
|
||||
1. Ir a "Reportes" -> "Ingresos"
|
||||
2. Seleccionar periodo
|
||||
3. Agrupar por:
|
||||
- Dia/Semana/Mes
|
||||
- Veterinario
|
||||
- Servicio
|
||||
- Zona
|
||||
4. Ver grafico y tabla
|
||||
5. Exportar si es necesario
|
||||
|
||||
## Pasos - Reporte de veterinarios
|
||||
|
||||
1. Ir a "Reportes" -> "Veterinarios"
|
||||
2. Ver para cada vet:
|
||||
- Visitas completadas
|
||||
- Calificacion promedio
|
||||
- Ingresos generados
|
||||
- Tasa de cancelacion
|
||||
3. Filtrar por periodo
|
||||
4. Ordenar por metrica
|
||||
|
||||
## Pasos - Exportar datos
|
||||
|
||||
1. En cualquier reporte, click "Exportar"
|
||||
2. Seleccionar formato (CSV, Excel)
|
||||
3. Descargar archivo
|
||||
4. Usar para analisis externo o contabilidad
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Vision clara del estado del negocio
|
||||
- Datos para toma de decisiones
|
||||
- Reportes exportables para contabilidad
|
||||
- Identificacion de tendencias
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Datos no actualizados en tiempo real
|
||||
- Filtros que no devuelven lo esperado
|
||||
- Discrepancia entre reportes y realidad
|
||||
- Exportacion con formato incorrecto
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Reporte de prueba vs produccion
|
||||
- Datos historicos antes de implementar filtro
|
||||
- Comparativa año vs año
|
||||
- Reporte personalizado para inversores
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Gestion de solicitudes (fuente de datos)
|
||||
- Facturacion AFIP
|
||||
- Google Sheets sync
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- API:
|
||||
- `GET /mascotas/api/v1/stats-summary` (metricas principales)
|
||||
- `GET /solicitudes/api/v1/service-requests/?date_from=X&date_to=Y` (datos crudos)
|
||||
- Google Sheets: sincronizacion automatica via Celery
|
||||
- Dashboard actualiza cada 5 minutos
|
||||
- Reportes pesados: generar async y notificar cuando estan listos
|
||||
@@ -0,0 +1,55 @@
|
||||
# Registro de Usuario
|
||||
|
||||
## Tipo de usuario
|
||||
Dueno de mascota (nuevo)
|
||||
|
||||
## Donde empieza
|
||||
Pagina principal -> Boton "Registrarse" o `/register`
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Crear una cuenta nueva para poder reservar turnos y gestionar sus mascotas
|
||||
|
||||
## Pasos
|
||||
|
||||
1. Click en "Registrarse" en la pagina principal
|
||||
2. Ingresar email
|
||||
3. Ingresar contraseña
|
||||
4. Confirmar contraseña
|
||||
5. Aceptar terminos y condiciones
|
||||
6. Click en "Crear cuenta"
|
||||
7. Recibir email de verificacion
|
||||
8. Click en el link de verificacion
|
||||
9. Cuenta activada, redirige al dashboard
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Usuario creado en el sistema
|
||||
- Email de bienvenida enviado
|
||||
- Puede iniciar sesion inmediatamente
|
||||
- Ve su dashboard vacio (sin mascotas, sin turnos)
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- El email ya esta registrado pero el usuario no lo recuerda
|
||||
- El email de verificacion llega a spam
|
||||
- La contraseña no cumple los requisitos minimos
|
||||
- El usuario cierra el browser antes de verificar y no encuentra el email despues
|
||||
- Usuarios intentan registrarse con email de otra persona
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Si el email existe como usuario invitado (del turnero), deberia linkear las cuentas
|
||||
- Si el usuario ya tiene cuenta pero no verificada, reenviar email de verificacion
|
||||
- Registro desde el flujo de turnero (ya ingreso datos, solo falta contraseña)
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Login (despues de registrarse)
|
||||
- Turnero (puede disparar registro)
|
||||
- Recuperar contraseña (si ya tenia cuenta y no recuerda)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- API: `POST /common/users/create/`
|
||||
- Validacion de contraseña: minimo 8 caracteres, 1 numero, 1 mayuscula
|
||||
- Verificacion expira en 24 horas
|
||||
@@ -0,0 +1,77 @@
|
||||
# Reservar Turno (Turnero)
|
||||
|
||||
## Tipo de usuario
|
||||
Dueno de mascota (invitado, registrado, o recurrente)
|
||||
|
||||
## Donde empieza
|
||||
Pagina principal -> Boton "Agendar visita" o enlace directo `/turnero`
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Reservar un turno veterinario a domicilio para su mascota
|
||||
|
||||
## Pasos
|
||||
|
||||
1. Click en "Agendar visita"
|
||||
2. Ingresar direccion en el popup de cobertura
|
||||
3. Sistema verifica si hay cobertura en esa zona
|
||||
4. Si hay cobertura, click "Siguiente"
|
||||
5. Completar datos de la mascota:
|
||||
- Nombre
|
||||
- Tipo (Perro/Gato)
|
||||
- Raza (opcional)
|
||||
- Edad aproximada
|
||||
- Peso aproximado
|
||||
- Si esta castrado/a
|
||||
6. Seleccionar categoria de servicio (Vacunacion, Consulta, etc.)
|
||||
7. Seleccionar servicios especificos
|
||||
8. Ver que algunos servicios se agregan automaticamente (ej: consulta clinica)
|
||||
9. Seleccionar fechas preferidas (hasta 3)
|
||||
10. Seleccionar franja horaria preferida
|
||||
11. Ingresar datos de contacto:
|
||||
- Nombre completo
|
||||
- Telefono
|
||||
- Email
|
||||
12. Revisar resumen
|
||||
13. Enviar solicitud
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Solicitud creada con estado "Pendiente"
|
||||
- Email de confirmacion al usuario
|
||||
- Notificacion a veterinarios de la zona
|
||||
- Aparece en "Mis turnos" del usuario
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- No hay cobertura en la zona del usuario
|
||||
- El autocompletado de direcciones no encuentra la calle
|
||||
- Usuario no puede quitar "Consulta clinica" cuando selecciona vacunacion
|
||||
- Confunden "fecha preferida" con "fecha confirmada"
|
||||
- No entienden por que no pueden elegir hora exacta
|
||||
- El total no se muestra hasta el final y sorprende al usuario
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Usuario invitado: se crea como guest, puede registrarse despues
|
||||
- Usuario logueado: datos pre-llenados, mascota puede ser existente
|
||||
- Usuario recurrente (mismo email): sistema detecta y sugiere linkear
|
||||
- Mascota ya castrada: no mostrar servicio de castracion
|
||||
- Servicios combo: algunos incluyen otros automaticamente
|
||||
- Zona sin cobertura: mostrar formulario para avisar cuando haya
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Ver mis turnos (despues de reservar)
|
||||
- Pagar turno (cuando se coordina)
|
||||
- Cancelar turno
|
||||
- Agregar mascota (si ya tiene cuenta)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `POST /mascotas/api/v1/coverage-check/` (verificar cobertura)
|
||||
- `POST /mascotas/api/v1/pet-owners/` (crear dueno invitado)
|
||||
- `POST /mascotas/api/v1/pets/` (crear mascota)
|
||||
- `GET /productos/api/v1/services/` (obtener servicios)
|
||||
- `POST /solicitudes/api/v1/service-requests/` (crear solicitud)
|
||||
- Estados de solicitud: pending -> coordinated -> payed -> completed
|
||||
@@ -0,0 +1,79 @@
|
||||
# Gestion de Mascotas
|
||||
|
||||
## Tipo de usuario
|
||||
Dueno de mascota (registrado)
|
||||
|
||||
## Donde empieza
|
||||
Dashboard -> Seccion "Mis mascotas" o `/user/pets`
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Agregar, editar o ver informacion de sus mascotas
|
||||
|
||||
## Pasos - Agregar mascota
|
||||
|
||||
1. Ir a "Mis mascotas"
|
||||
2. Click en "Agregar mascota"
|
||||
3. Completar formulario:
|
||||
- Nombre (obligatorio)
|
||||
- Tipo: Perro o Gato (obligatorio)
|
||||
- Raza (opcional, lista segun tipo)
|
||||
- Fecha de nacimiento o edad aproximada
|
||||
- Peso en kg (opcional)
|
||||
- Sexo
|
||||
- Esta castrado/a (checkbox)
|
||||
- Foto (opcional)
|
||||
4. Guardar
|
||||
|
||||
## Pasos - Editar mascota
|
||||
|
||||
1. Ir a "Mis mascotas"
|
||||
2. Click en la tarjeta de la mascota
|
||||
3. Click en "Editar"
|
||||
4. Modificar campos deseados
|
||||
5. Guardar
|
||||
|
||||
## Pasos - Ver historial medico
|
||||
|
||||
1. Ir a "Mis mascotas"
|
||||
2. Click en la tarjeta de la mascota
|
||||
3. Ver seccion "Historial de visitas"
|
||||
4. Click en una visita para ver el informe completo
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Mascota aparece en el listado
|
||||
- Disponible para seleccionar en el turnero
|
||||
- Historial medico accesible
|
||||
- Foto visible en la tarjeta
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Usuarios quieren agregar mascotas de otros tipos (conejo, ave) - no soportado
|
||||
- No encuentran donde ver el historial medico
|
||||
- Quieren eliminar mascota pero tiene turnos pendientes
|
||||
- Foto muy grande no sube
|
||||
- Confunden edad con fecha de nacimiento
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Mascota creada desde turnero como invitado: aparece cuando linkea cuenta
|
||||
- Mascota fallecida: deberia poder marcarse (soft delete)
|
||||
- Multiples mascotas con mismo nombre: permitido pero confuso
|
||||
- Cambio de peso significativo: registrar historial?
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Reservar turno (seleccionar mascota existente)
|
||||
- Ver historial medico
|
||||
- Registro (crear primera mascota)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /mascotas/api/v1/pets/` (listar)
|
||||
- `POST /mascotas/api/v1/pets/` (crear)
|
||||
- `PATCH /mascotas/api/v1/pets/{id}/` (editar)
|
||||
- `DELETE /mascotas/api/v1/pets/{id}/` (soft delete)
|
||||
- `GET /mascotas/api/v1/vet-visits/?pet={id}` (historial)
|
||||
- Tipos soportados: solo Perro y Gato por ahora
|
||||
- Razas: lista predefinida por tipo
|
||||
@@ -0,0 +1,66 @@
|
||||
# Pago de Turno
|
||||
|
||||
## Tipo de usuario
|
||||
Dueno de mascota (con turno coordinado)
|
||||
|
||||
## Donde empieza
|
||||
Email de confirmacion de turno -> Link "Pagar" o Dashboard -> Mis turnos -> Boton "Pagar"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Pagar un turno que ya fue coordinado con fecha y veterinario asignado
|
||||
|
||||
## Pasos
|
||||
|
||||
1. Recibir email/notificacion de que el turno fue coordinado
|
||||
2. Ver detalle del turno con fecha, hora y veterinario asignado
|
||||
3. Verificar el monto total
|
||||
4. Click en "Pagar"
|
||||
5. Redireccion a Mercado Pago
|
||||
6. Seleccionar metodo de pago:
|
||||
- Tarjeta de credito/debito
|
||||
- Dinero en cuenta MP
|
||||
- Transferencia bancaria
|
||||
- Efectivo (Rapipago/PagoFacil)
|
||||
7. Completar pago
|
||||
8. Redireccion de vuelta a la plataforma
|
||||
9. Ver confirmacion de pago exitoso
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Estado del turno cambia a "Pagado"
|
||||
- Email de confirmacion de pago
|
||||
- Comprobante disponible
|
||||
- Veterinario notificado
|
||||
- Turno aparece como confirmado en el calendario
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Usuario cierra el browser durante el pago y no sabe si se proceso
|
||||
- Pago rechazado por fondos insuficientes
|
||||
- Link de pago expira y no pueden pagr
|
||||
- Quieren pagar en efectivo el dia de la visita
|
||||
- Precio cambio entre coordinacion y pago
|
||||
- Quieren aplicar descuento/cupon y no encuentran donde
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Pago parcial: no soportado actualmente
|
||||
- Pago con tarjeta rechazada: puede reintentar
|
||||
- Pago por transferencia: demora en acreditarse (pendiente de confirmacion)
|
||||
- Usuario paga pero webhook falla: requiere intervencion manual
|
||||
- Turno cancelado despues de pagar: proceso de reembolso
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Ver mis turnos (antes y despues de pagar)
|
||||
- Cancelar turno (si decide no pagar)
|
||||
- Contactar soporte (problemas con pago)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `POST /payments/api/v1/requests/{id}/preference/` (generar link MP)
|
||||
- Webhook: `POST /payments/mp/webhook/` (notificacion de MP)
|
||||
- Integracion: Mercado Pago Checkout Pro
|
||||
- Estados: coordinated -> payed (despues de webhook exitoso)
|
||||
- Timeout de preferencia: 24 horas
|
||||
@@ -0,0 +1,79 @@
|
||||
# Ver Historial Medico
|
||||
|
||||
## Tipo de usuario
|
||||
Dueno de mascota (registrado, con visitas completadas)
|
||||
|
||||
## Donde empieza
|
||||
Dashboard -> Mis mascotas -> Mascota -> "Ver historial" o Mis turnos -> Turno completado -> "Ver informe"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Ver los informes medicos de las visitas veterinarias de su mascota
|
||||
|
||||
## Pasos - Desde mascotas
|
||||
|
||||
1. Ir a "Mis mascotas"
|
||||
2. Seleccionar la mascota
|
||||
3. Ver seccion "Historial de visitas"
|
||||
4. Lista de visitas ordenadas por fecha (mas reciente primero)
|
||||
5. Click en una visita para ver detalle
|
||||
|
||||
## Pasos - Desde turnos
|
||||
|
||||
1. Ir a "Mis turnos"
|
||||
2. Filtrar por "Completados"
|
||||
3. Click en un turno completado
|
||||
4. Click en "Ver informe medico"
|
||||
|
||||
## Que muestra el informe
|
||||
|
||||
- Fecha de la visita
|
||||
- Veterinario que atendio
|
||||
- Motivo de consulta / servicios realizados
|
||||
- Examen fisico:
|
||||
- Peso registrado
|
||||
- Temperatura
|
||||
- Frecuencia cardiaca
|
||||
- Observaciones generales
|
||||
- Diagnostico
|
||||
- Tratamiento indicado
|
||||
- Medicamentos recetados (nombre, dosis, frecuencia, duracion)
|
||||
- Estudios solicitados
|
||||
- Proximos pasos / seguimiento recomendado
|
||||
- Observaciones adicionales
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Usuario puede ver todos los informes de sus mascotas
|
||||
- Puede descargar/imprimir el informe
|
||||
- Informacion clara y entendible
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Visita completada pero informe no cargado todavia
|
||||
- Usuario quiere editar algo del informe (no puede, es del vet)
|
||||
- Terminologia medica confusa
|
||||
- No encuentra informe de visita antigua
|
||||
- Quiere compartir informe con otro veterinario
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Visita sin informe: vet no lo cargo (deberia ser obligatorio)
|
||||
- Informe incompleto: campos vacios
|
||||
- Multiples visitas mismo dia: mostrar todas
|
||||
- Mascota transferida de otro dueno: historial previo?
|
||||
- Estudios pendientes: mostrar estado
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Gestion de mascotas
|
||||
- Reservar turno de seguimiento
|
||||
- Contactar veterinario (dudas sobre informe)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /mascotas/api/v1/vet-visits/?pet={id}` (listar visitas)
|
||||
- `GET /mascotas/api/v1/vet-visits/{id}/` (detalle visita)
|
||||
- `GET /mascotas/api/v1/vetvisitreport/?vet_visit={id}` (informe)
|
||||
- PDF: generado on-demand o pre-generado?
|
||||
- Permisos: solo dueno de la mascota puede ver
|
||||
@@ -0,0 +1,77 @@
|
||||
# Aceptar/Rechazar Solicitud de Servicio
|
||||
|
||||
## Tipo de usuario
|
||||
Veterinario
|
||||
|
||||
## Donde empieza
|
||||
Dashboard veterinario `/vet/` -> Seccion "Solicitudes pendientes"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Revisar las solicitudes de servicio en su zona y decidir si las acepta o rechaza
|
||||
|
||||
## Pasos - Aceptar solicitud
|
||||
|
||||
1. Ingresar al dashboard veterinario
|
||||
2. Ver listado de solicitudes pendientes en su zona de cobertura
|
||||
3. Click en una solicitud para ver detalle:
|
||||
- Datos del dueno (nombre, telefono, direccion)
|
||||
- Datos de la mascota (nombre, tipo, edad, historial previo)
|
||||
- Servicios solicitados
|
||||
- Fechas preferidas por el dueno
|
||||
4. Verificar disponibilidad en esas fechas
|
||||
5. Click en "Aceptar"
|
||||
6. Seleccionar fecha y hora disponible
|
||||
7. Confirmar aceptacion
|
||||
|
||||
## Pasos - Rechazar solicitud
|
||||
|
||||
1. Ver detalle de la solicitud
|
||||
2. Click en "Rechazar"
|
||||
3. Opcionalmente seleccionar motivo:
|
||||
- No tengo disponibilidad
|
||||
- Fuera de mi zona
|
||||
- No realizo este servicio
|
||||
- Otro
|
||||
4. Confirmar rechazo
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
Al aceptar:
|
||||
- Solicitud pasa a estado "Coordinado"
|
||||
- Vet queda asignado a la solicitud
|
||||
- Dueno recibe notificacion con fecha/hora y datos del vet
|
||||
- Aparece en el calendario del vet
|
||||
|
||||
Al rechazar:
|
||||
- Solicitud sigue disponible para otros vets
|
||||
- Si la rechazo yo, ya no la veo en mi lista
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Multiples vets aceptan la misma solicitud casi simultaneamente
|
||||
- El vet acepta pero el dueno no puede en esa fecha
|
||||
- No hay suficientes vets en la zona y la solicitud queda sin atender
|
||||
- Vet acepta por error y quiere deshacer
|
||||
- Las fechas preferidas ya pasaron
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Solicitud con mascota que el vet ya atendio antes: mostrar historial
|
||||
- Solicitud urgente/emergencia: destacar visualmente
|
||||
- Vet con agenda completa: no deberia poder aceptar
|
||||
- Solicitud con multiples mascotas: revisar tiempo necesario
|
||||
- Zona limite: solicitud que aparece para vets de zonas adyacentes
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Ver mi agenda (despues de aceptar)
|
||||
- Realizar visita
|
||||
- Cancelar visita aceptada
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /solicitudes/api/v1/service-requests/?state=pending&veterinarian_area=X`
|
||||
- `PATCH /solicitudes/api/v1/service-requests/{id}/` (aceptar/rechazar)
|
||||
- Race condition: backend debe manejar caso de aceptacion simultanea
|
||||
- Push notification al dueno cuando se acepta
|
||||
@@ -0,0 +1,87 @@
|
||||
# Gestion de Agenda
|
||||
|
||||
## Tipo de usuario
|
||||
Veterinario
|
||||
|
||||
## Donde empieza
|
||||
Dashboard veterinario `/vet/` -> Menu "Mi agenda" o `/vet/turnos`
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Ver su calendario de visitas, gestionar disponibilidad y marcar dias no disponibles
|
||||
|
||||
## Pasos - Ver agenda
|
||||
|
||||
1. Ir a "Mi agenda"
|
||||
2. Ver calendario con:
|
||||
- Visitas confirmadas (con detalle al hacer click)
|
||||
- Dias/horarios bloqueados
|
||||
- Disponibilidad por franja horaria
|
||||
3. Navegar entre semanas/meses
|
||||
4. Filtrar por estado (pendientes, confirmadas, completadas)
|
||||
|
||||
## Pasos - Configurar disponibilidad semanal
|
||||
|
||||
1. Ir a "Configuracion" -> "Mi disponibilidad"
|
||||
2. Para cada dia de la semana:
|
||||
- Marcar si trabajo ese dia
|
||||
- Definir franja horaria (ej: 9:00-18:00)
|
||||
- Definir pausa (ej: 13:00-14:00)
|
||||
3. Guardar configuracion
|
||||
|
||||
## Pasos - Bloquear dias especificos
|
||||
|
||||
1. En el calendario, click en un dia
|
||||
2. Seleccionar "Marcar como no disponible"
|
||||
3. Opcionalmente agregar motivo (vacaciones, curso, etc.)
|
||||
4. Confirmar
|
||||
5. Ese dia no aparece como opcion para nuevas solicitudes
|
||||
|
||||
## Pasos - Ver detalle de visita
|
||||
|
||||
1. Click en una visita en el calendario
|
||||
2. Ver informacion completa:
|
||||
- Dueno: nombre, telefono, direccion
|
||||
- Mascota: nombre, tipo, edad, foto
|
||||
- Servicios a realizar
|
||||
- Historial previo de esa mascota
|
||||
- Estado de pago
|
||||
- Notas especiales
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Calendario siempre actualizado con visitas
|
||||
- No puedo recibir solicitudes en dias bloqueados
|
||||
- Cambios de disponibilidad afectan solo solicitudes futuras
|
||||
- Puedo ver toda la informacion necesaria para la visita
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Vet olvida desbloquear dia despues de terminar vacaciones
|
||||
- Visitas muy seguidas en zonas distantes (logistica)
|
||||
- Vet quiere mover visita a otro horario
|
||||
- Visita cancelada a ultimo momento
|
||||
- Vet no marco indisponibilidad y le llegan solicitudes que no puede atender
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Visita reprogramada: mostrar historial de cambios
|
||||
- Visita cancelada por el dueno: liberar espacio en agenda
|
||||
- Emergencia: poder agregar visita fuera de horario normal
|
||||
- Feriados: bloquear automaticamente?
|
||||
- Multiples visitas mismo dia/zona: optimizar ruta?
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Aceptar solicitud (agrega a la agenda)
|
||||
- Realizar visita (inicia desde la agenda)
|
||||
- Gestionar zonas de cobertura
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /mascotas/api/v1/vet-visits/?veterinarian=X`
|
||||
- `GET /mascotas/api/v1/vet_availabilities/`
|
||||
- `PUT /mascotas/api/v1/vet_availabilities/{id}/`
|
||||
- `POST /mascotas/api/v1/vet_unavailabilities/` (dias bloqueados)
|
||||
- Vista calendario: usar libreria tipo FullCalendar
|
||||
- Colores por estado: pendiente (amarillo), pagado (verde), completado (azul)
|
||||
@@ -0,0 +1,97 @@
|
||||
# Realizar Visita y Crear Informe
|
||||
|
||||
## Tipo de usuario
|
||||
Veterinario
|
||||
|
||||
## Donde empieza
|
||||
Agenda del dia -> Visita programada -> "Iniciar visita" o `/vet/visita/{id}`
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Registrar la visita medica, crear el informe clinico y completar el flujo
|
||||
|
||||
## Pasos - Antes de la visita
|
||||
|
||||
1. Ver agenda del dia
|
||||
2. Click en la visita programada
|
||||
3. Ver datos del dueno (direccion, telefono) para llegar
|
||||
4. Ver datos de la mascota e historial
|
||||
5. Preparar insumos segun servicios solicitados
|
||||
|
||||
## Pasos - Iniciar visita
|
||||
|
||||
1. Al llegar al domicilio, click "Iniciar visita"
|
||||
2. Estado cambia a "En progreso"
|
||||
3. Se registra hora de inicio
|
||||
|
||||
## Pasos - Crear informe medico
|
||||
|
||||
1. Durante o despues de la atencion, ir a "Crear informe"
|
||||
2. Completar examen fisico:
|
||||
- Peso actual
|
||||
- Temperatura
|
||||
- Frecuencia cardiaca
|
||||
- Frecuencia respiratoria
|
||||
- Estado general (mucosas, hidratacion, etc.)
|
||||
3. Registrar hallazgos clinicos
|
||||
4. Escribir diagnostico
|
||||
5. Indicar tratamiento:
|
||||
- Descripcion del tratamiento
|
||||
- Medicamentos recetados (nombre, dosis, frecuencia, duracion)
|
||||
- Indicaciones especiales
|
||||
6. Solicitar estudios si es necesario:
|
||||
- Tipo de estudio
|
||||
- Laboratorio sugerido
|
||||
7. Programar seguimiento:
|
||||
- Fecha sugerida de control
|
||||
- Motivo del seguimiento
|
||||
8. Agregar observaciones adicionales
|
||||
9. Guardar informe
|
||||
|
||||
## Pasos - Completar visita
|
||||
|
||||
1. Verificar que el informe este guardado
|
||||
2. Click en "Completar visita"
|
||||
3. Confirmar finalizacion
|
||||
4. Se genera factura automaticamente (AFIP)
|
||||
5. Dueno recibe notificacion con acceso al informe
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Informe queda guardado y asociado a la mascota
|
||||
- Dueno puede ver el informe desde su cuenta
|
||||
- Se genera factura electronica
|
||||
- Visita se marca como "Completada"
|
||||
- Vet puede ver la visita en su historial
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Vet olvida completar el informe y cierra la visita
|
||||
- Mala conexion a internet durante la visita
|
||||
- Informe muy largo y se pierde por timeout
|
||||
- Dueno no esta en el domicilio
|
||||
- Mascota agresiva, no se puede atender
|
||||
- Necesita derivar a clinica
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Visita cancelada in situ: registrar motivo, posible cargo
|
||||
- Emergencia durante visita rutinaria: agregar servicios
|
||||
- Multiples mascotas en la visita: un informe por cada una
|
||||
- Vet necesita segundo opinion: derivar a especialista
|
||||
- Fallecimiento durante la visita: protocolo especial
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Ver historial de paciente (antes de atender)
|
||||
- Cobro de la visita (Mercado Pago del vet)
|
||||
- Seguimiento post-visita
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `PATCH /mascotas/api/v1/vet-visits/{id}/` (cambiar estado)
|
||||
- `POST /mascotas/api/v1/vetvisitreport/` (crear informe)
|
||||
- `GET /mascotas/api/v1/vet-visits/?pet=X` (historial previo)
|
||||
- Integracion AFIP via django_afip
|
||||
- Guardado automatico del informe cada 30 segundos
|
||||
- Modo offline: guardar localmente y sincronizar despues
|
||||
@@ -0,0 +1,66 @@
|
||||
# Gestionar Zonas de Cobertura
|
||||
|
||||
## Tipo de usuario
|
||||
Veterinario
|
||||
|
||||
## Donde empieza
|
||||
Dashboard veterinario -> Menu "Mi cobertura" o Perfil -> "Zonas de atencion"
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Definir en que barrios/zonas esta dispuesto a atender visitas a domicilio
|
||||
|
||||
## Pasos - Ver zonas actuales
|
||||
|
||||
1. Ir a "Mi cobertura"
|
||||
2. Ver mapa con zonas actualmente cubiertas
|
||||
3. Ver listado de barrios seleccionados
|
||||
|
||||
## Pasos - Agregar zona
|
||||
|
||||
1. En el mapa o listado, buscar el barrio
|
||||
2. Click en el barrio para seleccionarlo
|
||||
3. El barrio se agrega a mi cobertura
|
||||
4. Guardar cambios
|
||||
|
||||
## Pasos - Quitar zona
|
||||
|
||||
1. En mi listado de zonas
|
||||
2. Click en "X" o deseleccionar el barrio
|
||||
3. Confirmar eliminacion
|
||||
4. Guardar cambios
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Solo recibo solicitudes de las zonas que seleccione
|
||||
- Si agrego zona, empiezo a ver solicitudes pendientes de esa zona
|
||||
- Si quito zona, dejo de ver nuevas solicitudes de esa zona
|
||||
- Visitas ya aceptadas no se afectan
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Vet quiere zona muy especifica (solo algunas calles)
|
||||
- Zonas con poca demanda, vet no recibe solicitudes
|
||||
- Zonas con mucha demanda, vet saturado
|
||||
- Limites de zona confusos (calle pertenece a 2 barrios)
|
||||
- Vet quiere cobertura condicional (solo ciertos dias)
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Zona nueva no listada: solicitar a ops que la agregue
|
||||
- Cobertura temporal (ej: cubriendo a otro vet)
|
||||
- Cobertura por horario (mañana en zona A, tarde en zona B)
|
||||
- Vet se muda: actualizar todas las zonas
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Aceptar solicitud (solo veo solicitudes de mis zonas)
|
||||
- Ver agenda (optimizar ruta por zonas)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /common/api/v1/neighborhoods/` (lista de barrios)
|
||||
- `GET /mascotas/api/v1/veterinarians/{id}/` (zonas actuales)
|
||||
- `PATCH /mascotas/api/v1/veterinarians/{id}/` (actualizar zonas)
|
||||
- Modelo: Veterinarian tiene M2M con Neighborhood
|
||||
- Coeficiente de distancia por barrio para calcular viabilidad
|
||||
@@ -0,0 +1,81 @@
|
||||
# Ver Historial de Pacientes
|
||||
|
||||
## Tipo de usuario
|
||||
Veterinario
|
||||
|
||||
## Donde empieza
|
||||
Dashboard veterinario -> "Historia clinica" o `/vet/historia-clinica`
|
||||
|
||||
## Que quiere hacer el usuario
|
||||
Buscar y revisar el historial medico de pacientes que ha atendido
|
||||
|
||||
## Pasos - Buscar paciente
|
||||
|
||||
1. Ir a "Historia clinica"
|
||||
2. Usar el buscador:
|
||||
- Por nombre del dueno
|
||||
- Por nombre de la mascota
|
||||
- Por telefono
|
||||
- Por email
|
||||
3. Ver resultados de busqueda
|
||||
4. Click en el paciente deseado
|
||||
|
||||
## Pasos - Ver historial de mascota
|
||||
|
||||
1. Seleccionar la mascota
|
||||
2. Ver ficha de la mascota:
|
||||
- Datos basicos (nombre, tipo, raza, edad)
|
||||
- Foto
|
||||
- Peso historico
|
||||
- Estado de vacunacion
|
||||
3. Ver listado de visitas (todas, no solo las mias)
|
||||
4. Click en una visita para ver el informe completo
|
||||
|
||||
## Pasos - Revisar informe anterior
|
||||
|
||||
1. En el listado de visitas, click en una
|
||||
2. Ver informe completo:
|
||||
- Fecha y veterinario que atendio
|
||||
- Examen fisico
|
||||
- Diagnostico
|
||||
- Tratamiento
|
||||
- Medicamentos indicados
|
||||
- Estudios solicitados
|
||||
- Seguimiento
|
||||
|
||||
## Que deberia pasar
|
||||
|
||||
- Puedo ver historial completo de pacientes que atendi
|
||||
- Puedo ver informes de otros vets (para continuidad de atencion)
|
||||
- Tengo contexto para tomar decisiones clinicas
|
||||
|
||||
## Problemas comunes
|
||||
|
||||
- Busqueda no encuentra al paciente (nombre mal escrito)
|
||||
- Mascota atendida por otro vet, no tengo acceso?
|
||||
- Historial muy extenso, dificil encontrar info relevante
|
||||
- Informes anteriores incompletos o ilegibles
|
||||
- Duplicados de pacientes (mismo dueno registrado 2 veces)
|
||||
|
||||
## Casos especiales
|
||||
|
||||
- Mascota nueva sin historial
|
||||
- Mascota atendida en otra clinica (historial externo)
|
||||
- Dueno tiene multiples mascotas
|
||||
- Mascota transferida a otro dueno
|
||||
- Paciente de urgencia/emergencia sin cita previa
|
||||
|
||||
## Flujos relacionados
|
||||
|
||||
- Realizar visita (consultar historial antes/durante)
|
||||
- Aceptar solicitud (ver si ya lo atendi antes)
|
||||
|
||||
## Notas tecnicas
|
||||
|
||||
- APIs:
|
||||
- `GET /mascotas/api/v1/pet-owners/?search=X`
|
||||
- `GET /mascotas/api/v1/pets/?pet_owner=X`
|
||||
- `GET /mascotas/api/v1/vet-visits/?pet=X`
|
||||
- `GET /mascotas/api/v1/vetvisitreport/?vet_visit=X`
|
||||
- Permisos: vet puede ver historial de cualquier paciente que haya atendido
|
||||
- Busqueda: usar indice de texto completo para rendimiento
|
||||
143
cfg/amar/atlas/books/feature-form-samples/index.html
Normal file
143
cfg/amar/atlas/books/feature-form-samples/index.html
Normal file
@@ -0,0 +1,143 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Ops Templates Sample - Album</title>
|
||||
<style>
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
font-family: system-ui, -apple-system, sans-serif;
|
||||
background: #f8fafc;
|
||||
color: #1e293b;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.container { max-width: 1000px; margin: 0 auto; padding: 2rem 1rem; }
|
||||
header { margin-bottom: 2rem; }
|
||||
.breadcrumb { font-size: 0.9rem; color: #64748b; margin-bottom: 0.5rem; }
|
||||
.breadcrumb a { color: #15803d; text-decoration: none; }
|
||||
.breadcrumb a:hover { text-decoration: underline; }
|
||||
h1 { font-size: 2rem; color: #15803d; }
|
||||
.subtitle { color: #64748b; margin-top: 0.5rem; }
|
||||
.sample-badge {
|
||||
display: inline-block;
|
||||
background: #fef3c7;
|
||||
color: #92400e;
|
||||
padding: 0.25rem 0.75rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
.user-type {
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
padding: 1.5rem;
|
||||
margin-bottom: 1.5rem;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
}
|
||||
.user-type h2 {
|
||||
font-size: 1.25rem;
|
||||
color: #15803d;
|
||||
margin-bottom: 1rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.user-type h2::before {
|
||||
content: '';
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: #22c55e;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.templates-list { list-style: none; }
|
||||
.templates-list li {
|
||||
border-bottom: 1px solid #e2e8f0;
|
||||
}
|
||||
.templates-list li:last-child { border-bottom: none; }
|
||||
.templates-list a {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0.75rem 0;
|
||||
text-decoration: none;
|
||||
color: #1e293b;
|
||||
}
|
||||
.templates-list a:hover { color: #15803d; }
|
||||
.templates-list .name { font-weight: 500; }
|
||||
.templates-list .arrow { color: #94a3b8; }
|
||||
.info-box {
|
||||
background: #f0fdf4;
|
||||
border: 1px solid #bbf7d0;
|
||||
border-radius: 8px;
|
||||
padding: 1rem;
|
||||
margin-top: 2rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.info-box h3 { font-size: 0.9rem; color: #15803d; margin-bottom: 0.5rem; }
|
||||
footer {
|
||||
margin-top: 3rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid #e2e8f0;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
footer a { color: #15803d; text-decoration: none; }
|
||||
footer a:hover { text-decoration: underline; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<div class="breadcrumb"><a href="/">Album</a> / Ops Templates</div>
|
||||
<h1>Ops Templates Sample</h1>
|
||||
<p class="subtitle">User flow documentation templates - non-technical format for support/ops teams</p>
|
||||
<span class="sample-badge">Sample Data</span>
|
||||
</header>
|
||||
|
||||
<div class="user-type">
|
||||
<h2>Pet Owner</h2>
|
||||
<ul class="templates-list">
|
||||
<li><a href="/book/feature-form-samples/larder/pet-owner/01-registro.md"><span class="name">01. Registro de Usuario</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/pet-owner/02-reservar-turno.md"><span class="name">02. Reservar Turno</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/pet-owner/03-gestion-mascotas.md"><span class="name">03. Gestion de Mascotas</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/pet-owner/04-pago-turno.md"><span class="name">04. Pago de Turno</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/pet-owner/05-historial-medico.md"><span class="name">05. Historial Medico</span><span class="arrow">→</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="user-type">
|
||||
<h2>Veterinarian</h2>
|
||||
<ul class="templates-list">
|
||||
<li><a href="/book/feature-form-samples/larder/veterinarian/01-aceptar-solicitud.md"><span class="name">01. Aceptar/Rechazar Solicitud</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/veterinarian/02-gestion-agenda.md"><span class="name">02. Gestion de Agenda</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/veterinarian/03-realizar-visita.md"><span class="name">03. Realizar Visita</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/veterinarian/04-zonas-cobertura.md"><span class="name">04. Zonas de Cobertura</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/veterinarian/05-historial-pacientes.md"><span class="name">05. Historial de Pacientes</span><span class="arrow">→</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="user-type">
|
||||
<h2>Backoffice</h2>
|
||||
<ul class="templates-list">
|
||||
<li><a href="/book/feature-form-samples/larder/backoffice/01-gestion-solicitudes.md"><span class="name">01. Gestion de Solicitudes</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/backoffice/02-gestion-usuarios.md"><span class="name">02. Gestion de Usuarios</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/backoffice/03-gestion-servicios.md"><span class="name">03. Gestion de Servicios</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/backoffice/04-reembolsos.md"><span class="name">04. Reembolsos</span><span class="arrow">→</span></a></li>
|
||||
<li><a href="/book/feature-form-samples/larder/backoffice/05-reportes.md"><span class="name">05. Reportes</span><span class="arrow">→</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="info-box">
|
||||
<h3>Template Structure</h3>
|
||||
<p>Each template includes: User type, Entry point, Goal, Steps, Expected result, Common problems, Edge cases, Related flows, Technical notes.</p>
|
||||
<p style="margin-top: 0.5rem;">These templates transform into <a href="/book/gherkin-samples/">Gherkin specs</a> for testing.</p>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<a href="/">← Album</a>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,91 @@
|
||||
# Plantilla: Documentacion de Flujos
|
||||
|
||||
## Para: Equipo de Soporte/Operaciones
|
||||
|
||||
Usa esta plantilla para documentar cualquier accion/flujo del sistema.
|
||||
|
||||
---
|
||||
|
||||
## Plantilla
|
||||
|
||||
```
|
||||
### [Nombre del Flujo]
|
||||
|
||||
**Tipo de usuario:** [Dueno de mascota / Veterinario / Admin]
|
||||
|
||||
**Donde empieza:** [Que pagina/boton/link]
|
||||
|
||||
**Que quiere hacer el usuario:** [Objetivo en una oracion]
|
||||
|
||||
**Pasos:**
|
||||
1. [Primera cosa que hace el usuario]
|
||||
2. [Segunda cosa que hace el usuario]
|
||||
3. [etc.]
|
||||
|
||||
**Que deberia pasar:** [Resultado esperado cuando todo funciona]
|
||||
|
||||
**Problemas comunes:**
|
||||
- [Problema 1]
|
||||
- [Problema 2]
|
||||
|
||||
**Casos especiales:**
|
||||
- [Caso especial 1]
|
||||
- [Caso especial 2]
|
||||
|
||||
**Flujos relacionados:** [Otros flujos que se conectan con este]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ejemplo Completo
|
||||
|
||||
### Reservar turno de vacunacion
|
||||
|
||||
**Tipo de usuario:** Dueno de mascota
|
||||
|
||||
**Donde empieza:** Pagina principal -> Boton "Agendar visita"
|
||||
|
||||
**Que quiere hacer el usuario:** Reservar un turno de vacunacion para su gato
|
||||
|
||||
**Pasos:**
|
||||
1. Click en "Agendar visita" en la pagina principal
|
||||
2. Ingresar direccion en el popup
|
||||
3. Click en "Siguiente"
|
||||
4. Completar datos mascota: nombre, tipo (gato), edad
|
||||
5. Seleccionar categoria "Vacunacion"
|
||||
6. Elegir la vacuna especifica
|
||||
7. Ver que "Consulta clinica" se agrega automaticamente
|
||||
8. Elegir fechas preferidas
|
||||
9. Ingresar datos de contacto (nombre, telefono, email)
|
||||
10. Enviar la solicitud
|
||||
|
||||
**Que deberia pasar:**
|
||||
- Ver mensaje de confirmacion
|
||||
- Recibir email de confirmacion
|
||||
- La solicitud aparece en "Mis turnos" con estado "Pendiente"
|
||||
|
||||
**Problemas comunes:**
|
||||
- Los usuarios intentan quitar "Consulta clinica" y no pueden
|
||||
- El autocompletado de direcciones a veces no encuentra su calle
|
||||
- Algunos usuarios no ven el link "Ya soy cliente" y crean cuentas duplicadas
|
||||
|
||||
**Casos especiales:**
|
||||
- Si la mascota ya esta castrada, el servicio de castracion no deberia aparecer
|
||||
- Si el usuario abandona a mitad del flujo, sus datos se guardan como "invitado"
|
||||
- Algunos barrios no tienen cobertura - deberia mostrar un error claro
|
||||
|
||||
**Flujos relacionados:**
|
||||
- "Ver mis turnos" (para ver el estado despues de reservar)
|
||||
- "Pagar turno" (cuando se solicita el pago)
|
||||
|
||||
---
|
||||
|
||||
## Preguntas a Considerar
|
||||
|
||||
1. **Camino feliz:** Que pasa cuando todo funciona perfecto?
|
||||
2. **Validacion:** Que errores puede ver el usuario?
|
||||
3. **Permisos:** Quien puede hacer esto?
|
||||
4. **Estados:** Esta accion cambia segun algun estado?
|
||||
5. **Dependencias:** Esto requiere que algo mas haya pasado antes?
|
||||
6. **Efectos secundarios:** Esto dispara emails, notificaciones?
|
||||
7. **Deshacer:** El usuario puede revertir esta accion?
|
||||
Reference in New Issue
Block a user