DESPACHO y PICKING vuelven a generar nota de crédito sin depender de Notificacion. Documentada la regla Proceso + Notificacion. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
5.8 KiB
ITCA_API_SAP_WMS (.NET) — proyecto principal
API de integración WMS ↔ SAP Business One, ASP.NET Core 3.1. Para
build/publish/despliegue en IIS ver README.md.
Esta carpeta (backend_octubre) es el proyecto vigente. Antes existía
una copia paralela, ITCA_API_SAP_WMS, con la funcionalidad nueva portada
desde la reescritura Python; se portó aquí y esa copia quedó archivada en un
comprimido (versión antigua). No hay git en esta carpeta.
Qué se portó desde ITCA_API_SAP_WMS (2026-10-05)
Detalle técnico en docs/PORTE_FUNCIONALIDAD_NUEVA.md,
docs/SOLICITUD_TRANSFERENCIA.md y docs/PICKING.md.
- SolicitudTransferencia:
PATCH /api/SolicitudTransferencia/{docEntry}yPOST /api/SolicitudTransferencia/{docEntry}/cerrar. - Picking diurno/nocturno: campo
Notificacion(early-return enPickingRepository.CreatetrasHelperProcesoPiciking.Set, solo paraProceso = "ULTIMA MILLA"; DESPACHO/PICKING generan NC sin depender de él) yPOST /api/Picking/HojaRuta/{docEntry}/Cerrar. ConnectionServiceLayer:PatchNoContentAsyncyPostActionAsync(métodos nuevos; los existentes no se tocaron).
Regla Proceso + Notificacion (v2.1.2.0)
Notificacion = "cierre" se exige solo si Proceso = "ULTIMA MILLA"
(si no, solo actualiza estado en HANA). DESPACHO y PICKING generan NC y
transferencias siempre, sin depender de Notificacion. Detalle y tabla en
docs/PICKING.md.
Cambios de configuración y correcciones hechas en esta carpeta
- Credenciales y esquema HANA en
appsettings.json, secciónHana(server,user,password,schemaopcional), leída porLocalData.ConfiguredesdeStartup. Antes estaban fijas en el código (LocalData.cs,Log/B_Log.cs). El esquema sale deHana:schemao, si no está, deSapServiceLayer:company; si falta la secciónHanao el esquema, la app no arranca (error claro). Ya no hayDB_NAMEfijo. - Precio promedio solo en entradas (
TipoMovimiento "01") enInventarioRepository.Create(los dos chequeos:SubAlmacenyAlmacen). Si el artículo no tiene stock, se conserva elPrecioPromediodel request en vez de abortar con "No existe stock disponible para el articulo X" (ese error bloqueaba ingresos de artículos sin stock previo). En salidas ya no se busca el promedio:PriceAfterVATlleva el precio del request. El chequeo de stock de la rama de salida dePickingRepository(~línea 363) no se tocó. - Lote de 100 líneas (
InventarioRepository.Create):var Inventario = entidadreutilizaba el mismo objeto, y con más de 100 líneas se generaban N documentos iguales con el último bloque. Ahora se crea una copia por bloque y la rama de salida leeentidad_inventario.Detalle. - SQL injection: parametrizadas las consultas de
HelperProcesoPiciking,HelperStock,HelperInventario,HelperInvoice,HelperCorrelativo,HelperHojaRutayHelperProcesoPermitido(?+HanaParameter). El esquema sigue interpolado (viene de configuración, no del request). ITCA_API_SAP_WMS.xmlahora se genera también en Release (sin eso Swagger revienta conFileNotFoundExceptionen unpublish -c Release).
Funcionalidad propia de esta carpeta (no existe en la copia antigua)
Hoja de Ruta (HojaRutaController, HRRepository, GlobalDataRepository),
reapertura de facturas (InvoiceRepository.ReOpen, PostReOpen), notas de
crédito con documentos de referencia, cierre automático de la solicitud de
traslado en Transferencia (PostClose), Latitud/Longitud y reproceso en
Picking, columna HORA en B_Log. Lo que no se trajo: Chatbots y
MessageController (solo existen en la copia archivada).
Sin verificar
- Nada se probó contra SAP/HANA reales. Solo se verificó que compila (0 errores) y que el publish se genera.
- La sintaxis
CALL "esquema"."proc"(?, ?)con parámetros no está probada con el driver HANA 2.1; si falla con un error de parámetro, mirar primero ahí. - Para probar el lote de 100: un inventario de >100 líneas (p. ej. 250) debe generar 3 documentos (100/100/50) sin repetir ni perder líneas, tanto en entradas como en salidas.
Bugs conocidos, sin corregir
BE_ResultadoTransaccion<T>.NombreEstacion: setter con recursión infinita (bomba de tiempo; hoy nada lo asigna).ConnectionServiceLayer.PatchAsyncSBA<T>: con un204real devuelvenullsin marcar éxito.Login()/LoginPost()duplicados;throwinalcanzable trasreturnen varioscatch.ValidarCertificadoacepta cualquier certificado TLS (siempretrue).HelperDB.SET(string query)ejecuta SQL arbitrario; hoy sin llamadores (candidato a borrar).appsettings.jsonversionado en texto plano con credenciales reales (SAP Service Layer, HANAB1ADMIN, semilla JWT). Rotar la contraseña deB1ADMIN(estuvo en el código fuente) y evaluar un usuario HANA de mínimos permisos.
Despliegue
Sitio IIS previsto: /integracion (antes /integracion_wms). Publicar con
el comando del README sin pisar el appsettings.json del servidor; agregar
a ese archivo la sección Hana y revisar SapServiceLayer:company (determina
contra qué base lee y escribe). El web.config generado por dotnet publish
usa processPath=".\ITCA_API_SAP_WMS.exe"; el del código fuente apunta a
bin\Debug\... (solo para sitios que corren desde el código compilado).
Pendiente
- Probar en QA: endpoints nuevos (SolicitudTransferencia,
Notificacion,HojaRuta/Cerrar), un ingreso sin stock previo, el lote de 100 y las consultas parametrizadas. - Verificar que existan en el esquema del sitio los procedimientos
ITCA_*y las tablas@ITCA_PROWMS,@SYP_MOTIVOS,@SYP_NUMDOC. - Decidir si se corrigen los bugs de la lista de arriba.