siesa-agents 2.1.72-qa.2 → 2.1.72-qa.21

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 (49) hide show
  1. package/bmad/bmm/config.yaml +33 -0
  2. package/claude/skills/sa-agent-sre-sentinel/SKILL.md +180 -0
  3. package/claude/skills/sa-aplicar/SKILL.md +268 -0
  4. package/claude/skills/sa-auditar-servicio/SKILL.md +255 -0
  5. package/claude/skills/sa-nueva-transversal/SKILL.md +317 -0
  6. package/claude/skills/sa-nuevo-ambiente/SKILL.md +147 -0
  7. package/claude/skills/sa-nuevo-servicio/SKILL.md +530 -0
  8. package/claude/skills/sa-onboard-db/SKILL.md +122 -0
  9. package/claude/skills/sa-qa-data-generator/SKILL.md +200 -51
  10. package/claude/skills/sa-quality-process/SKILL.md +6 -0
  11. package/claude/skills/sa-registrar-permisos/SKILL.md +233 -0
  12. package/package.json +1 -1
  13. package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_design_test.md +1037 -60
  14. package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_dor_gate.md +419 -379
  15. package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_e2e_executor.md +273 -0
  16. package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_playwright_impl.md +359 -355
  17. package/siesa-agents/bmm/workflows/3-solutioning/quality-process/prompts/prompt_test_plan.md +73 -111
  18. package/siesa-agents/bmm/workflows/3-solutioning/quality-process/workflow.md +1320 -997
  19. package/siesa-agents/resources/playwright-kit/.env.example +42 -0
  20. package/siesa-agents/resources/playwright-kit/README.md +228 -0
  21. package/siesa-agents/resources/playwright-kit/allure/categories.json +26 -0
  22. package/siesa-agents/resources/playwright-kit/global-setup.ts +34 -0
  23. package/siesa-agents/resources/playwright-kit/helpers/blazor-e2e-helpers.ts +417 -0
  24. package/siesa-agents/resources/playwright-kit/helpers/react-e2e-helpers.ts +297 -0
  25. package/siesa-agents/resources/playwright-kit/package-lock.json +850 -0
  26. package/siesa-agents/resources/playwright-kit/package.json +27 -0
  27. package/siesa-agents/resources/playwright-kit/playwright.config.ts +60 -0
  28. package/siesa-agents/resources/playwright-kit/proposed/.gitkeep +0 -0
  29. package/siesa-agents/resources/playwright-kit/reporters/agiletest-reporter.ts +252 -0
  30. package/siesa-agents/resources/playwright-kit/specs/.gitkeep +0 -0
  31. package/siesa-agents/resources/playwright-kit/specs/architecture-brief-siesa-erp.md +85 -0
  32. package/siesa-agents/resources/playwright-kit/specs/architecture-brief-siesa-react.md +109 -0
  33. package/siesa-agents/resources/playwright-kit/specs/architecture-brief-template.md +69 -0
  34. package/siesa-agents/resources/playwright-kit/tests/seed-example.spec.ts +95 -0
  35. package/siesa-agents/resources/playwright-kit/tools/locator-overlay.js +1306 -0
  36. package/siesa-agents/resources/playwright-kit/tools/locator-recorder.spec.ts +986 -0
  37. package/siesa-agents/scripts/__pycache__/bmad_to_agiletest.cpython-36.pyc +0 -0
  38. package/siesa-agents/scripts/bmad_to_agiletest.py +352 -337
  39. package/siesa-agents/scripts/converters/convert_csv_to_test_design.py +327 -0
  40. package/siesa-agents/scripts/converters/convert_excel_to_test_design.py +360 -0
  41. package/siesa-agents/scripts/converters/convert_md_to_test_design.py +359 -0
  42. package/siesa-agents/scripts/converters/convert_pdf_to_test_design.py +412 -0
  43. package/siesa-agents/scripts/converters/export_yaml_to_csv.py +149 -0
  44. package/siesa-agents/scripts/converters/export_yaml_to_excel.py +233 -0
  45. package/siesa-agents/scripts/converters/export_yaml_to_markdown.py +172 -0
  46. package/siesa-agents/scripts/converters/export_yaml_to_pdf.py +297 -0
  47. package/siesa-agents/scripts/merge_test_design.py +106 -106
  48. package/siesa-agents/scripts/playwright/yaml-to-playwright-spec.ts +203 -0
  49. package/siesa-agents/scripts/requirements.txt +7 -0
