g360-cli 1.15.1 → 1.16.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 CHANGED
@@ -1,1424 +1,1547 @@
1
- # g360-cli
2
-
3
- <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="src/assets/brand/g360/logotypes/logo-g360-light.svg">
5
- <img alt="G360" height="64" src="src/assets/brand/g360/logotypes/logo-g360-dark.svg">
6
- </picture>
7
-
8
- > CLI tool for bootstrapping G360 projects with standardized structure, assets, and identity
9
-
10
- [![npm version](https://img.shields.io/npm/v/g360-cli?color=00d084&label=version)](https://www.npmjs.com/package/g360-cli)
11
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
- [![npm downloads](https://img.shields.io/npm/dm/g360-cli?color=94a3b8)](https://www.npmjs.com/package/g360-cli)
13
-
14
- ## ¿Cómo está organizado el proyecto?
15
-
16
- ```mermaid
17
- flowchart TD
18
- CLI["g360 CLI<br/>cli.js"]
19
- CMD["Comandos<br/>init · bring · audit · ingest · scan · validate"]
20
- LIB["Librerías<br/>manifest · auditor · validator · logger"]
21
- ASSETS["Assets<br/>templates · brand · signature · ingestion"]
22
- PY["g360-core (PyPI)<br/>commercial_engine · pipeline · batch_processor"]
23
- ERP["Datos ERP<br/>.xls · .xlsx · .csv"]
24
-
25
- CLI --> CMD
26
- CMD --> LIB
27
- CMD --> ASSETS
28
- CMD --> PY
29
- PY --> ERP
30
- ```
31
-
32
- ## Tabla de Contenidos
33
-
34
- - [Descripción](#descripción)
35
- - [Características](#características)
36
- - [Tecnologías](#tecnologías)
37
- - [Instalación](#instalación)
38
- - [Inicio Rápido](#inicio-rápido)
39
- - [Comandos](#comandos)
40
- - [Plantillas](#plantillas)
41
- - [Componentes](#componentes)
42
- - [Skills](#skills)
43
- - [Configuración](#configuración)
44
- - [API](#api)
45
- - [Estructura](#estructura)
46
- - [Reglas de negocio](#reglas-de-negocio)
47
- - [Scripts](#scripts)
48
- - [Testing](#testing)
49
- - [Contribución](#contribución)
50
- - [Licencia](#licencia)
51
- - [Ecosistema G360](#ecosistema-g360)
52
- - [Integración con OpenCode](#integración-con-opencode)
53
-
54
- ---
55
-
56
- ## Descripción
57
-
58
- CLI tool para el ecosistema G360 que permite inicializar proyectos con estructura estándar, gestionar assets embebidos, y asegurar compliance mediante auditoría automática. Forma parte del núcleo del ecosistema y está disponible como paquete global de npm.
59
-
60
- **Tipo**: CLI Tool / Scaffolding / Generator
61
- **Plataforma**: Node.js >= 18.0.0
62
- **Distribución**: npm global (`npm install -g g360-cli`)
63
-
64
- ---
65
-
66
- ## Tecnologías
67
-
68
- - **Runtime**: Node.js >= 18.0.0
69
- - **Lenguaje**: JavaScript (ESModules)
70
- - **CLI Framework**: Commander 14.x
71
- - **UI**: Chalk 5.x (colores), Ora 9.x (spinners), Inquirer 13.x (prompts)
72
- - **Filesystem**: fs-extra 11.x
73
- - **Build**: pkg 5.8.1 (portable .exe)
74
- - **Distribución**: npm global
75
-
76
- ---
77
-
78
- ## Características
79
-
80
- - **Inicialización rápida** - Crea proyectos G360 con estructura estándar
81
- - **Gestión de assets** - Trae componentes, skills y plantillas embebidas
82
- - **Ingesta ERP** - Normaliza `.xls/.xlsx` de SAP, StarSoft, Spring con `g360 bring ingestion`
83
- - **Motor de clasificación comercial** - `commercial_engine` clasifica documentos en VENTA/DEVOLUCION/AJUSTE con subtipos (PRECIO_LINEA, CARGO_FIJO, SIN_BASE)
84
- - **Precio efectivo** - PRECIO_BASE, RECARGO_UNITARIO y PRECIO_EFECTIVO separan precio físico de ajustes financieros FAE
85
- - **Paquete Python** - `g360-core` en PyPI para pipelines de datos independientes
86
- - **Auditoría** - Verifica compliance de proyectos G360
87
- - **Limpieza** - Elimina assets embebidos antes de deployment
88
- - **Multi-plantilla** - Web (Lit, Solid, Svelte, PWA, React), Python (CLI, Flet ⭐, Flet Polished ⭐, CustomTkinter, Migration)
89
- - **Flet Polished** - Template estandar con dual theme, auto-refresh, hash cache, search debounce, KPI glow, G360 signature, portable launcher
90
- - **Brand System v2.0.0** - Sistema de marca unificado con favicons, PWA icons, logotypes para G360 y CIPSA
91
- - **Modo portable** - Proyectos Python con ejecución directa (sin PyInstaller)
92
- - **Modo offline** - Funciona sin conexión usando assets cacheados
93
- - **Preview** - Dry-run para previsualizar cambios
94
-
95
- ---
96
-
97
- ## Versión
98
-
99
- **Current: v1.15.1** — [Ver en npm](https://www.npmjs.com/package/g360-cli)
100
-
101
- ---
102
-
103
- ## Instalación
104
-
105
- ### Requisitos
106
-
107
- - Node.js >= 18.0.0
108
- - npm >= 8.0.0
109
-
110
- ### Instalación global
111
-
112
- ```bash
113
- npm install -g g360-cli
114
- ```
115
-
116
- ### Verificar instalación
117
-
118
- ```bash
119
- g360 --version
120
- # → 1.15.0
121
-
122
- g360 health
123
- ```
124
-
125
- ### Publicar nueva versión
126
-
127
- ```bash
128
- npm version patch # o minor / major
129
- git push --tags
130
- npm publish
131
- ```
132
-
133
- ---
134
-
135
- ## Inicio Rápido
136
-
137
- ```bash
138
- # 1. Inicializar nuevo proyecto
139
- g360 init mi-proyecto
140
-
141
- # 2. Entrar al proyecto
142
- cd mi-proyecto
143
-
144
- # 3. Traer assets G360
145
- g360 bring
146
-
147
- # 4. Ver estructura
148
- g360 present
149
-
150
- # 5. Auditar proyecto
151
- g360 audit
152
-
153
- # 6. Limpiar antes de deploy
154
- g360 clean
155
- ```
156
-
157
- ---
158
-
159
- ## Comandos
160
-
161
- ### `g360 init`
162
-
163
- Inicializa un nuevo proyecto G360.
164
-
165
- ```bash
166
- g360 init <nombre> [opciones]
167
- ```
168
-
169
- **Opciones:**
170
-
171
- | Opción | Descripción | Valor por defecto |
172
- |--------|-------------|-------------------|
173
- | `-t, --template <tipo>` | Tipo de plantilla (default: auto segun skill) | `auto` |
174
- | `-s, --skill <skill>` | Skill a usar | `corporativo-movil` |
175
- | `-d, --dir <ruta>` | Directorio destino | `.` |
176
- | `--dry-run` | Previsualizar sin crear | `false` |
177
- | `--force` | Sobrescribir existente | `false` |
178
- | `--brand` | Aplicar marca G360 (logo, colores, firma) después de init | `false` |
179
-
180
- **Ejemplos:**
181
-
182
- ```bash
183
- # Proyecto Lit para cliente móvil
184
- g360 init mi-proyecto --template lit-web --skill corporativo-movil
185
-
186
- # Proyecto Solid para herramienta propia
187
- g360 init mi-herramienta --template solid-web --skill moderno-movil
188
-
189
- # Proyecto SvelteKit minimalista
190
- g360 init mi-script --template svelte-web --skill minimalista
191
-
192
- # Preview sin crear
193
- g360 init mi-proyecto --dry-run
194
-
195
- # Crear proyecto con marca G360 aplicada automáticamente
196
- g360 init mi-proyecto --brand
197
- ```
198
-
199
- ---
200
-
201
- ### `g360 set-skill`
202
-
203
- Cambia el skill del proyecto actual.
204
-
205
- ```bash
206
- g360 set-skill <skill> [opciones]
207
- ```
208
-
209
- **Opciones:**
210
-
211
- | Opción | Descripción |
212
- |--------|-------------|
213
- | `--verbose` | Mostrar detalles |
214
- | `--force` | Sobrescribir skill existente |
215
-
216
- **Ejemplos:**
217
-
218
- ```bash
219
- # Cambiar a skill corporativo para PC
220
- g360 set-skill corporativo
221
-
222
- # Cambiar a skill moderno para móvil
223
- g360 set-skill moderno-movil
224
-
225
- # Ver detalles del skill
226
- g360 set-skill corporativo-g360 --verbose
227
- ```
228
-
229
- ---
230
-
231
- ### `g360 convert`
232
-
233
- Convierte un proyecto existente a identidad G360.
234
-
235
- ```bash
236
- g360 convert [ruta] [opciones]
237
- ```
238
-
239
- **Opciones:**
240
-
241
- | Opción | Descripción | Valor por defecto |
242
- |--------|-------------|-------------------|
243
- | `-s, --skill <skill>` | Skill a aplicar | `corporativo-movil` |
244
- | `--dry-run` | Previsualizar sin aplicar | `false` |
245
- | `--restructure` | Reestructurar archivos | `false` |
246
- | `--force` | Forzar cambios peligrosos | `false` |
247
- | `--backup` | Crear backup antes | `false` |
248
-
249
- **Ejemplos:**
250
-
251
- ```bash
252
- # Preview de cambios
253
- g360 convert . --dry-run
254
-
255
- # Convertir proyecto existente
256
- g360 convert ./mi-proyecto --skill corporativo
257
-
258
- # Con backup automático
259
- g360 convert . --skill moderno --backup
260
-
261
- # Forzar cambios peligrosos
262
- g360 convert . --skill corporativo-movil --force
263
- ```
264
-
265
- ---
266
-
267
- ### `g360 signature`
268
-
269
- Instala el componente de firma oficial G360 en proyectos web.
270
-
271
- ```bash
272
- g360 signature install [opciones]
273
- ```
274
-
275
- **Opciones:**
276
-
277
- | Opción | Descripción | Valor por defecto |
278
- |--------|-------------|-------------------|
279
- | `-p, --path <ruta>` | Ruta al index.html | `.` |
280
- | `--force` | Reinstalar si ya existe | `false` |
281
-
282
- **Ejemplos:**
283
-
284
- ```bash
285
- # Instalar en el directorio actual
286
- g360 signature install
287
-
288
- # Forzar reinstalación
289
- g360 signature install --force
290
- ```
291
-
292
- ---
293
-
294
- ### `g360 bring`
295
-
296
- Trae assets G360 al proyecto actual.
297
-
298
- ```bash
299
- g360 bring [asset] [opciones]
300
- ```
301
-
302
- **Opciones:**
303
-
304
- | Opción | Descripción |
305
- |--------|-------------|
306
- | `-p, --path <ruta>` | Ruta destino |
307
- | `--dry-run` | Previsualizar |
308
- | `--force` | Sobrescribir |
309
-
310
- **Ejemplos:**
311
-
312
- ```bash
313
- # Traer todos los assets
314
- g360 bring
315
-
316
- # Traer solo componentes
317
- g360 bring components
318
-
319
- # Traer solo skills
320
- g360 bring skills
321
-
322
- # Traer engine específico
323
- g360 bring engine/g360-skill-audit
324
-
325
- # Traer ingestion module ERP a proyecto Flet existente
326
- g360 bring ingestion
327
- ```
328
-
329
- ### `g360 bring ingestion`
330
-
331
- Instala el módulo de normalización de datos ERP en proyectos Flet.
332
-
333
- ```bash
334
- g360 bring ingestion [opciones]
335
- ```
336
-
337
- **Opciones:**
338
-
339
- | Opción | Descripción |
340
- |--------|-------------|
341
- | `-p, --path <ruta>` | Ruta al proyecto |
342
- | `--dry-run` | Previsualizar |
343
- | `--force` | Sobrescribir archivos existentes |
344
-
345
- **Archivos instalados:**
346
- - `src/core/ingestion.py` — Normalización de datos (estabilizar_excel_crudo)
347
- - `src/ui/ingestion_panel.py` — Panel Flet para carga de archivos
348
-
349
- **Importación (auto-detects pip → local):**
350
- ```python
351
- # Si g360-core está instalado via pip → from g360_core.ingestion import ...
352
- # Si no → from core.ingestion import ...
353
- from ui.ingestion_panel import IngestionPanel
354
- ```
355
-
356
- El paquete pip acompañante `g360-core` se publica en PyPI:
357
- ```bash
358
- pip install g360-core
359
- ```
360
-
361
- ### `g360-core` — Módulos principales
362
-
363
- #### `commercial_engine.py`
364
-
365
- Motor de lógica de negocio para clasificación documental. Única fuente de verdad para reglas comerciales.
366
-
367
- | Función | Propósito |
368
- |---------|-----------|
369
- | `classify_base()` | Clasificación primaria: VENTA, DEVOLUCION, AJUSTE |
370
- | `build_invoice_index()` | Índice de facturas para cruce de referencias |
371
- | `resolve_document_relationships()` | Asigna SUBTIPO_AJUSTE (PRECIO_LINEA, CARGO_FIJO, SIN_BASE) |
372
- | `calculate_prices()` | PRECIO_BASE, RECARGO_UNITARIO, PRECIO_EFECTIVO |
373
- | `parse_referencia()` | Descompone REFERENCIA "F01/204-56287" en tipo/serie/número |
374
-
375
- **Clasificación de documentos** (`classify_base` → primero, `resolve_document_relationships` → después para AJUSTE):
376
- ```
377
- TPO_DOC CANTIDAD → CATEGORIA_OP SUBTIPO_AJUSTE (cruce vs índice)
378
- F01/BDI/F03/... cualquiera → VENTA —
379
- NC* ≠ 0 DEVOLUCION
380
- NC* = 0 → AJUSTE (ver reglas de cruce abajo)
381
- ND* cualquiera → AJUSTE (ver reglas de cruce abajo)
382
- ```
383
- Subtipos de AJUSTE (`resolve_document_relationships` cruza `REFERENCIA` contra `build_invoice_index`):
384
- ```
385
- Clave con SKU coincide CANTIDAD_FAE = 0 → CARGO_FIJO
386
- Clave con SKU coincide CANTIDAD_FAE CANT_FACT PRECIO_LINEA
387
- Clave con SKU coincide CANTIDAD_FAE < CANT_FACT → PRECIO_PARCIAL
388
- Clave con SKU coincide CANTIDAD_FAE > CANT_FACT → SIN_BASE
389
- Clave no coincide CANTIDAD_FAE = 1 CARGO_FIJO
390
- Clave no coincide CANTIDAD_FAE 1 → SIN_BASE
391
- Sin facturas en dataset — → SIN_BASE (todo AJUSTE)
392
- ```
393
- > Ver detalle completo en [`BUSINESS_RULES.md`](./BUSINESS_RULES.md).
394
-
395
- #### `batch_processor.py`
396
-
397
- | Función | Propósito |
398
- |---------|-----------|
399
- | `read_erp_file()` | Punto único de lectura: .xls (xlrd), .xlsx (openpyxl), .csv. `dtype=str` preserva ceros a la izquierda |
400
-
401
- ---
402
-
403
- ### `g360 list`
404
-
405
- Lista assets disponibles.
406
-
407
- ```bash
408
- g360 list [tipo] [opciones]
409
- ```
410
-
411
- **Tipos:**
412
-
413
- | Tipo | Descripción |
414
- |------|-------------|
415
- | `templates` | Lista de plantillas |
416
- | `components` | Lista de componentes |
417
- | `skills` | Lista de skills |
418
- | `ingestion` | Módulo de ingesta ERP |
419
- | `all` | Todo (por defecto) |
420
-
421
- **Ejemplos:**
422
-
423
- ```bash
424
- # Listar todo
425
- g360 list
426
-
427
- # Solo plantillas
428
- g360 list templates
429
-
430
- # Solo componentes
431
- g360 list components
432
-
433
- # Salida JSON
434
- g360 list --json
435
- ```
436
-
437
- ---
438
-
439
- ### `g360 present`
440
-
441
- Presenta la estructura del proyecto.
442
-
443
- ```bash
444
- g360 present [ruta] [opciones]
445
- ```
446
-
447
- **Opciones:**
448
-
449
- | Opción | Descripción | Valor por defecto |
450
- |--------|-------------|-------------------|
451
- | `--depth <n>` | Profundidad máxima | `3` |
452
-
453
- **Ejemplo:**
454
-
455
- ```bash
456
- g360 present
457
- g360 present ./mi-proyecto --depth 2
458
- ```
459
-
460
- ---
461
-
462
- ### `g360 audit`
463
-
464
- Audita el proyecto para compliance G360.
465
-
466
- ```bash
467
- g360 audit [ruta] [opciones]
468
- ```
469
-
470
- **Opciones:**
471
-
472
- | Opción | Descripción |
473
- |--------|-------------|
474
- | `--fix` | Auto-corregir problemas |
475
- | `--verbose` | Salida detallada |
476
-
477
- **Ejemplo:**
478
-
479
- ```bash
480
- g360 audit
481
- g360 audit ./mi-proyecto --verbose
482
- ```
483
-
484
- ---
485
-
486
- ### `g360 clean`
487
-
488
- Limpia código muerto, duplicados y archivos huérfanos del proyecto.
489
-
490
- ```bash
491
- g360 clean [ruta] [opciones]
492
- ```
493
-
494
- **Opciones:**
495
-
496
- | Opción | Descripción |
497
- |--------|-------------|
498
- | `--dry-run` | Previsualizar archivos |
499
- | `--force` | Omitir confirmación |
500
- | `--dead` | Eliminar archivos muertos/descontinuados |
501
- | `--duplicates` | Eliminar archivos duplicados |
502
- | `--orphans` | Eliminar archivos huérfanos (sin referencias) |
503
- | `--organize` | Mostrar archivos descolocados |
504
- | `--all` | Ejecutar todas las verificaciones |
505
-
506
- **Ejemplos:**
507
-
508
- ```bash
509
- # Preview de limpieza completa
510
- g360 clean --dry-run --all
511
-
512
- # Solo archivos muertos
513
- g360 clean --dead --force
514
-
515
- # Solo duplicados
516
- g360 clean --duplicates --force
517
-
518
- # Verificar huérfanos (sin eliminar)
519
- g360 clean --orphans --dry-run
520
- ```
521
-
522
- ---
523
-
524
- ### `g360 health`
525
-
526
- Verifica el estado del sistema.
527
-
528
- ```bash
529
- g360 health [opciones]
530
- ```
531
-
532
- **Opciones:**
533
-
534
- | Opción | Descripción |
535
- |--------|-------------|
536
- | `--verbose` | Info detallada |
537
-
538
- **Ejemplo:**
539
-
540
- ```bash
541
- g360 health
542
- g360 health --verbose
543
- ```
544
-
545
- ---
546
-
547
- ### `g360 update`
548
-
549
- Actualiza g360-cli a la última versión.
550
-
551
- ```bash
552
- g360 update [opciones]
553
- ```
554
-
555
- **Opciones:**
556
-
557
- | Opción | Descripción |
558
- |--------|-------------|
559
- | `--check` | Solo verificar sin actualizar |
560
-
561
- **Ejemplo:**
562
-
563
- ```bash
564
- # Verificar nueva versión
565
- g360 update --check
566
-
567
- # Actualizar
568
- g360 update
569
- ```
570
-
571
- ---
572
-
573
- ### `g360 config`
574
-
575
- Visualiza o modifica la configuración de g360-cli.
576
-
577
- ```bash
578
- g360 config [opciones]
579
- ```
580
-
581
- **Opciones:**
582
-
583
- | Opción | Descripción |
584
- |--------|-------------|
585
- | `--list` | Listar todas las opciones de configuración |
586
- | `--get <key>` | Obtener valor de una configuración |
587
- | `--set <key=value>` | Establecer un valor de configuración |
588
-
589
- **Ejemplos:**
590
-
591
- ```bash
592
- # Listar configuración disponible
593
- g360 config --list
594
-
595
- # Verificar skill actual
596
- g360 config --get skill
597
- ```
598
-
599
- ---
600
-
601
- ### `g360 scan`
602
-
603
- Escanea un directorio para detectar archivos ERP válidos (.xls, .xlsx, .csv).
604
-
605
- ```bash
606
- g360 scan <directorio> [opciones]
607
- ```
608
-
609
- **Opciones:**
610
-
611
- | Opción | Descripción | Valor por defecto |
612
- |--------|-------------|-------------------|
613
- | `-r, --recursive` | Buscar recursivamente | `true` |
614
- | `--min-score <n>` | Puntuación mínima de coincidencia | `10` |
615
-
616
- **Ejemplos:**
617
-
618
- ```bash
619
- # Escanear directorio actual
620
- g360 scan .
621
-
622
- # Escanear recursivamente con puntuación mínima
623
- g360 scan ./data --min-score 20
624
-
625
- # Solo directorio actual (sin recursión)
626
- g360 scan ./exports --no-recursive
627
- ```
628
-
629
- ---
630
-
631
- ### `g360 validate`
632
-
633
- Valida archivos ERP (.xls, .xlsx, .csv) sin procesar completamente.
634
-
635
- ```bash
636
- g360 validate <archivos...> [opciones]
637
- ```
638
-
639
- **Opciones:**
640
-
641
- | Opción | Descripción |
642
- |--------|-------------|
643
- | `-r, --recursive` | Buscar recursivamente en directorios |
644
-
645
- **Ejemplos:**
646
-
647
- ```bash
648
- # Validar un archivo
649
- g360 validate factura.xlsx
650
-
651
- # Validar múltiples archivos
652
- g360 validate *.xlsx *.xls
653
-
654
- # Validar todos los archivos ERP en un directorio
655
- g360 validate ./exports --recursive
656
- ```
657
-
658
- ---
659
-
660
- ### `g360 ingest`
661
-
662
- Procesa archivos ERP y genera un CSV maestro normalizado.
663
-
664
- ```bash
665
- g360 ingest <input> [opciones]
666
- ```
667
-
668
- **Opciones:**
669
-
670
- | Opción | Descripción | Valor por defecto |
671
- |--------|-------------|-------------------|
672
- | `-o, --output <archivo>` | Ruta de salida CSV | `maestro_ventas_crm.csv` |
673
-
674
- **Archivos de entrada soportados:** `.xls`, `.xlsx`, `.csv`
675
-
676
- **Ejemplos:**
677
-
678
- ```bash
679
- # Procesar un archivo Excel
680
- g360 ingest ventas_sap.xlsx
681
-
682
- # Procesar directorio completo
683
- g360 ingest ./exports/ -o consolidado.csv
684
-
685
- # Procesar con nombre de salida personalizado
686
- g360 ingest reporte.xlsx -o mi_reporte.csv
687
- ```
688
-
689
- ---
690
-
691
- ## Plantillas
692
-
693
- ### python-flet-polished ⭐ (Estandar actual)
694
-
695
- Plantilla desktop Python con Flet — patrones de UI avanzados heredados de produccion.
696
-
697
- ```
698
- mi-proyecto/
699
- ├── main.py
700
- ├── src/
701
- ├── app.py
702
- │ ├── config/theme.py
703
- │ ├── core/constants.py, processor.py
704
- └── ui/dashboard.py, kpi_card.py, search_overlay.py
705
- ├── g360_flet/g360_signature.py
706
- ├── assets/fonts/, images/, data/
707
- ├── run.bat, launch.vbs, build-portable.bat
708
- ├── skill.json, pyproject.toml
709
- └── sync_portable.py
710
- ```
711
-
712
- ### web-pwa
713
-
714
- Plantilla Progressive Web App con React.
715
-
716
- ```
717
- mi-proyecto/
718
- ├── index.html
719
- ├── src/
720
- ├── main.jsx
721
- │ ├── App.jsx
722
- │ ├── components/
723
- ├── Header.jsx
724
- │ │ ├── FooterSignature.jsx
725
- │ │ └── LoadingOverlay.jsx
726
- │ └── styles/main.css
727
- ├── vite.config.js
728
- ├── package.json
729
- └── skill.json
730
- ```
731
-
732
- ### lit-web
733
-
734
- Plantilla Web Components con Lit.
735
-
736
- ```
737
- mi-proyecto/
738
- ├── index.html
739
- ├── src/
740
- ├── index.js
741
- │ ├── components/
742
- │ └── app-root.js
743
- │ └── styles/
744
- └── main.css
745
- ├── vite.config.js
746
- ├── package.json
747
- └── skill.json
748
- ```
749
-
750
- ### solid-web
751
-
752
- Plantilla con SolidJS.
753
-
754
- ```
755
- mi-proyecto/
756
- ├── index.html
757
- ├── src/
758
- ├── index.jsx
759
- │ ├── components/
760
- │ └── App.jsx
761
- │ └── styles/
762
- └── main.css
763
- ├── vite.config.js
764
- ├── package.json
765
- └── skill.json
766
- ```
767
-
768
- ### svelte-web
769
-
770
- Plantilla con SvelteKit.
771
-
772
- ```
773
- mi-proyecto/
774
- ├── src/
775
- ├── app.html
776
- │ ├── app.css
777
- │ ├── routes/
778
- │ └── +page.svelte
779
- │ └── core/
780
- └── skill.json
781
- ├── svelte.config.js
782
- ├── package.json
783
- └── skill.json
784
- ```
785
-
786
- ### web-pwa (React)
787
-
788
- Plantilla React + Vite con PWA.
789
-
790
- ```
791
- mi-proyecto/
792
- ├── index.html
793
- ├── app.js
794
- ├── styles.css
795
- ├── manifest.json
796
- └── package.json
797
- ```
798
-
799
- ### python-cli
800
-
801
- Plantilla CLI de Python con estructura argparse completa.
802
-
803
- ```
804
- mi-cli/
805
- ├── src/
806
- ├── main.py
807
- └── core/
808
- └── skill.json
809
- ├── requirements.txt
810
- ├── run.bat
811
- ├── build-portable.bat
812
- └── skill.json
813
- ```
814
-
815
- ### python-flet (LEGACY)
816
-
817
- > ⚠️ **Deprecado** — Usar `python-flet-polished` para nuevos proyectos.
818
-
819
- Plantilla GUI de escritorio con **Flet** para apps de contexto ERP.
820
-
821
- ```
822
- mi-app/
823
- ├── src/
824
- ├── main.py ← Punto de entrada con IngestionPanel integrado
825
- │ ├── core/
826
- ├── ingestion.py ← Normalizador de datos ERP
827
- │ │ ├── g360_theme.py Tema visual G360
828
- │ │ └── skill.json
829
- ├── ui/
830
- │ └── ingestion_panel.py ← Panel Flet para carga .xls/.xlsx
831
- │ └── export/
832
- └── __init__.py
833
- ├── pyproject.toml ← Dependencias: flet, pandas, g360-core
834
- ├── run.bat
835
- ├── build.bat
836
- └── skill.json
837
- ```
838
-
839
- **Normalización de datos:** La ingesta aplica transformaciones automáticas:
840
- - Parseo de referencias (`F01/201-243065` tipo, serie, periodo, número)
841
- - Separación de sucursales (nombre + dirección)
842
- - Clasificación de documentos (RUC 11 dígitos / DNI 8 dígitos)
843
- - Normalización monetaria con auto-detección de formato SAP/Spring
844
- - Cantidad + Cantidad FAE cantidad_total + tipo_transaccion
845
- - **Clasificación comercial**: VENTA / DEVOLUCION / AJUSTE con subtipos PRECIO_LINEA, CARGO_FIJO, SIN_BASE
846
- - **Precio efectivo**: PRECIO_BASE (físico) y RECARGO_UNITARIO (financiero) separados
847
- - Cruce de NC/NDB contra facturas referenciadas para determinar ajustes de precio por línea
848
- - Purga de filas total/general/acumulado
849
- - **Columnas derivadas para UI**: `cliente_label`, `vendedor_label`, `articulo_label`, `linea_label`, etc. (ID - NOMBRE)
850
- - **Cliente completo**: `cliente_full_label` = ID_CLIENTE - DOC_CLIENTE_CLEAN - NOM_CLIENTE
851
- - **Código de factura**: `doc_completo` = TPO_DOC + SERIE_DOC + NRO_DOC (ej: "F204-56287")
852
- - **Precio unitario**: `precio_base` = SOLES / CANTIDAD
853
-
854
- ### python-flet-migrate
855
-
856
- Plantilla para migrar aplicaciones Tkinter/CTkinter a Flet.
857
-
858
- ```
859
- mi-app/
860
- ├── src/
861
- ├── main.py
862
- └── migrate_tkinter.py
863
- ├── requirements.txt
864
- └── skill.json
865
- ```
866
-
867
- ### python-customtkinter
868
-
869
- Plantilla GUI de escritorio con **CustomTkinter** (tema oscuro moderno).
870
-
871
- ```
872
- mi-app/
873
- ├── src/
874
- ├── main.py
875
- └── core/
876
- └── skill.json
877
- ├── requirements.txt
878
- ├── run.bat
879
- └── build-portable.bat
880
- ```
881
-
882
- ---
883
-
884
- ## Componentes
885
-
886
- ### g360-signature
887
-
888
- Firma G360 para proyectos web (Web Component).
889
-
890
- ```html
891
- <!-- Modo para clientes -->
892
- <g360-signature mode="powered"></g360-signature>
893
-
894
- <!-- Modo propio -->
895
- <g360-signature mode="own"></g360-signature>
896
-
897
- <!-- Con versión -->
898
- <g360-signature mode="powered" version="1.0.0"></g360-signature>
899
- ```
900
-
901
- **Atributos:**
902
- - `mode`: "own" (G360 by ccusi) o "powered" (powered by G360)
903
- - `version`: Número de versión opcional
904
-
905
- **Características:**
906
- - Isotipo: 3 puntos verticales + chevron >
907
- - Colores: #00d084 (verde), #94a3b8 (gris)
908
- - Opacidad: 0.4 por defecto, 1.0 en hover
909
- - Tema: auto-detecta prefers-color-scheme
910
-
911
- ### G360DragModal
912
-
913
- Modal draggable para interfaces.
914
-
915
- ```jsx
916
- import G360DragModal from './g360/components/G360DragModal.jsx';
917
-
918
- G360DragModal({
919
- isOpen: true,
920
- title: 'Configuración',
921
- onClose: () => setOpen(false),
922
- children: '<p>Contenido del modal</p>'
923
- });
924
- ```
925
-
926
- ---
927
-
928
- ## Skills
929
-
930
- Los skills definen el estilo visual, dispositivo y signature del proyecto.
931
-
932
- ### corporativo
933
-
934
- Proyectos para clientes - estilo corporativo conservador (PC).
935
-
936
- ### corporativo-movil
937
-
938
- Proyectos para clientes - estilo corporativo - enfoque móvil.
939
-
940
- ### corporativo-g360
941
-
942
- Proyectos para clientes con colores G360 vibrantes (PC).
943
-
944
- ### corporativo-g360-movil
945
-
946
- Proyectos para clientes con colores G360 - enfoque móvil.
947
-
948
- ### moderno
949
-
950
- Herramientas propias G360 - estilo innovador (PC).
951
-
952
- ### moderno-movil
953
-
954
- Herramientas propias G360 - estilo innovador (móvil).
955
-
956
- ### minimalista
957
-
958
- Proyectos minimalistas - scripts, CLI, Python.
959
-
960
- ### custom
961
-
962
- Configuración personalizada - colores ajustables.
963
-
964
- ### flet-desktop
965
-
966
- Aplicaciones de escritorio Flet - estilo moderno G360 (PC).
967
-
968
- ### flet-desktop-corporativo
969
-
970
- Aplicaciones Flet para clientes - estilo corporativo conservador.
971
-
972
- ### cipsa
973
-
974
- Proyectos con marca CIPSA - favicon CIPSA rojo, logo corporativo, signature "powered by G360".
975
-
976
- ### cipsa-movil
977
-
978
- Apps móviles con marca CIPSA - favicon CIPSA rojo, logo corporativo, enfoque móvil.
979
-
980
- ### flet-desktop-polished
981
-
982
- App Flet desktop con patrones UI avanzados: dual theme, auto-refresh, hash cache, search debounce, KPI glow, G360 signature widget. **Estandar actual para Flet.**
983
-
984
- ### react-web
985
-
986
- Aplicaciones web con React/JSX - estilo G360 moderno.
987
-
988
- ### solid-web
989
-
990
- Aplicaciones web con SolidJS - estilo G360 moderno.
991
-
992
- ### svelte-web
993
-
994
- Aplicaciones web con Svelte/SvelteKit - estilo G360 moderno.
995
-
996
- ### lit-web
997
-
998
- Aplicaciones web con Lit Web Components - estilo G360 moderno.
999
-
1000
- ### customtkinter
1001
-
1002
- Aplicaciones desktop con CustomTkinter - estilo G360 moderno.
1003
-
1004
- ### Ejemplos de uso
1005
-
1006
- ```bash
1007
- # Al crear proyecto
1008
- g360 init mi-proyecto --skill corporativo-movil
1009
-
1010
- # Cambiar skill después
1011
- g360 set-skill moderno
1012
-
1013
- # Ver skills disponibles
1014
- g360 list skills
1015
- ```
1016
-
1017
- ---
1018
-
1019
- ## Configuración
1020
-
1021
- ### g360-manifest.json
1022
-
1023
- Archivo de manifiesto del proyecto.
1024
-
1025
- ```json
1026
- {
1027
- "name": "mi-proyecto",
1028
- "template": "web-pwa",
1029
- "version": "1.0.0",
1030
- "createdAt": "2024-01-01T00:00:00.000Z",
1031
- "assets": [
1032
- {
1033
- "name": "components",
1034
- "addedAt": "2024-01-01T00:00:00.000Z"
1035
- }
1036
- ]
1037
- }
1038
- ```
1039
-
1040
- ### Configuración Global
1041
-
1042
- ```bash
1043
- # Directorio de configuración
1044
- ~/.g360/
1045
-
1046
- # Assets cacheados
1047
- ~/.g360/cache/
1048
- ```
1049
-
1050
- ---
1051
-
1052
- ## API
1053
-
1054
- ### Módulo Principal
1055
-
1056
- ```javascript
1057
- import { g360 } from 'g360-cli';
1058
-
1059
- await g360.init({ name: 'proyecto', template: 'web-pwa' });
1060
- await g360.bring('components');
1061
- await g360.audit({ path: '.', verbose: true });
1062
- await g360.clean({ path: '.', force: true });
1063
- ```
1064
-
1065
- ---
1066
-
1067
- ## Estructura
1068
-
1069
- ```
1070
- g360-cli/
1071
- ├── src/
1072
- │ ├── cli.js # Entrada principal CLI
1073
- │ ├── commands/ # Comandos (init, bring, audit, scan, validate, ingest, etc.)
1074
- │ ├── lib/ # Utilidades (assets, auditor, config, logger, validator, etc.)
1075
- │ ├── schemas/ # Schemas de validación
1076
- │ └── assets/ # Assets embebidos
1077
- │ ├── templates/ # Plantillas de proyecto
1078
- │ ├── components/ # Componentes G360
1079
- │ ├── brand/ # Sistema de marca v2.0.0 (G360 + CIPSA)
1080
- │ ├── ingestion/ # Módulo de ingesta ERP (bring)
1081
- │ ├── engine/ # G360 Engine
1082
- │ ├── snippets/ # Snippets de código reutilizables
1083
- │ └── config/ # Configuraciones (g360-skills.json, agent-skills.json, project-types.json)
1084
- ├── py/ # Paquete Python publicable en PyPI
1085
- │ ├── pyproject.toml # g360-core
1086
- │ └── src/g360_core/ # commercial_engine.py, pipeline.py, processor.py, batch_processor.py, utils.py
1087
- ├── package.json
1088
- ├── CHANGELOG.md
1089
- ├── README.md
1090
- └── LICENSE
1091
- ```
1092
-
1093
- ---
1094
-
1095
- ## Scripts
1096
-
1097
- | Comando | Descripción |
1098
- |---------|-------------|
1099
- | `npm run build` | Build portable con pkg (g360.exe) |
1100
- | `npm run build:portable` | Especificar target node18-win-x64 |
1101
- | `npm test` | Ejecutar tests con Vitest (53 tests, 9 suites) |
1102
- | `npm run prepublishOnly` | Validación antes de publicar en npm |
1103
-
1104
- ---
1105
-
1106
- ## Testing
1107
-
1108
- ```bash
1109
- npm test # Vitest — 53 tests, 9 suites
1110
- npm run test:watch # Modo watch
1111
- npm run test:ui # UI interactiva
1112
- npm run test:coverage
1113
- ```
1114
-
1115
- **Cobertura actual (v1.12.0):**
1116
- - `commands/`: init, bring, list, audit, set-skill, addon
1117
- - `lib/`: manifest, validator, asset-validator, python_runner
1118
- - **53 passing / 1 timeout** (init.test.js requiere import pesado de inquirer)
1119
-
1120
- ---
1121
-
1122
- ## Contribución
1123
-
1124
- 1. Fork el repositorio
1125
- 2. Crea una rama (`git checkout -b feature/nueva-funcion`)
1126
- 3. Commit tus cambios (`git commit -m 'Agregar nueva función'`)
1127
- 4. Push a la rama (`git push origin feature/nueva-funcion`)
1128
- 5. Abre un Pull Request
1129
-
1130
- ---
1131
-
1132
- ## Licencia
1133
-
1134
- MIT License - ver [LICENSE](LICENSE) para más detalles.
1135
-
1136
- ---
1137
-
1138
- ## Ecosistema G360
1139
-
1140
- Este proyecto forma parte de la familia de microherramientas **G360** para apoyo CRM y gestión de datos en escritorio, enfocadas en áreas como ventas, finanzas y logística.
1141
-
1142
- ### Identidad Visual G360
1143
-
1144
- - **Isotipo**: 3 puntos verticales paralelos (gris-verde-gris) + chevron `>`
1145
- - **Colores**: #00d084 (verde), #94a3b8 (gris)
1146
- - **Marca**: G360 - Microherramientas para apoyo CRM y datos en escritorio
1147
- - **Implementación**: Usar `g360-signature` para branding consistente
1148
-
1149
- ### Herramientas Relacionadas
1150
-
1151
- - **[g360-signature](https://github.com/carloscus/g360-signature)**: Web component de branding G360
1152
- - **[g360-order-xlsx](https://github.com/carloscus/g360-order-xlsx)**: Procesador de cotizaciones Excel
1153
- - **[g360-day-calculator](https://github.com/carloscus/g360-day-calculator)**: Calculadora de días laborables
1154
- - **[g360-master-data](https://github.com/carloscus/g360-master-data)**: Gestión de datos maestros
1155
-
1156
- ---
1157
-
1158
- ### `g360 addon`
1159
-
1160
- Gestión de addons y paquetes de desarrollo.
1161
-
1162
- ```bash
1163
- g360 addon <comando> [paquete] [opciones]
1164
- ```
1165
-
1166
- **Comandos:**
1167
- - `install <package>` - Instala un addon (core o dev-tool)
1168
- - `list` - Lista addons instalados
1169
- - `remove <package>` - Desinstala un addon
1170
-
1171
- **Opciones:**
1172
- | Opción | Descripción |
1173
- |--------|-------------|
1174
- | `-p, --path <ruta>` | Ruta destino (default: `.`) |
1175
- | `--dry-run` | Previsualizar cambios |
1176
- | `--force` | Forzar reinstalación/remoción |
1177
-
1178
- **Ejemplos:**
1179
- ```bash
1180
- # Instalar paquete de diseño (core)
1181
- g360 addon install @google/design.md
1182
-
1183
- # Instalar kit de testing (dev)
1184
- g360 addon install @g360/testing
1185
-
1186
- # Listar addons
1187
- g360 addon list
1188
-
1189
- # Remover addon
1190
- g360 addon remove @google/design.md
1191
- ```
1192
-
1193
- **Registro de addons:**
1194
- - 🏛️ Core Dev: Van a `dependencies` (producción)
1195
- - 🛠️ Dev Tools: Van a `devDependencies` (desarrollo)
1196
-
1197
- ---
1198
-
1199
- ### `g360 docs`
1200
-
1201
- Genera o actualiza la documentación del proyecto.
1202
-
1203
- ```bash
1204
- g360 docs [level] [opciones]
1205
- ```
1206
-
1207
- **Niveles:**
1208
-
1209
- | Nivel | Archivo generado | Descripción |
1210
- |---|---|---|
1211
- | `readme` (default) | `README.md` | Logo, diagrama Mermaid, quick start, identidad, firma |
1212
- | `architecture` | `ARCHITECTURE.md` | Diagrama de arquitectura general + flujo de datos |
1213
- | `business-rules` | `BUSINESS_RULES.md` | Reglas de negocio (solo Python con commercial_engine) |
1214
- | `dependencies` | `docs/generated/dependencies.mmd` | Dependencias entre módulos |
1215
- | `classes` | `docs/generated/classes.mmd` | Relaciones entre clases e interfaces |
1216
- | `code-graph` | `docs/generated/code_graph.mmd` | Grafo de código (proyectos grandes) |
1217
- | `all` | Todos los anteriores | Todos los niveles aplicables |
1218
-
1219
- **Opciones:**
1220
-
1221
- | Opción | Descripción | Valor por defecto |
1222
- |--------|-------------|-------------------|
1223
- | `--level <nivel>` | Nivel de documentación | `readme` |
1224
- | `--project <ruta>` | Ruta del proyecto | `.` |
1225
- | `--dry-run` | Previsualizar sin escribir | `false` |
1226
-
1227
- **Ejemplos:**
1228
-
1229
- ```bash
1230
- # Generar README con diagrama
1231
- g360 docs
1232
-
1233
- # Generar toda la documentación
1234
- g360 docs --level all
1235
-
1236
- # Generar BUSINESS_RULES para un proyecto Python
1237
- g360 docs --level business-rules --project ./mi-proyecto
1238
-
1239
- # Previsualizar sin escribir
1240
- g360 docs --level all --dry-run
1241
- ```
1242
-
1243
- ---
1244
-
1245
- ### `g360 lint`
1246
-
1247
- Revisa la consistencia de nomenclatura, detecta funciones duplicadas y verifica la sintaxis del proyecto.
1248
-
1249
- ```bash
1250
- g360 lint [level] [opciones]
1251
- ```
1252
-
1253
- **Niveles:**
1254
-
1255
- | Nivel | Qué revisa |
1256
- |---|---|
1257
- | `naming` | Nomenclatura de funciones, clases, variables y archivos |
1258
- | `duplicates` | Funciones duplicadas con nombres iguales o diferentes |
1259
- | `syntax` | Errores de sintaxis en archivos JS y Python |
1260
- | `structure` | Archivos faltantes (README.md, skill.json, manifest) |
1261
- | `all` (default) | Todas las anteriores |
1262
-
1263
- **Opciones:**
1264
-
1265
- | Opción | Descripción | Valor por defecto |
1266
- |--------|-------------|-------------------|
1267
- | `--level <nivel>` | Nivel de lint | `all` |
1268
- | `--project <ruta>` | Ruta del proyecto | `.` |
1269
-
1270
- **Ejemplos:**
1271
-
1272
- ```bash
1273
- # Revisar todo el proyecto
1274
- g360 lint
1275
-
1276
- # Solo revisar nomenclatura
1277
- g360 lint --level naming
1278
-
1279
- # Revisar un proyecto específico
1280
- g360 lint --project ./mi-proyecto
1281
- ```
1282
-
1283
- **Puntaje:** `g360 lint` asigna un puntaje de 0 a 100 basado en la cantidad de hallazgos.
1284
-
1285
- ---
1286
-
1287
- ## Integración con OpenCode
1288
-
1289
- g360-cli incluye integración con **OpenCode** para desarrollo asistido por IA. Esta integración permite que los agentes de IA tengan acceso a los recursos de g360-cli durante el desarrollo.
1290
-
1291
- ### Archivo de Skill
1292
-
1293
- El archivo `G360-CLI-SKILL.md` contiene toda la información necesaria para que OpenCode:
1294
-
1295
- - **Recomiende skills apropiados** basándose en el tipo de proyecto
1296
- - **Sugiera snippets** relevantes para el contexto de desarrollo
1297
- - **Aplique convenciones** del ecosistema G360 automáticamente
1298
- - **Genere código** siguiendo los patrones G360
1299
- - **Valide compliance** con los estándares G360
1300
-
1301
- ### Configuración de OpenCode
1302
-
1303
- El archivo `opencode-config.json` contiene la configuración de integración con OpenCode, incluyendo:
1304
-
1305
- - Rutas a los recursos de g360-cli
1306
- - Comandos disponibles para ejecución
1307
- - Convenciones de desarrollo del ecosistema
1308
- - Configuración de colores y formato
1309
-
1310
- ### Uso con OpenCode
1311
-
1312
- Para usar g360-cli con OpenCode:
1313
-
1314
- 1. **Asegúrate de tener el repo local**:
1315
- ```bash
1316
- cd "C:\Users\ccusi\Documents\Proyect_Coder\G360-ecosystem\projects\g360-cli"
1317
- ```
1318
-
1319
- 2. **Ejecuta comandos g360**:
1320
- ```bash
1321
- node src/cli.js list
1322
- node src/cli.js init <nombre> -t <template> -s <skill>
1323
- ```
1324
-
1325
- 3. **OpenCode puede acceder a los recursos**:
1326
- - Skills de identidad visual
1327
- - Snippets de código reutilizables
1328
- - Plantillas de proyecto estandarizadas
1329
- - Componentes G360 predefinidos
1330
- - Convenciones de desarrollo
1331
-
1332
- ### Ejemplos de Interacción
1333
-
1334
- #### Crear Nuevo Proyecto
1335
-
1336
- ```
1337
- Usuario: "Quiero crear una app web para un cliente corporativo"
1338
- OpenCode: "Te recomiendo usar el skill 'corporativo-movil' con la plantilla 'web-pwa'.
1339
- ¿Quieres que inicialice el proyecto con g360 init mi-proyecto --skill corporativo-movil --template web-pwa?"
1340
- ```
1341
-
1342
- #### Agregar Componente
1343
-
1344
- ```
1345
- Usuario: "Necesito un botón con estilo G360"
1346
- OpenCode: "Puedo usar el snippet 'g360-button' que incluye los estilos G360 estándar.
1347
- Aquí está el código: <button class='g360-btn'>Click</button>"
1348
- ```
1349
-
1350
- #### Validar Compliance
1351
-
1352
- ```
1353
- Usuario: "Verifica si este proyecto cumple con los estándares G360"
1354
- OpenCode: "Ejecutaré g360 audit para verificar compliance y te reportaré cualquier problema encontrado."
1355
- ```
1356
-
1357
- ### Recursos Disponibles
1358
-
1359
- #### Skills de Identidad Visual
1360
-
1361
- - `corporativo` - Proyectos para clientes - estilo corporativo conservador (PC)
1362
- - `corporativo-movil` - Proyectos para clientes - estilo corporativo - enfoque móvil
1363
- - `corporativo-g360` - Proyectos para clientes con colores G360 vibrantes (PC)
1364
- - `corporativo-g360-movil` - Proyectos para clientes con colores G360 - enfoque móvil
1365
- - `moderno` - Herramientas propias G360 - estilo innovador (PC)
1366
- - `moderno-movil` - Herramientas propias G360 - estilo innovador (móvil)
1367
- - `minimalista` - Proyectos minimalistas - scripts, CLI, Python
1368
- - `custom` - Configuración personalizada - colores ajustables
1369
- - `flet-desktop` - Aplicaciones de escritorio Flet - estilo moderno G360 (PC)
1370
- - `flet-desktop-corporativo` - Aplicaciones Flet para clientes - estilo corporativo conservador
1371
- - `cipsa` - Proyectos con marca CIPSA - favicon CIPSA rojo, logo corporativo
1372
- - `cipsa-movil` - Apps móviles con marca CIPSA - enfoque móvil
1373
-
1374
- #### Snippets de Código
1375
-
1376
- **Python CLI**: `cli-argparse-basic`, `cli-subcommands`, `cli-logging`, `cli-config-json`, `cli-progress-bar`, `cli-env-config`, `cli-exit-codes`
1377
-
1378
- **Web Components**: `g360-header`, `g360-button`, `g360-card`, `g360-badge`
1379
-
1380
- **Flet Components**: `flet-page`, `flet-card`, `flet-button`, `flet-nav-rail`, `flet-datatable`, `flet-dialog`, `flet-chart-bar`
1381
-
1382
- #### Plantillas de Proyecto
1383
-
1384
- - `web-pwa` - Progressive Web App with offline support
1385
- - `svelte-web` - Svelte web application
1386
- - `solid-web` - SolidJS web application
1387
- - `lit-web` - Lit web application
1388
- - `python-cli` - Python command-line tool
1389
- - `python-flet` - Python desktop app with Flet framework
1390
- - `python-flet-migrate` - Migrate tkinter/ctkinter app to Flet
1391
- - `python-customtkinter` - Python desktop app with CustomTkinter
1392
-
1393
- ### Actualización del Skill
1394
-
1395
- Para mantener la integración con OpenCode actualizada:
1396
-
1397
- 1. **Sincronizar con g360-cli**: Actualizar `G360-CLI-SKILL.md` cuando se agreguen nuevos skills o snippets
1398
- 2. **Validar comandos**: Verificar que los comandos de g360-cli funcionen correctamente
1399
- 3. **Documentar cambios**: Agregar nuevas funcionalidades a la documentación
1400
- 4. **Testing**: Probar las integraciones con OpenCode regularmente
1401
-
1402
- ### Referencias
1403
-
1404
- - **G360-CLI-SKILL.md**: Documentación completa del skill para OpenCode
1405
- - **opencode-config.json**: Configuración de integración con OpenCode
1406
- - **AGENTS.md**: Guías de desarrollo para agentes en el ecosistema G360
1407
-
1408
- ---
1409
-
1410
- ## Enlaces
1411
-
1412
- - [npm](https://www.npmjs.com/package/g360-cli)
1413
- - [GitHub](https://github.com/carloscus/g360-cli)
1414
- - [Documentación](#)
1415
- - [Reportar Issue](https://github.com/carloscus/g360-cli/issues)
1416
- ---
1417
-
1418
- **Marca**: G360 · Microherramientas para apoyo CRM y datos en escritorio
1419
- **Isotipo**: 3 puntos verticales paralelos (gris-verde-gris) + chevron `>`
1420
- **Signature**: G360 by ccusi (`mode: own`, definido en `brand/g360/signature`)
1421
- **Powered by**: [g360-signature](https://github.com/carloscus/g360-signature)
1422
-
1423
- > Identidad generada desde `src/assets/brand/brand.json` (Brand System v2.0.0).
1424
- > El logo arriba usa `<picture>` con `prefers-color-scheme` para light/dark.
1
+ # g360-cli
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="src/assets/brand/g360/logotypes/logo-g360-light.svg">
5
+ <img alt="G360" height="64" src="src/assets/brand/g360/logotypes/logo-g360-dark.svg">
6
+ </picture>
7
+
8
+ > CLI tool for bootstrapping G360 projects with standardized structure, assets, and identity
9
+
10
+ [![npm version](https://img.shields.io/npm/v/g360-cli?color=00d084&label=version)](https://www.npmjs.com/package/g360-cli)
11
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
+ [![npm downloads](https://img.shields.io/npm/dm/g360-cli?color=94a3b8)](https://www.npmjs.com/package/g360-cli)
13
+
14
+ ## ¿Cómo está organizado el proyecto?
15
+
16
+ ```mermaid
17
+ flowchart TD
18
+ CLI["g360 CLI<br/>cli.js"]
19
+ CMD["Comandos<br/>init · bring · audit · ingest · scan · validate"]
20
+ LIB["Librerías<br/>manifest · auditor · validator · logger"]
21
+ ASSETS["Assets<br/>templates · brand · signature · ingestion"]
22
+ PY["g360-core (PyPI)<br/>commercial_engine · pipeline · batch_processor"]
23
+ ERP["Datos ERP<br/>.xls · .xlsx · .csv"]
24
+
25
+ CLI --> CMD
26
+ CMD --> LIB
27
+ CMD --> ASSETS
28
+ CMD --> PY
29
+ PY --> ERP
30
+ ```
31
+
32
+ ## Tabla de Contenidos
33
+
34
+ - [Descripción](#descripción)
35
+ - [Características](#características)
36
+ - [Tecnologías](#tecnologías)
37
+ - [Instalación](#instalación)
38
+ - [Inicio Rápido](#inicio-rápido)
39
+ - [Comandos](#comandos)
40
+ - [Plantillas](#plantillas)
41
+ - [Componentes](#componentes)
42
+ - [Skills](#skills)
43
+ - [Convenciones de Nombres](#convenciones-de-nombres)
44
+ - [Configuración](#configuración)
45
+ - [API](#api)
46
+ - [Estructura](#estructura)
47
+ - [Reglas de negocio](#reglas-de-negocio)
48
+ - [Scripts](#scripts)
49
+ - [Testing](#testing)
50
+ - [Contribución](#contribución)
51
+ - [Licencia](#licencia)
52
+ - [Ecosistema G360](#ecosistema-g360)
53
+ - [Integración con OpenCode](#integración-con-opencode)
54
+
55
+ ---
56
+
57
+ ## Descripción
58
+
59
+ CLI tool para el ecosistema G360 que permite inicializar proyectos con estructura estándar, gestionar assets embebidos, y asegurar compliance mediante auditoría automática. Forma parte del núcleo del ecosistema y está disponible como paquete global de npm.
60
+
61
+ **Tipo**: CLI Tool / Scaffolding / Generator
62
+ **Plataforma**: Node.js >= 18.0.0
63
+ **Distribución**: npm global (`npm install -g g360-cli`)
64
+
65
+ ---
66
+
67
+ ## Tecnologías
68
+
69
+ - **Runtime**: Node.js >= 18.0.0
70
+ - **Lenguaje**: JavaScript (ESModules)
71
+ - **CLI Framework**: Commander 14.x
72
+ - **UI**: Chalk 5.x (colores), Ora 9.x (spinners), Inquirer 13.x (prompts)
73
+ - **Filesystem**: fs-extra 11.x
74
+ - **Build**: pkg 5.8.1 (portable .exe)
75
+ - **Distribución**: npm global
76
+
77
+ ---
78
+
79
+ ## Características
80
+
81
+ - **Inicialización rápida** - Crea proyectos G360 con estructura estándar
82
+ - **Gestión de assets** - Trae componentes, skills y plantillas embebidas
83
+ - **Ingesta ERP** - Normaliza `.xls/.xlsx` de SAP, StarSoft, Spring con `g360 bring ingestion`
84
+ - **Motor de clasificación comercial** - `commercial_engine` clasifica documentos en VENTA/DEVOLUCION/AJUSTE con subtipos (PRECIO_LINEA, CARGO_FIJO, SIN_BASE)
85
+ - **Precio efectivo** - PRECIO_BASE, RECARGO_UNITARIO y PRECIO_EFECTIVO separan precio físico de ajustes financieros FAE
86
+ - **Paquete Python** - `g360-core` en PyPI para pipelines de datos independientes
87
+ - **Auditoría** - Verifica compliance de proyectos G360
88
+ - **Limpieza** - Elimina assets embebidos antes de deployment
89
+ - **Multi-plantilla** - Web (Lit, Solid, Svelte, PWA, React), Python (CLI, Flet ⭐, Flet Polished ⭐, CustomTkinter, Migration)
90
+ - **Flet Polished** - Template estandar con dual theme, auto-refresh, hash cache, search debounce, KPI glow, G360 signature, portable launcher
91
+ - **Brand System v2.0.0** - Sistema de marca unificado con favicons, PWA icons, logotypes para G360 y CIPSA
92
+ - **Modo portable** - Proyectos Python con ejecución directa (sin PyInstaller)
93
+ - **Modo offline** - Funciona sin conexión usando assets cacheados
94
+ - **Preview** - Dry-run para previsualizar cambios
95
+
96
+ ---
97
+
98
+ ## Versión
99
+
100
+ **Current: v1.16.0** — [Ver en npm](https://www.npmjs.com/package/g360-cli)
101
+
102
+ ---
103
+
104
+ ## Instalación
105
+
106
+ ### Requisitos
107
+
108
+ - Node.js >= 18.0.0
109
+ - npm >= 8.0.0
110
+
111
+ ### Instalación global
112
+
113
+ ```bash
114
+ npm install -g g360-cli
115
+ ```
116
+
117
+ ### Verificar instalación
118
+
119
+ ```bash
120
+ g360 --version
121
+ # → 1.15.0
122
+
123
+ g360 health
124
+ ```
125
+
126
+ ### Publicar nueva versión
127
+
128
+ ```bash
129
+ npm version patch # o minor / major
130
+ git push --tags
131
+ npm publish
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Inicio Rápido
137
+
138
+ ```bash
139
+ # 1. Inicializar nuevo proyecto
140
+ g360 init mi-proyecto
141
+
142
+ # 2. Entrar al proyecto
143
+ cd mi-proyecto
144
+
145
+ # 3. Traer assets G360
146
+ g360 bring
147
+
148
+ # 4. Ver estructura
149
+ g360 present
150
+
151
+ # 5. Auditar proyecto
152
+ g360 audit
153
+
154
+ # 6. Limpiar antes de deploy
155
+ g360 clean
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Comandos
161
+
162
+ ### `g360 init`
163
+
164
+ Inicializa un nuevo proyecto G360.
165
+
166
+ ```bash
167
+ g360 init <nombre> [opciones]
168
+ ```
169
+
170
+ **Opciones:**
171
+
172
+ | Opción | Descripción | Valor por defecto |
173
+ |--------|-------------|-------------------|
174
+ | `-t, --template <tipo>` | Tipo de plantilla (default: auto segun skill) | `auto` |
175
+ | `-s, --skill <skill>` | Skill a usar | `corporativo-movil` |
176
+ | `-d, --dir <ruta>` | Directorio destino | `.` |
177
+ | `--dry-run` | Previsualizar sin crear | `false` |
178
+ | `--force` | Sobrescribir existente | `false` |
179
+ | `--brand` | Aplicar marca G360 (logo, colores, firma) después de init | `false` |
180
+
181
+ **Ejemplos:**
182
+
183
+ ```bash
184
+ # Proyecto Lit para cliente móvil
185
+ g360 init mi-proyecto --template lit-web --skill corporativo-movil
186
+
187
+ # Proyecto Solid para herramienta propia
188
+ g360 init mi-herramienta --template solid-web --skill moderno-movil
189
+
190
+ # Proyecto SvelteKit minimalista
191
+ g360 init mi-script --template svelte-web --skill minimalista
192
+
193
+ # Preview sin crear
194
+ g360 init mi-proyecto --dry-run
195
+
196
+ # Crear proyecto con marca G360 aplicada automáticamente
197
+ g360 init mi-proyecto --brand
198
+ ```
199
+
200
+ ---
201
+
202
+ ### `g360 set-skill`
203
+
204
+ Cambia el skill del proyecto actual.
205
+
206
+ ```bash
207
+ g360 set-skill <skill> [opciones]
208
+ ```
209
+
210
+ **Opciones:**
211
+
212
+ | Opción | Descripción |
213
+ |--------|-------------|
214
+ | `--verbose` | Mostrar detalles |
215
+ | `--force` | Sobrescribir skill existente |
216
+
217
+ **Ejemplos:**
218
+
219
+ ```bash
220
+ # Cambiar a skill corporativo para PC
221
+ g360 set-skill corporativo
222
+
223
+ # Cambiar a skill moderno para móvil
224
+ g360 set-skill moderno-movil
225
+
226
+ # Ver detalles del skill
227
+ g360 set-skill corporativo-g360 --verbose
228
+ ```
229
+
230
+ ---
231
+
232
+ ### `g360 convert`
233
+
234
+ Convierte un proyecto existente a identidad G360.
235
+
236
+ ```bash
237
+ g360 convert [ruta] [opciones]
238
+ ```
239
+
240
+ **Opciones:**
241
+
242
+ | Opción | Descripción | Valor por defecto |
243
+ |--------|-------------|-------------------|
244
+ | `-s, --skill <skill>` | Skill a aplicar | `corporativo-movil` |
245
+ | `--dry-run` | Previsualizar sin aplicar | `false` |
246
+ | `--restructure` | Reestructurar archivos | `false` |
247
+ | `--force` | Forzar cambios peligrosos | `false` |
248
+ | `--backup` | Crear backup antes | `false` |
249
+
250
+ **Ejemplos:**
251
+
252
+ ```bash
253
+ # Preview de cambios
254
+ g360 convert . --dry-run
255
+
256
+ # Convertir proyecto existente
257
+ g360 convert ./mi-proyecto --skill corporativo
258
+
259
+ # Con backup automático
260
+ g360 convert . --skill moderno --backup
261
+
262
+ # Forzar cambios peligrosos
263
+ g360 convert . --skill corporativo-movil --force
264
+ ```
265
+
266
+ ---
267
+
268
+ ### `g360 signature`
269
+
270
+ Instala el componente de firma oficial G360 en proyectos web.
271
+
272
+ ```bash
273
+ g360 signature install [opciones]
274
+ ```
275
+
276
+ **Opciones:**
277
+
278
+ | Opción | Descripción | Valor por defecto |
279
+ |--------|-------------|-------------------|
280
+ | `-p, --path <ruta>` | Ruta al index.html | `.` |
281
+ | `--force` | Reinstalar si ya existe | `false` |
282
+
283
+ **Ejemplos:**
284
+
285
+ ```bash
286
+ # Instalar en el directorio actual
287
+ g360 signature install
288
+
289
+ # Forzar reinstalación
290
+ g360 signature install --force
291
+ ```
292
+
293
+ ---
294
+
295
+ ### `g360 bring`
296
+
297
+ Trae assets G360 al proyecto actual.
298
+
299
+ ```bash
300
+ g360 bring [asset] [opciones]
301
+ ```
302
+
303
+ **Opciones:**
304
+
305
+ | Opción | Descripción |
306
+ |--------|-------------|
307
+ | `-p, --path <ruta>` | Ruta destino |
308
+ | `--dry-run` | Previsualizar |
309
+ | `--force` | Sobrescribir |
310
+
311
+ **Ejemplos:**
312
+
313
+ ```bash
314
+ # Traer todos los assets
315
+ g360 bring
316
+
317
+ # Traer solo componentes
318
+ g360 bring components
319
+
320
+ # Traer solo skills
321
+ g360 bring skills
322
+
323
+ # Traer engine específico
324
+ g360 bring engine/g360-skill-audit
325
+
326
+ # Traer ingestion module ERP a proyecto Flet existente
327
+ g360 bring ingestion
328
+ ```
329
+
330
+ ### `g360 bring ingestion`
331
+
332
+ Instala el módulo de normalización de datos ERP en proyectos Flet.
333
+
334
+ ```bash
335
+ g360 bring ingestion [opciones]
336
+ ```
337
+
338
+ **Opciones:**
339
+
340
+ | Opción | Descripción |
341
+ |--------|-------------|
342
+ | `-p, --path <ruta>` | Ruta al proyecto |
343
+ | `--dry-run` | Previsualizar |
344
+ | `--force` | Sobrescribir archivos existentes |
345
+
346
+ **Archivos instalados:**
347
+ - `src/core/ingestion.py` — Normalización de datos (estabilizar_excel_crudo)
348
+ - `src/ui/ingestion_panel.py` — Panel Flet para carga de archivos
349
+
350
+ **Importación (auto-detects pip → local):**
351
+ ```python
352
+ # Si g360-core está instalado via pip → from g360_core.ingestion import ...
353
+ # Si no → from core.ingestion import ...
354
+ from ui.ingestion_panel import IngestionPanel
355
+ ```
356
+
357
+ El paquete pip acompañante `g360-core` se publica en PyPI:
358
+ ```bash
359
+ pip install g360-core
360
+ ```
361
+
362
+ ### `g360-core` — Módulos principales
363
+
364
+ #### `commercial_engine.py`
365
+
366
+ Motor de lógica de negocio para clasificación documental. Única fuente de verdad para reglas comerciales.
367
+
368
+ | Función | Propósito |
369
+ |---------|-----------|
370
+ | `classify_base()` | Clasificación primaria: VENTA, DEVOLUCION, AJUSTE |
371
+ | `build_invoice_index()` | Índice de facturas para cruce de referencias |
372
+ | `resolve_document_relationships()` | Asigna SUBTIPO_AJUSTE (PRECIO_LINEA, CARGO_FIJO, SIN_BASE) |
373
+ | `calculate_prices()` | PRECIO_BASE, RECARGO_UNITARIO, PRECIO_EFECTIVO |
374
+ | `parse_referencia()` | Descompone REFERENCIA "F01/204-56287" en tipo/serie/número |
375
+
376
+ **Clasificación de documentos** (`classify_base` → primero, `resolve_document_relationships` → después para AJUSTE):
377
+ ```
378
+ TPO_DOC CANTIDAD → CATEGORIA_OP SUBTIPO_AJUSTE (cruce vs índice)
379
+ F01/BDI/F03/... cualquieraVENTA
380
+ NC* 0 → DEVOLUCION —
381
+ NC* = 0 → AJUSTE (ver reglas de cruce abajo)
382
+ ND* cualquiera → AJUSTE (ver reglas de cruce abajo)
383
+ ```
384
+ Subtipos de AJUSTE (`resolve_document_relationships` cruza `REFERENCIA` contra `build_invoice_index`):
385
+ ```
386
+ Clave con SKU coincide CANTIDAD_FAE = 0 CARGO_FIJO
387
+ Clave con SKU coincide CANTIDAD_FAE CANT_FACT → PRECIO_LINEA
388
+ Clave con SKU coincide CANTIDAD_FAE < CANT_FACT → PRECIO_PARCIAL
389
+ Clave con SKU coincide CANTIDAD_FAE > CANT_FACT SIN_BASE
390
+ Clave no coincide CANTIDAD_FAE = 1 → CARGO_FIJO
391
+ Clave no coincide CANTIDAD_FAE ≠ 1 → SIN_BASE
392
+ Sin facturas en dataset — → SIN_BASE (todo AJUSTE)
393
+ ```
394
+ > Ver detalle completo en [`BUSINESS_RULES.md`](./BUSINESS_RULES.md).
395
+
396
+ #### `batch_processor.py`
397
+
398
+ | Función | Propósito |
399
+ |---------|-----------|
400
+ | `read_erp_file()` | Punto único de lectura: .xls (xlrd), .xlsx (openpyxl), .csv. `dtype=str` preserva ceros a la izquierda |
401
+
402
+ ---
403
+
404
+ ### `g360 list`
405
+
406
+ Lista assets disponibles.
407
+
408
+ ```bash
409
+ g360 list [tipo] [opciones]
410
+ ```
411
+
412
+ **Tipos:**
413
+
414
+ | Tipo | Descripción |
415
+ |------|-------------|
416
+ | `templates` | Lista de plantillas |
417
+ | `components` | Lista de componentes |
418
+ | `skills` | Lista de skills |
419
+ | `ingestion` | Módulo de ingesta ERP |
420
+ | `all` | Todo (por defecto) |
421
+
422
+ **Ejemplos:**
423
+
424
+ ```bash
425
+ # Listar todo
426
+ g360 list
427
+
428
+ # Solo plantillas
429
+ g360 list templates
430
+
431
+ # Solo componentes
432
+ g360 list components
433
+
434
+ # Salida JSON
435
+ g360 list --json
436
+ ```
437
+
438
+ ---
439
+
440
+ ### `g360 present`
441
+
442
+ Presenta la estructura del proyecto.
443
+
444
+ ```bash
445
+ g360 present [ruta] [opciones]
446
+ ```
447
+
448
+ **Opciones:**
449
+
450
+ | Opción | Descripción | Valor por defecto |
451
+ |--------|-------------|-------------------|
452
+ | `--depth <n>` | Profundidad máxima | `3` |
453
+
454
+ **Ejemplo:**
455
+
456
+ ```bash
457
+ g360 present
458
+ g360 present ./mi-proyecto --depth 2
459
+ ```
460
+
461
+ ---
462
+
463
+ ### `g360 audit`
464
+
465
+ Audita el proyecto para compliance G360.
466
+
467
+ ```bash
468
+ g360 audit [ruta] [opciones]
469
+ ```
470
+
471
+ **Opciones:**
472
+
473
+ | Opción | Descripción |
474
+ |--------|-------------|
475
+ | `--fix` | Auto-corregir problemas |
476
+ | `--verbose` | Salida detallada |
477
+
478
+ **Ejemplo:**
479
+
480
+ ```bash
481
+ g360 audit
482
+ g360 audit ./mi-proyecto --verbose
483
+ ```
484
+
485
+ ---
486
+
487
+ ### `g360 clean`
488
+
489
+ Limpia código muerto, duplicados y archivos huérfanos del proyecto.
490
+
491
+ ```bash
492
+ g360 clean [ruta] [opciones]
493
+ ```
494
+
495
+ **Opciones:**
496
+
497
+ | Opción | Descripción |
498
+ |--------|-------------|
499
+ | `--dry-run` | Previsualizar archivos |
500
+ | `--force` | Omitir confirmación |
501
+ | `--dead` | Eliminar archivos muertos/descontinuados |
502
+ | `--duplicates` | Eliminar archivos duplicados |
503
+ | `--orphans` | Eliminar archivos huérfanos (sin referencias) |
504
+ | `--organize` | Mostrar archivos descolocados |
505
+ | `--all` | Ejecutar todas las verificaciones |
506
+
507
+ **Ejemplos:**
508
+
509
+ ```bash
510
+ # Preview de limpieza completa
511
+ g360 clean --dry-run --all
512
+
513
+ # Solo archivos muertos
514
+ g360 clean --dead --force
515
+
516
+ # Solo duplicados
517
+ g360 clean --duplicates --force
518
+
519
+ # Verificar huérfanos (sin eliminar)
520
+ g360 clean --orphans --dry-run
521
+ ```
522
+
523
+ ---
524
+
525
+ ### `g360 health`
526
+
527
+ Verifica el estado del sistema.
528
+
529
+ ```bash
530
+ g360 health [opciones]
531
+ ```
532
+
533
+ **Opciones:**
534
+
535
+ | Opción | Descripción |
536
+ |--------|-------------|
537
+ | `--verbose` | Info detallada |
538
+
539
+ **Ejemplo:**
540
+
541
+ ```bash
542
+ g360 health
543
+ g360 health --verbose
544
+ ```
545
+
546
+ ---
547
+
548
+ ### `g360 update`
549
+
550
+ Actualiza g360-cli a la última versión.
551
+
552
+ ```bash
553
+ g360 update [opciones]
554
+ ```
555
+
556
+ **Opciones:**
557
+
558
+ | Opción | Descripción |
559
+ |--------|-------------|
560
+ | `--check` | Solo verificar sin actualizar |
561
+
562
+ **Ejemplo:**
563
+
564
+ ```bash
565
+ # Verificar nueva versión
566
+ g360 update --check
567
+
568
+ # Actualizar
569
+ g360 update
570
+ ```
571
+
572
+ ---
573
+
574
+ ### `g360 config`
575
+
576
+ Visualiza o modifica la configuración de g360-cli.
577
+
578
+ ```bash
579
+ g360 config [opciones]
580
+ ```
581
+
582
+ **Opciones:**
583
+
584
+ | Opción | Descripción |
585
+ |--------|-------------|
586
+ | `--list` | Listar todas las opciones de configuración |
587
+ | `--get <key>` | Obtener valor de una configuración |
588
+ | `--set <key=value>` | Establecer un valor de configuración |
589
+
590
+ **Ejemplos:**
591
+
592
+ ```bash
593
+ # Listar configuración disponible
594
+ g360 config --list
595
+
596
+ # Verificar skill actual
597
+ g360 config --get skill
598
+ ```
599
+
600
+ ---
601
+
602
+ ### `g360 scan`
603
+
604
+ Escanea un directorio para detectar archivos ERP válidos (.xls, .xlsx, .csv).
605
+
606
+ ```bash
607
+ g360 scan <directorio> [opciones]
608
+ ```
609
+
610
+ **Opciones:**
611
+
612
+ | Opción | Descripción | Valor por defecto |
613
+ |--------|-------------|-------------------|
614
+ | `-r, --recursive` | Buscar recursivamente | `true` |
615
+ | `--min-score <n>` | Puntuación mínima de coincidencia | `10` |
616
+
617
+ **Ejemplos:**
618
+
619
+ ```bash
620
+ # Escanear directorio actual
621
+ g360 scan .
622
+
623
+ # Escanear recursivamente con puntuación mínima
624
+ g360 scan ./data --min-score 20
625
+
626
+ # Solo directorio actual (sin recursión)
627
+ g360 scan ./exports --no-recursive
628
+ ```
629
+
630
+ ---
631
+
632
+ ### `g360 validate`
633
+
634
+ Valida archivos ERP (.xls, .xlsx, .csv) sin procesar completamente.
635
+
636
+ ```bash
637
+ g360 validate <archivos...> [opciones]
638
+ ```
639
+
640
+ **Opciones:**
641
+
642
+ | Opción | Descripción |
643
+ |--------|-------------|
644
+ | `-r, --recursive` | Buscar recursivamente en directorios |
645
+
646
+ **Ejemplos:**
647
+
648
+ ```bash
649
+ # Validar un archivo
650
+ g360 validate factura.xlsx
651
+
652
+ # Validar múltiples archivos
653
+ g360 validate *.xlsx *.xls
654
+
655
+ # Validar todos los archivos ERP en un directorio
656
+ g360 validate ./exports --recursive
657
+ ```
658
+
659
+ ---
660
+
661
+ ### `g360 ingest`
662
+
663
+ Procesa archivos ERP y genera un CSV maestro normalizado.
664
+
665
+ ```bash
666
+ g360 ingest <input> [opciones]
667
+ ```
668
+
669
+ **Opciones:**
670
+
671
+ | Opción | Descripción | Valor por defecto |
672
+ |--------|-------------|-------------------|
673
+ | `-o, --output <archivo>` | Ruta de salida CSV | `maestro_ventas_crm.csv` |
674
+
675
+ **Archivos de entrada soportados:** `.xls`, `.xlsx`, `.csv`
676
+
677
+ **Ejemplos:**
678
+
679
+ ```bash
680
+ # Procesar un archivo Excel
681
+ g360 ingest ventas_sap.xlsx
682
+
683
+ # Procesar directorio completo
684
+ g360 ingest ./exports/ -o consolidado.csv
685
+
686
+ # Procesar con nombre de salida personalizado
687
+ g360 ingest reporte.xlsx -o mi_reporte.csv
688
+ ```
689
+
690
+ ---
691
+
692
+ ## Plantillas
693
+
694
+ ### python-flet-polished ⭐ (Estandar actual)
695
+
696
+ Plantilla desktop Python con Flet — patrones de UI avanzados heredados de produccion.
697
+
698
+ ```
699
+ mi-proyecto/
700
+ ├── main.py
701
+ ├── src/
702
+ │ ├── app.py
703
+ │ ├── config/theme.py
704
+ ├── core/constants.py, processor.py
705
+ │ └── ui/dashboard.py, kpi_card.py, search_overlay.py
706
+ ├── g360_flet/g360_signature.py
707
+ ├── assets/fonts/, images/, data/
708
+ ├── run.bat, launch.vbs, build-portable.bat
709
+ ├── skill.json, pyproject.toml
710
+ └── sync_portable.py
711
+ ```
712
+
713
+ ### web-pwa
714
+
715
+ Plantilla Progressive Web App con React.
716
+
717
+ ```
718
+ mi-proyecto/
719
+ ├── index.html
720
+ ├── src/
721
+ │ ├── main.jsx
722
+ │ ├── App.jsx
723
+ │ ├── components/
724
+ │ │ ├── Header.jsx
725
+ │ │ ├── FooterSignature.jsx
726
+ └── LoadingOverlay.jsx
727
+ │ └── styles/main.css
728
+ ├── vite.config.js
729
+ ├── package.json
730
+ └── skill.json
731
+ ```
732
+
733
+ ### lit-web
734
+
735
+ Plantilla Web Components con Lit.
736
+
737
+ ```
738
+ mi-proyecto/
739
+ ├── index.html
740
+ ├── src/
741
+ │ ├── index.js
742
+ ├── components/
743
+ └── app-root.js
744
+ └── styles/
745
+ │ └── main.css
746
+ ├── vite.config.js
747
+ ├── package.json
748
+ └── skill.json
749
+ ```
750
+
751
+ ### solid-web
752
+
753
+ Plantilla con SolidJS.
754
+
755
+ ```
756
+ mi-proyecto/
757
+ ├── index.html
758
+ ├── src/
759
+ │ ├── index.jsx
760
+ ├── components/
761
+ └── App.jsx
762
+ └── styles/
763
+ │ └── main.css
764
+ ├── vite.config.js
765
+ ├── package.json
766
+ └── skill.json
767
+ ```
768
+
769
+ ### svelte-web
770
+
771
+ Plantilla con SvelteKit.
772
+
773
+ ```
774
+ mi-proyecto/
775
+ ├── src/
776
+ │ ├── app.html
777
+ │ ├── app.css
778
+ ├── routes/
779
+ └── +page.svelte
780
+ └── core/
781
+ │ └── skill.json
782
+ ├── svelte.config.js
783
+ ├── package.json
784
+ └── skill.json
785
+ ```
786
+
787
+ ### web-pwa (React)
788
+
789
+ Plantilla React + Vite con PWA.
790
+
791
+ ```
792
+ mi-proyecto/
793
+ ├── index.html
794
+ ├── app.js
795
+ ├── styles.css
796
+ ├── manifest.json
797
+ └── package.json
798
+ ```
799
+
800
+ ### python-cli
801
+
802
+ Plantilla CLI de Python con estructura argparse completa.
803
+
804
+ ```
805
+ mi-cli/
806
+ ├── src/
807
+ ├── main.py
808
+ └── core/
809
+ │ └── skill.json
810
+ ├── requirements.txt
811
+ ├── run.bat
812
+ ├── build-portable.bat
813
+ └── skill.json
814
+ ```
815
+
816
+ ### python-flet (LEGACY)
817
+
818
+ > ⚠️ **Deprecado** — Usar `python-flet-polished` para nuevos proyectos.
819
+
820
+ Plantilla GUI de escritorio con **Flet** para apps de contexto ERP.
821
+
822
+ ```
823
+ mi-app/
824
+ ├── src/
825
+ │ ├── main.py ← Punto de entrada con IngestionPanel integrado
826
+ │ ├── core/
827
+ │ │ ├── ingestion.py Normalizador de datos ERP
828
+ │ │ ├── g360_theme.py ← Tema visual G360
829
+ │ └── skill.json
830
+ ├── ui/
831
+ └── ingestion_panel.py ← Panel Flet para carga .xls/.xlsx
832
+ └── export/
833
+ │ └── __init__.py
834
+ ├── pyproject.toml ← Dependencias: flet, pandas, g360-core
835
+ ├── run.bat
836
+ ├── build.bat
837
+ └── skill.json
838
+ ```
839
+
840
+ **Normalización de datos:** La ingesta aplica transformaciones automáticas:
841
+ - Parseo de referencias (`F01/201-243065` tipo, serie, periodo, número)
842
+ - Separación de sucursales (nombre + dirección)
843
+ - Clasificación de documentos (RUC 11 dígitos / DNI 8 dígitos)
844
+ - Normalización monetaria con auto-detección de formato SAP/Spring
845
+ - Cantidad + Cantidad FAE cantidad_total + tipo_transaccion
846
+ - **Clasificación comercial**: VENTA / DEVOLUCION / AJUSTE con subtipos PRECIO_LINEA, CARGO_FIJO, SIN_BASE
847
+ - **Precio efectivo**: PRECIO_BASE (físico) y RECARGO_UNITARIO (financiero) separados
848
+ - Cruce de NC/NDB contra facturas referenciadas para determinar ajustes de precio por línea
849
+ - Purga de filas total/general/acumulado
850
+ - **Columnas derivadas para UI**: `cliente_label`, `vendedor_label`, `articulo_label`, `linea_label`, etc. (ID - NOMBRE)
851
+ - **Cliente completo**: `cliente_full_label` = ID_CLIENTE - DOC_CLIENTE_CLEAN - NOM_CLIENTE
852
+ - **Código de factura**: `doc_completo` = TPO_DOC + SERIE_DOC + NRO_DOC (ej: "F204-56287")
853
+ - **Precio unitario**: `precio_base` = SOLES / CANTIDAD
854
+
855
+ ### python-flet-migrate
856
+
857
+ Plantilla para migrar aplicaciones Tkinter/CTkinter a Flet.
858
+
859
+ ```
860
+ mi-app/
861
+ ├── src/
862
+ ├── main.py
863
+ │ └── migrate_tkinter.py
864
+ ├── requirements.txt
865
+ └── skill.json
866
+ ```
867
+
868
+ ### python-customtkinter
869
+
870
+ Plantilla GUI de escritorio con **CustomTkinter** (tema oscuro moderno).
871
+
872
+ ```
873
+ mi-app/
874
+ ├── src/
875
+ ├── main.py
876
+ └── core/
877
+ │ └── skill.json
878
+ ├── requirements.txt
879
+ ├── run.bat
880
+ └── build-portable.bat
881
+ ```
882
+
883
+ ---
884
+
885
+ ## Componentes
886
+
887
+ ### g360-signature
888
+
889
+ Firma G360 para proyectos web (Web Component).
890
+
891
+ ```html
892
+ <!-- Modo para clientes -->
893
+ <g360-signature mode="powered"></g360-signature>
894
+
895
+ <!-- Modo propio -->
896
+ <g360-signature mode="own"></g360-signature>
897
+
898
+ <!-- Con versión -->
899
+ <g360-signature mode="powered" version="1.0.0"></g360-signature>
900
+ ```
901
+
902
+ **Atributos:**
903
+ - `mode`: "own" (G360 by ccusi) o "powered" (powered by G360)
904
+ - `version`: Número de versión opcional
905
+
906
+ **Características:**
907
+ - Isotipo: 3 puntos verticales + chevron >
908
+ - Colores: #00d084 (verde), #94a3b8 (gris)
909
+ - Opacidad: 0.4 por defecto, 1.0 en hover
910
+ - Tema: auto-detecta prefers-color-scheme
911
+
912
+ ### G360DragModal
913
+
914
+ Modal draggable para interfaces.
915
+
916
+ ```jsx
917
+ import G360DragModal from './g360/components/G360DragModal.jsx';
918
+
919
+ G360DragModal({
920
+ isOpen: true,
921
+ title: 'Configuración',
922
+ onClose: () => setOpen(false),
923
+ children: '<p>Contenido del modal</p>'
924
+ });
925
+ ```
926
+
927
+ ---
928
+
929
+ ## Skills
930
+
931
+ Los skills definen el estilo visual, dispositivo y signature del proyecto.
932
+
933
+ ### corporativo
934
+
935
+ Proyectos para clientes - estilo corporativo conservador (PC).
936
+
937
+ ### corporativo-movil
938
+
939
+ Proyectos para clientes - estilo corporativo - enfoque móvil.
940
+
941
+ ### corporativo-g360
942
+
943
+ Proyectos para clientes con colores G360 vibrantes (PC).
944
+
945
+ ### corporativo-g360-movil
946
+
947
+ Proyectos para clientes con colores G360 - enfoque móvil.
948
+
949
+ ### moderno
950
+
951
+ Herramientas propias G360 - estilo innovador (PC).
952
+
953
+ ### moderno-movil
954
+
955
+ Herramientas propias G360 - estilo innovador (móvil).
956
+
957
+ ### minimalista
958
+
959
+ Proyectos minimalistas - scripts, CLI, Python.
960
+
961
+ ### custom
962
+
963
+ Configuración personalizada - colores ajustables.
964
+
965
+ ### flet-desktop
966
+
967
+ Aplicaciones de escritorio Flet - estilo moderno G360 (PC).
968
+
969
+ ### flet-desktop-corporativo
970
+
971
+ Aplicaciones Flet para clientes - estilo corporativo conservador.
972
+
973
+ ### cipsa
974
+
975
+ Proyectos con marca CIPSA - favicon CIPSA rojo, logo corporativo, signature "powered by G360".
976
+
977
+ ### cipsa-movil
978
+
979
+ Apps móviles con marca CIPSA - favicon CIPSA rojo, logo corporativo, enfoque móvil.
980
+
981
+ ### flet-desktop-polished
982
+
983
+ App Flet desktop con patrones UI avanzados: dual theme, auto-refresh, hash cache, search debounce, KPI glow, G360 signature widget. **Estandar actual para Flet.**
984
+
985
+ ### react-web
986
+
987
+ Aplicaciones web con React/JSX - estilo G360 moderno.
988
+
989
+ ### solid-web
990
+
991
+ Aplicaciones web con SolidJS - estilo G360 moderno.
992
+
993
+ ### svelte-web
994
+
995
+ Aplicaciones web con Svelte/SvelteKit - estilo G360 moderno.
996
+
997
+ ### lit-web
998
+
999
+ Aplicaciones web con Lit Web Components - estilo G360 moderno.
1000
+
1001
+ ### customtkinter
1002
+
1003
+ Aplicaciones desktop con CustomTkinter - estilo G360 moderno.
1004
+
1005
+ ### Ejemplos de uso
1006
+
1007
+ ```bash
1008
+ # Al crear proyecto
1009
+ g360 init mi-proyecto --skill corporativo-movil
1010
+
1011
+ # Cambiar skill después
1012
+ g360 set-skill moderno
1013
+
1014
+ # Ver skills disponibles
1015
+ g360 list skills
1016
+
1017
+ # Aplicar marca a proyecto existente
1018
+ g360 bring brand/cipsa
1019
+
1020
+ # Convertir proyecto con nuevo skill
1021
+ g360 convert . --skill flet-desktop-polished --force
1022
+ ```
1023
+
1024
+ ---
1025
+
1026
+ ## Convenciones de Nombres
1027
+
1028
+ Las aplicaciones G360 siguen un sistema de nomenclatura estandarizado para ser identificables y consistentes en el ecosistema.
1029
+
1030
+ ### Clases UI
1031
+
1032
+ | Sufijo | Uso | Ejemplo |
1033
+ |--------|-----|---------|
1034
+ | `App` | Orquestador principal | `StockMonitorApp`, `G360App` |
1035
+ | `Dashboard` | Vista principal con KPIs | `SalesDashboard` |
1036
+ | `Card` | Tarjeta reutilizable | `KpiCard`, `WarehouseCard` |
1037
+ | `Modal` | Ventana modal | `ExportModal`, `SearchModal` |
1038
+ | `Overlay` | Capa flotante | `SearchOverlay`, `LoadingOverlay` |
1039
+ | `Badge` | Indicador pequeno | `HealthBadge` |
1040
+ | `Chip` | Tag seleccionable | `WarehouseChip` |
1041
+ | `Table` | Tabla de datos | `ProductTable` |
1042
+
1043
+ ### Funciones/Metodos
1044
+
1045
+ | Prefijo | Uso | Ejemplo |
1046
+ |---------|-----|---------|
1047
+ | `_setup_` | Inicializacion | `_setup_page()`, `_setup_theme()` |
1048
+ | `_build_` | Construccion UI | `_build_header()`, `_build_content()` |
1049
+ | `_on_` | Event handlers | `_on_click()`, `_on_refresh()` |
1050
+ | `_fetch_` / `_download_` | Obtencion datos | `_fetch_data()`, `_download_api()` |
1051
+ | `_load_` / `_save_` | Persistencia | `_load_cache()`, `_save_data()` |
1052
+ | `_update_` / `_refresh_` | Actualizacion | `_update_ui()`, `_refresh_kpis()` |
1053
+ | `_show_` / `_hide_` | Visibilidad | `_show_loading()`, `_hide_overlay()` |
1054
+ | `_toggle_` | Cambio estado | `_toggle_theme()` |
1055
+ | `_validate_` | Validaciones | `_validate_input()` |
1056
+
1057
+ ### Archivos
1058
+
1059
+ | Capa | Convention | Ejemplo |
1060
+ |------|------------|---------|
1061
+ | Entry | `main.py` | `main.py` |
1062
+ | App | `app.py` | `app.py` |
1063
+ | Config | `config/*.py` | `theme.py`, `constants.py` |
1064
+ | Core | `core/*.py` | `processor.py`, `downloader.py` |
1065
+ | UI | `ui/*.py` | `dashboard.py`, `kpi_card.py` |
1066
+ | Modals | `ui/modals/*.py` | `export_modal.py` |
1067
+
1068
+ > Para mas detalles, ver [`FLET-NAMING-CONVENTIONS.md`](./FLET-NAMING-CONVENTIONS.md)
1069
+
1070
+ ---
1071
+
1072
+ ## Configuración
1073
+
1074
+ ### g360-manifest.json
1075
+
1076
+ Archivo de manifiesto del proyecto.
1077
+
1078
+ ```json
1079
+ {
1080
+ "name": "mi-proyecto",
1081
+ "template": "web-pwa",
1082
+ "version": "1.0.0",
1083
+ "createdAt": "2024-01-01T00:00:00.000Z",
1084
+ "assets": [
1085
+ {
1086
+ "name": "components",
1087
+ "addedAt": "2024-01-01T00:00:00.000Z"
1088
+ }
1089
+ ]
1090
+ }
1091
+ ```
1092
+
1093
+ ### Configuración Global
1094
+
1095
+ ```bash
1096
+ # Directorio de configuración
1097
+ ~/.g360/
1098
+
1099
+ # Assets cacheados
1100
+ ~/.g360/cache/
1101
+ ```
1102
+
1103
+ ---
1104
+
1105
+ ## API
1106
+
1107
+ ### Módulo Principal
1108
+
1109
+ ```javascript
1110
+ import { g360 } from 'g360-cli';
1111
+
1112
+ await g360.init({ name: 'proyecto', template: 'web-pwa' });
1113
+ await g360.bring('components');
1114
+ await g360.audit({ path: '.', verbose: true });
1115
+ await g360.clean({ path: '.', force: true });
1116
+ ```
1117
+
1118
+ ---
1119
+
1120
+ ## Estructura
1121
+
1122
+ ```
1123
+ g360-cli/
1124
+ ├── src/
1125
+ │ ├── cli.js # Entrada principal CLI
1126
+ │ ├── commands/ # Comandos (init, bring, audit, scan, validate, ingest, etc.)
1127
+ │ ├── lib/ # Utilidades (assets, auditor, config, logger, validator, etc.)
1128
+ │ ├── schemas/ # Schemas de validación
1129
+ │ └── assets/ # Assets embebidos
1130
+ │ ├── templates/ # Plantillas de proyecto
1131
+ │ ├── components/ # Componentes G360
1132
+ │ ├── brand/ # Sistema de marca v2.0.0 (G360 + CIPSA)
1133
+ │ ├── ingestion/ # Módulo de ingesta ERP (bring)
1134
+ │ ├── engine/ # G360 Engine
1135
+ │ ├── snippets/ # Snippets de código reutilizables
1136
+ │ └── config/ # Configuraciones (g360-skills.json, agent-skills.json, project-types.json)
1137
+ ├── py/ # Paquete Python publicable en PyPI
1138
+ │ ├── pyproject.toml # g360-core
1139
+ │ └── src/g360_core/ # commercial_engine.py, pipeline.py, processor.py, batch_processor.py, utils.py
1140
+ ├── package.json
1141
+ ├── CHANGELOG.md
1142
+ ├── README.md
1143
+ └── LICENSE
1144
+ ```
1145
+
1146
+ ---
1147
+
1148
+ ## Scripts
1149
+
1150
+ | Comando | Descripción |
1151
+ |---------|-------------|
1152
+ | `npm run build` | Build portable con pkg (g360.exe) |
1153
+ | `npm run build:portable` | Especificar target node18-win-x64 |
1154
+ | `npm test` | Ejecutar tests con Vitest (53 tests, 9 suites) |
1155
+ | `npm run prepublishOnly` | Validación antes de publicar en npm |
1156
+
1157
+ ---
1158
+
1159
+ ## Testing
1160
+
1161
+ ```bash
1162
+ npm test # Vitest — 53 tests, 9 suites
1163
+ npm run test:watch # Modo watch
1164
+ npm run test:ui # UI interactiva
1165
+ npm run test:coverage
1166
+ ```
1167
+
1168
+ **Cobertura actual (v1.12.0):**
1169
+ - `commands/`: init, bring, list, audit, set-skill, addon
1170
+ - `lib/`: manifest, validator, asset-validator, python_runner
1171
+ - **53 passing / 1 timeout** (init.test.js requiere import pesado de inquirer)
1172
+
1173
+ ---
1174
+
1175
+ ## Contribución
1176
+
1177
+ 1. Fork el repositorio
1178
+ 2. Crea una rama (`git checkout -b feature/nueva-funcion`)
1179
+ 3. Commit tus cambios (`git commit -m 'Agregar nueva función'`)
1180
+ 4. Push a la rama (`git push origin feature/nueva-funcion`)
1181
+ 5. Abre un Pull Request
1182
+
1183
+ ---
1184
+
1185
+ ## Licencia
1186
+
1187
+ MIT License - ver [LICENSE](LICENSE) para más detalles.
1188
+
1189
+ ---
1190
+
1191
+ ## Ecosistema G360
1192
+
1193
+ Este proyecto forma parte de la familia de microherramientas **G360** para apoyo CRM y gestión de datos en escritorio, enfocadas en áreas como ventas, finanzas y logística.
1194
+
1195
+ ### Identidad Visual G360
1196
+
1197
+ - **Isotipo**: 3 puntos verticales paralelos (gris-verde-gris) + chevron `>`
1198
+ - **Colores**: #00d084 (verde), #94a3b8 (gris)
1199
+ - **Marca**: G360 - Microherramientas para apoyo CRM y datos en escritorio
1200
+ - **Implementación**: Usar `g360-signature` para branding consistente
1201
+
1202
+ ### Herramientas Relacionadas
1203
+
1204
+ - **[g360-signature](https://github.com/carloscus/g360-signature)**: Web component de branding G360
1205
+ - **[g360-order-xlsx](https://github.com/carloscus/g360-order-xlsx)**: Procesador de cotizaciones Excel
1206
+ - **[g360-day-calculator](https://github.com/carloscus/g360-day-calculator)**: Calculadora de días laborables
1207
+ - **[g360-master-data](https://github.com/carloscus/g360-master-data)**: Gestión de datos maestros
1208
+
1209
+ ---
1210
+
1211
+ ### `g360 addon`
1212
+
1213
+ Gestión de addons y paquetes de desarrollo.
1214
+
1215
+ ```bash
1216
+ g360 addon <comando> [paquete] [opciones]
1217
+ ```
1218
+
1219
+ **Comandos:**
1220
+ - `install <package>` - Instala un addon (core o dev-tool)
1221
+ - `list` - Lista addons instalados
1222
+ - `remove <package>` - Desinstala un addon
1223
+
1224
+ **Opciones:**
1225
+ | Opción | Descripción |
1226
+ |--------|-------------|
1227
+ | `-p, --path <ruta>` | Ruta destino (default: `.`) |
1228
+ | `--dry-run` | Previsualizar cambios |
1229
+ | `--force` | Forzar reinstalación/remoción |
1230
+
1231
+ **Ejemplos:**
1232
+ ```bash
1233
+ # Instalar paquete de diseño (core)
1234
+ g360 addon install @google/design.md
1235
+
1236
+ # Instalar kit de testing (dev)
1237
+ g360 addon install @g360/testing
1238
+
1239
+ # Listar addons
1240
+ g360 addon list
1241
+
1242
+ # Remover addon
1243
+ g360 addon remove @google/design.md
1244
+ ```
1245
+
1246
+ **Registro de addons:**
1247
+ - 🏛️ Core Dev: Van a `dependencies` (producción)
1248
+ - 🛠️ Dev Tools: Van a `devDependencies` (desarrollo)
1249
+
1250
+ ---
1251
+
1252
+ ### `g360 docs`
1253
+
1254
+ Genera o actualiza la documentación del proyecto.
1255
+
1256
+ ```bash
1257
+ g360 docs [level] [opciones]
1258
+ ```
1259
+
1260
+ **Niveles:**
1261
+
1262
+ | Nivel | Archivo generado | Descripción |
1263
+ |---|---|---|
1264
+ | `readme` (default) | `README.md` | Logo, diagrama Mermaid, quick start, identidad, firma |
1265
+ | `architecture` | `ARCHITECTURE.md` | Diagrama de arquitectura general + flujo de datos |
1266
+ | `business-rules` | `BUSINESS_RULES.md` | Reglas de negocio (solo Python con commercial_engine) |
1267
+ | `dependencies` | `docs/generated/dependencies.mmd` | Dependencias entre módulos |
1268
+ | `classes` | `docs/generated/classes.mmd` | Relaciones entre clases e interfaces |
1269
+ | `code-graph` | `docs/generated/code_graph.mmd` | Grafo de código (proyectos grandes) |
1270
+ | `all` | Todos los anteriores | Todos los niveles aplicables |
1271
+
1272
+ **Opciones:**
1273
+
1274
+ | Opción | Descripción | Valor por defecto |
1275
+ |--------|-------------|-------------------|
1276
+ | `--level <nivel>` | Nivel de documentación | `readme` |
1277
+ | `--project <ruta>` | Ruta del proyecto | `.` |
1278
+ | `--dry-run` | Previsualizar sin escribir | `false` |
1279
+
1280
+ **Ejemplos:**
1281
+
1282
+ ```bash
1283
+ # Generar README con diagrama
1284
+ g360 docs
1285
+
1286
+ # Generar toda la documentación
1287
+ g360 docs --level all
1288
+
1289
+ # Generar BUSINESS_RULES para un proyecto Python
1290
+ g360 docs --level business-rules --project ./mi-proyecto
1291
+
1292
+ # Previsualizar sin escribir
1293
+ g360 docs --level all --dry-run
1294
+ ```
1295
+
1296
+ ---
1297
+
1298
+ ### `g360 lint`
1299
+
1300
+ Revisa la consistencia de nomenclatura, detecta funciones duplicadas y verifica la sintaxis del proyecto.
1301
+
1302
+ ```bash
1303
+ g360 lint [level] [opciones]
1304
+ ```
1305
+
1306
+ **Niveles:**
1307
+
1308
+ | Nivel | Qué revisa |
1309
+ |---|---|
1310
+ | `naming` | Nomenclatura de funciones, clases, variables y archivos |
1311
+ | `duplicates` | Funciones duplicadas con nombres iguales o diferentes |
1312
+ | `syntax` | Errores de sintaxis en archivos JS y Python |
1313
+ | `structure` | Archivos faltantes (README.md, skill.json, manifest) |
1314
+ | `all` (default) | Todas las anteriores |
1315
+
1316
+ **Opciones:**
1317
+
1318
+ | Opción | Descripción | Valor por defecto |
1319
+ |--------|-------------|-------------------|
1320
+ | `--level <nivel>` | Nivel de lint | `all` |
1321
+ | `--project <ruta>` | Ruta del proyecto | `.` |
1322
+
1323
+ **Ejemplos:**
1324
+
1325
+ ```bash
1326
+ # Revisar todo el proyecto
1327
+ g360 lint
1328
+
1329
+ # Solo revisar nomenclatura
1330
+ g360 lint --level naming
1331
+
1332
+ # Revisar un proyecto específico
1333
+ g360 lint --project ./mi-proyecto
1334
+ ```
1335
+
1336
+ **Puntaje:** `g360 lint` asigna un puntaje de 0 a 100 basado en la cantidad de hallazgos.
1337
+
1338
+ ---
1339
+
1340
+ ### `g360 pptx`
1341
+
1342
+ Genera manuales y presentaciones en PowerPoint (.pptx) desde una app G360.
1343
+
1344
+ ```bash
1345
+ g360 pptx [ruta] [opciones]
1346
+ ```
1347
+
1348
+ **Opciones:**
1349
+
1350
+ | Opción | Descripción | Valor por defecto |
1351
+ |--------|-------------|-------------------|
1352
+ | `--mode <tipo>` | Modo de generacion (`manual`, `demo`, `onboarding`) | `manual` |
1353
+ | `--theme <nombre>` | Tema de marca (`g360`, `cipsa`) | auto-detected desde `skill.json` |
1354
+ | `--out <archivo>` | Ruta del archivo de salida | `{app-name}-manual.pptx` |
1355
+ | `--dry-run` | Solo muestra outline sin generar | `false` |
1356
+
1357
+ **Modos:**
1358
+
1359
+ | Modo | Proposito | Formato |
1360
+ |------|-----------|---------|
1361
+ | `manual` | Documentacion de usuario (A4 portrait) | Impresion/pdfs |
1362
+ | `demo` | Presentaciones comerciales (16:9) | Proyector/screens |
1363
+ | `onboarding` | Guia de inicio rapido | Pantalla |
1364
+
1365
+ **Ejemplos:**
1366
+
1367
+ ```bash
1368
+ # Generar manual A4 para app CIPSA (auto-detected desde skill.json)
1369
+ g360 pptx ../mi-app --mode manual
1370
+
1371
+ # Solo preview del outline
1372
+ g360 pptx . --dry-run
1373
+
1374
+ # Presentacion 16:9 con tema G360
1375
+ g360 pptx . --mode demo --theme g360 --out demo.pptx
1376
+
1377
+ # Onboarding en modo print
1378
+ g360 pptx . --mode onboarding --out onboarding.pptx
1379
+ ```
1380
+
1381
+ **Estructura generada (modo manual, A4):**
1382
+
1383
+ | # | Slide | Contenido |
1384
+ |---|-------|-----------|
1385
+ | 1 | Portada | Nombre + descripcion + version |
1386
+ | 2 | ¿Que es? | Proposito de la app |
1387
+ | 3 | Instalacion | Pasos de inicio |
1388
+ | 4 | Dashboard | Screenshot principal (placeholder si no hay) |
1389
+ | 5-N | Features | Una por modulo UI detectado |
1390
+ | N+1 | Flujos | Modals y workflows |
1391
+ | N+2 | Arquitectura | Diagrama por capas |
1392
+ | N+3 | Buenas practicas | Checklist de uso |
1393
+ | N+4 | Resumen | Sintesis final |
1394
+
1395
+ **Screenshots:**
1396
+
1397
+ Colocar imagenes en `assets/screenshots/` para inclusion automatica:
1398
+ - `dashboard.png` vista principal
1399
+ - `kpi-card.png`, `modal-export.png` componentes relevantes
1400
+
1401
+ Si no hay screenshots, se generan placeholders con marco punteado.
1402
+
1403
+ **Temas disponibles:**
1404
+
1405
+ - **`g360`**: Esmeralda #10B981, fondo claro
1406
+ - **`cipsa`**: Verde CIPSA #00d084, logo corporativo incluido
1407
+
1408
+ ---
1409
+
1410
+ ## Integracion con OpenCode
1411
+
1412
+ g360-cli incluye integración con **OpenCode** para desarrollo asistido por IA. Esta integración permite que los agentes de IA tengan acceso a los recursos de g360-cli durante el desarrollo.
1413
+
1414
+ ### Archivo de Skill
1415
+
1416
+ El archivo `G360-CLI-SKILL.md` contiene toda la información necesaria para que OpenCode:
1417
+
1418
+ - **Recomiende skills apropiados** basándose en el tipo de proyecto
1419
+ - **Sugiera snippets** relevantes para el contexto de desarrollo
1420
+ - **Aplique convenciones** del ecosistema G360 automáticamente
1421
+ - **Genere código** siguiendo los patrones G360
1422
+ - **Valide compliance** con los estándares G360
1423
+
1424
+ ### Configuración de OpenCode
1425
+
1426
+ El archivo `opencode-config.json` contiene la configuración de integración con OpenCode, incluyendo:
1427
+
1428
+ - Rutas a los recursos de g360-cli
1429
+ - Comandos disponibles para ejecución
1430
+ - Convenciones de desarrollo del ecosistema
1431
+ - Configuración de colores y formato
1432
+
1433
+ ### Uso con OpenCode
1434
+
1435
+ Para usar g360-cli con OpenCode:
1436
+
1437
+ 1. **Asegúrate de tener el repo local**:
1438
+ ```bash
1439
+ cd "C:\Users\ccusi\Documents\Proyect_Coder\G360-ecosystem\projects\g360-cli"
1440
+ ```
1441
+
1442
+ 2. **Ejecuta comandos g360**:
1443
+ ```bash
1444
+ node src/cli.js list
1445
+ node src/cli.js init <nombre> -t <template> -s <skill>
1446
+ ```
1447
+
1448
+ 3. **OpenCode puede acceder a los recursos**:
1449
+ - Skills de identidad visual
1450
+ - Snippets de código reutilizables
1451
+ - Plantillas de proyecto estandarizadas
1452
+ - Componentes G360 predefinidos
1453
+ - Convenciones de desarrollo
1454
+
1455
+ ### Ejemplos de Interacción
1456
+
1457
+ #### Crear Nuevo Proyecto
1458
+
1459
+ ```
1460
+ Usuario: "Quiero crear una app web para un cliente corporativo"
1461
+ OpenCode: "Te recomiendo usar el skill 'corporativo-movil' con la plantilla 'web-pwa'.
1462
+ ¿Quieres que inicialice el proyecto con g360 init mi-proyecto --skill corporativo-movil --template web-pwa?"
1463
+ ```
1464
+
1465
+ #### Agregar Componente
1466
+
1467
+ ```
1468
+ Usuario: "Necesito un botón con estilo G360"
1469
+ OpenCode: "Puedo usar el snippet 'g360-button' que incluye los estilos G360 estándar.
1470
+ Aquí está el código: <button class='g360-btn'>Click</button>"
1471
+ ```
1472
+
1473
+ #### Validar Compliance
1474
+
1475
+ ```
1476
+ Usuario: "Verifica si este proyecto cumple con los estándares G360"
1477
+ OpenCode: "Ejecutaré g360 audit para verificar compliance y te reportaré cualquier problema encontrado."
1478
+ ```
1479
+
1480
+ ### Recursos Disponibles
1481
+
1482
+ #### Skills de Identidad Visual
1483
+
1484
+ - `corporativo` - Proyectos para clientes - estilo corporativo conservador (PC)
1485
+ - `corporativo-movil` - Proyectos para clientes - estilo corporativo - enfoque móvil
1486
+ - `corporativo-g360` - Proyectos para clientes con colores G360 vibrantes (PC)
1487
+ - `corporativo-g360-movil` - Proyectos para clientes con colores G360 - enfoque móvil
1488
+ - `moderno` - Herramientas propias G360 - estilo innovador (PC)
1489
+ - `moderno-movil` - Herramientas propias G360 - estilo innovador (móvil)
1490
+ - `minimalista` - Proyectos minimalistas - scripts, CLI, Python
1491
+ - `custom` - Configuración personalizada - colores ajustables
1492
+ - `flet-desktop` - Aplicaciones de escritorio Flet - estilo moderno G360 (PC)
1493
+ - `flet-desktop-corporativo` - Aplicaciones Flet para clientes - estilo corporativo conservador
1494
+ - `cipsa` - Proyectos con marca CIPSA - favicon CIPSA rojo, logo corporativo
1495
+ - `cipsa-movil` - Apps móviles con marca CIPSA - enfoque móvil
1496
+
1497
+ #### Snippets de Código
1498
+
1499
+ **Python CLI**: `cli-argparse-basic`, `cli-subcommands`, `cli-logging`, `cli-config-json`, `cli-progress-bar`, `cli-env-config`, `cli-exit-codes`
1500
+
1501
+ **Web Components**: `g360-header`, `g360-button`, `g360-card`, `g360-badge`
1502
+
1503
+ **Flet Components**: `flet-page`, `flet-card`, `flet-button`, `flet-nav-rail`, `flet-datatable`, `flet-dialog`, `flet-chart-bar`
1504
+
1505
+ #### Plantillas de Proyecto
1506
+
1507
+ - `web-pwa` - Progressive Web App with offline support
1508
+ - `svelte-web` - Svelte web application
1509
+ - `solid-web` - SolidJS web application
1510
+ - `lit-web` - Lit web application
1511
+ - `python-cli` - Python command-line tool
1512
+ - `python-flet` - Python desktop app with Flet framework
1513
+ - `python-flet-migrate` - Migrate tkinter/ctkinter app to Flet
1514
+ - `python-customtkinter` - Python desktop app with CustomTkinter
1515
+
1516
+ ### Actualización del Skill
1517
+
1518
+ Para mantener la integración con OpenCode actualizada:
1519
+
1520
+ 1. **Sincronizar con g360-cli**: Actualizar `G360-CLI-SKILL.md` cuando se agreguen nuevos skills o snippets
1521
+ 2. **Validar comandos**: Verificar que los comandos de g360-cli funcionen correctamente
1522
+ 3. **Documentar cambios**: Agregar nuevas funcionalidades a la documentación
1523
+ 4. **Testing**: Probar las integraciones con OpenCode regularmente
1524
+
1525
+ ### Referencias
1526
+
1527
+ - **G360-CLI-SKILL.md**: Documentación completa del skill para OpenCode
1528
+ - **opencode-config.json**: Configuración de integración con OpenCode
1529
+ - **AGENTS.md**: Guías de desarrollo para agentes en el ecosistema G360
1530
+
1531
+ ---
1532
+
1533
+ ## Enlaces
1534
+
1535
+ - [npm](https://www.npmjs.com/package/g360-cli)
1536
+ - [GitHub](https://github.com/carloscus/g360-cli)
1537
+ - [Documentación](#)
1538
+ - [Reportar Issue](https://github.com/carloscus/g360-cli/issues)
1539
+ ---
1540
+
1541
+ **Marca**: G360 · Microherramientas para apoyo CRM y datos en escritorio
1542
+ **Isotipo**: 3 puntos verticales paralelos (gris-verde-gris) + chevron `>`
1543
+ **Signature**: G360 by ccusi (`mode: own`, definido en `brand/g360/signature`)
1544
+ **Powered by**: [g360-signature](https://github.com/carloscus/g360-signature)
1545
+
1546
+ > Identidad generada desde `src/assets/brand/brand.json` (Brand System v2.0.0).
1547
+ > El logo arriba usa `<picture>` con `prefers-color-scheme` para light/dark.