280 lines
7.0 KiB
Markdown
280 lines
7.0 KiB
Markdown
# US-{MODULO}-{NNN}: {Titulo de la Historia}
|
|
|
|
> **INSTRUCCIONES:** Copiar este template para cada historia de usuario.
|
|
> Eliminar esta seccion antes de guardar.
|
|
|
|
---
|
|
|
|
## Identificacion
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | US-{MODULO}-{NNN} |
|
|
| **Modulo** | {MGN-NNN / MAI-NNN} |
|
|
| **Epica** | {Nombre de la epica} |
|
|
| **Prioridad** | {P0 / P1 / P2 / P3} |
|
|
| **Story Points** | {1 / 2 / 3 / 5 / 8 / 13} |
|
|
| **Sprint** | Sprint {N} |
|
|
| **Estado** | {Backlog / Ready / In Progress / Done} |
|
|
| **Autor** | {nombre} |
|
|
| **Fecha** | {YYYY-MM-DD} |
|
|
|
|
---
|
|
|
|
## Historia de Usuario
|
|
|
|
**Como** {rol de usuario}
|
|
**Quiero** {accion o funcionalidad deseada}
|
|
**Para** {beneficio o valor que obtiene}
|
|
|
|
### Contexto
|
|
|
|
{Descripcion adicional del contexto de negocio. Por que es importante esta historia?}
|
|
|
|
---
|
|
|
|
## Criterios de Aceptacion
|
|
|
|
### Escenario 1: {Nombre del escenario - Happy Path}
|
|
|
|
```gherkin
|
|
Feature: {Nombre de la funcionalidad}
|
|
|
|
Scenario: {Descripcion del escenario}
|
|
Given {contexto inicial / precondiciones}
|
|
And {otra precondicion si aplica}
|
|
When {accion que realiza el usuario}
|
|
And {otra accion si aplica}
|
|
Then {resultado esperado}
|
|
And {otro resultado si aplica}
|
|
```
|
|
|
|
### Escenario 2: {Escenario alternativo}
|
|
|
|
```gherkin
|
|
Scenario: {Descripcion}
|
|
Given {contexto}
|
|
When {accion}
|
|
Then {resultado}
|
|
```
|
|
|
|
### Escenario 3: {Manejo de errores}
|
|
|
|
```gherkin
|
|
Scenario: {Error handling}
|
|
Given {contexto que causa error}
|
|
When {accion}
|
|
Then {mensaje de error mostrado}
|
|
And {sistema permanece en estado consistente}
|
|
```
|
|
|
|
---
|
|
|
|
## Mockups / Wireframes
|
|
|
|
### Pantalla Principal
|
|
|
|
> Incluir referencia a Figma o descripcion visual
|
|
|
|
```
|
|
+------------------------------------------------------------------+
|
|
| Header: {Titulo de la pantalla} [Boton Accion]|
|
|
+------------------------------------------------------------------+
|
|
| |
|
|
| +-------------------------------------------------------------+ |
|
|
| | Componente 1 | |
|
|
| | - Elemento A | |
|
|
| | - Elemento B | |
|
|
| +-------------------------------------------------------------+ |
|
|
| |
|
|
| +-------------------------------------------------------------+ |
|
|
| | Tabla / Lista | |
|
|
| | | Col 1 | Col 2 | Col 3 | Acciones | | |
|
|
| | | dato | dato | dato | [E] [X] | | |
|
|
| +-------------------------------------------------------------+ |
|
|
| |
|
|
| [Cancelar] [Guardar Borrador] |
|
|
| [Guardar] |
|
|
+------------------------------------------------------------------+
|
|
```
|
|
|
|
### Estados de UI
|
|
|
|
| Estado | Comportamiento |
|
|
|--------|----------------|
|
|
| Loading | Mostrar skeleton/spinner |
|
|
| Empty | Mensaje "No hay {recursos}" + CTA |
|
|
| Error | Toast con mensaje de error |
|
|
| Success | Toast de confirmacion |
|
|
|
|
---
|
|
|
|
## Flujo de Usuario
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
A[Usuario accede a pantalla] --> B{Tiene permisos?}
|
|
B -->|No| C[Mostrar error 403]
|
|
B -->|Si| D[Cargar lista de recursos]
|
|
D --> E{Hay datos?}
|
|
E -->|No| F[Mostrar estado vacio]
|
|
E -->|Si| G[Mostrar tabla]
|
|
G --> H[Usuario selecciona accion]
|
|
H --> I{Tipo de accion}
|
|
I -->|Crear| J[Abrir formulario]
|
|
I -->|Editar| K[Cargar datos y abrir formulario]
|
|
I -->|Eliminar| L[Confirmar y eliminar]
|
|
J --> M[Validar y guardar]
|
|
K --> M
|
|
M -->|Exito| N[Toast success + Refrescar lista]
|
|
M -->|Error| O[Toast error]
|
|
```
|
|
|
|
---
|
|
|
|
## Notas Tecnicas
|
|
|
|
### API Endpoints Involucrados
|
|
|
|
| Metodo | Endpoint | Proposito |
|
|
|--------|----------|-----------|
|
|
| GET | `/api/v1/{recursos}` | Listar |
|
|
| POST | `/api/v1/{recursos}` | Crear |
|
|
| PATCH | `/api/v1/{recursos}/:id` | Actualizar |
|
|
| DELETE | `/api/v1/{recursos}/:id` | Eliminar |
|
|
|
|
### Componentes Frontend
|
|
|
|
| Componente | Tipo | Descripcion |
|
|
|------------|------|-------------|
|
|
| `{Nombre}Page` | Page | Pagina principal |
|
|
| `{Nombre}Table` | Component | Tabla de datos |
|
|
| `{Nombre}Form` | Component | Formulario crear/editar |
|
|
| `{Nombre}Modal` | Component | Modal de confirmacion |
|
|
|
|
### Store (Zustand)
|
|
|
|
```typescript
|
|
interface {Nombre}Store {
|
|
// Estado
|
|
items: {Nombre}[];
|
|
loading: boolean;
|
|
error: string | null;
|
|
selectedItem: {Nombre} | null;
|
|
|
|
// Acciones
|
|
fetchAll: () => Promise<void>;
|
|
create: (dto: Create{Nombre}Dto) => Promise<void>;
|
|
update: (id: string, dto: Update{Nombre}Dto) => Promise<void>;
|
|
remove: (id: string) => Promise<void>;
|
|
setSelected: (item: {Nombre} | null) => void;
|
|
}
|
|
```
|
|
|
|
### Validaciones Frontend
|
|
|
|
| Campo | Regla | Mensaje |
|
|
|-------|-------|---------|
|
|
| `name` | required, min 3 | "Nombre es requerido (min 3 caracteres)" |
|
|
| `email` | valid email | "Email invalido" |
|
|
| `{campo}` | {regla} | "{mensaje}" |
|
|
|
|
---
|
|
|
|
## Dependencias
|
|
|
|
### Historias Bloqueantes
|
|
|
|
| ID | Historia | Estado |
|
|
|----|----------|--------|
|
|
| US-{MOD}-{NNN} | {Titulo} | {Estado} |
|
|
|
|
### Historias Relacionadas
|
|
|
|
| ID | Historia | Relacion |
|
|
|----|----------|----------|
|
|
| US-{MOD}-{NNN} | {Titulo} | {Tipo: depende/habilita/relacionada} |
|
|
|
|
---
|
|
|
|
## Trazabilidad
|
|
|
|
### Requerimientos
|
|
|
|
| ID | Requerimiento |
|
|
|----|---------------|
|
|
| RF-{MOD}-{NNN} | {Titulo del requerimiento} |
|
|
|
|
### Casos de Prueba
|
|
|
|
| ID | Caso de Prueba | Tipo |
|
|
|----|----------------|------|
|
|
| TC-{MOD}-{NNN} | {Descripcion} | {Unit/Integration/E2E} |
|
|
|
|
---
|
|
|
|
## Estimacion por Capa
|
|
|
|
| Capa | Story Points | Horas Estimadas | Notas |
|
|
|------|--------------|-----------------|-------|
|
|
| Database | {N} | {N}h | {consideraciones} |
|
|
| Backend | {N} | {N}h | {consideraciones} |
|
|
| Frontend | {N} | {N}h | {consideraciones} |
|
|
| Testing | {N} | {N}h | {consideraciones} |
|
|
| **Total** | **{N}** | **{N}h** | |
|
|
|
|
---
|
|
|
|
## Definition of Done
|
|
|
|
- [ ] Codigo implementado y revisado (code review)
|
|
- [ ] Tests unitarios pasando (>80% coverage)
|
|
- [ ] Tests de integracion pasando
|
|
- [ ] Documentacion actualizada
|
|
- [ ] Swagger actualizado
|
|
- [ ] Sin errores de lint
|
|
- [ ] Funcionalidad verificada en ambiente de desarrollo
|
|
- [ ] Criterios de aceptacion cumplidos
|
|
- [ ] Product Owner aprobo
|
|
|
|
---
|
|
|
|
## Notas y Decisiones
|
|
|
|
### Decisiones Tomadas
|
|
|
|
- {Decision 1}: {Razon}
|
|
- {Decision 2}: {Razon}
|
|
|
|
### Riesgos Identificados
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| {Riesgo 1} | {Alta/Media/Baja} | {Alto/Medio/Bajo} | {Accion} |
|
|
|
|
### Preguntas Abiertas
|
|
|
|
- [ ] {Pregunta 1}
|
|
- [ ] {Pregunta 2}
|
|
|
|
---
|
|
|
|
## Historial de Cambios
|
|
|
|
| Version | Fecha | Autor | Cambios |
|
|
|---------|-------|-------|---------|
|
|
| 1.0 | {YYYY-MM-DD} | {nombre} | Creacion inicial |
|
|
|
|
---
|
|
|
|
## Aprobaciones
|
|
|
|
| Rol | Nombre | Fecha | Aprobado |
|
|
|-----|--------|-------|----------|
|
|
| Tech Lead | | | [ ] |
|
|
| Product Owner | | | [ ] |
|
|
| QA Lead | | | [ ] |
|
|
|
|
---
|
|
*Template version 1.0 - ERP Suite*
|