Skip to content

Commit eca6632

Browse files
committed
Add Agents Guide documentation for Integration Alegra WooCommerce
1 parent b98b0e4 commit eca6632

1 file changed

Lines changed: 202 additions & 0 deletions

File tree

AGENTS.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
# Integration Alegra WooCommerce - Agents Guide
2+
3+
## Overview
4+
5+
Plugin de WordPress/WooCommerce que integra el sistema contable y de facturación [Alegra](https://www.alegra.com/) con WooCommerce. Permite crear y emitir facturas electrónicas colombianas (DIAN) directamente desde el panel de administración de WooCommerce.
6+
7+
- **Versión**: 0.0.15
8+
- **PHP requerido**: >= 8.1
9+
- **WordPress**: >= 6.0
10+
- **WooCommerce**: >= 9.6
11+
- **Licencia**: GPL v3.0
12+
- **Autor**: Saúl Morales Pacheco
13+
14+
## Estructura del proyecto
15+
16+
```
17+
integration-alegra-woo.php # Punto de entrada del plugin
18+
includes/
19+
class-integration-alegra-wc-plugin.php # Bootstrapping, hooks, acciones WP/WC
20+
class-alegra-integration-wc.php # Configuración WC_Integration (settings)
21+
class-integration-alegra-wc.php # Lógica de negocio (facturas, clientes, productos)
22+
admin/
23+
settings.php # Campos de configuración principales (credenciales)
24+
other_settings.php # Campos adicionales (vendedor, impuestos, centro de costo)
25+
lib/
26+
src/Client.php # Cliente HTTP para la API de Alegra (Guzzle)
27+
vendor/ # Dependencias del cliente Alegra
28+
plugin-update-checker/ # Auto-actualización desde GitHub releases
29+
assets/js/
30+
field-dni-checkout.js # Validación de DNI en checkout frontend
31+
integration-alegra.js # Botón "Ver Factura" en admin (SweetAlert2)
32+
sweetalert2.min.js # Librería SweetAlert2
33+
tests/
34+
bootstrap.php # Bootstrap PHPUnit con WP test framework
35+
test-integration-alegra-wc.php # Tests de calculate_dv
36+
test-invoice-generation.php # Tests de generación de facturas
37+
test-client-management.php # Tests de gestión de clientes
38+
wp-config.php # Config de BD para tests
39+
```
40+
41+
## Arquitectura
42+
43+
### Flujo de inicialización
44+
45+
1. `integration-alegra-woo.php` → hook `plugins_loaded``integration_alegra_wc_smp_init()`
46+
2. Verifica requisitos PHP >= 8.1
47+
3. Instancia singleton `Integration_Alegra_WC_Plugin``run_alegra()``run()`
48+
4. Carga autoloader, registra `WC_Alegra_Integration` como integración WC
49+
5. Registra todos los hooks y filtros de WordPress/WooCommerce
50+
51+
### Clases principales
52+
53+
| Clase | Responsabilidad |
54+
|-------|----------------|
55+
| `Integration_Alegra_WC_Plugin` | Bootstrap, registro de hooks, enqueue de scripts, acciones bulk, campos checkout |
56+
| `WC_Alegra_Integration` | Extiende `WC_Integration` — maneja la página de configuración en WooCommerce |
57+
| `Integration_Alegra_WC` | Lógica estática de negocio: facturación, sincronización de productos, gestión de clientes |
58+
| `Saulmoralespa\Alegra\Client` | Cliente HTTP para API REST de Alegra v1 |
59+
60+
### Flujo de facturación
61+
62+
1. Cambio de estado de pedido → `generate_invoice()` (hook `woocommerce_order_status_changed`)
63+
2. Valida: integración habilitada, estado coincide con configuración, no existe factura previa
64+
3. Obtiene DNI y tipo de documento del pedido (checkout blocks o clásico)
65+
4. Busca o crea contacto en Alegra
66+
5. Por cada item del pedido: busca o crea producto en Alegra por SKU
67+
6. Si hay envío: crea item de servicio con SKU `S-P-W`
68+
7. Crea factura con vendedor, centro de costo, impuestos configurados
69+
8. Guarda `_invoice_id_alegra` como meta del pedido
70+
71+
### Emisión DIAN (timbrado)
72+
73+
- Acción bulk en listado de pedidos: "Emitir facturas Alegra"
74+
- Máximo 10 facturas por lote (`MAX_INVOICES_TO_STAMP`)
75+
- Llama a `stampInvoices()` de la API de Alegra
76+
- Marca pedidos con `_invoice_emit_alegra` al confirmar
77+
78+
## API de Alegra
79+
80+
Base URL: `https://api.alegra.com/api/v1/`
81+
Autenticación: HTTP Basic Auth (email + token)
82+
83+
### Endpoints utilizados
84+
85+
| Método | Endpoint | Uso |
86+
|--------|----------|-----|
87+
| GET | `/invoices/{id}` | Obtener factura / PDF |
88+
| POST | `/invoices` | Crear factura |
89+
| POST | `/invoices/stamp` | Timbrar facturas (DIAN) |
90+
| GET | `/contacts` | Buscar contacto por identificación |
91+
| POST | `/contacts` | Crear contacto |
92+
| GET | `/items` | Buscar producto por referencia/SKU |
93+
| POST | `/items` | Crear producto |
94+
| PUT | `/items/{id}` | Editar producto |
95+
| GET | `/sellers` | Listar vendedores |
96+
| GET | `/cost-centers` | Listar centros de costo |
97+
| GET | `/taxes` | Listar impuestos |
98+
99+
## Campos de checkout
100+
101+
El plugin registra campos adicionales en el checkout de WooCommerce:
102+
103+
- **Tipo de documento** (`document/type_document`): select con opciones CC, NIT, CE, DIE, TE, PP, TI, RC, FOREIGN_NIT
104+
- **Número de documento** (`document/dni`): campo numérico, patrón `[0-9]{5,12}`
105+
106+
Compatible con checkout clásico y checkout por bloques de WooCommerce.
107+
108+
### Meta keys del pedido
109+
110+
- `_billing_type_document` / `_shipping_type_document`
111+
- `_billing_dni` / `_shipping_dni`
112+
- `_invoice_id_alegra` — ID de factura en Alegra
113+
- `_invoice_emit_alegra` — Flag de factura timbrada en DIAN
114+
115+
## Configuración del plugin
116+
117+
Ruta admin: **WooCommerce → Ajustes → Integración → Integration Alegra Woocommerce**
118+
119+
### Credenciales
120+
121+
- `enabled`: Activar/Desactivar integración
122+
- `debug`: Modo depuración (logs en WooCommerce → Estado)
123+
- `user`: Email de cuenta Alegra
124+
- `token`: Token API de Alegra (se valida contra la API al guardar)
125+
126+
### Facturación
127+
128+
- `order_status_generate_invoice`: Estado del pedido que dispara la factura
129+
- `status_generate_invoice`: Estado de la factura en Alegra (borrador/abierto)
130+
- `seller_generate_invoice`: Vendedor asociado (requerido)
131+
- `cost_center_generate_invoice`: Centro de costo (opcional)
132+
- `tax`: IVA aplicado a productos
133+
- `shipping_tax`: IVA aplicado al envío
134+
135+
### Clientes y productos
136+
137+
- `allow_create_clients`: Crear clientes automáticamente en Alegra
138+
- `allow_create_products`: Crear productos automáticamente en Alegra
139+
- `dni_field`: Meta key personalizada para campo DNI (default: `_billing_dni`)
140+
141+
## Testing
142+
143+
### Requisitos
144+
145+
- PHPUnit 9.x
146+
- WordPress test framework (`wp-phpunit`)
147+
- MySQL/MariaDB
148+
- WooCommerce instalado como plugin hermano
149+
150+
### Comandos
151+
152+
```bash
153+
make test # Todos los tests
154+
make test-calculate-dv # Tests de cálculo DV
155+
make test-invoice # Tests de generación de facturas
156+
make test-client # Tests de gestión de clientes
157+
```
158+
159+
### Suites de tests
160+
161+
- **Test_Integration_Alegra_WC**: Validación del cálculo del dígito de verificación (DV) para NITs colombianos
162+
- **Test_Invoice_Generation**: Generación de facturas (estados, duplicados, validaciones)
163+
- **Test_Client_Management**: Construcción de datos de contacto, extracción de DV, manejo de tipos de documento
164+
165+
### Ejecución local
166+
167+
```bash
168+
# Configurar variable de entorno
169+
export WP_TEST__DIR=/ruta/al/directorio/wp-tests
170+
171+
# Ejecutar
172+
vendor/bin/phpunit --testdox
173+
```
174+
175+
### CI/CD
176+
177+
- **tests.yml**: Ejecuta tests en push/PR a `main` (PHP 8.1, MySQL 5.7)
178+
- **release.yml**: Crea release en GitHub al pushear tags `v*`
179+
180+
## Linting
181+
182+
```bash
183+
composer phpcs # WordPress Coding Standards check
184+
composer phpcbf # Auto-fix
185+
composer phpcs-check # Solo directorio includes/
186+
```
187+
188+
Configuración en `phpcs.xml`. Prefijos globales requeridos: `integration_alegra` / `Integration_Alegra`.
189+
190+
## Convenciones de código
191+
192+
- **Namespaces**: Solo la librería client usa namespace (`Saulmoralespa\Alegra`). Las clases del plugin son globales
193+
- **Métodos estáticos**: `Integration_Alegra_WC` usa exclusivamente métodos estáticos
194+
- **Singleton**: `Integration_Alegra_WC_Plugin` se instancia una sola vez via `integration_alegra_wc_smp()`
195+
- **Logging**: Usar `integration_alegra_wc_smp()->log($message, $level)` — escribe en logs de WooCommerce con source `integration-alegra`
196+
- **Settings**: Se almacenan en `wp_options` con key `woocommerce_wc_alegra_integration_settings`
197+
- **Sanitización**: Inputs via `sanitize_text_field()`, nonces con `wp_verify_nonce()`
198+
- **Compatibilidad HPOS**: Declarada via `FeaturesUtil::declare_compatibility('custom_order_tables')`
199+
200+
## Actualización automática
201+
202+
El plugin usa `plugin-update-checker` para actualizarse desde GitHub releases del repositorio `saulmoralespa/integration-alegra-woo` (rama `main`).

0 commit comments

Comments
 (0)