ahora se procesa de inicio a fin correo por correo

This commit is contained in:
George committed 2026-07-09 09:48:30 -05:00
1 parent 99b7caf535
commit 7fa7204442
25 files changed
+2234 -334

No files matched your search

+33
View File
@@ -0,0 +1,33 @@
# Construir Draft SAP B1
```mermaid
flowchart TD
A["factura + resultados_val"] --> B["Determinar ItemCode<br>C103002-A (mes anterior)<br>C103002 (mes actual)"]
B --> C["Calcular cuotas<br>DocumentInstallments"]
C --> D{"¿Tiene detracción?"}
D -->|Sí| E["Cuota 1: monto detracción<br>U_VS_TIPOCUOTA = D"]
E --> F["Cuota 2: neto = total - detracción<br>U_VS_TIPOCUOTA = N"]
D -->|No| G["Cuota única por el total<br>U_VS_TIPOCUOTA = N"]
F --> H["Por cada línea de factura"]
G --> H
H --> I["Obtener guias_lt[]<br>desde resultado_validacion"]
I --> J["zona_guia = guias_lt[0]['zona']"]
J --> K["Por cada item en guias_lt[]"]
K --> L["PriceAfterVAT:<br>suma pav FL* si use_sap_prices<br>line_total si no"]
L --> M["Qty = item['quantity']"]
M --> N["Crear DocumentLine:<br>ItemCode, Quantity,<br>PriceAfterVAT, WarehouseCode,<br>U_IDC_GRFLETE"]
N --> O["Acumular total_weight<br>+= item['weight1']"]
O --> K
K --> P["U_IDC_VALREF =<br>round((total_weight / 1000) *<br>CUADRO_VALOR_REFERENCIAL[zona], 2)"]
P --> Q["Armar payload completo"]
Q --> R["Cabecera:<br>DocType, CardCode, NumAtCard,<br>DocDate, DocDueDate,<br>U_IDC_NUMGR, Comments"]
R --> S["DocumentLines[] +<br>DocumentInstallments[]"]
S --> T["← Retornar dict para<br>POST /Drafts"]
```
+29
View File
@@ -0,0 +1,29 @@
# Pipeline Completo
```mermaid
flowchart TD
A["📬 Correo recibido"] --> B{"1-2. BD check<br>¿Ya procesado?"}
B -->|"Sí"| C["⏭️ Saltar correo"]
B -->|"No"| D["3. Descargar adjuntos<br>Microsoft Graph"]
D --> E{"¿Hay adjuntos?"}
E -->|No| C
E -->|Sí| F["4. Descomprimir ZIPs"]
F --> G["5. Filtrar solo PDF/XML"]
G --> H{"¿Quedan válidos?"}
H -->|No| C
H -->|Sí| I["6. Procesar PDFs<br>extraer datos + renombrar"]
I --> J["7. Procesar XMLs<br>cruzar con PDF cache"]
J --> K["8. Guardar resultado JSON"]
K --> L["9. Filtrar facturas tipo 01"]
L --> M{"¿Hay facturas?"}
M -->|No| N["⏭️ Sin facturas para SAP"]
M -->|Sí| O["10. Validar precios<br>_validate_prices()"]
O --> P["11. Construir draft SAP<br>_build_sap_draft()"]
P --> Q["12. Guardar draft JSON"]
Q --> R{"13. ¿Precios coinciden?"}
R -->|Sí| S["Crear Draft en SAP B1<br>POST /Drafts"]
R -->|No| T["Notificar: validación falló"]
S --> U["14. Enviar email notificación"]
T --> U
N --> U
```
+37
View File
@@ -0,0 +1,37 @@
# Validar Precios
```mermaid
flowchart TD
A["factura con lineas[]"] --> B["Obtener maestro zonas<br>SAP U_IDC_ZONAS"]
B --> C["Por cada línea de factura"]
C --> D{"cantidad > 0?"}
D -->|No| E["Resultado: cantidad cero, sin validar"]
D -->|Sí| F{"¿Hay guías de remisión?"}
F -->|No| G["Resultado: sin guía de referencia"]
F -->|Sí| H["Por cada guía en guias[]"]
H --> I["Consultar SAP B1<br>get_delivery_notes()"]
I --> J["Por cada DeliveryNote"]
J --> K["Obtener zona desde<br>U_IDC_DESTINO"]
K --> L["Extraer WarehouseCode<br>de DocumentLines[0]"]
L --> M["Acumular Weight1<br>de DocumentLines[0]"]
M --> N["Por cada línea FL* en<br>DocumentLines"]
N --> O["Sumar LineTotal"]
O --> P["Máx Quantity"]
P --> Q["Sumar PriceAfterVAT"]
Q --> R["Construir guias_lt[]<br>para cada guía:<br>line_total, quantity,<br>price_after_vat_sum,<br>warehouse_code, zona, weight1"]
R --> S["Comparar total_linea (XML)<br>vs sap_total (FL*)"]
S --> T{"abs(diff) < 0.01?"}
T -->|Sí| U["ok = True<br>use_sap_prices si qty==1<br>y total_sap_qty≠1"]
T -->|No| V["ok = False"]
U --> W["Resultado por línea:<br>ok, draft_price, sap_price,<br>draft_cantidad, guias_lt[]"]
V --> W
W --> C
C --> X["todas_coinciden = all(ok)"]
```