Project

General

Profile

Actions

Task #15865

closed

Task #15825: Billing Fix Lot 1

OCEAN IMP BL Query

Added by Redmine Admin 7 months ago. Updated 33 minutes ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Start date:
03/18/2025
Due date:
03/18/2025
% Done:

100%

Estimated time:
0:00 h
GitLab ID:
2229
GitLab Milestone:
GitLab Ticket Number:
466
GitLab Time Logged:
0
Lock Timeline Date:
No
gitlab project trace:
Billing Fix Lot 1

Description

WITH 
    OldestHistory25 as 
    (   
    SELECT BL_DETAILS_ID, MANIFEST_ID, MIN(TO_DATE(CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI')) CUSTOMS_APPROVAL_DATE
    FROM MANIFEST_AMENDMENT_HISTORY        
    WHERE BL_DETAILS_ID IS NOT NULL
    AND CUSTOMS_RESPONSE = 'Y'
    AND CREATEDDATE > :IN_DATE_TO
    AND AMENDMENT_TYPE = 'MOD'
    AND TO_NUMBER(SUBSTR(BL_DETAILS_ID, 0, 6)) <= TO_NUMBER(TO_CHAR(TO_DATE(:IN_DATE_TO, 'DD-MON-YYYY'), 'YYYYMM')) 
    GROUP BY MANIFEST_ID, BL_DETAILS_ID
    ),    
    -- history record of oldest modification type amendment approved in 2025
    -- will be used to correct fetching of actual billed TSH / DOC_TYPE / CUSTOM_RESPONSE AND MESSAGE in 2024
    HistoryChanges as
    (
    SELECT H.ID, H.BL_DETAILS_ID, H.MANIFEST_ID, TO_DATE(H.CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') AS CUSTOMS_APPROVAL_DATE, JD.BL_TYPE
    FROM MANIFEST_AMENDMENT_HISTORY H
    INNER JOIN
    JSON_TABLE 
      (
          H.DATA, '$'
          COLUMNS 
          (
              NESTED PATH '$.MANIFEST_BL_DETAILS[*]'
              COLUMNS
              (
                  BL_NUMBER        VARCHAR2(10  BYTE)   PATH '$.BL_NUMBER',
                  BL_TYPE          VARCHAR2(10  BYTE)   PATH '$.BL_TYPE'                   
              )
          )
      ) AS JD ON 1 = 1
    JOIN OldestHistory25 M
    ON H.BL_DETAILS_ID = M.BL_DETAILS_ID
    AND H.MANIFEST_ID = M.MANIFEST_ID
    AND TO_DATE(H.CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') = M.CUSTOMS_APPROVAL_DATE
    WHERE H.CUSTOMS_RESPONSE = 'Y'
    AND H.CREATEDDATE > TO_DATE(:IN_DATE_TO, 'DD-MON-YYYY')
    AND H.AMENDMENT_TYPE = 'MOD'
    AND TO_NUMBER(SUBSTR(H.BL_DETAILS_ID, 1, 4)) < TO_NUMBER(TO_CHAR(TO_DATE(:IN_DATE_TO, 'DD-MON-YYYY'), 'YYYYMM'))
    ),
    -- added in 2024 but not manifested in 2024
    -- also need to make sure its history as at 2024 is correct as there could be amendment that has occured for these records as well
    History_ADD as 
    (
    SELECT 
    H.MANIFEST_ID, H.BL_DETAILS_ID, H.BL_NUMBER, H.JOB_NO, H.AMENDMENT_TYPE, H.CUSTOMS_APPROVAL_DATE APPROVAL_DATE_AMENDMENT, H.DATA
    FROM MANIFEST_AMENDMENT_HISTORY H 
    LEFT JOIN MANIFEST_HEADER MH ON MH.MANIFEST_ID = H.MANIFEST_ID AND TO_DATE(MH.APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') BETWEEN :IN_DATE_FROM AND :IN_DATE_TO
    WHERE H.AMENDMENT_TYPE = 'ADD' 
    AND H.CUSTOMS_RESPONSE = 'Y'
    AND MH.MANIFEST_ID IS NULL
    AND TO_DATE(H.CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI:SS') BETWEEN :IN_DATE_FROM AND :IN_DATE_TO
    ),
    Added24ManifestedPrior24 as 
    (
    SELECT DISTINCT  MH.MANIFEST_ID, MH.JOB_NO, MH.SHIPPING_LINE_CODE COMPANY_CODE, MH.SHIPPING_LINE_NAME COMPANY_NAME, MH.ATP, MH.APPROVAL_DATE APPROVAL_MANIFEST,
    MBL.BL_NUMBER, NVL(HC.BL_TYPE, MBL.BL_TYPE) BL_TYPE, MBL.JOB_NO JOB_NO_AMENDMENT, A.AMENDMENT_TYPE, A.APPROVAL_DATE_AMENDMENT
    FROM MANIFEST_HEADER MH
    INNER JOIN MANIFEST_BL_DETAILS MBL ON MH.MANIFEST_ID = MBL.MANIFEST_ID
    INNER JOIN History_ADD A ON MBL.BL_DETAILS_ID = A.BL_DETAILS_ID       
    LEFT JOIN HistoryChanges HC ON HC.BL_DETAILS_ID = MBL.BL_DETAILS_ID --MAKING SURE BL_TYPE IS OF 2024   
    ),
    MANIFESTED_BEFORE_DELETED_CURRRENT AS
    (
        SELECT distinct MH.JOB_NO, MH.SHIPPING_LINE_CODE COMPANY_CODE, MH.SHIPPING_LINE_NAME COMPANY_NAME, MH.ATP, MH.APPROVAL_DATE APPROVAL_MANIFEST,
        H.BL_NUMBER,  H.JOB_NO JOB_NO_AMENDMENT,  H.AMENDMENT_TYPE, H.CUSTOMS_APPROVAL_DATE APPROVAL_DATE_AMENDMENT
        FROM MANIFEST_HEADER MH
        INNER JOIN OCEAN_COMMON.VOYAGE_HEADER VH ON MH.ATP = VH.ATP
        LEFT JOIN OCEAN_COMMON.VOYAGE_DETAILS VD ON VH.VOYAGE_HEADER_ID = VD.VOYAGE_HEADER_ID
                                                    AND VD.SKIPPED = 'Y'
                                                    AND VD.LAST_MODIFIED_DATE BETWEEN :IN_DATE_FROM AND :IN_DATE_TO
        INNER JOIN MANIFEST_AMENDMENT_HISTORY H ON H.MANIFEST_ID = MH.MANIFEST_ID AND H.AMENDMENT_TYPE = 'DEL'
        WHERE MH.CUSTOMS_RESPONSE = 'Y'
        AND H.CUSTOMS_RESPONSE = 'Y'
        AND VD.VOYAGE_HEADER_ID IS NULL -- must not be skipped
        AND (TO_DATE(MH.APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') < :IN_DATE_FROM
        AND (TO_DATE(H.CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') BETWEEN :IN_DATE_FROM AND :IN_DATE_TO)
        )
    ),
    MQ
    AS
    (    
    SELECT DISTINCT  MH.MANIFEST_ID, MH.JOB_NO, MH.SHIPPING_LINE_CODE COMPANY_CODE, MH.SHIPPING_LINE_NAME COMPANY_NAME, MH.ATP, MH.APPROVAL_DATE APPROVAL_MANIFEST,
    COALESCE(MBL.BL_NUMBER, H.BL_NUMBER) BL_NUMBER, NVL(HC.BL_TYPE, MBL.BL_TYPE) BL_TYPE, MBL.JOB_NO JOB_NO_AMENDMENT, H.AMENDMENT_TYPE, H.CUSTOMS_APPROVAL_DATE APPROVAL_DATE_AMENDMENT
    FROM MANIFEST_HEADER MH
    INNER JOIN OCEAN_COMMON.VOYAGE_HEADER VH ON MH.ATP = VH.ATP
    LEFT JOIN OCEAN_COMMON.VOYAGE_DETAILS VD ON VH.VOYAGE_HEADER_ID = VD.VOYAGE_HEADER_ID 
                                                AND VD.SKIPPED = 'Y' 
                                                AND VD.LAST_MODIFIED_DATE BETWEEN :IN_DATE_FROM AND :IN_DATE_TO
    INNER JOIN MANIFEST_BL_DETAILS MBL ON MBL.MANIFEST_ID = MH.MANIFEST_ID    
    LEFT JOIN HistoryChanges HC ON HC.BL_DETAILS_ID = MBL.BL_DETAILS_ID
    LEFT JOIN MANIFEST_AMENDMENT_HISTORY H ON H.MANIFEST_ID = MH.MANIFEST_ID 
                                            AND H.BL_DETAILS_ID = MBL.BL_DETAILS_ID 
                                            AND H.AMENDMENT_TYPE = 'ADD'
                                            AND H.CUSTOMS_RESPONSE = 'Y' 
                                            AND TO_DATE(H.CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') >= :IN_DATE_TO
    WHERE MH.CUSTOMS_RESPONSE = 'Y'
    AND MBL.APPROVED_AT_CUSTOMS = 'Y'
    AND TO_DATE(MH.APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') BETWEEN :IN_DATE_FROM AND :IN_DATE_TO
    AND H.ID IS NULL -- IGNORE MANIFEST IN 2024 BUT ADDED IN 2025
    AND NVL(HC.BL_TYPE, MBL.BL_TYPE) = 'IMP'
    AND VD.VOYAGE_HEADER_ID IS NULL -- must not be skipped   
    UNION   
    -- FETCH ADDED IN 2024 BUT NOT MANIFESTED IN 2024
    SELECT DISTINCT MANIFEST_ID, JOB_NO, COMPANY_CODE, COMPANY_NAME, ATP, APPROVAL_MANIFEST,
    BL_NUMBER, BL_TYPE, JOB_NO_AMENDMENT, AMENDMENT_TYPE, APPROVAL_DATE_AMENDMENT
    FROM Added24ManifestedPrior24 A
    WHERE BL_TYPE = 'IMP'
    UNION
    SELECT MH.MANIFEST_ID, MH.JOB_NO, MH.SHIPPING_LINE_CODE COMPANY_CODE, MH.SHIPPING_LINE_NAME COMPANY_NAME, MH.ATP, MH.APPROVAL_DATE APPROVAL_MANIFEST,
    H.BL_NUMBER , NULL BL_TYPE, H.JOB_NO JOB_NO_AMENDMENT, H.AMENDMENT_TYPE, H.CUSTOMS_APPROVAL_DATE APPROVAL_DATE_AMENDMENT
    FROM MANIFEST_HEADER MH
    INNER JOIN OCEAN_COMMON.VOYAGE_HEADER VH ON MH.ATP = VH.ATP
    LEFT JOIN OCEAN_COMMON.VOYAGE_DETAILS VD ON VH.VOYAGE_HEADER_ID = VD.VOYAGE_HEADER_ID 
                                                AND VD.SKIPPED = 'Y' 
                                                AND VD.LAST_MODIFIED_DATE BETWEEN :IN_DATE_FROM AND :IN_DATE_TO
    INNER JOIN MANIFEST_AMENDMENT_HISTORY H ON H.MANIFEST_ID = MH.MANIFEST_ID AND H.AMENDMENT_TYPE = 'DEL'
    WHERE MH.CUSTOMS_RESPONSE = 'Y'
    AND H.CUSTOMS_RESPONSE = 'Y'
    AND VD.VOYAGE_HEADER_ID IS NULL -- must not be skipped 
    AND TO_DATE(MH.APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') BETWEEN :IN_DATE_FROM AND :IN_DATE_TO -- MANIFESTED IN 2024
    AND TO_DATE(H.CUSTOMS_APPROVAL_DATE, 'DD-MON-YYYY HH24:MI') >= :IN_DATE_TO --deleted in 2025 means it was billed in 2024
    ),
    TSPBILLED AS
    (
        select distinct * from nb_mbl
        where (housereference,manifestid)
        in
        (
        select distinct housereference,manifestid
        from nb_mbl where (housereference,manifestid) in
        (
        SELECT housereference,manifestid 
        FROM NB_MBL where quantity = 1        
        group by housereference, manifestid
        having count(*) > 1
        )    
        and masterreference = 'Y'
        )
    ),
    discrepancy as(  
    SELECT COALESCE(MQ.MANIFEST_ID, N.MANIFESTID, N.MANIFESTID) MANIFEST_ID,
    COALESCE(MQ.BL_NUMBER, N.HOUSEREFERENCE) BL_NUMBER,
    COALESCE(MQ.COMPANY_CODE, N.CLIENTCODE) COMPANY_CODE,
    COALESCE(MQ.ATP, N.CCSIMPORTVOYAGEID) ATP,
    N.QUANTITY,
    'UNDERBILLING - IN WAREHOUSING BUT NOT BILLED DUE TO CONTAINER MARKED AS DELETE' Status
    FROM MQ
    LEFT JOIN NB_MBL N ON N.HOUSEREFERENCE	= MQ.BL_NUMBER AND N.MANIFESTID = MQ.MANIFEST_ID AND N.BILLING_PERIOD LIKE '%'||:IN_PERIOD 
    WHERE (N.HOUSEREFERENCE IS NULL)            
    UNION    
    SELECT COALESCE(MQ.MANIFEST_ID, N.MANIFESTID) MANIFEST_ID,
    COALESCE(MQ.BL_NUMBER, N.HOUSEREFERENCE) BL_NUMBER,
    COALESCE(MQ.COMPANY_CODE, N.CLIENTCODE) COMPANY_CODE,
    COALESCE(MQ.ATP, N.CCSIMPORTVOYAGEID) ATP,
    N.QUANTITY,
    'UNDERBILLING - WRONG REFUND DUE TO DELETION OF 1 CONTAINER' STATUS
    FROM MQ    
    INNER JOIN NB_MBL N ON N.HOUSEREFERENCE	= MQ.BL_NUMBER AND N.MANIFESTID = MQ.MANIFEST_ID AND QUANTITY = -1 AND N.BILLING_PERIOD LIKE '%'||:IN_PERIOD 
    UNION
    SELECT COALESCE(MQ.MANIFEST_ID, N.MANIFESTID, R.MANIFESTID) MANIFEST_ID,
    COALESCE(MQ.BL_NUMBER, N.HOUSEREFERENCE, R.HOUSEREFERENCE) BL_NUMBER,
    COALESCE(MQ.COMPANY_CODE, N.CLIENTCODE, R.CLIENTCODE) COMPANY_CODE,
    COALESCE(MQ.ATP, N.CCSIMPORTVOYAGEID, R.CCSIMPORTVOYAGEID) ATP,
    COALESCE(N.QUANTITY, R.QUANTITY) QUANTITY,
    CASE WHEN N.CCSIMPORTVOYAGEID  IN (
                                        SELECT H.ATP
                                        FROM OCEAN_COMMON.VOYAGE_HEADER H
                                        INNER JOIN OCEAN_COMMON.VOYAGE_DETAILS D
                                            ON H.VOYAGE_HEADER_ID = D.VOYAGE_HEADER_ID
                                        WHERE NVL(D.SKIPPED, 'N') = 'Y'
                                        AND D.LAST_MODIFIED_DATE < :IN_DATE_TO
                                      )
    THEN 'OVERBILLED DUE TO SKIPPED VESSEL' 
    ELSE 'OVERBILLING - BILLED AS BOTH TSP AND IMP - SHOULD ONLY BILL AS '||CASE WHEN MQ.BL_TYPE IS NULL THEN 'TSP' ELSE 'IMP' END
    END 
    FROM NB_MBL N    
    LEFT JOIN NB_MBL R ON N.HOUSEREFERENCE = R.HOUSEREFERENCE AND R.MANIFESTID = N.MANIFESTID AND R.QUANTITY = -1 AND N.BILLING_PERIOD LIKE '%'||:IN_PERIOD
    LEFT JOIN MQ ON N.HOUSEREFERENCE = MQ.BL_NUMBER AND N.MANIFESTID = MQ.MANIFEST_ID  AND N.QUANTITY = 1 AND N.MASTERREFERENCE = 'N' 
    WHERE MQ.BL_NUMBER IS NULL
    AND R.HOUSEREFERENCE IS NULL --NO REFUND ISSUED
    AND N.BILLING_PERIOD LIKE '%'||:IN_PERIOD 
    AND N.QUANTITY = 1 -- must have been billed
    AND N.MASTERREFERENCE = 'N' -- must have been billed as Import
    )
    --SELECT * FROM MQ;        
    --SELECT * FROM MANIFESTED_BEFORE_DELETED_CURRRENT;   
    SELECT * FROM discrepancy order by status
    ;

GitLab Sync Log

[]

Actions

Also available in: Atom PDF