# Informe de Consultas a SQL Server - Migración a SAP

## Resumen Ejecutivo
Este documento detalla todas las consultas, tablas, vistas y procedimientos almacenados que la aplicación actual realiza contra la base de datos SQL Server. Esta información es crítica para solicitar a SAP los endpoints o vistas equivalentes y las estructuras de datos necesarias (columnas, tipos de filtro).

## 1. Tablas y Vistas Externas a Migrar (Fuentes Principales)
Estas son las tablas pertenecientes al ERP actual (Exactus, Vendelo, Presupuesto) que deberán ser sustituidas por llamadas a la API de SAP o vistas equivalentes proporcionadas por ellos.

### 1.1 `EXACTUSFACTURA_DS` (ERP Softland Exactus)
**Propósito:** Consultar la existencia y cabecera de las facturas (para validaciones y asignaciones al cliente).
- **Filtros / Condiciones (`WHERE`):**
  - `FACTURA`: Número de factura a buscar.
  - `TIPO_DOCUMENTO`: Filtrado con valor estático `'F'`.
  - `ANULADA`: Filtrado con valor estático `'N'`.
- **Columnas Consultadas:**
  - `CLIENTE`
  - `FACTURA`

### 1.2 `EXACTUSFACTURADETALLE_DS` (ERP Softland Exactus)
**Propósito:** Obtener el detalle de los productos vendidos (artículos y cantidades) asociados a una factura.
- **Filtros / Condiciones (`WHERE`):**
  - `FACTURA`: Número de la factura correspondiente.
  - `TIPO_DOCUMENTO`: Filtrado con valor estático `'F'`.
  - `ANULADA`: Filtrado con valor estático `'N'`.
  - `ARTICULO`: Búsqueda múltiple (`IN`) por un arreglo de IDs de productos controlados.
- **Columnas Consultadas:**
  - `ARTICULO`
  - `FACTURA`
  - `CANTIDAD`: (Se realiza una agregación `SUM(CANTIDAD)` agrupada por Artículo y Factura).

### 1.3 `EXACTUSCLIENTES_DS` (ERP Softland Exactus)
**Propósito:** Obtener la información general del cliente (Farmacias) para la impresión de recibos y detalles en la vista.
- **Filtros / Condiciones (`WHERE`):**
  - `CLIENTE`: Código único del cliente.
- **Columnas Consultadas:**
  - `CLIENTE`
  - `NOMBRE`
  - `DIRECCION`
  - `CONTRIBUYENTE`
  - `DIVISION_GEOGRAFICA3`
  - `U_FORMULARIODNCD`

### 1.4 `EXACTUSCIUDAD` (ERP Softland Exactus)
**Propósito:** Obtener el nombre de la ciudad asociada a un cliente.
- **Filtros / Condiciones (`WHERE`):**
  - `DIVISION_GEOGRAFICA3`: Relacionado con el campo `DIVISION_GEOGRAFICA3` del cliente.
- **Columnas Consultadas:**
  - `NOMBRE`

### 1.5 `VentaListVendelo` (Ventas Consolidadas / Terceros)
**Propósito:** Listado consolidado de ventas, usado para comparar la venta de farmacias vs registros del sistema Vendelo.
- **Filtros / Condiciones (`WHERE`):**
  - `fecmov`: Rango de fechas (Ej: `CAST(fecmov AS DATE) >= ? AND <= ?`).
  - `CODCliente`: Filtrado por un código de cliente específico o listado (`IN`) de códigos de farmacias.
  - `codigoProducto`: Filtrado por código o listado (`IN`) de productos de interés.
- **Columnas Consultadas:**
  - `nombrezona`, `CODCliente`, `nombrecliente`, `nombrevendedor`, `codigovendedor`, `Factura`, `descripcionproducto`, `grupo`, `CantidadBruta`, `CantidadOferta`
  - `fecmov` (Casteado como `fecha_factura`).
  - `importeGeneral` (Agregado frecuentemente como `SUM(importeGeneral)`).

### 1.6 `list_articulo_ds` (Listado de Artículos)
**Propósito:** Sincronizar el catálogo de artículos desde el origen hacia la tabla local de artículos promocionales.
- **Filtros / Condiciones (`WHERE`):**
  - Ninguno (Se extrae todo el catálogo relevante).
- **Columnas Consultadas:**
  - `ARTICULO`
  - `DESCRIPCION`
  - `CLASIFICACION_1`

### 1.7 `dspresupuesto.dbo.Vendedor` (Base de Datos Externa de Presupuesto)
**Propósito:** Obtener la información descriptiva del vendedor (nombre, código) asociado a un recibo o venta de manera dinámica en los reportes.
- **Filtros / Condiciones (`WHERE`):**
  - `codigo`: Código interno del vendedor.
