Diccionario de datos de los modelos de COÉXITO
| 🏠 Menú principal | ← Volver a vistas simples |
Base de datos origen: ORCLSMM
Tipo de objeto: VIEW
CREATE OR REPLACE FORCE EDITIONABLE VIEW "SIMACMOBILE"."VW_INFORMACION_CREDITICIA" ("NIT", "SITE", "PARTY_SITE_NAME", "DESHABILITADO", "SALDO_CARTERA", "LIMITE_CREDITO", "EXCESO_CARTERA", "DIAS_MORA", "FACTURADO", "POR_FACTURAR") AS
WITH VALIDACION_MORA AS
(SELECT NIT,
MIN(FECHA_VENCIMIENTO) AS VENCIMIENTO_MAS_ANTIGUO,
TRUNC(SYSDATE) - TO_DATE(MIN(FECHA_VENCIMIENTO)) DIAS_VENCIMIENTO
FROM (SELECT VGM.NIT, FCE.FECHA_VENCIMIENTO, FCE.VALOR_SALDO
FROM SIMACMOBILE.CLIENTE_ERP VGM
LEFT JOIN SIMACMOBILE.FACTURA_CXC_ERP FCE
ON VGM.NIT = SUBSTR(FCE.SITE, 7, LENGTH(FCE.SITE) - 10)
WHERE TO_DATE(FCE.FECHA_VENCIMIENTO) < SYSDATE
AND FCE.VALOR_SALDO > 0
AND FCE.ID_CLERP IS NOT NULL)
GROUP BY NIT),
-- Query para el calculo de saldos pendiente
SALDOS_CLIENTE_INDIVIDUALES AS
(
-- Query que obtiene saldos de WhatsApp Comercial
SELECT CLIE.NIT,
ROUND(SUM(DEPE.PRECIO_UNITARIO * DEPE.CANTIDAD_PEDIDO), 2) AS SALDO
FROM SIMACMOBILE.CLIENTE_ERP CLIE
INNER JOIN SIMACMOBILE.WHCCIAL_ORDEN_PEDIDO ORPE
ON CLIE.ID_CLERP = ORPE.ID_CLERP
INNER JOIN SIMACMOBILE.WHCCIAL_ORDEN_PEDIDO_DETALLE DEPE
ON ORPE.ID_WHCCIALORD = DEPE.ID_WHCCIALORD
INNER JOIN SIMACMOBILE.MDF_ESTADO_PEDIDO_ERP ESPE
ON ESPE.ID_ESPEERP = ORPE.ID_ESPEERP
WHERE ESPE.CODIGO <> 'REJECTED'
AND ESPE.CODIGO <> 'COMPLETED'
AND ESPE.CODIGO IS NOT NULL
GROUP BY CLIE.NIT
UNION ALL
-- Query que obtiene saldos de Gestión de la Venta
SELECT CLIE.NIT, ROUND(SUM(DEPE.PRECIO_IMPORTE_TOTAL), 2) AS SALDO
FROM SIMACMOBILE.CLIENTE_ERP CLIE
INNER JOIN SIMACMOBILE.GVTA_ORDEN_PEDIDO ORPE
ON CLIE.ID_CLERP = ORPE.ID_CLERP
INNER JOIN SIMACMOBILE.GVTA_ORDEN_PEDIDO_PRODUCTO DEPE
ON ORPE.ID_GVTAORD = DEPE.ID_GVTAORD
INNER JOIN SIMACMOBILE.MDF_ESTADO_PEDIDO_ERP ESPE
ON ESPE.ID_ESPEERP = ORPE.ID_ESPEERP
WHERE ESPE.CODIGO <> 'REJECTED'
AND ESPE.CODIGO <> 'COMPLETED'
AND ESPE.CODIGO IS NOT NULL
GROUP BY CLIE.NIT
UNION ALL
-- Query que obtiene saldos de Gestión de Pedidos
SELECT CLIE.NIT, ROUND(SUM(GLOP.PRECIO_TOTAL), 2) AS SALDO
FROM SIMACMOBILE.CLIENTE_ERP CLIE
INNER JOIN SIMACMOBILE.GP_ORDEN_PEDIDO GOP
ON CLIE.ID_CLERP = GOP.ID_CLERP
INNER JOIN SIMACMOBILE.GP_LINEA_ORDEN_PEDIDO GLOP
ON GOP.ID_GPORDPE = GLOP.ID_GPORDPE
INNER JOIN SIMACMOBILE.MDF_ESTADO_PEDIDO_ERP ESPE
ON ESPE.ID_ESPEERP = GOP.ID_ESPEERP
WHERE ESPE.CODIGO <> 'REJECTED'
AND ESPE.CODIGO <> 'COMPLETED'
AND ESPE.CODIGO IS NOT NULL
GROUP BY CLIE.NIT
UNION ALL
---- Query que obtiene saldos de Pedidos Pendientes Oracle
SELECT PPE.NIT_CLIENTE NIT,
ROUND(SUM(
CASE
WHEN PPE.VENTA_UNITARIA IS NULL THEN 0
WHEN TRIM(PPE.VENTA_UNITARIA) IS NULL THEN 0
WHEN LENGTH(TRIM(PPE.VENTA_UNITARIA)) = 0 THEN 0
WHEN TRIM(PPE.VENTA_UNITARIA) = '0' THEN 0
ELSE
-- Extracción manual de números sin funciones problemáticas
(
CASE
WHEN INSTR(TRANSLATE(TRIM(PPE.VENTA_UNITARIA), '0123456789.,', '############..'), '#') > 0 THEN
-- Tiene al menos un dÃgito
CASE
WHEN INSTR(TRIM(PPE.VENTA_UNITARIA), ',') > INSTR(TRIM(PPE.VENTA_UNITARIA), '.')
AND INSTR(TRIM(PPE.VENTA_UNITARIA), ',') > 0 THEN
-- Formato europeo: 1.234,56
CAST(REPLACE(REPLACE(TRANSLATE(TRIM(PPE.VENTA_UNITARIA),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-=[]{}|;:"<>?/~`',
''), '.', ''), ',', '.') AS NUMBER)
WHEN INSTR(TRIM(PPE.VENTA_UNITARIA), '.') > INSTR(TRIM(PPE.VENTA_UNITARIA), ',')
AND INSTR(TRIM(PPE.VENTA_UNITARIA), '.') > 0 THEN
-- Formato americano: 1,234.56
CAST(REPLACE(TRANSLATE(TRIM(PPE.VENTA_UNITARIA),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-=[]{}|;:"<>?/~`',
''), ',', '') AS NUMBER)
WHEN INSTR(TRIM(PPE.VENTA_UNITARIA), ',') > 0
AND INSTR(TRIM(PPE.VENTA_UNITARIA), '.') = 0 THEN
-- Solo coma: 123,45
CAST(REPLACE(TRANSLATE(TRIM(PPE.VENTA_UNITARIA),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-=[]{}|;:"<>?/~`',
''), ',', '.') AS NUMBER)
ELSE
-- Solo punto o solo números: 123.45 o 123
CAST(TRANSLATE(TRIM(PPE.VENTA_UNITARIA),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-=[]{}|;:"<>?/~`,',
'') AS NUMBER)
END
ELSE 0
END
) * NVL(CAST(PPE.CANTIDAD_ORDENADA AS NUMBER), 0)
END
), 2) AS SALDO
FROM SIMACMOBILE.PEDIDOS_PENDIENTES_ERP PPE
WHERE PPE.ESTADO_CUMPLIMIENTO_LINEA <> 'DOO_CANCEL_REQUESTED'
AND SUBSTR(PPE.TIPO_DE_ORDEN, 1, 3) = 'VEN'
AND NOT EXISTS
(SELECT 1
FROM SIMACMOBILE.VENTA_HISTORICO_ERP VHE
WHERE VHE.ORDEN_PEDIDO = PPE.ORDEN_DE_ORIGEN)
GROUP BY PPE.NIT_CLIENTE
),
-- Query para consolidar saldos pendientes
SALDOS_CLIENTE_CONSOLIDADO AS
(SELECT NIT, ROUND(SUM(NVL(SALDO, 0)), 2) AS SALDO
FROM SALDOS_CLIENTE_INDIVIDUALES
GROUP BY NIT),
-- Query principal
GENERAL_QUERY AS
(SELECT VGM.NIT,
VGM.SITE,
VGM.PARTY_SITE_NAME,
0 AS DESHABILITADO,
CASE
WHEN (NVL(CDE.LIMITE_CREDITO, 0) - NVL(CDE.TOTAL_CARTERA, 0)) < 0 THEN
0
ELSE
ABS(NVL(CDE.LIMITE_CREDITO, 0) - NVL(CDE.TOTAL_CARTERA, 0))
END AS SALDO_CARTERA,
NVL(CDE.LIMITE_CREDITO, 0) AS LIMITE_CREDITO,
CASE
WHEN (NVL(CDE.LIMITE_CREDITO, 0) - NVL(CDE.TOTAL_CARTERA, 0)) < 0 THEN
ABS(NVL(CDE.LIMITE_CREDITO, 0) - NVL(CDE.TOTAL_CARTERA, 0))
ELSE
0
END AS EXCESO_CARTERA,
NVL(VMR.DIAS_VENCIMIENTO, 0) DIAS_MORA,
NVL(CDE.TOTAL_CARTERA, 0) FACTURADO
FROM SIMACMOBILE.CLIENTE_ERP VGM
LEFT JOIN SIMACMOBILE.CUPO_DISPONIBLE_ERP CDE
ON VGM.NIT = CDE.ACCOUNT_NUMBER
LEFT JOIN VALIDACION_MORA VMR
ON VMR.NIT = VGM.NIT)
SELECT GQ.NIT,
SITE,
PARTY_SITE_NAME,
DESHABILITADO,
CASE
WHEN SALDO_CARTERA - NVL(SALDO, 0) <= 0 THEN
0
ELSE
SALDO_CARTERA - NVL(SALDO, 0)
END SALDO_CARTERA,
LIMITE_CREDITO,
CASE
WHEN SALDO_CARTERA - NVL(SALDO, 0) < 0 THEN
ABS(SALDO_CARTERA - NVL(SALDO, 0)) + EXCESO_CARTERA
ELSE
NVL(EXCESO_CARTERA, 0)
END AS EXCESO_CARTERA,
DIAS_MORA,
FACTURADO,
NVL(SALDO, 0) AS POR_FACTURAR
FROM GENERAL_QUERY GQ
LEFT JOIN SALDOS_CLIENTE_CONSOLIDADO GSC
ON GSC.NIT = GQ.NIT;