siesa-agents 2.1.66 → 2.1.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/install.js +32 -1
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/frontend-standards.md +2 -2
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/mastercrud-use-reference.md +277 -0
- package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/technology-stack.md +1 -1
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/prompts/prompt_design_test.md +13 -13
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-01-init.md +196 -222
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-02-build-traceability.md +87 -87
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-03-interpret-tests.md +42 -42
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-04-generate-plans.md +180 -181
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-05-export.md +28 -24
- package/bmad/bmm/workflows/4-implementation/traceability-and-testing/workflow.md +102 -31
- package/bmad/bmm/workflows/5-documentation/README.md +16 -15
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-01-init.md +61 -161
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-01b-continue.md +8 -8
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-02-seleccion-epicas.md +4 -206
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-02-seleccion-features.md +197 -0
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-03-analisis-fuentes.md +125 -198
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-04-elicitacion.md +62 -278
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-05-generacion-espanol.md +123 -120
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-06-traduccion-ingles.md +10 -2
- package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-07-validacion-guardado.md +85 -167
- package/bmad/bmm/workflows/5-documentation/create-user-guide/workflow.md +2 -2
- package/bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md +86 -54
- package/bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md +26 -2
- package/bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md +8 -8
- package/bmad/bmm/workflows/generate-project-context/workflow.md +2 -1
- package/claude/agent-memory/sa-quick-dev/MEMORY.md +6 -0
- package/claude/agent-memory/sa-quick-dev/company-standards.md +218 -0
- package/claude/agents/sa-code-review.md +38 -0
- package/claude/agents/sa-create-story.md +37 -0
- package/claude/agents/sa-dev-story.md +38 -0
- package/claude/commands/bmad/bmm/workflows/correct-course.md +6 -5
- package/claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +5 -1
- package/claude/commands/bmad/bmm/workflows/create-prd.md +7 -1
- package/claude/commands/bmad/bmm/workflows/create-story.md +6 -5
- package/claude/commands/bmad/bmm/workflows/dev-story.md +6 -5
- package/claude/commands/bmad/bmm/workflows/fast-track-dev.md +5 -0
- package/claude/commands/bmad/bmm/workflows/generate-project-context.md +7 -1
- package/claude/commands/bmad/bmm/workflows/sprint-planning.md +3 -2
- package/claude/commands/bmad/bmm/workflows/sprint-status.md +6 -5
- package/claude/commands/bmad/bmm/workflows/workflow-init.md +6 -5
- package/claude/commands/bmad/core/workflows/shard-docs.md +10 -0
- package/claude/commands/get-features/SKILL.md +248 -0
- package/claude/commands/get-features/oauth-config.example.json +10 -0
- package/claude/commands/get-features/oauth-login.js +157 -0
- package/claude/commands/sa-quick-dev.md +138 -0
- package/claude/commands/sa-skill-creator/sa-skill-creator.md +5 -0
- package/claude/skills/MasterCrud/SKILL.md +144 -0
- package/claude/skills/MasterCrud/data/MasterCrud.types.ts +1327 -0
- package/gemini/commands/bmad-workflow-bmm-correct-course.toml +6 -5
- package/gemini/commands/bmad-workflow-bmm-create-epics-and-stories.toml +5 -1
- package/gemini/commands/bmad-workflow-bmm-create-prd.toml +7 -1
- package/gemini/commands/bmad-workflow-bmm-create-story.toml +6 -5
- package/gemini/commands/bmad-workflow-bmm-dev-story.toml +6 -5
- package/gemini/commands/bmad-workflow-bmm-generate-project-context.toml +7 -1
- package/gemini/commands/bmad-workflow-bmm-sprint-planning.toml +3 -2
- package/gemini/commands/bmad-workflow-bmm-sprint-status.toml +6 -5
- package/gemini/commands/bmad-workflow-core-shard-docs.toml +4 -0
- package/gemini/commands/fast-track-dev.toml +5 -0
- package/gemini/commands/sa-workflow-sa-skill-creator.toml +4 -0
- package/package.json +2 -1
- package/siesa-agents/bmm/workflows/2-plan-workflows/prd/workflow_ext.md +31 -0
- package/siesa-agents/bmm/workflows/2-planning/generate-project-context/workflow_ext.md +98 -0
- package/siesa-agents/bmm/workflows/3-solutioning/create-architecture/workflow_ext.md +11 -0
- package/siesa-agents/bmm/workflows/3-solutioning/create-epics-and-stories/workflow_ext.md +67 -0
- package/siesa-agents/bmm/workflows/4-implementation/create-story/workflow_ext.md +30 -0
- package/siesa-agents/bmm/workflows/4-implementation/dev-story/workflow_ext.md +31 -0
- package/siesa-agents/bmm/workflows/4-implementation/sprint-planning/workflow_ext.md +119 -0
- package/siesa-agents/bmm/workflows/4-implementation/sprint-status/workflow_ext.md +164 -0
- package/siesa-agents/bmm/workflows/fast-track-dev/completion-summary-fast-track-dev.md +76 -0
- package/siesa-agents/bmm/workflows/fast-track-dev/steps/step-01-init.md +161 -0
- package/siesa-agents/bmm/workflows/fast-track-dev/steps/step-02-configure.md +195 -0
- package/siesa-agents/bmm/workflows/fast-track-dev/steps/step-03-execute.md +169 -0
- package/siesa-agents/bmm/workflows/fast-track-dev/workflow-plan-fast-track-dev.md +198 -0
- package/siesa-agents/bmm/workflows/fast-track-dev/workflow.md +57 -0
- package/siesa-agents/bmm/workflows/workflow-status/Init/workflow_ext.md +102 -0
- package/siesa-agents/core/tasks/shard-doc.md +324 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/LICENSE.txt +202 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/SKILL.md +479 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/agents/analyzer.md +274 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/agents/comparator.md +202 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/agents/grader.md +223 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/assets/eval_review.html +146 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/eval-viewer/generate_review.py +471 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/eval-viewer/viewer.html +1325 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/references/schemas.md +430 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/__init__.py +0 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/generate_report.py +326 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/improve_description.py +248 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/package_skill.py +136 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/quick_validate.py +103 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/run_eval.py +310 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/run_loop.py +332 -0
- package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/utils.py +47 -0
- package/siesa-agents/sa/sa-skills-creator/workflow.md +218 -0
- package/siesa-agents/scripts/bmad_orchestrator.py +900 -0
package/bin/install.js
CHANGED
|
@@ -10,6 +10,7 @@ class SiesaBmadInstaller {
|
|
|
10
10
|
// Definir las carpetas primero (nombres en el paquete vs nombres finales)
|
|
11
11
|
this.folderMappings = [
|
|
12
12
|
{ source: 'bmad', target: '_bmad' },
|
|
13
|
+
{ source: 'siesa-agents', target: '_siesa-agents' },
|
|
13
14
|
{ source: 'vscode', target: '.vscode' },
|
|
14
15
|
{ source: 'github', target: '.github' },
|
|
15
16
|
{ source: 'claude', target: '.claude' },
|
|
@@ -22,7 +23,12 @@ class SiesaBmadInstaller {
|
|
|
22
23
|
this.ignoredFiles = [
|
|
23
24
|
'data/technical-preferences.md'
|
|
24
25
|
];
|
|
25
|
-
|
|
26
|
+
|
|
27
|
+
// Directorios base que se deben crear siempre durante la instalación
|
|
28
|
+
this.baseDirectories = [
|
|
29
|
+
'_bmad-output/shared-artifacts'
|
|
30
|
+
];
|
|
31
|
+
|
|
26
32
|
this.targetDir = process.cwd();
|
|
27
33
|
// Intentar múltiples ubicaciones posibles para el paquete
|
|
28
34
|
this.packageDir = this.findPackageDir();
|
|
@@ -108,6 +114,10 @@ class SiesaBmadInstaller {
|
|
|
108
114
|
console.log(' Instalando SIESA Agents...');
|
|
109
115
|
|
|
110
116
|
try {
|
|
117
|
+
// Crear directorios base siempre, independiente del tipo de instalación
|
|
118
|
+
console.log('📁 Creando directorios base...');
|
|
119
|
+
await this.createBaseDirectories();
|
|
120
|
+
|
|
111
121
|
// Verificar si ya existe una instalación
|
|
112
122
|
const hasExistingInstallation = this.checkExistingInstallation();
|
|
113
123
|
|
|
@@ -135,6 +145,22 @@ class SiesaBmadInstaller {
|
|
|
135
145
|
});
|
|
136
146
|
}
|
|
137
147
|
|
|
148
|
+
async createBaseDirectories() {
|
|
149
|
+
for (const dir of this.baseDirectories) {
|
|
150
|
+
const dirPath = path.join(this.targetDir, dir);
|
|
151
|
+
if (!fs.existsSync(dirPath)) {
|
|
152
|
+
try {
|
|
153
|
+
await fs.mkdirp(dirPath);
|
|
154
|
+
console.log(` ✓ Creado: ${dir}`);
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.warn(` ⚠️ Error al crear ${dir}: ${error.message}`);
|
|
157
|
+
}
|
|
158
|
+
} else {
|
|
159
|
+
console.log(` ✓ Ya existe: ${dir}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
138
164
|
async checkModifiedFiles() {
|
|
139
165
|
const modifiedFiles = [];
|
|
140
166
|
|
|
@@ -520,6 +546,11 @@ class SiesaBmadInstaller {
|
|
|
520
546
|
}
|
|
521
547
|
});
|
|
522
548
|
|
|
549
|
+
console.log('\n📁 Directorios base creados/verificados:');
|
|
550
|
+
this.baseDirectories.forEach(dir => {
|
|
551
|
+
console.log(` ✓ ${dir}`);
|
|
552
|
+
});
|
|
553
|
+
|
|
523
554
|
console.log('\n🎉 ¡Instalación completada!');
|
|
524
555
|
console.log('💡 Las carpetas han sido instaladas en tu directorio actual.');
|
|
525
556
|
console.log('🔧 Puedes ejecutar "npx siesa-agents" nuevamente para actualizar.');
|
|
@@ -78,7 +78,7 @@ Este documento define los estándares de desarrollo frontend para aplicaciones e
|
|
|
78
78
|
|
|
79
79
|
| Categoría | Tecnología | Versión | Notas |
|
|
80
80
|
|-----------|------------|---------|-------|
|
|
81
|
-
| **Bundler** | Vite |
|
|
81
|
+
| **Bundler** | Vite | 7+ | Build tool y dev server |
|
|
82
82
|
| **Framework** | React | 18+ | Functional components y hooks |
|
|
83
83
|
| **Router** | TanStack Router | 1+ | File-based routing con type-safety |
|
|
84
84
|
| **Lenguaje** | TypeScript | 5+ | Strict mode, sin `any` |
|
|
@@ -422,7 +422,7 @@ import type { Cart } from '../domain/types/cart.types';
|
|
|
422
422
|
|
|
423
423
|
| Prioridad | Acción |
|
|
424
424
|
|-----------|--------|
|
|
425
|
-
| **1. siesa-ui-kit** | Siempre verificar primero si existe el componente |
|
|
425
|
+
| **1. siesa-ui-kit** | Siempre verificar primero si existe el componente, sin importar su tipo o complejidad |
|
|
426
426
|
| **2. Si no existe** | Preguntar al usuario: [1] Usar shadcn directamente, [2] Crear para siesa-ui-kit (requiere MR) |
|
|
427
427
|
| **3. Shadcn fallback** | Solo usar registro MCP Shadcn si el usuario elige opción [1] |
|
|
428
428
|
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# 📦 MasterCrud: Guía de Uso y Referencia de Ingeniería
|
|
2
|
+
|
|
3
|
+
El MasterCrud es el componente orquestador más potente del ecosistema Siesa. Proporciona una solución integral para la gestión de entidades de negocio, abstrayendo la complejidad de la paginación, búsqueda avanzada, formularios dinámicos y lógica multicompañía.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🚀 Instalación y Uso Básico
|
|
8
|
+
|
|
9
|
+
Para utilizar el componente, debe importarlo junto con sus tipos y el servicio que gestionará los datos.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
1 import { MasterCrud } from '@/components/MasterCrud';
|
|
13
|
+
2 import type { MasterCrudField, CrudService } from '@/components/MasterCrud/MasterCrud.types';
|
|
14
|
+
3
|
|
15
|
+
4 // 1. Definir la interfaz de su entidad
|
|
16
|
+
5 interface Producto {
|
|
17
|
+
6 id: number;
|
|
18
|
+
7 codigo: string;
|
|
19
|
+
8 nombre: string;
|
|
20
|
+
9 precio: number;
|
|
21
|
+
10 activo: boolean;
|
|
22
|
+
11 }
|
|
23
|
+
12
|
|
24
|
+
13 // 2. Implementar el MasterCrud en su vista
|
|
25
|
+
14 export const ProductosView = () => {
|
|
26
|
+
15 return (
|
|
27
|
+
16 <MasterCrud<Producto>
|
|
28
|
+
17 title="Catálogo de Productos"
|
|
29
|
+
18 entityName="Producto"
|
|
30
|
+
19 fields={camposProducto}
|
|
31
|
+
20 service={productoService}
|
|
32
|
+
21 />
|
|
33
|
+
22 );
|
|
34
|
+
23 };
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🛠️ Propiedades (API Reference)
|
|
40
|
+
|
|
41
|
+
| Propiedad | Tipo | Requerido | Defecto | Descripción |
|
|
42
|
+
|------------------|----------------------|-----------|---------|------------------------------------------------------------------------|
|
|
43
|
+
| title | string | Sí | - | Título principal de la vista (ej: "Gestión de Usuarios"). |
|
|
44
|
+
| entityName | string | Sí | - | Nombre singular de la entidad (ej: "Usuario"). |
|
|
45
|
+
| fields | MasterCrudField<T>[] | Sí | - | Configuración de las columnas y campos del formulario. |
|
|
46
|
+
| service | CrudService<T> | Sí | - | Objeto que implementa las operaciones de red (GET, POST, etc.). |
|
|
47
|
+
| idField | keyof T | No | 'id' | Campo que actúa como identificador único del registro. |
|
|
48
|
+
| pageSize | number | No | 10 | Cantidad de registros por página. |
|
|
49
|
+
| navigationType | `'modal' \ 'sidebar' \ 'page'` | No | - | No |
|
|
50
|
+
| activeByCompany | boolean | No | false | Habilita el selector de compañías y lógica de herencia. |
|
|
51
|
+
| companyRequired | boolean | No | false | Si es true, oculta la opción "Global" y obliga a elegir una compañía. |
|
|
52
|
+
| companies | MasterCrudCompany[] | No | [] | Lista de compañías disponibles para el selector. |
|
|
53
|
+
| showCreateButton | boolean | No | true | Muestra u oculta el botón de "Nuevo". |
|
|
54
|
+
| allowDelete | boolean | No | true | Habilita la acción de eliminar/desactivar. |
|
|
55
|
+
| formColumns | `1 \ 2` | No | 2 | 2 |
|
|
56
|
+
| enableMultiSelect| boolean | No | false | Habilita checkboxes para selección múltiple de filas. |
|
|
57
|
+
| showViewToggle | boolean | No | false | Permite alternar entre vista de Tabla y vista de Tarjetas (Cards). |
|
|
58
|
+
| renderForm | Function | No | - | Renderizado personalizado del cuerpo del formulario. |
|
|
59
|
+
| actions | MasterCrudAction<T>[]| No | [] | Acciones adicionales para el menú de cada registro. |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 📐 Definición de Tipos y Contratos
|
|
64
|
+
|
|
65
|
+
### 1. MasterCrudField<T>
|
|
66
|
+
|
|
67
|
+
Define el comportamiento de un campo en todos los estados del componente.
|
|
68
|
+
|
|
69
|
+
| Atributo | Tipo | Requerido | Descripción |
|
|
70
|
+
|---------------|-----------------------------------------------------------|-----------|-----------------------------------------------------------------------------------|
|
|
71
|
+
| `accessorKey` | `keyof T \| string` | Sí | Clave de acceso al valor del registro. |
|
|
72
|
+
| `header` | `string` | Sí | Etiqueta visible en español para la tabla y el formulario. |
|
|
73
|
+
| `type` | `FieldType` | Sí | Define el tipo de control (text, number, date, select, lookup, etc.). |
|
|
74
|
+
| `options` | `SelectFieldOption[]` | No* | Obligatorio si `type === 'select'`. Define la lista de opciones estáticas. |
|
|
75
|
+
| `lookupConfig`| `LookupConfig` | No* | Obligatorio si `type === 'lookup'`. Define el buscador asíncrono. |
|
|
76
|
+
| `config` | `FieldConfig` | No | Metadatos técnicos (validación, visibilidad, permisos multicompañía). |
|
|
77
|
+
| `renderCell` | `(value: any, record: T) => ReactNode` | No | Función para personalizar el renderizado de la celda en la tabla. |
|
|
78
|
+
| `renderInput` | `(value: any, onChange: (val: any) => void) => ReactNode` | No | Función para inyectar un componente personalizado en el formulario. |
|
|
79
|
+
|
|
80
|
+
### 2. `FieldType`
|
|
81
|
+
|
|
82
|
+
Define la naturaleza del dato y el componente visual que se renderizará tanto en la tabla como en el formulario.
|
|
83
|
+
|
|
84
|
+
**Definición:**
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
type FieldType =
|
|
88
|
+
| 'text' // Input de texto estándar (Default)
|
|
89
|
+
| 'number' // Input numérico con controles de incremento
|
|
90
|
+
| 'email' // Input con validación nativa de correo electrónico
|
|
91
|
+
| 'date' // Selector de fecha (Calendario con formato ISO)
|
|
92
|
+
| 'boolean' // Switch de activación (True/False)
|
|
93
|
+
| 'select' // Dropdown de selección única (Requiere 'options')
|
|
94
|
+
| 'lookup'; // Buscador asíncrono (Requiere 'lookupConfig')
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 3. `SelectFieldOption`
|
|
98
|
+
|
|
99
|
+
Estructura para los elementos de un campo de tipo `'select'`.
|
|
100
|
+
|
|
101
|
+
| Propiedad | Tipo | Requerido | Descripción |
|
|
102
|
+
|------------|-----------------------|-----------|------------------------------------------------|
|
|
103
|
+
| `value` | `string \| number` | Sí | Valor interno que se almacena al seleccionar. |
|
|
104
|
+
| `label` | `string` | Sí | Texto legible que verá el usuario. |
|
|
105
|
+
| `icon` | `ReactNode` | No | Icono descriptivo al lado de la etiqueta. |
|
|
106
|
+
| `disabled` | `boolean` | No | Deshabilita la opción específica en el menú. |
|
|
107
|
+
|
|
108
|
+
### 4. `LookupConfig`
|
|
109
|
+
|
|
110
|
+
Configuración necesaria para que un campo de tipo `'lookup'` realice búsquedas dinámicas en el servidor.
|
|
111
|
+
|
|
112
|
+
| Propiedad | Tipo | Requerido | Descripción |
|
|
113
|
+
|-----------------|------------|-----------|-----------------------------------------------------------------------------|
|
|
114
|
+
| `entity` | `string` | Sí | Nombre de la entidad a buscar (ej: `"Municipios"`). |
|
|
115
|
+
| `displayFields` | `string[]` | Sí | Atributos del objeto que se mostrarán en los resultados. |
|
|
116
|
+
| `fetcher` | `Fetcher` | Sí | Función asíncrona que realiza la petición de búsqueda. |
|
|
117
|
+
| `valueField` | `string` | No | Atributo que actúa como ID (Default: `'id'`). |
|
|
118
|
+
| `renderItem` | `Function` | No | Función para personalizar el renderizado de cada resultado. |
|
|
119
|
+
|
|
120
|
+
### 5. FieldConfig
|
|
121
|
+
Configuración granular del campo.
|
|
122
|
+
|
|
123
|
+
- required: boolean | ((data: T) => boolean). Define si es obligatorio.
|
|
124
|
+
- disabled: boolean | ((data: T) => boolean). Define si está inhabilitado.
|
|
125
|
+
- showInList: boolean. Visibilidad en la tabla (Default: true).
|
|
126
|
+
- searchable: boolean. Si participa en la búsqueda global.
|
|
127
|
+
- allowMultiCompanyOverride: boolean. Si el campo puede ser editado en una sucursal (herencia).
|
|
128
|
+
|
|
129
|
+
### 6. `CrudService<T>`
|
|
130
|
+
|
|
131
|
+
Es el contrato obligatorio que debe implementar la clase o función encargada de la persistencia. El componente inyecta automáticamente el contexto de compañía en cada llamada.
|
|
132
|
+
|
|
133
|
+
| Método | Argumentos | Retorno | Descripción |
|
|
134
|
+
|-----------|---------------------------------------------------------------------|------------------------|---------------------------------------|
|
|
135
|
+
| `getAll` | `(params: GetAllParams, company?: MasterCrudCompany)` | `Promise<GetAllResponse<T>>` | Obtiene la lista paginada y filtrada. |
|
|
136
|
+
| `getById` | `(id: string \| number, company?: MasterCrudCompany)` | `Promise<T>` | Obtiene un registro por su ID. |
|
|
137
|
+
| `create` | `(data: Partial<T>, company?: MasterCrudCompany)` | `Promise<T>` | Crea un nuevo registro en el sistema. |
|
|
138
|
+
| `update` | `(id: string \| number, data: Partial<T>, company?: MasterCrudCompany)` | `Promise<T>` | Actualiza un registro existente. |
|
|
139
|
+
| `delete` | `(id: string \| number, company?: MasterCrudCompany)` | `Promise<void>` | Elimina un registro del sistema. |
|
|
140
|
+
|
|
141
|
+
### 7. `MasterCrudCompany`
|
|
142
|
+
|
|
143
|
+
Estructura utilizada para gestionar el contexto multicompañía dentro del orquestador.
|
|
144
|
+
|
|
145
|
+
| Propiedad | Tipo | Requerido | Descripción |
|
|
146
|
+
|-----------------------|-----------------------|-----------|----------------------------------------------------|
|
|
147
|
+
| `uuid` | `string \| number` | Sí | Identificador único de la compañía. |
|
|
148
|
+
| `code` | `string \| number` | Sí | Código interno de la compañía. |
|
|
149
|
+
| `name` | `string` | Sí | Nombre comercial o razón social. |
|
|
150
|
+
| `isSelectedByDefault` | `boolean` | No | Si es `true`, se auto-selecciona al cargar la vista. |
|
|
151
|
+
|
|
152
|
+
### 8. MasterCrudAction<T>
|
|
153
|
+
Para inyectar botones o lógica personalizada.
|
|
154
|
+
|
|
155
|
+
| Propiedad | Tipo | Requerido | Descripción |
|
|
156
|
+
|-----------------|-------------------------------------------------------------------|-----------|----------------------------------------------------------------------------------------------------------|
|
|
157
|
+
| `id` | `string` | Sí | Identificador único de la acción (usado para keys y tracking). |
|
|
158
|
+
| `name` | `string \| ((record: T) => string)` | Sí | Nombre visible de la acción. |
|
|
159
|
+
| `icon` | `ReactNode \| ((record: T) => ReactNode)` | No | Icono representativo de la acción. |
|
|
160
|
+
| `action` | `(record: T \| T[], company?: MasterCrudCompany) => void \| Promise<void>` | Sí | Función que se ejecuta al activar la acción. |
|
|
161
|
+
| `modalContent` | `ReactNode \| ((record: T) => ReactNode)` | No | Contenido a renderizar dentro de un modal al activar la acción. |
|
|
162
|
+
| `isGroupAction` | `boolean` | No | Si es `true`, la acción aparecerá en el menú de acciones masivas cuando hay selección múltiple. |
|
|
163
|
+
| `order` | `number` | No | Determina la posición de la acción en el menú (menor número aparece primero). |
|
|
164
|
+
| `disabled` | `boolean \| ((record: T) => boolean)` | No | Deshabilita la acción de forma estática o dinámicamente según el registro. |
|
|
165
|
+
| `className` | `string` | No | Clases de Tailwind adicionales para personalizar el estilo del ítem del menú. |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 📡 Operaciones CRUD y Contratos de Red
|
|
170
|
+
|
|
171
|
+
El componente espera un objeto que cumpla con la interfaz CrudService<T>. A continuación, un ejemplo de implementación utilizando una API estándar:
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
1 const productoService: CrudService<Producto> = {
|
|
175
|
+
2 // Obtener listado con filtros y paginación
|
|
176
|
+
3 getAll: async (params, company) => {
|
|
177
|
+
4 const query = new URLSearchParams({
|
|
178
|
+
5 page: params.page.toString(),
|
|
179
|
+
6 limit: params.limit.toString(),
|
|
180
|
+
7 search: params.search || '',
|
|
181
|
+
8 companyUuid: company?.uuid || '000'
|
|
182
|
+
9 });
|
|
183
|
+
10 const res = await fetch(`/api/productos?${query}`);
|
|
184
|
+
11 return res.json(); // Debe retornar { data: T[], total: number }
|
|
185
|
+
12 },
|
|
186
|
+
13
|
|
187
|
+
14 // Obtener detalle completo (Opcional, usado en navigationType="page")
|
|
188
|
+
15 getById: async (id, company) => {
|
|
189
|
+
16 const res = await fetch(`/api/productos/${id}?companyUuid=${company?.uuid}`);
|
|
190
|
+
17 return res.json();
|
|
191
|
+
18 },
|
|
192
|
+
19
|
|
193
|
+
20 // Crear nuevo
|
|
194
|
+
21 create: async (data, company) => {
|
|
195
|
+
22 const res = await fetch('/api/productos', {
|
|
196
|
+
23 method: 'POST',
|
|
197
|
+
24 body: JSON.stringify({ ...data, companyUuid: company?.uuid })
|
|
198
|
+
25 });
|
|
199
|
+
26 return res.json();
|
|
200
|
+
27 },
|
|
201
|
+
28
|
|
202
|
+
29 // Actualizar
|
|
203
|
+
30 update: async (id, data, company) => {
|
|
204
|
+
31 const res = await fetch(`/api/productos/${id}`, {
|
|
205
|
+
32 method: 'PUT',
|
|
206
|
+
33 body: JSON.stringify({ ...data, companyUuid: company?.uuid })
|
|
207
|
+
34 });
|
|
208
|
+
35 return res.json();
|
|
209
|
+
36 },
|
|
210
|
+
37
|
|
211
|
+
38 // Eliminar o Desactivar
|
|
212
|
+
39 delete: async (id, company) => {
|
|
213
|
+
40 await fetch(`/api/productos/${id}?companyUuid=${company?.uuid}`, {
|
|
214
|
+
41 method: 'DELETE'
|
|
215
|
+
42 });
|
|
216
|
+
43 }
|
|
217
|
+
44 };
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 🎨 Estándares de Diseño
|
|
223
|
+
|
|
224
|
+
- Modo Oscuro: Soportado nativamente mediante clases dark:. No requiere configuración adicional.
|
|
225
|
+
- Accesibilidad: Todos los controles soportan navegación por teclado (Focus visible) y etiquetas ARIA.
|
|
226
|
+
- Traducciones: El componente detecta el locale y ajusta todos los textos internos (Guardar, Cancelar, Eliminar) al español o inglés según se configure.
|
|
227
|
+
|
|
228
|
+
## 💡 Ejemplos de Implementación
|
|
229
|
+
|
|
230
|
+
### A. MasterCrud por Compañía
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
1 <MasterCrud
|
|
234
|
+
2 activeByCompany={true}
|
|
235
|
+
3 companyRequired={true} // Oculta "Global" y activa edición directa
|
|
236
|
+
4 companies={[
|
|
237
|
+
5 { uuid: '101', code: '001', name: 'Siesa Cali' },
|
|
238
|
+
6 { uuid: '102', code: '002', name: 'Siesa Bogotá' }
|
|
239
|
+
7 ]}
|
|
240
|
+
8 service={centroCostoService}
|
|
241
|
+
9 fields={camposCC}
|
|
242
|
+
10 />
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### B. Renderizado de Formulario Personalizado (renderForm)
|
|
246
|
+
|
|
247
|
+
Permite crear layouts complejos (Grids, Tabs, Grupos) manteniendo la validación automática.
|
|
248
|
+
|
|
249
|
+
```tsx
|
|
250
|
+
1 <MasterCrud
|
|
251
|
+
2 renderForm={({ renderField }) => (
|
|
252
|
+
3 <div className="space-y-6">
|
|
253
|
+
4 <section className="grid grid-cols-2 gap-4 border p-4 rounded-xl">
|
|
254
|
+
5 <h4 className="col-span-2 font-bold">Información General</h4>
|
|
255
|
+
6 {renderField('codigo', (val, onChange) => <Input value={val} onChange={onChange} />)}
|
|
256
|
+
7 {renderField('nombre', (val, onChange) => <Input value={val} onChange={onChange} />)}
|
|
257
|
+
8 </section>
|
|
258
|
+
9 </div>
|
|
259
|
+
10 )}
|
|
260
|
+
11 />
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### C. Navegación a Página de Detalle
|
|
264
|
+
|
|
265
|
+
Para formularios muy extensos, se recomienda usar el modo page.
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
1 <MasterCrud
|
|
269
|
+
2 navigationType="page" // La edición/creación ocupa toda la pantalla
|
|
270
|
+
3 fetchDetailOnEdit={true} // El componente llamará a getById automáticamente
|
|
271
|
+
4 headerBadges={(record) => [
|
|
272
|
+
5 { label: record?.activo ? 'Activo' : 'Inactivo', color: record?.activo ? 'green' : 'red' }
|
|
273
|
+
6 ]}
|
|
274
|
+
7 />
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
@@ -276,7 +276,7 @@ Implement security at every layer
|
|
|
276
276
|
### Frontend
|
|
277
277
|
| Technology | Version | Notes |
|
|
278
278
|
|------------|---------|-------|
|
|
279
|
-
| Vite |
|
|
279
|
+
| Vite | 7+ | Bundler, optimized for Module Federation |
|
|
280
280
|
| React | 18+ | Functional components, hooks |
|
|
281
281
|
| TypeScript | 5+ | Strict mode enabled |
|
|
282
282
|
| TanStack Router | 1+ | File-based, type-safe routing |
|
package/bmad/bmm/workflows/4-implementation/traceability-and-testing/prompts/prompt_design_test.md
CHANGED
|
@@ -10,8 +10,8 @@ Este prompt transforma a la IA en un **Principal QA Architect**. Su objetivo es
|
|
|
10
10
|
|
|
11
11
|
# CONTEXTO:
|
|
12
12
|
## CONTEXTO Y FILTROS CRÍTICOS:
|
|
13
|
-
Operas bajo la metodología **BMAD V6.0**. Tu misión es certificar **Features** lógicos y procesar la totalidad de
|
|
14
|
-
1. **PURGA DE RUIDO**: No considerar en el diseño de pruebas
|
|
13
|
+
Operas bajo la metodología **BMAD V6.0**. Tu misión es certificar **Features** lógicos y procesar la totalidad de los features referenciados en el archivo de entrada.
|
|
14
|
+
1. **PURGA DE RUIDO**: No considerar en el diseño de pruebas features de "Ruido Técnico" (Infraestructura, Configuración, Boilerplate).
|
|
15
15
|
2. **GENERACIÓN EXHAUSTIVA**: La Matriz Integral DEBE contener todos los campos requeridos en el formato, con descripciones de texto claras y completas, y presentar todos los escenarios de prueba sin establecer limite y que sean resultantes de:
|
|
16
16
|
- **Fase 2 (FAC)**: Criterios de aceptación funcionales y no funcionales.
|
|
17
17
|
- **Fase 3 (Puntos Ciegos)**: Mitigación de riesgos detectados por arquetipos.
|
|
@@ -21,27 +21,27 @@ Operas bajo la metodología **BMAD V6.0**. Tu misión es certificar **Features**
|
|
|
21
21
|
|
|
22
22
|
# [INPUT]:
|
|
23
23
|
- **PROYECTO**: [Nombre del Proyecto]
|
|
24
|
-
-
|
|
24
|
+
- **FEATURES / HISTORIAS DE USUARIO**: [Lista de features con sus respectivas historias y criterios de aceptación]
|
|
25
25
|
- **METAS DE NEGOCIO (PRD)**: [Metas estratégicas / Objetivos de negocio]
|
|
26
26
|
- **STACK TECNOLÓGICO**: [Tecnologías involucradas]
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
30
|
# FASE 1: GATEKEEPER GRANULAR Y LIMPIEZA DE BACKLOG
|
|
31
|
-
1. **Definir el "Feature" (Funcionalidad)**: Agrupa obligatoriamente
|
|
32
|
-
2. **Filtrado por Ítem (Granular)**: Analiza cada historia individualmente dentro de su
|
|
31
|
+
1. **Definir el "Feature" (Funcionalidad)**: Agrupa obligatoriamente los features e historias de usuario por capacidades de negocio lógicas (ej. "Ciclo de Ventas", "Gestión de Resiliencia").
|
|
32
|
+
2. **Filtrado por Ítem (Granular)**: Analiza cada historia individualmente dentro de su feature agrupado.
|
|
33
33
|
- **Clasificación**: Separa "Lógica de Negocio" (Funcional) de "Ruido Técnico" (Infraestructura/Configuración).
|
|
34
34
|
3. **Visualización**: Genera la tabla "I. REPORTE DEL GATEKEEPER (GRANULAR)". Incluye una columna específica para justificar la clasificación de "Ruido Técnico".
|
|
35
35
|
|
|
36
36
|
# FASE 2: EL ESCALÓN DE CRITERIOS (FAC)
|
|
37
|
-
1. **Análisis de ACs Originales**: Analiza los criterios de aceptación de cada
|
|
37
|
+
1. **Análisis de ACs Originales**: Analiza los criterios de aceptación de cada feature e historia dentro del Feature agrupado.
|
|
38
38
|
2. **Redactar FAC (Feature Acceptance Criteria)**: Producto del análisis anterior, genera criterios de aceptación **Funcionales** y **No Funcionales** para el grupo completo utilizando estrictamente el **formato GHERKIN** (Given/When/Then).
|
|
39
|
-
3. **Trazabilidad**: Todo el diseño de pruebas se basará en estos Features, relacionando siempre
|
|
39
|
+
3. **Trazabilidad**: Todo el diseño de pruebas se basará en estos Features, relacionando siempre los features e historias que los contienen.
|
|
40
40
|
|
|
41
41
|
# FASE 3: DETECCIÓN DE PUNTOS CIEGOS (SIMULACIÓN UNIVERSAL)
|
|
42
42
|
Analiza cada **Feature** simulando arquetipos universales para encontrar riesgos no escritos:
|
|
43
43
|
- **Usuario Inexperto (Naive User)** | **Usuario Malintencionado** | **Perfil de Integración (APIs)** | **Entorno Hostil (Infraestructura)** | **Usuario de Consulta/Reportería** | **Auditor de Procesos**.
|
|
44
|
-
- **Instrucción Especial**: Identifica y extrae arquetipos adicionales específicos de negocio directamente de la información suministrada en
|
|
44
|
+
- **Instrucción Especial**: Identifica y extrae arquetipos adicionales específicos de negocio directamente de la información suministrada en los features e historias de usuario analizados.
|
|
45
45
|
|
|
46
46
|
# FASE 4: INGENIERÍA DE DISEÑO (ISO 29119-4) Y CALCULADORA DE RIESGO BMAD
|
|
47
47
|
1. **Aplicación de Técnicas**: Por cada funcionalidad, deriva casos de prueba aplicando obligatoriamente:
|
|
@@ -58,13 +58,13 @@ Analiza cada **Feature** simulando arquetipos universales para encontrar riesgos
|
|
|
58
58
|
# FORMATO DE SALIDA (ESTRICTO):
|
|
59
59
|
|
|
60
60
|
### I. REPORTE DEL GATEKEEPER (GRANULAR)
|
|
61
|
-
| ID Historia | Nombre /
|
|
61
|
+
| ID Historia | Nombre / Feature | Clasificación | Justificación / Explicación de Ruido Técnico |
|
|
62
62
|
| :--- | :--- | :--- | :--- |
|
|
63
63
|
|
|
64
64
|
### II. DEFINICIÓN DE FEATURES Y CRITERIOS MAESTROS (FAC) EN GHERKIN
|
|
65
65
|
*(Repetir este bloque por cada Funcionalidad/Feature identificado)*
|
|
66
66
|
- **Feature**: [Nombre de la Funcionalidad]
|
|
67
|
-
-
|
|
67
|
+
- **Features/Historias Asociadas**: [Lista de IDs]
|
|
68
68
|
- **FAC Funcionales (Gherkin)**: [Escenarios Given/When/Then derivados]
|
|
69
69
|
- **FAC No Funcionales (Gherkin)**: [Escenarios de Rendimiento, Seguridad, etc., en Given/When/Then]
|
|
70
70
|
- **Dependencias**: [Componentes técnicos requeridos]
|
|
@@ -76,11 +76,11 @@ Analiza cada **Feature** simulando arquetipos universales para encontrar riesgos
|
|
|
76
76
|
### IV. MATRIZ INTEGRAL DE PRUEBAS (DISEÑO 360°)
|
|
77
77
|
*(Presentar la totalidad de los casos: Críticos y No Críticos)*
|
|
78
78
|
|
|
79
|
-
| ID | Funcionalidad |
|
|
79
|
+
| ID | Funcionalidad | Features asociados | Nivel (BE/FE) | Técnica | Escenario | Precondiciones | Pasos | Resultado Esperado | Riesgo (IxP) | Prioridad | Estrategia |
|
|
80
80
|
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
|
81
81
|
|
|
82
82
|
### V. INFORME TSR (TEST SUMMARY REPORT)
|
|
83
|
-
1. **Métricas de Diseño**: [Features
|
|
83
|
+
1. **Métricas de Diseño**: [Features Identificados, Features Totales, Historias de Ruido].
|
|
84
84
|
2. **Prioridad Crítica (P0)**: [Total de casos P0 generados].
|
|
85
85
|
3. **Riesgos CRÍTICOS**: [Lista detallada de los riesgos con mayor puntaje (16-25) detectados].
|
|
86
86
|
4. **Cobertura P0**: [% de aseguramiento de riesgos críticos].
|
|
@@ -92,4 +92,4 @@ Analiza cada **Feature** simulando arquetipos universales para encontrar riesgos
|
|
|
92
92
|
- [Otras tablas de cobertura técnica relevantes].
|
|
93
93
|
|
|
94
94
|
### APÉNDICE: MATRIZ DE TRAZABILIDAD
|
|
95
|
-
- **Funcionalidad →
|
|
95
|
+
- **Funcionalidad → Features → Casos**: [Listado jerárquico que conecte el Feature con sus historias de origen y los IDs de los casos de prueba generados].
|