- **Columnas Consultadas:**
  - `Nombre` (y se consulta la fila completa `->first()`).

---

## 2. Procedimientos Almacenados (A migrar a endpoints transaccionales)
El proyecto ejecuta lógicas en el servidor SQL mediante los siguientes procedimientos almacenados. **Se debe solicitar a SAP el equivalente (API endpoint o función) que realice la misma validación lógica y retorne los mismos datos.**

### `ValidarPromoImportar`
- **Uso:** Importaciones masivas mediante Excel. Valida y calcula si una factura es elegible para aplicar el pago de la promoción.
- **Llamada Exacta:** `EXEC ValidarPromoImportar @vendedor = :param1, @cliente = :param2, @factura = :param3`
- **Parámetros de Entrada:**
  1. `@vendedor` (Código de vendedor)
  2. `@cliente` (Código de farmacia/cliente)
  3. `@factura` (Número de factura)
- **Columnas Retornadas (Dataset esperado):**
  - `FECHA`
  - `MONTOPROM`
  - `NOMBREC` (Nombre descriptivo del cliente)
  - `NOMBREV` (Nombre descriptivo del vendedor)

---

## 3. Tablas Locales (Sistema Interno de Promociones)
Estas tablas residen en la base de datos SQL Server actual (`DsSistema`). **Son propias del sistema de promociones pero muchas de ellas se "nutren" o sincronizan desde el ERP**. SAP deberá proveer APIs para mantener esta sincronía o reescribir la forma en que se obtienen en vivo.

- **`prom_cliente_ds_new`**: Maestros de clientes (Farmacias).
  - *Sincronización*: Puede ser mantenida vía API o edición local.
  - Campos principales consultados/llenados: `CLIENTE`, `NOMBRE`, `ALIAS`, `NIVEL_PRECIO`, `CARGO`, `DIRECCION`, `TELEFONO1`, `CONTRIBUYENTE`, `ZONA`, `VENDEDOR`, `banco`, `cedula`, `tipo_cuenta`.
- **`prom_articulo_ds`**: Catálogo de artículos promocionales.
  - *Sincronización*: Sincronizado desde `list_articulo_ds`.
  - Campos: `ARTICULO`, `DESCRIPCION`, `CLASIFICACION_1`, `PRECIO_BASE_LOCAL`, `unidad`.
- **`prom_resumen_ds`**: Consolidado general de ventas para el cálculo de pagos de promoción (resumen pagado o adeudado).
  - Campos: `VENDEDOR`, `NOMBREV`, `CLIENTE`, `NOMBREC`, `FACTURA`, `FECHA`, `ARTICULO`, `CANTIDAD`, `VALOR_PROMO`, `MONTOPROM`.
- **`prom_recibo_ds` / `prom_recibo_detalle_ds`**: Generación e historial de recibos para pago de promociones.
- **Tablas Auxiliares Internas**:
  - `cliente_data_extra`: Información bancaria de clientes (Banco, cuenta, cédula).
  - `clientes_excluidos`: Lista negra manual para el pago de promociones.
  - `prom_vendedores_list` y `prom_zona_list`.
  - `bancos`, `importacion_temporal`, `log_importacion`.

---

## 4. Resumen de Especificación para el Proveedor de SAP
Al solicitar a SAP las integraciones, se recomienda empaquetar estas consultas en los siguientes **endpoints REST / OData**:

1. **Endpoint de Verificación de Factura (`/sap/facturas/{id}`)**: Debe proveer los campos de la cabecera (cliente, tipo, anulada) y anidado su detalle de artículos (`ARTICULO`, `CANTIDAD`), reemplazando las consultas a `EXACTUSFACTURA_DS` y `EXACTUSFACTURADETALLE_DS`.
2. **Endpoint de Cliente (`/sap/clientes/{id}`)**: Debe proveer datos generales del cliente, y resolver automáticamente el cruce con la tabla `EXACTUSCIUDAD` para proveer la "Ciudad" directamente.
3. **Endpoint de Ventas Consolidado (`/sap/ventas`)**: Un endpoint capaz de filtrar por rango de fechas (`fecmov`), clientes y productos, que devuelva el consolidado agrupado, reemplazando a `VentaListVendelo`.
4. **Endpoint de Catálogo de Artículos (`/sap/articulos`)**: Para la sincronización masiva o delta de productos (reemplazo de `list_articulo_ds`).
5. **Endpoint de Validación de Promoción (`/sap/validar_promocion`)**: Un endpoint transaccional equivalente al Stored Procedure `ValidarPromoImportar` que reciba vendedor, cliente, factura y responda con el monto permitido y la validez de la promoción.
