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.
Files changed (97) hide show
  1. package/bin/install.js +32 -1
  2. package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/frontend-standards.md +2 -2
  3. package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/mastercrud-use-reference.md +277 -0
  4. package/bmad/bmm/workflows/3-solutioning/create-architecture/data/company-standards/technology-stack.md +1 -1
  5. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/prompts/prompt_design_test.md +13 -13
  6. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-01-init.md +196 -222
  7. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-02-build-traceability.md +87 -87
  8. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-03-interpret-tests.md +42 -42
  9. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-04-generate-plans.md +180 -181
  10. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/steps/step-05-export.md +28 -24
  11. package/bmad/bmm/workflows/4-implementation/traceability-and-testing/workflow.md +102 -31
  12. package/bmad/bmm/workflows/5-documentation/README.md +16 -15
  13. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-01-init.md +61 -161
  14. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-01b-continue.md +8 -8
  15. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-02-seleccion-epicas.md +4 -206
  16. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-02-seleccion-features.md +197 -0
  17. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-03-analisis-fuentes.md +125 -198
  18. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-04-elicitacion.md +62 -278
  19. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-05-generacion-espanol.md +123 -120
  20. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-06-traduccion-ingles.md +10 -2
  21. package/bmad/bmm/workflows/5-documentation/create-user-guide/steps/step-07-validacion-guardado.md +85 -167
  22. package/bmad/bmm/workflows/5-documentation/create-user-guide/workflow.md +2 -2
  23. package/bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md +86 -54
  24. package/bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md +26 -2
  25. package/bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md +8 -8
  26. package/bmad/bmm/workflows/generate-project-context/workflow.md +2 -1
  27. package/claude/agent-memory/sa-quick-dev/MEMORY.md +6 -0
  28. package/claude/agent-memory/sa-quick-dev/company-standards.md +218 -0
  29. package/claude/agents/sa-code-review.md +38 -0
  30. package/claude/agents/sa-create-story.md +37 -0
  31. package/claude/agents/sa-dev-story.md +38 -0
  32. package/claude/commands/bmad/bmm/workflows/correct-course.md +6 -5
  33. package/claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +5 -1
  34. package/claude/commands/bmad/bmm/workflows/create-prd.md +7 -1
  35. package/claude/commands/bmad/bmm/workflows/create-story.md +6 -5
  36. package/claude/commands/bmad/bmm/workflows/dev-story.md +6 -5
  37. package/claude/commands/bmad/bmm/workflows/fast-track-dev.md +5 -0
  38. package/claude/commands/bmad/bmm/workflows/generate-project-context.md +7 -1
  39. package/claude/commands/bmad/bmm/workflows/sprint-planning.md +3 -2
  40. package/claude/commands/bmad/bmm/workflows/sprint-status.md +6 -5
  41. package/claude/commands/bmad/bmm/workflows/workflow-init.md +6 -5
  42. package/claude/commands/bmad/core/workflows/shard-docs.md +10 -0
  43. package/claude/commands/get-features/SKILL.md +248 -0
  44. package/claude/commands/get-features/oauth-config.example.json +10 -0
  45. package/claude/commands/get-features/oauth-login.js +157 -0
  46. package/claude/commands/sa-quick-dev.md +138 -0
  47. package/claude/commands/sa-skill-creator/sa-skill-creator.md +5 -0
  48. package/claude/skills/MasterCrud/SKILL.md +144 -0
  49. package/claude/skills/MasterCrud/data/MasterCrud.types.ts +1327 -0
  50. package/gemini/commands/bmad-workflow-bmm-correct-course.toml +6 -5
  51. package/gemini/commands/bmad-workflow-bmm-create-epics-and-stories.toml +5 -1
  52. package/gemini/commands/bmad-workflow-bmm-create-prd.toml +7 -1
  53. package/gemini/commands/bmad-workflow-bmm-create-story.toml +6 -5
  54. package/gemini/commands/bmad-workflow-bmm-dev-story.toml +6 -5
  55. package/gemini/commands/bmad-workflow-bmm-generate-project-context.toml +7 -1
  56. package/gemini/commands/bmad-workflow-bmm-sprint-planning.toml +3 -2
  57. package/gemini/commands/bmad-workflow-bmm-sprint-status.toml +6 -5
  58. package/gemini/commands/bmad-workflow-core-shard-docs.toml +4 -0
  59. package/gemini/commands/fast-track-dev.toml +5 -0
  60. package/gemini/commands/sa-workflow-sa-skill-creator.toml +4 -0
  61. package/package.json +2 -1
  62. package/siesa-agents/bmm/workflows/2-plan-workflows/prd/workflow_ext.md +31 -0
  63. package/siesa-agents/bmm/workflows/2-planning/generate-project-context/workflow_ext.md +98 -0
  64. package/siesa-agents/bmm/workflows/3-solutioning/create-architecture/workflow_ext.md +11 -0
  65. package/siesa-agents/bmm/workflows/3-solutioning/create-epics-and-stories/workflow_ext.md +67 -0
  66. package/siesa-agents/bmm/workflows/4-implementation/create-story/workflow_ext.md +30 -0
  67. package/siesa-agents/bmm/workflows/4-implementation/dev-story/workflow_ext.md +31 -0
  68. package/siesa-agents/bmm/workflows/4-implementation/sprint-planning/workflow_ext.md +119 -0
  69. package/siesa-agents/bmm/workflows/4-implementation/sprint-status/workflow_ext.md +164 -0
  70. package/siesa-agents/bmm/workflows/fast-track-dev/completion-summary-fast-track-dev.md +76 -0
  71. package/siesa-agents/bmm/workflows/fast-track-dev/steps/step-01-init.md +161 -0
  72. package/siesa-agents/bmm/workflows/fast-track-dev/steps/step-02-configure.md +195 -0
  73. package/siesa-agents/bmm/workflows/fast-track-dev/steps/step-03-execute.md +169 -0
  74. package/siesa-agents/bmm/workflows/fast-track-dev/workflow-plan-fast-track-dev.md +198 -0
  75. package/siesa-agents/bmm/workflows/fast-track-dev/workflow.md +57 -0
  76. package/siesa-agents/bmm/workflows/workflow-status/Init/workflow_ext.md +102 -0
  77. package/siesa-agents/core/tasks/shard-doc.md +324 -0
  78. package/siesa-agents/sa/sa-skills-creator/skill-creator/LICENSE.txt +202 -0
  79. package/siesa-agents/sa/sa-skills-creator/skill-creator/SKILL.md +479 -0
  80. package/siesa-agents/sa/sa-skills-creator/skill-creator/agents/analyzer.md +274 -0
  81. package/siesa-agents/sa/sa-skills-creator/skill-creator/agents/comparator.md +202 -0
  82. package/siesa-agents/sa/sa-skills-creator/skill-creator/agents/grader.md +223 -0
  83. package/siesa-agents/sa/sa-skills-creator/skill-creator/assets/eval_review.html +146 -0
  84. package/siesa-agents/sa/sa-skills-creator/skill-creator/eval-viewer/generate_review.py +471 -0
  85. package/siesa-agents/sa/sa-skills-creator/skill-creator/eval-viewer/viewer.html +1325 -0
  86. package/siesa-agents/sa/sa-skills-creator/skill-creator/references/schemas.md +430 -0
  87. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/__init__.py +0 -0
  88. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/aggregate_benchmark.py +401 -0
  89. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/generate_report.py +326 -0
  90. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/improve_description.py +248 -0
  91. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/package_skill.py +136 -0
  92. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/quick_validate.py +103 -0
  93. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/run_eval.py +310 -0
  94. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/run_loop.py +332 -0
  95. package/siesa-agents/sa/sa-skills-creator/skill-creator/scripts/utils.py +47 -0
  96. package/siesa-agents/sa/sa-skills-creator/workflow.md +218 -0
  97. 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 | 5+ | Build tool y dev server |
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 | 6+ | Bundler, optimized for Module Federation |
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 |
@@ -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 las épicas referenciadas en el archivo de entrada.
14
- 1. **PURGA DE RUIDO**: No considerar en el diseño de pruebas épicas de "Ruido Técnico" (Infraestructura, Configuración, Boilerplate).
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
- - **ÉPICAS / HISTORIAS DE USUARIO**: [Lista de historias con sus respectivos criterios de aceptación]
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 las épicas 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 funcionalidad agrupada.
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 épica e historia dentro del Feature.
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 las épicas e historias que los contienen.
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 las épicas e historias de usuario analizadas.
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 / Épica | Clasificación | Justificación / Explicación de Ruido Técnico |
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
- - **Épicas/Historias Asociadas**: [Lista de IDs]
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 | Epicas asociadas | Nivel (BE/FE) | Técnica | Escenario | Precondiciones | Pasos | Resultado Esperado | Riesgo (IxP) | Prioridad | Estrategia |
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 Identificadas, Épicas Totales, Historias de Ruido].
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 → Épicas → Casos**: [Listado jerárquico que conecte el Feature con sus historias de origen y los IDs de los casos de prueba generados].
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].