@@ -0,0 +1,42 @@
1
+ # ============================================================
2
+ # Credenciales QA — Grabador v3 + Tests E2E
3
+ # Copia este archivo como .env y personaliza tus valores
4
+ # El .env es personal (gitignored), nunca se sube al repo
5
+ # ============================================================
6
+
7
+ # Credenciales de login (Modo 1: ERP SIESA)
8
+ TEST_USER=Carlos1
9
+ TEST_PASS=1234
10
+
11
+ # URL base del ERP
12
+ BASE_URL=https://erp-qa-beta.siesaerp.com
13
+
14
+ # Base de datos a seleccionar en login (busca por texto en el combo)
15
+ # Opciones tipicas: sqlserver, postgresql
16
+ DB_ENGINE=sqlserver
17
+
18
+ # Cultura/idioma (comentar para usar la predeterminada del ERP)
19
+ # CULTURE=es-CO
20
+
21
+ # Ruta inicial del modulo a verificar/grabar (opcional, ej: /BLSurveyDocument/)
22
+ # Usada por seed-example.spec.ts (test de navegacion) y por el grabador.
23
+ # START_URL=
24
+
25
+ # Titulo de la suite en los reportes Allure/Monocart (opcional)
26
+ # SUITE_TITLE=E2E — Pipeline Agentes IA
27
+
28
+ # ── Modo Portal de Empleo (grabador: PORTAL_LOGIN=1) ───────────────
29
+ # Sin defaults: deben definirse para usar el modo portal.
30
+ # PORTAL_LOGIN=1
31
+ # PORTAL_URL=https://portal.example.com/Login/?dat=...
32
+ # PORTAL_USER=
33
+ # PORTAL_PASS=
34
+
35
+ # ── Ajustes de CI / timing (opcionales) ───────────────────────────
36
+ # CI=1 lo define el runner automáticamente (headless, retries=2, junit, trace on-first-retry).
37
+ # CI=1
38
+ # Margen de asentamiento tras red-en-reposo + loader SDK (ms) en blazor-e2e-helpers.
39
+ # BLAZOR_SETTLE_MS=1000
40
+ # Timeouts de acción/navegación (ms) — subir en CI lento.
41
+ # ACTION_TIMEOUT=30000
42
+ # NAVIGATION_TIMEOUT=30000
@@ -0,0 +1,228 @@
1
+ # Kit Playwright + Agentes IA — Siesa
2
+
3
+ ## Qué es esto
4
+
5
+ Kit portable para automatización E2E con agentes IA (Planner → Generator → Healer).
6
+ Desarrollado por el equipo QA de I&D — Procesos y Calidad de Software.
7
+
8
+ Validado en **9 réplicas**, 2 módulos (Encuestas + Capacitaciones), 271 tests,
9
+ mejora de **160 min → 4 min**, 5 réplicas consecutivas sin Healer (R5-R9).
10
+
11
+ ## Estructura
12
+
13
+ ```
14
+ playwright-agentes-ia-siesa/
15
+ ├── README.md ← Este archivo
16
+ ├── package.json ← Dependencias (npm install)
17
+ ├── playwright.config.ts ← Configuración Playwright (Allure + Monocart)
18
+ ├── helpers/
19
+ │ └── blazor-e2e-helpers.ts ← 14 helpers E2E reutilizables
20
+ ├── tools/
21
+ │ ├── locator-recorder.spec.ts ← Grabador de Localizadores V3
22
+ │ └── locator-overlay.js ← UI del grabador (overlay)
23
+ ├── tests/
24
+ │ └── seed-example.spec.ts ← Seed: login + navegación
25
+ ├── specs/ ← Insumos (.md generados por agente)
26
+ ├── proposed/ ← Specs generados (pre-promoción)
27
+ ├── captured-locators/ ← Localizadores capturados
28
+ ├── allure-results/ ← Datos crudos Allure (auto-generados)
29
+ ├── allure-report/ ← Reporte HTML Allure (auto-generado)
30
+ └── monocart-report/ ← Reporte HTML Monocart (auto-generado)
31
+ ```
32
+
33
+ ## Requisitos previos
34
+
35
+ - Node.js 20+ (recomendado 22 LTS)
36
+ - npm 10+
37
+ - Git
38
+
39
+ ## Instalación (5 minutos)
40
+
41
+ ```bash
42
+ # 1. Descomprimir y entrar
43
+ cd playwright-agentes-ia-siesa
44
+
45
+ # 2. Instalar dependencias
46
+ npm install
47
+
48
+ # 3. Instalar navegadores Playwright
49
+ npx playwright install chromium
50
+
51
+ # 4. Verificar con el seed
52
+ TEST_USER=Carlos1 TEST_PASS=1234 npx playwright test tests/seed-example.spec.ts --headed
53
+ ```
54
+
55
+ ## Reportes de ejecución
56
+
57
+ El kit incluye 3 reporters integrados que se generan automáticamente al ejecutar tests:
58
+
59
+ | Reporter | Comando para ver | Qué muestra |
60
+ |----------|-----------------|-------------|
61
+ | **Allure** | `npm run report:allure` | Gráficas, timeline, steps por test, screenshots |
62
+ | **Monocart** | `npm run report:monocart` | 348 steps detallados, logs, attachments |
63
+ | **Playwright HTML** | `npm run report` | Reporte nativo con traces y video |
64
+
65
+ Los reportes se generan automáticamente al terminar `npm test`. Para regenerar Allure:
66
+
67
+ ```bash
68
+ npx allure generate allure-results -o allure-report --clean
69
+ npx allure open allure-report
70
+ ```
71
+
72
+ ## Uso del Grabador de Localizadores V3
73
+
74
+ El grabador permite capturar localizadores de cualquier página Blazor Server
75
+ interactivamente, con soporte para 7 formatos de export.
76
+
77
+ ```bash
78
+ # ERP principal
79
+ npx playwright test tools/locator-recorder.spec.ts --headed --timeout 3600000
80
+
81
+ # Portal de Empleo (pre-load + login automático)
82
+ PORTAL_LOGIN=1 PORTAL_URL='https://...' npx playwright test tools/locator-recorder.spec.ts --headed --timeout 3600000
83
+
84
+ # Sin login (páginas públicas)
85
+ SKIP_LOGIN=1 START_URL='https://...' npx playwright test tools/locator-recorder.spec.ts --headed --timeout 3600000
86
+ ```
87
+
88
+ ### Funcionalidades del grabador
89
+
90
+ | Acción | Resultado |
91
+ |--------|-----------|
92
+ | **Grabar** (botón) | Captura automática de clicks, fills, selects |
93
+ | **Ctrl+Click** | Captura manual (modo inspección) |
94
+ | **Shift+Click** | Captura elemento + hijos |
95
+ | **Hover** | Ver localizadores del elemento en tooltip |
96
+ | **Escape** | Minimizar/restaurar panel |
97
+
98
+ ### Formatos de export
99
+
100
+ | Formato | Uso |
101
+ |---------|-----|
102
+ | **Playwright TS** | Tests Playwright ejecutables con objetos agrupados |
103
+ | **Playwright PY** | Tests Python con sync API |
104
+ | **Robot Framework** | SeleniumLibrary (.robot) |
105
+ | **Cypress** | Tests Cypress (.cy.js) |
106
+ | **Gherkin** | Escenarios BDD (.feature) |
107
+ | **CSV** | Datos tabulares para análisis |
108
+ | **JSON** | Datos crudos para procesamiento |
109
+
110
+ ## Pipeline Tri-Agente (Planner → Generator → Healer)
111
+
112
+ ### Flujo completo
113
+
114
+ ```
115
+ 1. SEED → Login + navegación base (seed-example.spec.ts)
116
+ 2. DISCOVERY → Grabador de Localizadores captura elementos
117
+ 3. INSUMO → Agente convierte PDF/caso AgileTest en specs/insumo.md
118
+ 4. PLANNER → Agente genera specs/test-plan.md
119
+ 5. GENERATOR → Agente genera proposed/modulo-e2e.spec.ts
120
+ 6. HEALER → Agente itera: ejecuta → analiza fallos → corrige
121
+ 7. PROMOCIÓN → Spec validado se mueve a tests/
122
+ ```
123
+
124
+ ### Helpers disponibles (blazor-e2e-helpers.ts)
125
+
126
+ | Helper | Descripción |
127
+ |--------|-------------|
128
+ | `createObsCollector()` | Observability: errores consola, HTTP 4xx/5xx, JS exceptions, dialogs |
129
+ | `login()` | Login ERP con credenciales parametrizables |
130
+ | `fillSDKText()` | Llenar campo DevExpress (input) |
131
+ | `fillSDKTextArea()` | Llenar textarea |
132
+ | `fillFechaRadzen()` | Llenar fecha Radzen (MM/DD/YYYY + Enter) |
133
+ | `clickToolbar()` | Click toolbar (maneja botones duplicados por sidebar) |
134
+ | `closeOverlays()` | Cerrar dialogs y notificaciones |
135
+ | `clickActivo()` | Seleccionar estado "Activo" |
136
+ | `waitForSave()` | Esperar loader SDK |
137
+ | `selectEntityPopup()` | Popup lupa: dual-mode (formulario vs grid) |
138
+ | `searchInGrid()` | Buscar en listado: dual-mode + Enter para filtro DevExpress |
139
+ | `navigateTo()` | Navegar y esperar carga |
140
+ | `waitForGrid()` | Esperar grid visible |
141
+ | `getFechas()` | Generar fechas dinámicas (inicio + N días) |
142
+
143
+ ### Patrones Blazor Server
144
+
145
+ - **Overlay `search_back_fade`**: Usar `force: true` o JS click
146
+ - **Celda de filtro DevExpress**: Después de `.fill()` presionar `Enter` para activar binding
147
+ - **Listados dual-mode**: Primera visita = formulario búsqueda, después = grid
148
+ - **Toolbar duplicada**: Sidebar oculto duplica botones → usar `.last()`
149
+ - **Entity popup dual**: Formulario (Código+Buscar) vs Grid directo (Celda de filtro)
150
+ - **Descripción siempre textarea**: NO usar SDKCharField para descripción
151
+ - **Pre-load SignalR**: Navegar a URL base primero para cargar recursos
152
+
153
+ ## Configuración por ambiente
154
+
155
+ Ajustar `playwright.config.ts`:
156
+
157
+ ```typescript
158
+ use: {
159
+ baseURL: process.env.BASE_URL || 'https://erp-qa-beta.siesaerp.com',
160
+ }
161
+ ```
162
+
163
+ Variables de entorno:
164
+
165
+ | Variable | Default | Descripción |
166
+ |----------|---------|-------------|
167
+ | `BASE_URL` | `https://erp-qa-beta.siesaerp.com` | URL base del ERP |
168
+ | `TEST_USER` | `Carlos1` | Usuario ERP |
169
+ | `TEST_PASS` | `1234` | Contraseña ERP |
170
+ | `DB_ENGINE` | `sqlserver` | BD a seleccionar en el login (match por texto) |
171
+ | `PORTAL_LOGIN` | - | `1` para login Portal de Empleo |
172
+ | `PORTAL_URL` | - | URL del portal |
173
+ | `PORTAL_USER` | - | Usuario del portal (sin default) |
174
+ | `PORTAL_PASS` | - | Contraseña del portal (sin default) |
175
+ | `SKIP_LOGIN` | - | `1` para páginas públicas |
176
+ | `START_URL` | - | URL inicial del módulo a verificar/grabar |
177
+ | `SUITE_TITLE` | `E2E — Pipeline Agentes IA` | Título de la suite en los reportes |
178
+ | `CI` | - | Lo define el runner: activa headless, `retries:2`, reporter `junit` y `trace:on-first-retry` |
179
+ | `BLAZOR_SETTLE_MS` | `1000` | Margen (ms) del helper `settle()` tras red-en-reposo + loader SDK |
180
+ | `ACTION_TIMEOUT` | `30000` | Timeout de acción (ms) — subir en CI lento |
181
+ | `NAVIGATION_TIMEOUT` | `30000` | Timeout de navegación (ms) — subir en CI lento |
182
+
183
+ ## Buenas prácticas (CI y mantenibilidad)
184
+
185
+ - **Limpieza de datos de test** (H-F6-15): los specs que crean registros deben limpiarlos
186
+ en un hook `test.afterAll(...)` (o `afterEach`) propio del módulo —el kit no puede saber
187
+ qué entidades creaste—. Usa `closeOverlays(page)` para cerrar diálogos/notificaciones
188
+ pendientes antes de cerrar el contexto.
189
+ - **Imports de helpers** (H-F6-16): impórtalos con ruta relativa correcta según dónde viva
190
+ el spec. Si dejas los specs en `tests/`, usa `../helpers/blazor-e2e-helpers`; si mueves el
191
+ spec a otra carpeta, ajusta la ruta. (No hay alias de path configurado en el kit.)
192
+ - **Exit codes en CI** (H-F6-21): Playwright retorna código ≠0 si algún test falla y 0 si
193
+ todos pasan; tu pipeline debe usar ese exit code como gate. El `junit.xml` (activo con `CI=1`)
194
+ alimenta el reporte de resultados de GitHub Actions/Jenkins.
195
+ - **Esperas** (H-F6-07): usa `settle(page)` (red-en-reposo + loader SDK + margen
196
+ `BLAZOR_SETTLE_MS`) en vez de `waitForTimeout()` incondicionales.
197
+
198
+ ## Resultados validados
199
+
200
+ | Réplica | Módulo | Tests | Resultado | Tiempo Pipeline | Tiempo Ejecución |
201
+ |---------|--------|-------|-----------|-----------------|------------------|
202
+ | R1 | Encuestas | 20 | 20/20 PASS | ~160 min | ~8 min |
203
+ | R3 | Encuestas | 21 | 20/21 PASS | ~40 min | 4.2 min |
204
+ | R4 | Capacitaciones | 16 | 16/16 PASS | ~35 min | 5.2 min |
205
+ | R5-R7 | Capacitaciones | 16 | 16/16 PASS | <15 min | ~5 min |
206
+ | R8 | Capacitaciones | 16 | 16/16 PASS | 4 min | 4 min |
207
+ | R9 | Capacitaciones | 16 | 16/16 PASS | 4 min | 4 min |
208
+
209
+ ## Equipo
210
+
211
+ - **Líder QA**: Juan Manuel Reina Montoya
212
+ - **QA HCM**: Carlos Felipe Diaz Lombana, Jose Alejandro Bravo Escobar
213
+ - **I&D**: Equipo de Procesos y Calidad de Software, SIESA
214
+
215
+ ## Capacitación
216
+
217
+ Si necesitas aprender o reforzar Playwright, el equipo QA mantiene un curso completo:
218
+
219
+ **Playwright Academy — Siesa**
220
+ https://playwright-training-siesa-academy.netlify.app/
221
+
222
+ - 140 lecciones interactivas | 21 secciones | 55-60 horas
223
+ - Desde fundamentos hasta CI/CD y patrones enterprise
224
+ - Incluye secciones de Allure, Monocart, Visual Testing, API Testing
225
+ - Contexto SIESA en ejemplos y mejores prácticas
226
+
227
+ ---
228
+ *Generado automáticamente — Pipeline QA E2E v3.2 con Agentes IA*
@@ -0,0 +1,26 @@
1
+ [
2
+ {
3
+ "name": "Defecto de producto",
4
+ "description": "Fallo causado por un bug real en la aplicacion bajo prueba",
5
+ "matchedStatuses": ["failed"],
6
+ "messageRegex": ".*expected.*to(Be|Have|Contain|Match).*"
7
+ },
8
+ {
9
+ "name": "Infraestructura / Red",
10
+ "description": "Fallo por timeout, conexion o servidor no disponible",
11
+ "matchedStatuses": ["broken"],
12
+ "messageRegex": ".*(timeout|ECONNREFUSED|ERR_CONNECTION|net::ERR_|Navigation|502|503|504).*"
13
+ },
14
+ {
15
+ "name": "Selector no encontrado",
16
+ "description": "Elemento no visible o localizador incorrecto",
17
+ "matchedStatuses": ["broken"],
18
+ "messageRegex": ".*(waiting for (locator|selector)|strict mode violation|no element found).*"
19
+ },
20
+ {
21
+ "name": "Error de datos / Estado",
22
+ "description": "Datos de prueba incorrectos o estado inesperado de la aplicacion",
23
+ "matchedStatuses": ["failed"],
24
+ "messageRegex": ".*(already exists|duplicate|unique constraint|validation error).*"
25
+ }
26
+ ]
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Global setup — genera allure/environment.properties antes de los tests.
3
+ * Se ejecuta una sola vez al inicio de la suite.
4
+ */
5
+ import { FullConfig } from '@playwright/test';
6
+ import * as fs from 'fs';
7
+ import * as os from 'os';
8
+ import * as path from 'path';
9
+
10
+ async function globalSetup(config: FullConfig) {
11
+ const dir = 'allure-results';
12
+ fs.mkdirSync(dir, { recursive: true });
13
+
14
+ const props = [
15
+ `Browser=Chromium`,
16
+ `Framework=Playwright ${require('@playwright/test/package.json').version}`,
17
+ `Node=${process.version}`,
18
+ `OS=${os.type()} ${os.release()}`,
19
+ `Base.URL=${config.projects[0]?.use?.baseURL || 'N/A'}`,
20
+ `Suite=${process.env.SUITE_TITLE || 'E2E — Pipeline Agentes IA'}`,
21
+ `Team=QA I&D — Procesos y Calidad de Software, SIESA`,
22
+ ].join('\n');
23
+
24
+ fs.writeFileSync(path.join(dir, 'environment.properties'), props);
25
+
26
+ // Copiar categories.json si existe
27
+ const catSrc = path.join(__dirname, 'allure', 'categories.json');
28
+ const catDst = path.join(dir, 'categories.json');
29
+ if (fs.existsSync(catSrc)) {
30
+ fs.copyFileSync(catSrc, catDst);
31
+ }
32
+ }
33
+
34
+ export default globalSetup;