diff --git a/CLAUDE.md b/CLAUDE.md
index d07033a..954c9aa 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -10,7 +10,7 @@ comprimido (versión antigua)**.
## Versión y control de versiones
-- **Versión actual: 2.1.8.0** (rama `limpieza-2.1.8.0`; `main` = 2.1.7.0) (`Net.Business.Services.csproj`: `Version`,
+- **Versión actual: 2.1.9.0** (rama `limpieza-2.1.8.0`; `main` = 2.1.7.0) (`Net.Business.Services.csproj`: `Version`,
`AssemblyVersion`, `FileVersion`). Cada versión tiene su commit; al publicar
se sube la versión (ver `publicar.ps1`).
- **Git**: rama `main`, remoto `origin` =
@@ -106,6 +106,22 @@ transferencias siempre, sin depender de `Notificacion`. Detalle y tabla en
mantiene su bug del 204 (sin marcar éxito; el único llamador ignora el resultado).
La transferencia automática de stock de la NC (3 copias en Picking x2 y Recibo)
pasó a un solo método: `Net.Data/ServicesLayer/StockTransfer/TransferenciaAutomaticaNC.Crear`.
+- **v2.1.9.0 — Transferencia desde ALM99 (importaciones)**: WMS recibe por partes; cada
+ entrada de mercadería (base: factura de reserva, `BaseType 18`) va a `ALM99` y, tras el
+ costeo, WMS notifica **una transferencia por entrada** enviando en `NumOrden` el `DocNum`
+ de la factura de reserva y en el detalle los artículos/cantidades de esa entrada. Si el
+ JSON no trae `DocEntryEM`, `TransferenciaRepository` busca por HANA
+ (`HelperInvoice.GetEntradasPorFactura`: `OPCH.isIns='Y'` → `PDN1` → `OPDN`, sin anuladas;
+ una entrada ya tiene transferencia si la línea tiene `TargetType 67` y su `OWTR` no está
+ anulada), compara **solo `ItemCode` y cantidad** (sumada por artículo) contra cada entrada y
+ transfiere la más antigua que coincida y no esté transferida (`EntradaImportacion.Elegir`).
+ Las líneas de la transferencia salen de la entrada (lotes reales, validando que cubran la
+ cantidad) con base en ella. Errores claros: ninguna coincide / todas ya transferidas. Si la
+ factura no tiene entradas se mantiene el comportamiento anterior (lotes del stock de HANA,
+ sin amarre). Con `DocEntryEM` informado se respeta (antes reventaba con referencia nula si
+ la entrada o la línea no existían). Sin probar contra SAP: validar la consulta, que
+ `isIns='Y'` sea factura de reserva y que SAP acepte `BaseType "PurchaseDeliveryNotes"` en
+ la línea de `StockTransfers`.
- Sin probar contra SAP: confirmar con la factura 292410 que SAP devuelve
`BaseType`/`BaseEntry` en las líneas y `BatchNumbers` en las de la Entrega.
diff --git a/Net.Business.Entities/WMS/Transferencia/BE_EntradaImportacionLinea.cs b/Net.Business.Entities/WMS/Transferencia/BE_EntradaImportacionLinea.cs
new file mode 100644
index 0000000..d8e732f
--- /dev/null
+++ b/Net.Business.Entities/WMS/Transferencia/BE_EntradaImportacionLinea.cs
@@ -0,0 +1,14 @@
+namespace Net.Business.Entities.WMS.Transferencia
+{
+ // Una linea de una Entrada de Mercaderia enlazada a una Factura de Reserva de proveedores (importacion).
+ // TransferenciaDocEntry > 0 cuando la linea ya tiene una transferencia de stock vigente (TargetType 67, no anulada).
+ public class BE_EntradaImportacionLinea
+ {
+ public int DocEntry { get; set; }
+ public int DocNum { get; set; }
+ public int LineNum { get; set; }
+ public string ItemCode { get; set; }
+ public decimal Quantity { get; set; }
+ public int TransferenciaDocEntry { get; set; }
+ }
+}
diff --git a/Net.Business.Services/Net.Business.Services.csproj b/Net.Business.Services/Net.Business.Services.csproj
index 5fa5f8d..8cc6fa8 100644
--- a/Net.Business.Services/Net.Business.Services.csproj
+++ b/Net.Business.Services/Net.Business.Services.csproj
@@ -4,8 +4,8 @@
netcoreapp3.1
ITCA_API_SAP_WMS
2.1.8
- 2.1.8.0
- 2.1.8.0
+ 2.1.9.0
+ 2.1.9.0
24763424-3300-4c85-87e3-503f8fdebd14