Diccionario de Datos

Logo

Diccionario de datos de los modelos de COÉXITO

🏠 Menú principal ← Volver a vistas simples

SIMACMOBILE.VW_INFORMACION_CREDITICIA

Base de datos origen: ORCLSMM

Tipo de objeto: VIEW

SQL


  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;

← Volver al esquema SIMACMOBILE

🏠 Volver al menú principal