# Validar Precios ```mermaid flowchart TD A["factura con lineas[]"] --> B["Obtener maestro zonas
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
get_delivery_notes()"] I --> I2{"¿Guía encontrada en
ODLN o en OWTR?"} I2 -->|ODLN| I3["Documento = DeliveryNotes(DocEntry)"] I2 -->|OWTR| I4["Documento = StockTransfers(DocEntry)
→ leer U_IDC_NUMOV
→ Documento = Orders(U_IDC_NUMOV)"] I3 --> J["Por cada documento
(DeliveryNote u Orden de Venta)"] I4 --> J J --> K["Obtener zona desde
U_IDC_DESTINO"] K --> L["Extraer WarehouseCode
de DocumentLines[0]"] L --> M["Acumular Weight1
de DocumentLines[0]"] M --> N["Por cada línea FL* en
DocumentLines"] N --> O["Sumar LineTotal"] O --> P["Máx Quantity"] P --> Q["Sumar PriceAfterVAT"] Q --> R["Construir guias_lt[]
para cada guía:
line_total, quantity,
price_after_vat_sum,
warehouse_code, zona, weight1"] R --> S["Comparar total_linea (XML)
vs sap_total (FL*)"] S --> T{"abs(diff) < 0.01?"} T -->|Sí| U["ok = True
use_sap_prices si qty==1
y total_sap_qty≠1"] T -->|No| V["ok = False"] U --> W["Resultado por línea:
ok, draft_price, sap_price,
draft_cantidad, guias_lt[]"] V --> W W --> C C --> X["todas_coinciden = all(ok)"] ```