xonecode 0.1.0
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/README.md +167 -0
- package/dist/agent/authEnDisco.js +56 -0
- package/dist/agent/authEnDisco.js.map +1 -0
- package/dist/agent/configEnDisco.js +109 -0
- package/dist/agent/configEnDisco.js.map +1 -0
- package/dist/agent/crearProyecto.js +34 -0
- package/dist/agent/crearProyecto.js.map +1 -0
- package/dist/agent/entorno.js +124 -0
- package/dist/agent/entorno.js.map +1 -0
- package/dist/agent/guionizado.js +53 -0
- package/dist/agent/guionizado.js.map +1 -0
- package/dist/agent/instantanea.js +129 -0
- package/dist/agent/instantanea.js.map +1 -0
- package/dist/agent/interrupts.js +83 -0
- package/dist/agent/interrupts.js.map +1 -0
- package/dist/agent/mensajes.js +24 -0
- package/dist/agent/mensajes.js.map +1 -0
- package/dist/agent/modelos.js +42 -0
- package/dist/agent/modelos.js.map +1 -0
- package/dist/agent/normalizar.js +20 -0
- package/dist/agent/normalizar.js.map +1 -0
- package/dist/agent/perfiles.js +103 -0
- package/dist/agent/perfiles.js.map +1 -0
- package/dist/agent/proyecto.js +107 -0
- package/dist/agent/proyecto.js.map +1 -0
- package/dist/agent/puente.js +142 -0
- package/dist/agent/puente.js.map +1 -0
- package/dist/agent/resumenDeTool.js +48 -0
- package/dist/agent/resumenDeTool.js.map +1 -0
- package/dist/agent/skills.js +65 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/textoDeTool.js +113 -0
- package/dist/agent/textoDeTool.js.map +1 -0
- package/dist/agent/turnoReal.js +173 -0
- package/dist/agent/turnoReal.js.map +1 -0
- package/dist/agent/verificador.js +65 -0
- package/dist/agent/verificador.js.map +1 -0
- package/dist/agent/xoneAgent.js +106 -0
- package/dist/agent/xoneAgent.js.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/aprobar.js +82 -0
- package/dist/cli/aprobar.js.map +1 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/consola.js +346 -0
- package/dist/cli/consola.js.map +1 -0
- package/dist/cli/describe.js +53 -0
- package/dist/cli/describe.js.map +1 -0
- package/dist/cli/doctor.js +45 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/main.js +520 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/markdown.js +90 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/run.js +164 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/spinner.js +89 -0
- package/dist/cli/spinner.js.map +1 -0
- package/dist/cli/stdio.js +193 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/tema.js +40 -0
- package/dist/cli/tema.js.map +1 -0
- package/dist/cli/verify.js +62 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/core/bitacora.js +30 -0
- package/dist/core/bitacora.js.map +1 -0
- package/dist/core/config.js +236 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextos.js +56 -0
- package/dist/core/contextos.js.map +1 -0
- package/dist/core/deps.js +51 -0
- package/dist/core/deps.js.map +1 -0
- package/dist/core/diff.js +79 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/esqueleto.js +366 -0
- package/dist/core/esqueleto.js.map +1 -0
- package/dist/core/events.js +2 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/modelos.js +85 -0
- package/dist/core/modelos.js.map +1 -0
- package/dist/core/notify.js +106 -0
- package/dist/core/notify.js.map +1 -0
- package/dist/core/ports.js +114 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/turno.js +127 -0
- package/dist/core/turno.js.map +1 -0
- package/dist/vendor/hitl.js +103 -0
- package/dist/vendor/hitl.js.map +1 -0
- package/dist/vendor/skillLoaders/catalog.js +74 -0
- package/dist/vendor/skillLoaders/catalog.js.map +1 -0
- package/dist/vendor/tokenTracking.js +58 -0
- package/dist/vendor/tokenTracking.js.map +1 -0
- package/package.json +41 -0
- package/skills/xone-debugging/SKILL.md +52 -0
- package/skills/xone-debugging/references/faq.md +561 -0
- package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
- package/skills/xone-development/SKILL.md +105 -0
- package/skills/xone-development/references/anti-patrones.md +94 -0
- package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
- package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
- package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
- package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
- package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
- package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
- package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
- package/skills/xone-development/references/datos/appdata.md +611 -0
- package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
- package/skills/xone-development/references/datos/http.md +366 -0
- package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
- package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
- package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
- package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
- package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
- package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
- package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
- package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
- package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
- package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
- package/skills/xone-development/references/indice-completo.md +77 -0
- package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
- package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
- package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
- package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
- package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
- package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
- package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
- package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
- package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
- package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
- package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
- package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
- package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
- package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
- package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
- package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
- package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
- package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
- package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
- package/skills/xone-development/references/tipos-de-prop.md +28 -0
- package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
- package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
- package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
- package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
- package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
- package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
- package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
- package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
- package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
- package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
- package/skills/xone-development/references/xml-ui/mapas.md +685 -0
- package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
- package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
- package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
- package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
- package/skills/xone-plan-builder/SKILL.md +183 -0
- package/skills/xone-plan-builder/agents/openai.yaml +5 -0
- package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
- package/skills/xone-project-generator/SKILL.md +111 -0
- package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
- package/skills/xone-project-generator/references/colecciones-base.md +16 -0
- package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
- package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
- package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
- package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
- package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
- package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
- package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
- package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
- package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
- package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
- package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
- package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
- package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
- package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
- package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
- package/skills/xone-review/SKILL.md +189 -0
- package/skills/xone-spec-builder/SKILL.md +235 -0
- package/skills/xone-spec-builder/agents/openai.yaml +5 -0
- package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
- package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
- package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# Generación XOne — Fases 0-2: flujo, requisitos y modelo de datos
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-project-generator/references/xone-project-generation-workflow.md` §1–§3. Referencia de la skill; el índice está en [../SKILL.md](../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §1 Fase 0 diagrama de flujo completo · §2 Fase 1 análisis de requisitos (datos mínimos, inferencias, regla de decisión técnica) · §3 Fase 2 diseño del modelo de datos (colecciones base obligatorias, tipos de propiedades, visibilidad, foreign keys)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Fase 0: Diagrama de Flujo Completo
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
INICIO: Usuario solicita nuevo proyecto
|
|
13
|
+
|
|
|
14
|
+
v
|
|
15
|
+
[FASE 0] Diagrama / Planificacion
|
|
16
|
+
|
|
|
17
|
+
v
|
|
18
|
+
[FASE 1] Analisis de Requisitos
|
|
19
|
+
|-- Identificar sector y funcionalidades
|
|
20
|
+
|-- Determinar colecciones necesarias
|
|
21
|
+
|-- Identificar pantallas requeridas
|
|
22
|
+
|-- Definir paleta de colores e iconos
|
|
23
|
+
|
|
|
24
|
+
v
|
|
25
|
+
[FASE 2] Diseno del Modelo de Datos
|
|
26
|
+
|-- Colecciones base (Empresas, Usuarios)
|
|
27
|
+
|-- Colecciones adicionales del proyecto
|
|
28
|
+
|-- Relaciones entre colecciones
|
|
29
|
+
|-- Tipos de campos y visibilidad
|
|
30
|
+
|
|
|
31
|
+
v
|
|
32
|
+
[FASE 3] Estilos CSS
|
|
33
|
+
|-- default.css (estilos globales)
|
|
34
|
+
|-- colors.css (paleta de colores, opcional)
|
|
35
|
+
|
|
|
36
|
+
v
|
|
37
|
+
[FASE 4] Creación de Estructura de Carpetas
|
|
38
|
+
|-- bd/, icons/, files/, fonts/
|
|
39
|
+
|
|
|
40
|
+
v
|
|
41
|
+
[FASE 5] Generacion de Archivos de Configuración
|
|
42
|
+
|-- app.xml (configuracion global)
|
|
43
|
+
|-- app.ini (metadatos)
|
|
44
|
+
|-- mappings.xne (SOLO Empresas y Usuarios)
|
|
45
|
+
|
|
|
46
|
+
v
|
|
47
|
+
[FASE 6] Generacion de Colecciones
|
|
48
|
+
|-- Un archivo .xne por cada coleccion adicional
|
|
49
|
+
|-- Definir campos, tipos, visibilidad
|
|
50
|
+
|
|
|
51
|
+
v
|
|
52
|
+
[FASE 7] Generacion de Pantallas
|
|
53
|
+
|-- Decidir si la app tiene autologin o login
|
|
54
|
+
|-- Login.xne (solo si NO es autologin)
|
|
55
|
+
|-- EntradaApp.xne / MenuPrincipal.xne (punto de entrada)
|
|
56
|
+
|-- Consola.xne (obligatoria, siempre; con replica completa o solo info de dispositivo)
|
|
57
|
+
|-- Pantallas de listas, detalle, mapas, config
|
|
58
|
+
|
|
|
59
|
+
v
|
|
60
|
+
[FASE 8] Eventos y Reglas de Negocio
|
|
61
|
+
|-- Eventos de ciclo de vida (create, insert, before-edit, after-edit, delete)
|
|
62
|
+
|-- Eventos de coleccion Empresas (onlogon, onlogoff, maintenance, replica-ok...)
|
|
63
|
+
|-- Eventos de contents (selecteditem, load, auto-selecteditem)
|
|
64
|
+
|-- Eventos de controles (onclick, onchange, onback, onfocus...)
|
|
65
|
+
|-- Eventos especiales de app (on-app-foreground, on-app-background, inactividad)
|
|
66
|
+
|
|
|
67
|
+
v
|
|
68
|
+
[FASE 9] Funciones JavaScript
|
|
69
|
+
|-- functions.js (funciones globales)
|
|
70
|
+
|-- Scripts adicionales si es necesario
|
|
71
|
+
|
|
|
72
|
+
v
|
|
73
|
+
[FASE 10] Generacion de READMEs
|
|
74
|
+
|-- README.md en cada carpeta (bd/, icons/, files/, fonts/)
|
|
75
|
+
|-- README.md principal con prompt detallado
|
|
76
|
+
|
|
|
77
|
+
v
|
|
78
|
+
[FASE 11] Tareas Finales (en este orden exacto)
|
|
79
|
+
|-- 1. Generar base de datos con xone_db_generator
|
|
80
|
+
|-- 2. Insertar datos iniciales (Empresa + Usuario admin)
|
|
81
|
+
|-- 3. Descargar iconos (Iconify API — PNG, JPG o SVG validos)
|
|
82
|
+
|
|
|
83
|
+
v
|
|
84
|
+
[FASE 12] Validación
|
|
85
|
+
|-- Ejecutar checklist completo
|
|
86
|
+
|-- Verificar estructura, BD, iconos
|
|
87
|
+
|
|
|
88
|
+
v
|
|
89
|
+
FIN: Proyecto completo y validado
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 2. Fase 1: Análisis de Requisitos
|
|
95
|
+
|
|
96
|
+
### 2.1 Objetivo
|
|
97
|
+
|
|
98
|
+
Entender que hay que construir antes de escribir código. El agente debe inferir todo lo que pueda del contexto de la solicitud, y preguntar **únicamente lo que no pueda deducir por si mismo**.
|
|
99
|
+
|
|
100
|
+
> **REGLA:** No lanzar un interrogatorio. Analizar primero la solicitud, inferir, y preguntar solo lo mínimo imprescindible para no poder continuar.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### 2.2 Datos Mínimos Obligatorios
|
|
105
|
+
|
|
106
|
+
Son los únicos datos sin los cuales es imposible iniciar el proyecto. Si no están presentes en la solicitud, preguntar **en un único mensaje**, todos juntos:
|
|
107
|
+
|
|
108
|
+
| Dato | Por que es obligatorio |
|
|
109
|
+
|------|------------------------|
|
|
110
|
+
| **¿Que hace la app?** — descripción breve | Sin esto no se puede inferir nada: colecciones, pantallas, lógica |
|
|
111
|
+
| **¿Con login o sin login (autologin)?** | Determina si se genera Login.xne y como se configura app.xml |
|
|
112
|
+
| **¿Tiene replica con servidor?** | Determina el contenido de la Consola y la configuración de license.ini |
|
|
113
|
+
|
|
114
|
+
Si el programador ya lo ha descrito en su solicitud, no volver a preguntar.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### 2.3 Datos que el Agente Infiere
|
|
119
|
+
|
|
120
|
+
El agente deduce estos datos del contexto sin preguntar. Si la inferencia es dudosa, aplica el valor por defecto y avanza:
|
|
121
|
+
|
|
122
|
+
| Dato | Como inferirlo | Valor por defecto |
|
|
123
|
+
|------|----------------|-------------------|
|
|
124
|
+
| Nombre del proyecto | Del título o descripción de la solicitud | `MiProyecto` |
|
|
125
|
+
| Sector | De las entidades y funcionalidades descritas | `Servicios` |
|
|
126
|
+
| Colecciones necesarias | De las funcionalidades y entidades mencionadas | Se modelan según el sector |
|
|
127
|
+
| Pantallas necesarias | De las colecciones y el flujo descrito | Lista + Detalle por cada coleccion |
|
|
128
|
+
| Pantalla de entrada | Si no se indica, usar `EntradaApp` | `EntradaApp` |
|
|
129
|
+
| Roles de usuario | De la descripción o del sector | `Administrador, Usuario` |
|
|
130
|
+
| Prefijo BD | Si no se indica explicitamente | `gen` |
|
|
131
|
+
| Plataforma | Si no se indica | Android |
|
|
132
|
+
| Orientación | Si no se indica | Portrait |
|
|
133
|
+
| Resolución de referencia | Si no se indica | 1080x1920 |
|
|
134
|
+
| Colores | Si no se indican, usar paleta Material Design neutra | `#2196F3`, `#757575`, `#FF5722` |
|
|
135
|
+
| Fuente | Si no se indica | `Roboto-Regular.ttf` |
|
|
136
|
+
| Integraciones (GPS, camara, PDF...) | De las funcionalidades descritas | Ninguna |
|
|
137
|
+
| Datos iniciales BD | Siempre | Empresa de prueba + usuario admin |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 2.4 Datos que el Programador Puede Aportar Voluntariamente
|
|
142
|
+
|
|
143
|
+
El agente no pregunta por estos, pero si el programador los aporta, los usa:
|
|
144
|
+
|
|
145
|
+
- Diseños de pantallas (Figma, wireframes, imágenes)
|
|
146
|
+
- Colores corporativos o logo
|
|
147
|
+
- Fuente tipografica corporativa
|
|
148
|
+
- Campos especificos de las entidades
|
|
149
|
+
- Restricciones técnicas (versión Android, seguridad, inactividad)
|
|
150
|
+
- URL del servidor de replica e intervalo de sincronización
|
|
151
|
+
- Prefijo de BD diferente a `gen`
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### 2.5 Regla de Decisión Técnica
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
ANTES de escribir codigo:
|
|
159
|
+
1. ¿Existe documentacion en las knowledgebases?
|
|
160
|
+
-> SI: Seguir la documentacion exactamente
|
|
161
|
+
-> NO: Buscar ejemplos en templates/projects/
|
|
162
|
+
|
|
163
|
+
2. ¿Hay ejemplos similares en los proyectos?
|
|
164
|
+
-> SI: Analizar el patron y adaptarlo
|
|
165
|
+
-> NO: Preguntar al usuario antes de improvisar
|
|
166
|
+
|
|
167
|
+
3. ¿El atributo/funcion/propiedad esta documentado?
|
|
168
|
+
-> SI: Usar solo valores documentados
|
|
169
|
+
-> NO: NO inventar, buscar alternativas documentadas
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### 2.6 Donde Buscar Referencia
|
|
175
|
+
|
|
176
|
+
| Necesidad | Fuente |
|
|
177
|
+
|-----------|--------|
|
|
178
|
+
| Estructura de proyecto | `knowledgebase/docs/xone-project-structure-knowledgebase.md` |
|
|
179
|
+
| Atributos XML | `knowledgebase/docs/xone-xml-structure-knowledgebase.md` |
|
|
180
|
+
| API JavaScript | `knowledgebase/docs/xone-javascript-api-knowledgebase.md` |
|
|
181
|
+
| Estilos CSS | `knowledgebase/docs/xone-css-knowledgebase.md` |
|
|
182
|
+
| Guía paso a paso | `knowledgebase/docs/xone-new-project-guide-knowledgebase.md` |
|
|
183
|
+
| Proyecto de ejemplo | `knowledgebase/examples/UseCars/` |
|
|
184
|
+
| Proyectos reales | `templates/projects/` |
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
## 3. Fase 2: Diseño del Modelo de Datos
|
|
188
|
+
|
|
189
|
+
### 3.1 Objetivo
|
|
190
|
+
|
|
191
|
+
Disenar el modelo de datos completo del proyecto, incluyendo colecciones, campos, tipos, visibilidad y relaciones entre entidades.
|
|
192
|
+
|
|
193
|
+
### 3.2 Colecciones Base Obligatorias
|
|
194
|
+
|
|
195
|
+
Toda aplicación XOne debe tener al mínimo estas dos colecciones en `mappings.xne`.
|
|
196
|
+
|
|
197
|
+
**Estructura mínima obligatoria de `mappings.xne`:**
|
|
198
|
+
|
|
199
|
+
```xml
|
|
200
|
+
<?xml version="1.0" encoding="iso-8859-15"?>
|
|
201
|
+
<xml>
|
|
202
|
+
<collprops type="general">
|
|
203
|
+
|
|
204
|
+
<coll name="Empresas" title="la empresa"
|
|
205
|
+
sql="select e.* from ##PREF##empresa e"
|
|
206
|
+
objname="empresa" updateobj="empresa" progid="ASGestion.CASEmpresa">
|
|
207
|
+
<group name="General" id="1">
|
|
208
|
+
<prop name="CODIGO" visible="3" type="N" fieldsize="12" />
|
|
209
|
+
<prop name="NOMBRE" type="T" fieldsize="30" size="250" />
|
|
210
|
+
</group>
|
|
211
|
+
</coll>
|
|
212
|
+
|
|
213
|
+
<coll name="Usuarios" title="el usuario"
|
|
214
|
+
sql="select u.* from ##PREF##usuarios u"
|
|
215
|
+
objname="usuarios" updateobj="usuarios" progid="ASGestion.CASUser">
|
|
216
|
+
<group name="General" id="1">
|
|
217
|
+
<prop name="IDEMPRESA" visible="0" type="N" mapcol="Empresas" mapfld="ID" />
|
|
218
|
+
<prop name="CODIGO" visible="3" type="T" fieldsize="10" size="50" />
|
|
219
|
+
<prop name="LOGIN" visible="3" type="T" fieldsize="10" size="50" />
|
|
220
|
+
<prop name="PWD" type="X" fieldsize="10" size="50" visible="0" />
|
|
221
|
+
<prop name="NOMBRE" visible="3" type="T" fieldsize="30" size="50" />
|
|
222
|
+
</group>
|
|
223
|
+
<create>
|
|
224
|
+
<action name="setval" field="IDEMPRESA" value="##ENTID##" />
|
|
225
|
+
</create>
|
|
226
|
+
</coll>
|
|
227
|
+
|
|
228
|
+
</collprops>
|
|
229
|
+
</xml>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Reglas críticas del mappings.xne:**
|
|
233
|
+
- Solo contiene `Empresas` y `Usuarios`. El resto de colecciones van en archivos `.xne` separados
|
|
234
|
+
- El campo de relación en Usuarios es `IDEMPRESA` (FK a Empresas), con `mapcol="Empresas" mapfld="ID"`
|
|
235
|
+
- El evento `<create>` en Usuarios asigna automáticamente `##ENTID##` al crear un nuevo usuario
|
|
236
|
+
- El encoding puede ser UTF-8 o `iso-8859-15` (coherente con los bytes; el motor respeta el declarado)
|
|
237
|
+
|
|
238
|
+
### 3.3 Tipos de Propiedades Disponibles
|
|
239
|
+
|
|
240
|
+
Los tipos de XOne se dividen en dos categorías: los que **se persisten en base de datos** y los que son **solo visuales** (no generan columna en BD).
|
|
241
|
+
|
|
242
|
+
#### Tipos de Datos (se persisten en BD)
|
|
243
|
+
|
|
244
|
+
| Tipo | SQLite | Descripción | Ejemplo de Uso |
|
|
245
|
+
|------|--------|-------------|----------------|
|
|
246
|
+
| `T` | TEXT | Texto. Admite variantes: texto simple, multilinea (con `lines`) o mapeada (con `linkedto`) | Nombres, descripciones, campos enlazados |
|
|
247
|
+
| `N` | INTEGER | Número entero | IDs, cantidades, flags numéricos |
|
|
248
|
+
| `N2` | REAL | Número con 2 decimales | Precios, importes |
|
|
249
|
+
| `N3` | REAL | Número con 3 decimales | Coordenadas |
|
|
250
|
+
| `N4` | REAL | Número con 4 decimales | Precisión alta |
|
|
251
|
+
| `N5` | REAL | Número con 5 decimales | Precisión muy alta |
|
|
252
|
+
| `N6` | REAL | Número con 6 decimales | GPS lat/lon |
|
|
253
|
+
| `TN` | TEXT | Número almacenado como texto (entero) | Números con leading zeros, códigos numéricos |
|
|
254
|
+
| `TN2` | TEXT | Número almacenado como texto (2 decimales) | Importes formateados como texto |
|
|
255
|
+
| `TN3` | TEXT | Número almacenado como texto (3 decimales) | Medidas con precisión |
|
|
256
|
+
| `TN4` | TEXT | Número almacenado como texto (4 decimales) | Precisión alta |
|
|
257
|
+
| `TN5` | TEXT | Número almacenado como texto (5 decimales) | Precisión muy alta |
|
|
258
|
+
| `TN6` | TEXT | Número almacenado como texto (6 decimales) | GPS como texto |
|
|
259
|
+
| `X` | TEXT | Password — se muestra enmascarado, admite `hash-type` y `encode` | Contrasenas |
|
|
260
|
+
| `D` | TEXT | Fecha | Fechas |
|
|
261
|
+
| `DT` | TEXT | Fecha y hora | Timestamps |
|
|
262
|
+
| `TT` | TEXT | Hora en formato texto | Horas, duraciones |
|
|
263
|
+
| `NC` | INTEGER | Checkbox / Toggle (0=no, 1=si) | Opciones booleanas |
|
|
264
|
+
| `IMG` | TEXT | Imagen (ruta al fichero) | Fotos referenciadas, logos |
|
|
265
|
+
| `PH` | TEXT | Fotografía — captura desde camara del dispositivo | Fotos tomadas en campo |
|
|
266
|
+
| `VD` | TEXT | Video — grabacion, selección o escaner QR/barcode | Grabacion de video, lectura de códigos |
|
|
267
|
+
| `AT` | TEXT | Adjunto — permite adjuntar ficheros al registro | Documentos adjuntos |
|
|
268
|
+
| `DR` | TEXT | Dibujo / firma a mano alzada (ruta al fichero) | Firmas, croquis |
|
|
269
|
+
| `WEB` | TEXT | WebView — URL o HTML embebido | Contenido web, videos online |
|
|
270
|
+
| `O` | (no aplica) | Sub-objeto JavaScript — NO genera columna ni se persiste | Estructuras temporales en memoria |
|
|
271
|
+
|
|
272
|
+
#### Tipos de UI (NO se persisten en BD — solo visuales)
|
|
273
|
+
|
|
274
|
+
Estos tipos definen controles visuales que **no generan columna en la base de datos**. Se usan exclusivamente para la interfaz.
|
|
275
|
+
|
|
276
|
+
| Tipo | Descripción | Uso |
|
|
277
|
+
|------|-------------|-----|
|
|
278
|
+
| `L` | Etiqueta de texto (solo lectura) — forma preferida. Muestra el `title`; sin `title`, usa el valor del campo como fallback | Títulos, labels, textos informativos o valores dinámicos |
|
|
279
|
+
| `TL` | Alias legacy de `L` (mismo control) | Equivalente a `type="L"` |
|
|
280
|
+
| `THTML` | Etiqueta con contenido HTML enriquecido | Textos con formato HTML embebido (negrita, colores, enlaces) |
|
|
281
|
+
| `B` | Botón | Acciones, navegación, llamadas a ExecuteNode |
|
|
282
|
+
| `Z` | Contents — lista embebida dentro de otra coleccion | Subgrids, detalles de maestro-detalle, mapas (`viewmode="mapview"`), kanban, slider, etc. |
|
|
283
|
+
|
|
284
|
+
### 3.4 Sistema de Visibilidad (Bitmask)
|
|
285
|
+
|
|
286
|
+
El atributo `visible` define **en que contextos de la UI se pinta el campo**. Es estático — no se puede cambiar en tiempo de ejecución por script ni por condiciones. Si un campo tiene `visible="0"`, no existe en pantalla en ningun momento.
|
|
287
|
+
|
|
288
|
+
Cada bit representa un contexto:
|
|
289
|
+
|
|
290
|
+
| Bit | Valor | Contexto |
|
|
291
|
+
|-----|-------|----------|
|
|
292
|
+
| Bit 0 | 1 | Edición (formulario individual) |
|
|
293
|
+
| Bit 1 | 2 | Lista (vista de registros) |
|
|
294
|
+
| Bit 2 | 4 | Content (lista embebida `type="Z"`) |
|
|
295
|
+
| Bit 3 | 8 | Combo (desplegable) |
|
|
296
|
+
|
|
297
|
+
Cualquier combinacion de bits es valida. Las más usadas:
|
|
298
|
+
|
|
299
|
+
| Valor | Contextos | Uso típico |
|
|
300
|
+
|-------|-----------|------------|
|
|
301
|
+
| `0` | Ninguno | Campo puramente interno — solo para lógica |
|
|
302
|
+
| `1` | Edición | Solo en formulario individual |
|
|
303
|
+
| `2` | Lista | Solo en vista de registros |
|
|
304
|
+
| `3` | Edición + Lista | En formulario y en lista |
|
|
305
|
+
| `4` | Content | Solo en listas embebidas |
|
|
306
|
+
| `7` | Edición + Lista + Content | **El más habitual** |
|
|
307
|
+
| `8` | Combo | Solo en desplegables |
|
|
308
|
+
| `15` | Todos | Edición + Lista + Content + Combo |
|
|
309
|
+
|
|
310
|
+
**Regla general:**
|
|
311
|
+
- Campos de BD internos (ID, ROWID): `visible="0"`
|
|
312
|
+
- Campos visibles para el usuario: `visible="7"`
|
|
313
|
+
- Campos solo en formulario: `visible="1"`
|
|
314
|
+
- Campos solo en listas: `visible="2"`
|
|
315
|
+
|
|
316
|
+
> **Diferencia con `disablevisible`:** `visible` es estático — decide si el campo existe en pantalla en ese contexto. `disablevisible` es dinámico — el campo existe pero se muestra u oculta según el valor de otro campo en tiempo de ejecución.
|
|
317
|
+
|
|
318
|
+
### 3.5 Relaciones entre Colecciones (Foreign Keys)
|
|
319
|
+
|
|
320
|
+
Las relaciones se definen con los atributos `mapcol` y `mapfld`:
|
|
321
|
+
|
|
322
|
+
```xml
|
|
323
|
+
<!-- Campo que referencia otra coleccion -->
|
|
324
|
+
<prop name="IDEMPRESA" type="N" visible="7" mapcol="Empresas" mapfld="ID" />
|
|
325
|
+
<!-- Significa: IDEMPRESA referencia al campo ID de la coleccion Empresas -->
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### 3.6 Ejemplo de Diseño de Modelo
|
|
329
|
+
|
|
330
|
+
Para una app de gestion de entregas:
|
|
331
|
+
|
|
332
|
+
```
|
|
333
|
+
Empresas (mappings.xne)
|
|
334
|
+
├── CODIGO, NOMBRE (declarar como <prop>; ID y ROWID los gestiona XOne, no hace falta declararlos)
|
|
335
|
+
├── CIF, DIRECCION, TELEFONO (adicionales)
|
|
336
|
+
|
|
337
|
+
Usuarios (mappings.xne)
|
|
338
|
+
├── CODIGO, NOMBRE, IDEMPRESA, LOGIN, PWD (declarar como <prop>; ID y ROWID los gestiona XOne)
|
|
339
|
+
├── ROL, EMAIL, TELEFONO, ACTIVO (adicionales)
|
|
340
|
+
|
|
341
|
+
Clientes (Clientes.xne)
|
|
342
|
+
├── ID, CODIGO, NOMBRE, DIRECCION, TELEFONO, EMAIL, LATITUD, LONGITUD
|
|
343
|
+
|
|
344
|
+
Pedidos (Pedidos.xne)
|
|
345
|
+
├── ID, ID_CLIENTE (FK->Clientes), FECHA, ESTADO, TOTAL, OBSERVACIONES
|
|
346
|
+
|
|
347
|
+
Entregas (Entregas.xne)
|
|
348
|
+
├── ID, ID_PEDIDO (FK->Pedidos), ID_REPARTIDOR (FK->Usuarios)
|
|
349
|
+
├── FECHA_ENTREGA, FIRMA, FOTO_ENTREGA, LATITUD, LONGITUD, ESTADO
|
|
350
|
+
```
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Generación XOne — Fases 10-12: READMEs, tareas finales y validación
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-project-generator/references/xone-project-generation-workflow.md` §11–§13. Referencia de la skill; el índice está en [../SKILL.md](../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §11 Fase 10 READMEs · §12 Fase 11 tareas finales (base de datos, datos iniciales, iconos) · §13 Fase 12 checklist completo de validación
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 11. Fase 10: Generación de READMEs
|
|
10
|
+
|
|
11
|
+
### 10.1 Objetivo
|
|
12
|
+
|
|
13
|
+
Crear un README.md en cada carpeta del proyecto y un README.md principal con el prompt detallado de generación.
|
|
14
|
+
|
|
15
|
+
### 10.2 READMEs por Carpeta
|
|
16
|
+
|
|
17
|
+
Cada carpeta obligatoria debe tener un README.md que describa:
|
|
18
|
+
|
|
19
|
+
- **bd/README.md**: Proposito de la carpeta, como se genera gestion.db, comando `xone_db_generator`
|
|
20
|
+
- **icons/README.md**: Fuente de iconos (Google Material Icons), formato PNG, tamanios estándar, nomenclatura
|
|
21
|
+
- **files/README.md**: Proposito (archivos dinámicos), como acceder desde código (appData.getFilesPath())
|
|
22
|
+
- **fonts/README.md**: Fuentes incluidas, formatos soportados (TTF, OTF), uso en CSS y XML
|
|
23
|
+
|
|
24
|
+
### 10.3 README.md Principal (Raiz del Proyecto)
|
|
25
|
+
|
|
26
|
+
El README.md principal debe ser un **prompt detallado** que describe completamente como crear la aplicación. Debe contener:
|
|
27
|
+
|
|
28
|
+
1. **Descripción General** - Que hace la app, sector, plataformas
|
|
29
|
+
2. **Funcionalidades** - Lista detallada de funciones principales
|
|
30
|
+
3. **Modelo de Datos** - Todas las colecciones con sus campos, tipos y relaciones
|
|
31
|
+
4. **Pantallas** - Descripción de cada pantalla con su proposito y elementos
|
|
32
|
+
5. **Flujos de Usuario** - Pasos de interaccion para cada funcionalidad
|
|
33
|
+
6. **Reglas de Negocio** - Validaciones, calculos y restricciones
|
|
34
|
+
7. **Integraciones** - GPS, camara, firma digital, NFC, Bluetooth, etc.
|
|
35
|
+
8. **Paleta de Colores** - Colores hex del proyecto (primario, secundario, acento, estados)
|
|
36
|
+
9. **Iconos Requeridos** - Lista completa de iconos necesarios con nombre y pantalla
|
|
37
|
+
10. **Comandos de Generación** - Como generar BD, descargar iconos, convertir e insertar datos
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 12. Fase 11: Tareas Finales
|
|
42
|
+
|
|
43
|
+
### 11.1 Objetivo
|
|
44
|
+
|
|
45
|
+
Ejecutar las tareas finales de generación en el orden exacto especificado. Estas tareas se ejecutan DESPUES de generar todo el código fuente.
|
|
46
|
+
|
|
47
|
+
### 11.2 Orden de Ejecución (OBLIGATORIO)
|
|
48
|
+
|
|
49
|
+
1. Generar base de datos (`xone_db_generator`)
|
|
50
|
+
2. Insertar datos iniciales (Empresa + Usuario admin)
|
|
51
|
+
3. Descargar iconos (Iconify API — PNG, JPG o SVG validos)
|
|
52
|
+
|
|
53
|
+
### 11.3 Tarea 1: Generar Base de Datos
|
|
54
|
+
|
|
55
|
+
Comando:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python3 -m xone_db_generator NombreProyecto --overwrite
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Verificación: sqlite3 .../bd/gestion.db ".tables"
|
|
62
|
+
|
|
63
|
+
Las tablas deben tener el prefijo `gen_` y estar en minúsculas (ej: `gen_empresas`, `gen_usuarios`). Los campos se generan en mayúsculas.
|
|
64
|
+
|
|
65
|
+
**Mapeo de Tipos XOne a SQLite:**
|
|
66
|
+
|
|
67
|
+
| Tipo XOne | SQLite | Descripción |
|
|
68
|
+
|-----------|--------|-------------|
|
|
69
|
+
| T, L, TL, X, PH | TEXT | Texto |
|
|
70
|
+
| D, DT | TEXT | Fechas |
|
|
71
|
+
| IMG, VD, F, M | TEXT | Rutas |
|
|
72
|
+
| N | INTEGER | Entero |
|
|
73
|
+
| NC, R | INTEGER | Boolean |
|
|
74
|
+
| N1-N6 | REAL | Decimales |
|
|
75
|
+
| C | TEXT | Combo |
|
|
76
|
+
| B, Z, L, S, P, O | NO SE CREA | UI |
|
|
77
|
+
|
|
78
|
+
### 11.4 Tarea 2: Insertar Datos Iniciales
|
|
79
|
+
|
|
80
|
+
Registros obligatorios:
|
|
81
|
+
- Empresa: CODIGO=1, NOMBRE="EMPRESA DE PRUEBA", ROWID=GUID_32_hex
|
|
82
|
+
- Usuario: CODIGO=1, NOMBRE="admin", LOGIN="admin", IDEMPRESA=1, ROWID=GUID_32_hex
|
|
83
|
+
|
|
84
|
+
GUID sin guiones: python3 -c "import uuid; print(uuid.uuid4().hex)"
|
|
85
|
+
|
|
86
|
+
### 11.5 Tarea 3: Descargar Iconos
|
|
87
|
+
|
|
88
|
+
Fuente: Google Material Icons via Iconify API
|
|
89
|
+
URL: https://api.iconify.design/ic/baseline-{nombre}.svg?color={color}
|
|
90
|
+
|
|
91
|
+
XOne soporta PNG, JPG y SVG — no es necesario convertir SVG a PNG.
|
|
92
|
+
Iconos comunes: home, search, arrow-back, save, settings, person, add, delete, edit, check, close, menu
|
|
93
|
+
|
|
94
|
+
### 11.6 Nota sobre formatos de iconos
|
|
95
|
+
|
|
96
|
+
XOne soporta PNG, JPG y SVG directamente — no es necesario convertir ni eliminar los SVG.
|
|
97
|
+
Si por preferencia del proyecto se quiere usar solo PNG, se puede convertir con cairosvg (pip install cairosvg), pero no es obligatorio.
|
|
98
|
+
|
|
99
|
+
**Anti-patrón a evitar — NO renderices un SVG con `type="WEB"`:** el soporte de SVG en XOne es nativo y completo. Un `.svg` es una imagen más; se refiere con `type="IMG"` (`path="dibujo.svg"`) o con los atributos `img`/`imgbk`, igual que un PNG. El control `WEB` (WebView) es solo para contenido web remoto (URLs `http`/`https`, vídeos embebidos); usarlo para mostrar una imagen local SVG/PNG/JPG es innecesario y rompe el escalado y la integración con el control.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 13. Fase 12: Validación
|
|
104
|
+
|
|
105
|
+
### 12.1 Objetivo
|
|
106
|
+
|
|
107
|
+
Ejecutar el checklist completo de validación para asegurar que el proyecto esta completo y funcional.
|
|
108
|
+
|
|
109
|
+
### 12.2 Checklist Completo
|
|
110
|
+
|
|
111
|
+
#### Archivos raiz
|
|
112
|
+
- [ ] app.xml existe con `prefix="gen"` (o el especificado por el usuario)
|
|
113
|
+
- [ ] app.xml tiene `<connection>`, `<entry-point>`, `<style>` e `<include>`
|
|
114
|
+
- [ ] app.xml declara un encoding coherente con sus bytes (UTF-8 o iso-8859-15)
|
|
115
|
+
- [ ] app.ini existe con `name`, `icon`, `IconFolder=icons`, `FilesFolder=files`
|
|
116
|
+
- [ ] license.ini existe con `Connstring=bd/gestion.db`
|
|
117
|
+
- [ ] mappings.xne existe SOLO con Empresas y Usuarios
|
|
118
|
+
- [ ] mappings.xne declara un encoding coherente con sus bytes (UTF-8 o iso-8859-15)
|
|
119
|
+
- [ ] mappings.xne tiene `progid="ASGestion.CASEmpresa"` en Empresas y `progid="ASGestion.CASUser"` en Usuarios
|
|
120
|
+
- [ ] Usuarios tiene evento `<create>` con `setval field="IDEMPRESA" value="##ENTID##"`
|
|
121
|
+
|
|
122
|
+
#### Campos obligatorios en mappings.xne
|
|
123
|
+
- [ ] Empresas tiene: `CODIGO` (N), `NOMBRE` (T)
|
|
124
|
+
- [ ] Usuarios tiene: `IDEMPRESA` (N, FK a Empresas), `CODIGO` (T), `LOGIN` (T), `PWD` (X), `NOMBRE` (T)
|
|
125
|
+
|
|
126
|
+
#### Colecciones de negocio
|
|
127
|
+
- [ ] Cada coleccion adicional tiene su propio archivo `.xne` (NINGUNA en mappings.xne)
|
|
128
|
+
- [ ] Cada coleccion tiene `sql` con `##PREF##` y el campo `ID` en el SELECT
|
|
129
|
+
- [ ] Cada coleccion tiene `objname`, `updateobj` y `progid="ASData.CASBasicDataObj"`
|
|
130
|
+
- [ ] Tipos de campos validos: `T`, `N`, `N1`-`N6`, `X`, `D`, `DT`, `NC`, `IMG`, `PH`, `VD`, `AT`, `DR`, `TT` para datos; `L` (o su alias legacy `TL`), `THTML`, `B`, `Z` solo para UI
|
|
131
|
+
- [ ] Valores de `visible` usan bitmask correcto (0-7)
|
|
132
|
+
- [ ] Campos enlazados de JOINs llevan prefijo `MAP_` y están marcados como `locked="true"`
|
|
133
|
+
- [ ] Campos FK se nombran `IDLOQUESEA` (todo junto en mayusculas) y usan `mapcol`/`mapfld`
|
|
134
|
+
- [ ] Campos tipo Z llevan prefijo `@` en el name y tienen su `<contents>` asociado
|
|
135
|
+
- [ ] Filtros van en `filter`, ordenaciones en `sort` — NUNCA en el `sql`
|
|
136
|
+
- [ ] No se usan `px` en dimensiones — solo `p` o `%`
|
|
137
|
+
|
|
138
|
+
#### Pantallas
|
|
139
|
+
- [ ] Existe punto de entrada (`EntradaApp.xne` o `MenuPrincipal.xne`) declarado en `<entry-point>` del app.xml
|
|
140
|
+
- [ ] Si `autologon="false"`: existe `Login.xne` declarado en `<login-coll>` del app.xml
|
|
141
|
+
- [ ] Existe `Consola.xne` (siempre obligatoria)
|
|
142
|
+
- [ ] Pantallas con replica: Consola tiene todos los grupos (info replica, dispositivo, ficheros)
|
|
143
|
+
- [ ] Pantallas sin replica: Consola tiene solo el grupo de información del dispositivo
|
|
144
|
+
- [ ] Todas las colecciones-pantalla tienen `<onback>` definido
|
|
145
|
+
- [ ] Grupos fijos (header/footer) usan `fixed="true"` con `orientation="top|bottom"`
|
|
146
|
+
- [ ] Events usan sintaxis correcta: `<action name="runscript"><script language="javascript">`
|
|
147
|
+
|
|
148
|
+
#### Estilos CSS
|
|
149
|
+
- [ ] `default.css` existe en la raiz del proyecto
|
|
150
|
+
- [ ] No hay `compatibility-mode="true"` en app.xml (anularia los CSS)
|
|
151
|
+
- [ ] Unidades en `p` o `%` (NUNCA `px`, `em`, `rem`)
|
|
152
|
+
- [ ] `resolution-width` y `resolution-height` coinciden con el dispositivo físico de referencia
|
|
153
|
+
- [ ] Tamaños de UI usando los valores estándar documentados (TopBar=164p, Botón=124p, Campo=144p)
|
|
154
|
+
- [ ] Fuentes definidas en CSS con clases `.fontN` o con `fontsize` directo en el prop
|
|
155
|
+
- [ ] Colores en formato `#RRGGBB` o `#AARRGGBB` (alpha primero)
|
|
156
|
+
- [ ] Selectores validos: `coll`, `group`, `frame`, `prop`, `prop:TIPO`, `.clase`
|
|
157
|
+
- [ ] `extends:.clase` referencia clases existentes
|
|
158
|
+
|
|
159
|
+
#### JavaScript
|
|
160
|
+
- [ ] `functions.js` existe con funciones globales
|
|
161
|
+
- [ ] Solo usa API documentada: `ui.*`, `appData.*`, `self.*`, `replica.*`
|
|
162
|
+
- [ ] NO usa APIs del DOM: `document`, `document.getElementById`, `document.querySelector`, `window`, `localStorage`, `sessionStorage`, `XMLHttpRequest`, `navigator`, `history` (sí están disponibles `fetch`, `Promise`, `setTimeout`, `URL` con implementación custom).
|
|
163
|
+
- [ ] NO usa `async`/`await` (parse error). Para asincronía prefiere callbacks idiomáticos XOne; `Promise` está disponible si el caso lo justifica.
|
|
164
|
+
|
|
165
|
+
#### Unicidad de nombres (restricción crítica — AMBITO: la coll ENTERA, no el group/frame)
|
|
166
|
+
|
|
167
|
+
> **PASO OBLIGATORIO antes de entregar cada `.xne`:** extraer con regex `name="([^"]+)"` todos los `name=` declarados en nodos `<group>`, `<frame>` y `<prop>` (NO contar `<field name>` de `<onchange>`, ni `name=` de la propia `<coll>`, ni el valor del atributo `fontname=`). Verificar que la lista resultante **no contiene duplicados**. Si hay alguno, renombrar — la solución canónica para campos BD que aparecen en listado + detalle con estilos distintos es declararlos UNA SOLA VEZ en el grupo detalle y añadir aliases `MAP_LIST_*` en el `sql=` para el listado (ver fila "Caso típico" de la tabla `Naming y unicidad` en SKILL.md).
|
|
168
|
+
|
|
169
|
+
- [ ] No hay dos `<coll>` con el mismo `name` en el proyecto
|
|
170
|
+
- [ ] No hay dos `<group>` con el mismo `name` dentro de la misma `<coll>`
|
|
171
|
+
- [ ] No hay dos `<group>` con el mismo `id` dentro de la misma `<coll>`
|
|
172
|
+
- [ ] No hay dos `<frame>` con el mismo `name` dentro de la misma `<coll>` (ámbito coll, NO group — un mismo nombre de frame en dos grupos distintos también colisiona)
|
|
173
|
+
- [ ] No hay dos `<prop>` con el mismo `name` dentro de la misma `<coll>` — incluido el caso típico: campo BD declarado en `grpLista` (visible="2") y otra vez en `grpDetalle` (visible="1") con clase distinta. Si necesitas estilos distintos por modo, declarar el real solo en detalle y usar alias `MAP_LIST_*` en el SELECT para el listado
|
|
174
|
+
- [ ] No hay dos eventos del mismo tipo (ej. dos `<before-edit>`) en la misma `<coll>`
|
|
175
|
+
|
|
176
|
+
#### Estructura de carpetas
|
|
177
|
+
- [ ] `bd/` existe con `README.md`
|
|
178
|
+
- [ ] `icons/` existe con `README.md`
|
|
179
|
+
- [ ] `files/` existe con `README.md`
|
|
180
|
+
- [ ] `fonts/` existe (recomendado)
|
|
181
|
+
|
|
182
|
+
#### Base de Datos
|
|
183
|
+
- [ ] `gestion.db` generado con `xone_db_generator`
|
|
184
|
+
- [ ] Tablas tienen prefijo `gen_` (o el especificado)
|
|
185
|
+
- [ ] Empresa inicial: `CODIGO=1`, `NOMBRE="EMPRESA DE PRUEBA"`
|
|
186
|
+
- [ ] Usuario admin: `CODIGO=1`, `LOGIN="admin"`, `IDEMPRESA=1`
|
|
187
|
+
|
|
188
|
+
#### Recursos gráficos
|
|
189
|
+
- [ ] Archivos de iconos en `icons/` en formato PNG, JPG o SVG
|
|
190
|
+
- [ ] Nomenclatura consistente: `ic_` (acciones), `app_` (icono app), `avatar_` (usuarios)
|
|
191
|
+
|
|
192
|
+
#### README
|
|
193
|
+
- [ ] `README.md` en la raiz con descripción del proyecto
|
|
194
|
+
- [ ] `README.md` en `bd/`, `icons/`, `files/`
|