se agrega README y se completa y corrige la documentación
README en la raíz con instalación, uso, estructura e índice de docs. Nuevos docs/hana_manager.md y docs/outlook_utilities.md. Se renombran los .mkd a .md y se corrigen construir_draft y validar_precios, que describían lógica ya inexistente (CUADRO_VALOR_REFERENCIAL, use_sap_prices). Se actualizan los docstrings obsoletos y las cifras de líneas del inventario. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
74be942a3e
commit
b1b6f70983
9 files changed
+249
-60
No files matched your search
@@ -0,0 +1,48 @@
|
||||
# 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 --> I2{"¿Guía encontrada en<br>ODLN o en OWTR?"}
|
||||
I2 -->|ODLN| I3["Documento = DeliveryNotes(DocEntry)"]
|
||||
I2 -->|OWTR| I4["Documento = StockTransfers(DocEntry)<br>→ leer U_IDC_NUMOV<br>→ Documento = Orders(U_IDC_NUMOV)"]
|
||||
I3 --> J["Por cada documento<br>(DeliveryNote u Orden de Venta)"]
|
||||
I4 --> J
|
||||
|
||||
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<br>y ninguna guía falló?"}
|
||||
T -->|Sí| U["ok = True<br>draft_quantity = int(Quantity máx FL*)<br>draft_price = suma PriceAfterVAT FL*"]
|
||||
T -->|No| V["ok = False<br>draft_quantity = int(cantidad XML)<br>draft_price = total_linea / cantidad"]
|
||||
|
||||
U --> W["Resultado por línea:<br>ok, draft_price, sap_price,<br>label, warehouse_code, guias_lt[]"]
|
||||
V --> W
|
||||
W --> C
|
||||
C --> X["todas_coinciden = all(ok)"]
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
- Si la consulta a SAP de una guía lanza error, esa guía queda con ceros y la línea completa se marca `ok = False` (se registra como `WARNING`).
|
||||
- Si ninguna guía de la línea existe en SAP, el resultado lleva `label = "Sin guías SAP"` y se registra "línea saltada", pero igual queda `ok = False` (salvo que `total_linea` sea 0), por lo que `todas_coinciden` es falso y no se crea el draft.
|
||||
- `weight1` (peso de la primera línea de cada guía) se sigue calculando y guardando en `guias_lt[]`, pero el draft ya no lo usa.
|
||||
- Función: `draft_sap.validate_prices(factura)` → `(todas_coinciden, resultados)`.
|
||||
Reference in new issue
Block a user