存儲過程--1
PROCEDURE SP_M_PUB_POLICYREN
(I_DATA_START_TIME DATE /*數據開始日期*/,
I_DATA_END_TIME DATE /*數據結束日期*/,
I_ORG_ID VARCHAR2 /*機構代碼*/,
O_RESULT_FLAG OUT VARCHAR2 /*過程執行結果返回給調度 9 成功 2 失敗*/,
O_RESULT_MSG OUT VARCHAR2 /*過程執行結果信息返回給調度*/) IS
V_DTE_RUN_BEGIN_DT DATE; /*程序每一步驟運行開始*/
V_DTE_RUN_END_DT DATE; /*程序每一步驟運行結束時間*/
V_INT_STEP NUMBER; /*程序執行步驟*/
/*步驟描述信息*/
V_VAR_STEP_DESC VARCHAR2(1000);
/*步驟所執行的DML類型*/
V_VAR_STEP_DML_TYPE VARCHAR2(10);
/*受影響行數*/
V_INT_ROW_CNT INTEGER := 0;
/*過程名稱*/
V_VAR_PROC_NAME VARCHAR2(70) := 'PKG_MID_PUB.SP_M_PUB_POLICYREN';
BEGIN
V_INT_STEP := 1; /*第一步驟*/
V_VAR_STEP_DESC := '1.0:續期保單中間表處理';
V_VAR_STEP_DML_TYPE := 'MERGE'; /*操作類型*/
/*編寫業務表處理邏輯模塊BEGINING.......*/
/*DML開始運行時間*/
V_DTE_RUN_BEGIN_DT := SYSDATE;
/*執行相應的SQL語句*/
SP_TRUNCATE_TBL_MID('TRUNCATE TABLE MID_DATA.M_PUB_POLICYREN',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_AGENT_CODE',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_BILL_DATE',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_IS_PAID_CODE',
O_RESULT_FLAG,
O_RESULT_MSG);*/
/* SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_LBT_S_CD',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_ORGAN_ID',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_PRD_CD',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_SLS_CHNL_CD',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_SUB_CHNL_CD',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_PLY_ID',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_MPP_DATE_ORIGINAL',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('ALTER TABLE MID_DATA.M_PUB_POLICYREN DROP CONSTRAINT PK_M_PUB_POLICYREN',
O_RESULT_FLAG,
O_RESULT_MSG);
/*DML開始運行時間*/
V_DTE_RUN_BEGIN_DT := SYSDATE;
/*執行相應的SQL語句*/
INSERT /*+APPEND*/
INTO MID_DATA.M_PUB_POLICYREN B1
/*-------------續期應收信息-------------*/
WITH TMP_ARAP AS
(SELECT B.ITEM_ID,
B.POLICY_ID,
B.PRODUCT_ID,
B.POLICY_PERIOD,
NVL(E.ACCOUNT_ID, B.ACCOUNT_ID) ACCOUNT_ID,
B.BILL_DATE,
B.FEE_STATUS,
B.FINISH_TIME,
B.POLICY_YEAR,
B.FEE_AMOUNT
FROM (SELECT A.ITEM_ID,
A.POLICY_ID,
A.PRODUCT_ID,
A.POLICY_PERIOD,
A.ACCOUNT_ID,
A.LIST_ID,
TRUNC(A.BILL_DATE) AS BILL_DATE,
A.FEE_STATUS,
TRUNC(A.FINISH_TIME) AS FINISH_TIME,
A.POLICY_YEAR,
A.FEE_AMOUNT
/*處理A_FIN_PREM_ARAP_INDIV表數據重複問題*/,
RANK() OVER(PARTITION BY A.ITEM_ID, A.POLICY_PERIOD ORDER BY A.LIST_ID DESC) RK
FROM A_FIN_PREM_ARAP_INDIV A
WHERE A.SERVICE_ID = 3
AND A.FEE_TYPE = 41) B,
(SELECT C.CR_FEE_ID, MAX(D.ACCOUNT_ID) AS ACCOUNT_ID
FROM A_FIN_CASH_INDIV D, A_FIN_OFFSET_DETAIL C
WHERE D.FEE_TYPE = 11
AND C.DR_FEE_ID = D.FEE_ID
--AND C.CR_FEE_ID = A.LIST_ID
AND C.CR_TABLE = 4
AND C.DR_TABLE = 1
GROUP BY C.CR_FEE_ID) E
WHERE B.LIST_ID = E.CR_FEE_ID(+)
AND B.RK = 1),
/*-------------續期應收信息 自墊前一刻應收保費--------------*/
TMP_ARAP_INIT AS
(SELECT ITEM_ID, FEE_AMOUNT, DUE_TIME, POLICY_YEAR, POLICY_PERIOD
FROM (SELECT T.ITEM_ID,
T.FEE_AMOUNT,
T.DUE_TIME,
T.POLICY_YEAR,
T.POLICY_PERIOD,
RANK() OVER(PARTITION BY T.ITEM_ID, T.POLICY_PERIOD ORDER BY T.LIST_ID) RK
FROM A_FIN_PREM_ARAP_INDIV T
WHERE T.FEE_STATUS = 2) C
WHERE EXISTS (SELECT 1
FROM A_FIN_PREM_ARAP_INDIV A, A_FIN_PREM_ARAP_INDIV B
WHERE A.SERVICE_ID = 14
AND A.FEE_TYPE = 33
AND A.FEE_STATUS = 1
AND A.CHANGE_ID = B.CHANGE_ID
AND B.SERVICE_ID = 3
AND B.DUE_TIME = C.DUE_TIME)
AND C.RK = 1),
TMP_ARAP2 AS
(SELECT DISTINCT T1.POLICY_ID,
T1.PRODUCT_ID,
T1.BILL_DATE,
T4.TRANSFER_DATE AS FINISH_TIME /*最近轉賬日期*/,
CASE
WHEN T4.STATUS = 'Y' AND T4.TEXT_STATUS = 4 THEN
'轉賬成功'
WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 4 THEN
'轉賬失敗'
WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 2 THEN
'轉賬中'
END AS FEE_STATUS /*轉賬狀態*/,
(CASE
WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 4 THEN
(SELECT MAX(NVL(A1.BACK_MESSAGE,
A1.OTHER_REJECTION_REASON1)) KEEP(DENSE_RANK LAST ORDER BY A1.TRANSFER_DATE, A1.INSERTED_TIMESTAMP)
FROM (SELECT CASE
WHEN T.UNSUCCESS_ID = 5630 THEN
'客戶賬號號碼或者賬號姓名不正確'
ELSE
T.OTHER_REJECTION_REASON
END AS OTHER_REJECTION_REASON1,
T.*
FROM A_FIN_BANK_TEXT_DETAIL_INDIV T) A1
WHERE A1.MASTER_CHG_ID = T1.CHANGE_ID
AND A1.STATUS = 'N'
AND A1.COLLECT_PAY = '1'
AND A1.TEXT_STATUS = '4')
ELSE
''
END) AS FAIL_TRANS_REASON /*轉賬失敗原因*/,
NVL(T2.TRANS_FAIL_NUM, 0) AS TRANS_FAIL_NUM /*轉賬失敗次數*/
/*,NVL((SELECT TRANS_FAIL_NUM
FROM (SELECT T.POLICY_ID
,T.MASTER_CHG_ID
,COUNT(1) AS TRANS_FAIL_NUM
FROM A_FIN_BANK_TEXT_DETAIL_INDIV T
WHERE T.COLLECT_PAY = 1
AND T.TEXT_STATUS = 4
AND T.STATUS = 'N'
AND T.BUSINESS_SOURCE <> 3
GROUP BY T.POLICY_ID
,T.MASTER_CHG_ID) A
WHERE T1.POLICY_ID = A.POLICY_ID(+)
AND T1.CHANGE_ID = A.MASTER_CHG_ID(+))
,0) TRANS_FAIL_NUM_1*/
/*,(CASE
WHEN ((T2.SUSPEND_IND = 'Y' AND T2.SUSPEND_SOURCE_TYPE = 2) OR
(T2.SUSPEND_IND = 'Y' AND T2.SUSPEND_SOURCE_TYPE = 1 AND T2.TRANS_FAIL_NUM = 6)) THEN
'是'
ELSE
'否'
END) AS IS_FROZEN \*是否凍結*\*/,
(CASE
WHEN ((T2.FROM_DATE IS NULL AND T2.SUSPEND_IND = 'Y') OR
(T2.FROM_DATE IS NOT NULL AND
T2.TRANS_FAIL_NUM = 6 AND T2.SUSPEND_IND = 'Y')) THEN
'是'
ELSE
'否'
END) AS IS_FROZEN /*是否凍結*/,
(CASE
WHEN T3.STATUS = 2 THEN
'待發放'
WHEN T3.STATUS = 4 THEN
'已回銷'
ELSE
''
END) AS RENEWAL_DOC_STATUS
FROM (SELECT A.POLICY_ID,
A.PRODUCT_ID,
A.FEE_STATUS,
A.FINISH_TIME,
A.CHANGE_ID,
A.BILL_DATE,
A.DUE_TIME
-- ,ROW_NUMBER() OVER(PARTITION BY A.POLICY_ID, A.PRODUCT_ID, A.BILL_DATE ORDER BY A.FINISH_TIME DESC) AS RK
FROM A_FIN_PREM_ARAP_INDIV A, A_EVT_POLICY_CHANGE B
WHERE B.SERVICE_ID = 3
AND A.POLICY_CHG_ID = B.POLICY_CHG_ID
AND A.FEE_TYPE = 41) T1,
(SELECT *
FROM A_EVT_TRANSFER_SUSPEND T
WHERE T.COLLECT_PAY = 1
AND T.SUSPEND_TYPE = 2) T2,
(SELECT T.POLICY_ID, TRUNC(T.DUE_DATE) AS DUE_DATE, T.STATUS
FROM A_EVT_DOCUMENT T
WHERE T.TEMPLATE_ID = 1031) T3
,
(SELECT POLICY_ID,
STATUS,
TEXT_STATUS,
TRANSFER_DATE,
DUE_TIME,
MASTER_CHG_ID
FROM (SELECT RANK() OVER(PARTITION BY T.POLICY_ID, T.DUE_TIME ORDER BY T.TRANSFER_DATE DESC, T.INSERTED_TIMESTAMP DESC) RK,
T.POLICY_ID,
T.STATUS,
T.TEXT_STATUS,
TRUNC(T.TRANSFER_DATE) AS TRANSFER_DATE,
T.DUE_TIME,
T.MASTER_CHG_ID
FROM A_FIN_BANK_TEXT_DETAIL_INDIV T
WHERE T.COLLECT_PAY = 1
AND T.TEXT_STATUS <> 5
AND T.BUSINESS_SOURCE <> 3)
WHERE RK = 1) T4
WHERE T1.POLICY_ID = T4.POLICY_ID
AND T1.CHANGE_ID = T4.MASTER_CHG_ID and t1.due_time = t4.DUE_TIME
AND T1.POLICY_ID = T2.POLICY_ID(+)
AND T1.DUE_TIME = T2.DUE_DATE(+) and t1.change_id=t2.master_change_id(+)
AND T4.POLICY_ID = T3.POLICY_ID(+)
AND T4.DUE_TIME = T3.DUE_DATE(+)),
--離職單人員的相關信息
TMP AS
(SELECT T.POLICY_ID,
A.AGENT_ID,
A.AGENT_CODE,
C.FIRST_NAME,
NVL(NVL(C.MOBILE, C.OFFICE_TEL), C.HOME_TEL) MOBILE,
A.AGENT_STATUS,
D.LV3_CHANNEL_ORG_NAME,
D.LV3_LEADER_NAME,
D.LV2_CHANNEL_ORG_NAME,
D.LV2_LEADER_NAME,
D.LV1_CHANNEL_ORG_NAME,
D.LV1_LEADER_NAME
FROM A_PTY_POLICY_PRODUCER_ROLE T,
A_ORG_AGENT A,
A_PTY_INDIV_CUST C,
D_CHANNEL_ORG D
WHERE T.PRODUCER_ID = A.AGENT_ID
AND A.AGENT_ID = C.CUSTOMER_ID
AND A.AGENT_CODE = D.AGENT_CODE
AND T.ACTIVE_INDI = 'Y'
AND T.PRODUCER_ROLE = 1
AND D.END_DATE = DATE '9999-12-31')
/*-------------續期保單信息-------------*/
SELECT TT.POLICY_ID,
TT.ITEM_ID,
TT.POLICY_CODE,
TT.ORGAN_ID,
TT.LV3_ORGAN_NAME,
TT.PRODUCT_ID,
TT.PRODUCT_CODE,
TT.PRODUCT_ABBR_NAME,
TT.POLICY_YEAR,
TT.POLICY_PERIOD,
TT.ISSUE_DATE,
TT.VALIDATE_DATE,
TT.BILL_DATE,
TT.PAID_DATE,
TT.NEXT_ISSUE_DATE,
TT.INVALID_DATE,
TT.LIABILITY_STATE_CODE,
TT.LIABILITY_STATE_NAME,
TT.IS_PAID_CODE,
TT.IS_PAID_NAME,
TT.TOTAL_PREM_AF,
TT.DUE_PREM,
TT.DUE_PREM_HL,
TT.DUE_PREM_SCJ,
TT.HOLDER_NAME,
TT.INSURED_NAME,
TT.ROP_APPLICABLE,
TT.HOLDER_MOBILE,
TT.BILL_BANK_NAME,
TT.ACCO_NAME,
TT.BANK_ACCOUNT,
TT.SALES_CHANNEL_CODE,
TT.SALES_CHANNEL_NAME,
TT.SUBMIT_CHANNEL_CODE,
TT.SUBMIT_CHANNEL_NAME,
TT.AGENT_NAME,
TT.AGENT_CODE,
TT.LV2_CHANNEL_ORG_NAME,
TT.LV3_CHANNEL_ORG_CODE,
TT.LV3_CHANNEL_ORG_NAME,
TT.AGENT_MOBILE,
TT.IS_ORPHAN_PLY,
TT.LV1_BANK_CODE,
TT.LV1_BANK_NAME,
TT.LV4_BANK_NAME,
TT.LV6_BANK_NAME,
TT.SELL_TELLER_NAME,
TT.RENEWAL_FEE_STATUS,
TT.INVALID_DAY,
TT.REINSTATE_DATE,
TT.CHARGE_MODE_CODE,
TT.CHARGE_MODE_NAME,
TT.CHARGE_PERIOD_CODE,
TT.CHARGE_PERIOD_NAME,
TT.COVERAGE_PERIOD_CODE,
TT.COVERAGE_PERIOD_NAME,
TT.COVERAGE_YEAR,
TT.CHARGE_YEAR,
TT.AMOUNT,
TT.INS_TYPE,
TT.ETL_UPDATE_TIME,
B1.FINISH_TIME /*最近轉賬日期*/,
B1.FEE_STATUS /*轉賬狀態*/,
B1.FAIL_TRANS_REASON /*轉賬失敗原因*/,
B1.TRANS_FAIL_NUM /*轉賬失敗次數*/,
B1.RENEWAL_DOC_STATUS /*續期函件*/,
B1.IS_FROZEN /*是否凍結*/,
TT.AGENT_STATUS_CODE,
TT.AGENT_STATUS_NAME,
TT.REN_FEE_TYPE,
TT.SURRENDER_DATE /*退保日期*/,
TT.RENEW_DECISION /*自動續保標誌:1 表示自動續保,0 表示非自動續保*/,
TT.VALIDATE_DATE_ORIGINAL /*原始生效日期*/,
TT.DUE_PREM_PRE_APL /*自墊前一個應繳保費*/,
TT.IS_PERMIT_APL,
TT.APL_STATUS,
DECODE(TT.IS_ORPHAN_PLY, 'Y', C.AGENT_CODE, TT.AGENT_CODE) CUR_AGENT_CODE,
DECODE(TT.IS_ORPHAN_PLY, 'Y', C.FIRST_NAME, TT.AGENT_NAME) CUR_AGENT_NAME,
DECODE(TT.IS_ORPHAN_PLY, 'Y', C.MOBILE, TT.AGENT_MOBILE) CUR_AGENT_PHONE,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
DECODE(C.AGENT_STATUS, '1', '離職', '在職'),
'在職') CUR_AGENT_STATUS,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV3_CHANNEL_ORG_NAME,
D.LV3_CHANNEL_ORG_NAME) CUR_AGENT_LV3_CHANNEL_ORG_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV3_LEADER_NAME,
D.LV3_LEADER_NAME) CUR_AGENT_LV3_LEADER_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV2_CHANNEL_ORG_NAME,
D.LV2_CHANNEL_ORG_NAME) CUR_AGENT_LV2_CHANNEL_ORG_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV2_LEADER_NAME,
D.LV2_LEADER_NAME) CUR_AGENT_LV2_LEADER_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV1_CHANNEL_ORG_NAME,
D.LV1_CHANNEL_ORG_NAME) CUR_AGENT_LV1_CHANNEL_ORG_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV1_LEADER_NAME,
D.LV1_LEADER_NAME) CUR_AGENT_LV1_LEADER_NAME,
LIABILITY_STATE_CAUSE_CODE,
LIABILITY_STATE_CAUSE_NAME
FROM (SELECT T1.POLICY_ID /*保單ID*/,
T1.ITEM_ID /*保單責任ID*/,
T1.POLICY_CODE /*保單號*/,
T1.ORGAN_ID /*機構代碼*/,
T1.LV3_ORGAN_NAME /*機構名稱*/,
T1.PRODUCT_ID /*險種ID*/,
T1.PRODUCT_CODE /*險種代碼*/,
T1.PRODUCT_ABBR_NAME /*險種名稱*/,
NVL(T2.POLICY_YEAR, 1) AS POLICY_YEAR /*繳費年*/,
NVL(T2.POLICY_PERIOD, 1) AS POLICY_PERIOD /*繳費期*/,
T1.ISSUE_DATE /*承保日期*/,
T1.VALIDATE_DATE /*生效日期*/,
T2.BILL_DATE /*應收日期*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NULL THEN
DECODE(T2.FEE_STATUS, 1, T2.FINISH_TIME)
ELSE
T11.FINISH_TIME
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
T14.FINISH_TIME
ELSE
NULL
END)
END) AS PAID_DATE /*實收日期*/,
(CASE
WHEN T11.ITEM_ID IS NULL THEN
T6.DUE_DATE
WHEN T11.ITEM_ID IS NOT NULL AND
T1.CHARGE_MODE_CODE = '1' THEN
ADD_MONTHS(T2.BILL_DATE, 12)
WHEN T11.ITEM_ID IS NOT NULL AND
T1.CHARGE_MODE_CODE = '4' THEN
ADD_MONTHS(T2.BILL_DATE, 1)
END) AS NEXT_ISSUE_DATE /*下期應收日期*/,
(CASE
WHEN T1.LIABILITY_STATE_CODE = 2 AND T2.FEE_STATUS <> 1 THEN
T1.INVALID_DATE
ELSE
NULL
END) AS INVALID_DATE /*停效日期*/,
T1.LIABILITY_STATE_CODE /*保單狀態代碼*/,
T1.LIABILITY_STATE_NAME /*保單狀態*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NULL THEN
DECODE(T2.FEE_STATUS, 1, 'Y', 'N')
ELSE
'Y'
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
'Y'
ELSE
'N'
END)
END) AS IS_PAID_CODE /*交費狀態代碼*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NULL THEN
DECODE(T2.FEE_STATUS, 1, '已交', '應交')
ELSE
'已交'
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
'已交'
ELSE
'應交'
END)
END) AS IS_PAID_NAME /*交費狀態*/,
NVL(T9.TOTAL_PREM_AF, 0) AS TOTAL_PREM_AF /*首期保費*/,
NVL(T2.FEE_AMOUNT, 0) AS DUE_PREM /*應收保費*/
------------------------------------------------------------------------------
--對於已自墊的保單,“應收保費”字段顯示自墊前一刻的續期保費
,
CASE
WHEN T14.ITEM_ID IS NOT NULL THEN
NVL(TT.FEE_AMOUNT, 0)
ELSE
NVL(T2.FEE_AMOUNT, 0)
END AS DUE_PREM_PRE_APL
---------------------------------------------------------------------------------
,
NVL(T12.FEE_AMOUNT, 0) AS DUE_PREM_HL /*紅利抵交保費*/,
0 AS DUE_PREM_SCJ /*生存金抵交保費*/,
T1.HOLDER_NAME /*投保人*/,
T1.INSURED_NAME /*被保人*/,
T1.ROP_APPLICABLE /*自保件標誌*/,
T5.MOBILE || '/' || T5.OFFICE_TEL || '/' || T5.HOME_TEL AS HOLDER_MOBILE /*客戶電話*/,
T4.BANK_NAME AS BILL_BANK_NAME /*開戶銀行*/,
T3.ACCO_NAME /*繳費戶名*/,
T3.BANK_ACCOUNT /*繳費賬號*/,
T1.SALES_CHANNEL_CODE /*銷售渠道代碼*/,
T1.SALES_CHANNEL_NAME /*銷售渠道*/,
T1.SUBMIT_CHANNEL_CODE /*出單渠道代碼*/,
T1.SUBMIT_CHANNEL_NAME /*出單渠道*/,
T1.AGENT_NAME /*銷售人員*/,
T1.AGENT_CODE /*銷售人員代碼*/,
T1.LV2_CHANNEL_ORG_NAME /*營業部門*/,
T1.LV3_CHANNEL_ORG_CODE /*營業部代碼*/,
T1.LV3_CHANNEL_ORG_NAME /*營業部名稱*/,
T1.LV1_CHANNEL_ORG_NAME /*營業區名稱*/,
T7.MOBILE || '/' || T7.OFFICE_TEL || '/' || T7.HOME_TEL AS AGENT_MOBILE /*銷售人員電話*/,
DECODE(T8.AGENT_STATUS, 1, 'Y', 'N') AS IS_ORPHAN_PLY /*孤兒單標誌:Y/N*/,
T1.LV1_BANK_CODE /*總行代碼*/,
T1.LV1_BANK_NAME /*總行名稱*/,
T1.LV4_BANK_NAME /*支行名稱*/,
T1.LV6_BANK_NAME /*網點名稱*/,
T1.SELL_TELLER_NAME /*銀行銷售人員*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NOT NULL THEN
'超期已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
'應交已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
'寬一已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'寬末已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') >
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'超期已交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
'應交未交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
'寬一未交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'寬末未交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') >
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'超期未交'
ELSE
NULL
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
'自墊還款'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
'應交未交'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
'寬一未交'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'寬末未交'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') >
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'超期未交'
ELSE
NULL
END)
END) AS RENEWAL_FEE_STATUS /*續期指標狀態*/,
(CASE
WHEN T1.LIABILITY_STATE_CODE = 2 AND T2.FEE_STATUS <> 1 THEN
TRUNC(SYSDATE) - T1.INVALID_DATE
ELSE
NULL
END) AS INVALID_DAY /*保單停效天數*/,
T11.FINISH_TIME AS REINSTATE_DATE /*最近復效時間*/,
T1.CHARGE_MODE_CODE /*繳費頻次代碼(繳費方式)*/,
T1.CHARGE_MODE_NAME /*繳費頻次名稱(繳費方式)*/,
T1.CHARGE_PERIOD_CODE /*繳費年期類型代碼*/,
T1.CHARGE_PERIOD_NAME /*繳費年期類型名稱*/,
T1.COVERAGE_PERIOD_CODE /*保障年期類型代碼*/,
T1.COVERAGE_PERIOD_NAME /*保障年期類型名稱*/,
T1.COVERAGE_YEAR /*保險期間(年)*/,
T1.CHARGE_YEAR /*交費期限(年)*/,
T1.AMOUNT /*保額*/,
T1.INS_TYPE /* 是否主險:Y主險,N附加險*/,
SYSDATE AS ETL_UPDATE_TIME /*ETL時間*/,
nvl(T13.AGENT_STATUS, ta.agent_status) AS AGENT_STATUS_CODE /*人員狀態代碼*/,
(SELECT TAS.DESCRIPTION
FROM A_COD_BACM_ORG_STATUS TAS
WHERE TAS.AGT_ORG_STATUS_CODE = T13.AGENT_STATUS) AS AGENT_STATUS_NAME /*人員狀態名稱*/,
(CASE
WHEN T11.ITEM_ID IS NOT NULL THEN
2
WHEN T14.ITEM_ID IS NOT NULL THEN
4
ELSE
1
END) AS REN_FEE_TYPE,
T1.SURRENDER_DATE /*退保日期*/,
T9.RENEW_DECISION /*自動續保標誌:1 表示自動續保,0 表示非自動續保*/,
T9.VALIDATE_DATE_ORIGINAL /*原始生效日期*/,
CASE
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' THEN
'是'
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '1' THEN
'否'
ELSE
''
END AS IS_PERMIT_APL /*是否同意自墊*/,
CASE
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
T14.ITEM_ID IS NULL THEN
'未自墊'
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
T14.ITEM_ID IS NOT NULL AND T14.ITEM_ID_PAY IS NULL THEN
'已自墊'
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
T14.ITEM_ID IS NOT NULL AND
T14.ITEM_ID_PAY IS NOT NULL THEN
'已還款'
ELSE
''
END AS APL_STATUS /*墊交狀態*/
,
t1.LIABILITY_STATE_CAUSE_CODE,
t1.LIABILITY_STATE_CAUSE_NAME
FROM M_PUB_POLICYPREM_T1 T1,
TMP_ARAP T2,
TMP_ARAP_INIT TT,
A_PTY_BANK_ACCOUNT T3,
A_ORG_BANK T4,
A_PTY_INDIV_CUST T5 /*取投保人信息*/,
A_AGT_POLICY_EXTEND T6,
A_PTY_INDIV_CUST T7 /*取代理人信息*/,
A_ORG_AGENT T8,
(SELECT T.ITEM_ID,
T.RENEW_DECISION,
T.TOTAL_PREM_AF,
CASE
WHEN T.RENEW_DECISION = '1' THEN
(SELECT A.VALIDATE_DATE
FROM A_AGT_POLICY_PRD_INDIV A
WHERE A.ITEM_ID = T.MASTER_ID)
ELSE
NVL(T.INITIAL_VALI_DATE, T.VALIDATE_DATE)
END AS VALIDATE_DATE_ORIGINAL
FROM A_AGT_POLICY_PRD_INDIV T) T9,
(SELECT ITEM_ID,
POLICY_YEAR,
POLICY_PERIOD,
FEE_AMOUNT,
TRUNC(BILL_DATE) AS BILL_DATE /*應繳日期*/,
TRUNC(FINISH_TIME) AS FINISH_TIME /*實收日期*/
FROM A_FIN_PREM_ARAP_INDIV
WHERE SERVICE_ID = 194
AND FEE_TYPE = 41
AND FEE_STATUS = 1) T11 /*復效保單數據*/,
(SELECT A.ITEM_ID,
A.POLICY_PERIOD,
SUM(A.FEE_AMOUNT) AS FEE_AMOUNT
FROM A_FIN_PREM_ARAP_INDIV A
WHERE A.SERVICE_ID = 521
AND A.FEE_TYPE = 905
GROUP BY A.ITEM_ID, A.POLICY_PERIOD) T12 /*紅利抵交保費*/,
A_ORG_BANK_AGT_OTHER T13,
a_org_agent ta,
(SELECT A3.ITEM_ID,
A1.FINISH_TIME,
A1.ITEM_ID AS ITEM_ID_PAY,
A1.FEE_AMOUNT,
A3.POLICY_PERIOD
FROM (SELECT A.ITEM_ID,
A.POLICY_CHG_ID,
B.PRE_POLICY_CHG,
TRUNC(A.FINISH_TIME) FINISH_TIME,
A.POLICY_PERIOD,
SUM(A.FEE_AMOUNT) AS FEE_AMOUNT
FROM A_FIN_PREM_ARAP_INDIV A,
A_EVT_POLICY_CHANGE B
WHERE A.POLICY_CHG_ID = B.POLICY_CHG_ID
AND B.SERVICE_ID = 302
AND B.POLICY_CHG_STATUS = 2
AND A.FEE_STATUS = 1
GROUP BY A.ITEM_ID,
A.POLICY_CHG_ID,
B.PRE_POLICY_CHG,
TRUNC(A.FINISH_TIME),
A.POLICY_PERIOD) A1 /*自墊清償*/,
(SELECT T.ITEM_ID,
T.POLICY_CHG_ID,
SUM(T.FEE_AMOUNT),
T.POLICY_PERIOD
FROM A_FIN_PREM_ARAP_INDIV T
WHERE T.SERVICE_ID = 3
AND T.FEE_TYPE = 41
AND T.FINISH_TIME IS NOT NULL
AND EXISTS
(SELECT 1
FROM A_FIN_PREM_ARAP_INDIV A, A_EVT_POLICY_CHANGE B
WHERE A.POLICY_CHG_ID = B.POLICY_CHG_ID
and b.SERVICE_ID = 14
and b.policy_chg_status = 2
AND A.FEE_TYPE = 33
AND A.FEE_STATUS = 1
AND T.POLICY_CHG_ID = A.POLICY_CHG_ID)
AND T.FEE_AMOUNT > 0 GROUP BY T.ITEM_ID,
T.POLICY_CHG_ID,
T.POLICY_PERIOD) A3 /*自動保費墊交*/
WHERE A3.ITEM_ID = A1.ITEM_ID(+)
AND A3.POLICY_CHG_ID = A1.PRE_POLICY_CHG(+)) T14 /*自動保費墊交*/,
A_AGT_POLICY_PRD_INDIV T15,
A_PRD_INFO T16
WHERE T1.ITEM_ID = T2.ITEM_ID(+)
AND T2.ITEM_ID = TT.ITEM_ID(+)
AND T2.POLICY_PERIOD = TT.POLICY_PERIOD(+)
AND T1.IS_REVERSE = 'N'
AND T1.CHARGE_MODE_CODE <> '5' /*期繳*/
AND T1.LIABILITY_STATE_CODE NOT IN ('0', '31', '33') --剔除待生效、契撤、銀保通當日退保(這些單不可能產生續期)
AND T2.ACCOUNT_ID = T3.ACCOUNT_ID(+)
AND T3.BANK_CODE = T4.BANK_CODE(+)
AND T1.HOLDER_ID = T5.CUSTOMER_ID(+)
AND T1.ITEM_ID = T6.ITEM_ID(+)
AND T1.AGENT_ID = T7.CUSTOMER_ID(+)
AND T1.AGENT_ID = T8.AGENT_ID(+)
AND T1.ITEM_ID = T9.ITEM_ID(+)
AND T2.ITEM_ID = T11.ITEM_ID(+)
AND T2.BILL_DATE = T11.BILL_DATE(+)
AND T2.ITEM_ID = T12.ITEM_ID(+)
AND T2.POLICY_PERIOD = T12.POLICY_PERIOD(+)
AND T2.ITEM_ID = T14.ITEM_ID(+)
AND T2.POLICY_PERIOD = T14.POLICY_PERIOD(+)
AND T1.AGENT_ID = T13.AGENT_ID(+)
AND T1.AGENT_ID = Ta.AGENT_ID(+)
AND T1.POLICY_ID = T15.POLICY_ID
AND T1.PRODUCT_ID = T15.PRODUCT_ID
AND T15.PRODUCT_ID = T16.PRODUCT_ID
AND T13.IS_VALID(+) = 'Y') TT,
TMP_ARAP2 B1,
TMP C,
(SELECT T.AGENT_CODE,
T.LV1_CHANNEL_ORG_NAME,
T.LV1_LEADER_NAME,
T.LV2_CHANNEL_ORG_NAME,
T.LV2_LEADER_NAME,
T.LV3_CHANNEL_ORG_NAME,
T.LV3_LEADER_NAME
FROM D_CHANNEL_ORG T
WHERE T.END_DATE = DATE '9999-12-31') D
WHERE TT.POLICY_ID = B1.POLICY_ID(+)
AND TT.PRODUCT_ID = B1.PRODUCT_ID(+)
AND TT.BILL_DATE = B1.BILL_DATE(+)
AND TT.AGENT_CODE = D.AGENT_CODE(+)
AND TT.POLICY_ID = C.POLICY_ID(+);
/*獲取受影響行數*/
V_INT_ROW_CNT := SQL%ROWCOUNT;
COMMIT; ---提交DML操作
------------------------------修改主險是自墊保費,附加險也調整成自墊保費---------------------------------------------
UPDATE MID_DATA.M_PUB_POLICYREN T
SET T.REN_FEE_TYPE = 4
WHERE EXISTS (SELECT 1
FROM MID_DATA.M_PUB_POLICYREN S
WHERE S.REN_FEE_TYPE = 4
AND S.INS_TYPE = 'Y'
AND S.POLICY_CODE = T.POLICY_CODE)
AND T.INS_TYPE = 'N';
COMMIT; ---提交DML操作
/*DML運行結束時間*/
V_DTE_RUN_END_DT := SYSDATE;
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_AGENT_CODE on MID_DATA.M_PUB_POLICYREN (AGENT_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_BILL_DATE on MID_DATA.M_PUB_POLICYREN (BILL_DATE)',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_IS_PAID_CODE on MID_DATA.M_PUB_POLICYREN (IS_PAID_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);*/
/* SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_LBT_S_CD on MID_DATA.M_PUB_POLICYREN (LIABILITY_STATE_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('create bitmap index IDX_M_PUB_PRN_ORGAN_ID on MID_DATA.M_PUB_POLICYREN (ORGAN_ID)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create bitmap index IDX_M_PUB_PRN_PRD_CD on MID_DATA.M_PUB_POLICYREN (PRODUCT_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_SLS_CHNL_CD on MID_DATA.M_PUB_POLICYREN (SALES_CHANNEL_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_SUB_CHNL_CD on MID_DATA.M_PUB_POLICYREN (SUBMIT_CHANNEL_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_PLY_ID on MID_DATA.M_PUB_POLICYREN (POLICY_ID)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create index IDX_MPP_DATE_ORIGINAL on MID_DATA.M_PUB_POLICYREN (VALIDATE_DATE_ORIGINAL)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('alter table MID_DATA.M_PUB_POLICYREN add constraint PK_M_PUB_POLICYREN primary key (ITEM_ID, POLICY_PERIOD)',
O_RESULT_FLAG,
O_RESULT_MSG);
/*記錄成功的日誌信息*/
PKG_PUBLIC.SP_ETL_LOAD_DML_LOG(V_INT_STEP,
I_DATA_START_TIME /*數據開始日期*/,
I_DATA_END_TIME /*數據結束日期*/,
I_ORG_ID /*機構代碼*/,
V_VAR_PROC_NAME /*存儲過程名稱*/,
V_VAR_STEP_DESC /*操作步驟描述*/,
V_VAR_STEP_DML_TYPE /*操作類型*/,
V_INT_ROW_CNT /*受影響行數*/,
V_VAR_CST_SUCCESS /*執行結果*/,
V_DTE_RUN_BEGIN_DT /*運行開始時間*/,
V_DTE_RUN_END_DT /*運行結束時間*/,
'' /*運行結果詳細信息*/);
/*整個過程執行成功*/
O_RESULT_FLAG := V_VAR_CST_RESULT_SUCC;
/*整個過程運行結果描述信息*/
O_RESULT_MSG := '';
/*異常處理部分*/
EXCEPTION
WHEN OTHERS THEN
---回滾DML操作
ROLLBACK;
/*記錄異常信息*/
O_RESULT_FLAG := V_VAR_CST_RESULT_FAIL; ----失敗
O_RESULT_MSG := SQLERRM;
---記錄異常日誌信息
PKG_PUBLIC.SP_ETL_LOAD_DML_LOG(V_INT_STEP,
I_DATA_START_TIME /*數據開始日期*/,
I_DATA_END_TIME /*數據結束日期*/,
I_ORG_ID /*機構代碼*/,
V_VAR_PROC_NAME /*存儲過程名稱*/,
V_VAR_STEP_DESC /*操作步驟描述*/,
V_VAR_STEP_DML_TYPE /*操作步驟類型*/,
V_INT_ROW_CNT /*返回的受影響行數*/,
V_VAR_CST_FAIL /*運行結果 0 失敗; 1 成功*/,
V_DTE_RUN_BEGIN_DT /*運行開始時間*/,
V_DTE_RUN_END_DT /*運行結束時間*/,
O_RESULT_MSG /*運行結果詳細信息*/);
END SP_M_PUB_POLICYREN;
(I_DATA_START_TIME DATE /*數據開始日期*/,
I_DATA_END_TIME DATE /*數據結束日期*/,
I_ORG_ID VARCHAR2 /*機構代碼*/,
O_RESULT_FLAG OUT VARCHAR2 /*過程執行結果返回給調度 9 成功 2 失敗*/,
O_RESULT_MSG OUT VARCHAR2 /*過程執行結果信息返回給調度*/) IS
V_DTE_RUN_BEGIN_DT DATE; /*程序每一步驟運行開始*/
V_DTE_RUN_END_DT DATE; /*程序每一步驟運行結束時間*/
V_INT_STEP NUMBER; /*程序執行步驟*/
/*步驟描述信息*/
V_VAR_STEP_DESC VARCHAR2(1000);
/*步驟所執行的DML類型*/
V_VAR_STEP_DML_TYPE VARCHAR2(10);
/*受影響行數*/
V_INT_ROW_CNT INTEGER := 0;
/*過程名稱*/
V_VAR_PROC_NAME VARCHAR2(70) := 'PKG_MID_PUB.SP_M_PUB_POLICYREN';
BEGIN
V_INT_STEP := 1; /*第一步驟*/
V_VAR_STEP_DESC := '1.0:續期保單中間表處理';
V_VAR_STEP_DML_TYPE := 'MERGE'; /*操作類型*/
/*編寫業務表處理邏輯模塊BEGINING.......*/
/*DML開始運行時間*/
V_DTE_RUN_BEGIN_DT := SYSDATE;
/*執行相應的SQL語句*/
SP_TRUNCATE_TBL_MID('TRUNCATE TABLE MID_DATA.M_PUB_POLICYREN',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_AGENT_CODE',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_BILL_DATE',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_IS_PAID_CODE',
O_RESULT_FLAG,
O_RESULT_MSG);*/
/* SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_LBT_S_CD',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_ORGAN_ID',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_PRD_CD',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_SLS_CHNL_CD',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_SUB_CHNL_CD',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_M_PUB_PRN_PLY_ID',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('DROP INDEX IDX_MPP_DATE_ORIGINAL',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('ALTER TABLE MID_DATA.M_PUB_POLICYREN DROP CONSTRAINT PK_M_PUB_POLICYREN',
O_RESULT_FLAG,
O_RESULT_MSG);
/*DML開始運行時間*/
V_DTE_RUN_BEGIN_DT := SYSDATE;
/*執行相應的SQL語句*/
INSERT /*+APPEND*/
INTO MID_DATA.M_PUB_POLICYREN B1
/*-------------續期應收信息-------------*/
WITH TMP_ARAP AS
(SELECT B.ITEM_ID,
B.POLICY_ID,
B.PRODUCT_ID,
B.POLICY_PERIOD,
NVL(E.ACCOUNT_ID, B.ACCOUNT_ID) ACCOUNT_ID,
B.BILL_DATE,
B.FEE_STATUS,
B.FINISH_TIME,
B.POLICY_YEAR,
B.FEE_AMOUNT
FROM (SELECT A.ITEM_ID,
A.POLICY_ID,
A.PRODUCT_ID,
A.POLICY_PERIOD,
A.ACCOUNT_ID,
A.LIST_ID,
TRUNC(A.BILL_DATE) AS BILL_DATE,
A.FEE_STATUS,
TRUNC(A.FINISH_TIME) AS FINISH_TIME,
A.POLICY_YEAR,
A.FEE_AMOUNT
/*處理A_FIN_PREM_ARAP_INDIV表數據重複問題*/,
RANK() OVER(PARTITION BY A.ITEM_ID, A.POLICY_PERIOD ORDER BY A.LIST_ID DESC) RK
FROM A_FIN_PREM_ARAP_INDIV A
WHERE A.SERVICE_ID = 3
AND A.FEE_TYPE = 41) B,
(SELECT C.CR_FEE_ID, MAX(D.ACCOUNT_ID) AS ACCOUNT_ID
FROM A_FIN_CASH_INDIV D, A_FIN_OFFSET_DETAIL C
WHERE D.FEE_TYPE = 11
AND C.DR_FEE_ID = D.FEE_ID
--AND C.CR_FEE_ID = A.LIST_ID
AND C.CR_TABLE = 4
AND C.DR_TABLE = 1
GROUP BY C.CR_FEE_ID) E
WHERE B.LIST_ID = E.CR_FEE_ID(+)
AND B.RK = 1),
/*-------------續期應收信息 自墊前一刻應收保費--------------*/
TMP_ARAP_INIT AS
(SELECT ITEM_ID, FEE_AMOUNT, DUE_TIME, POLICY_YEAR, POLICY_PERIOD
FROM (SELECT T.ITEM_ID,
T.FEE_AMOUNT,
T.DUE_TIME,
T.POLICY_YEAR,
T.POLICY_PERIOD,
RANK() OVER(PARTITION BY T.ITEM_ID, T.POLICY_PERIOD ORDER BY T.LIST_ID) RK
FROM A_FIN_PREM_ARAP_INDIV T
WHERE T.FEE_STATUS = 2) C
WHERE EXISTS (SELECT 1
FROM A_FIN_PREM_ARAP_INDIV A, A_FIN_PREM_ARAP_INDIV B
WHERE A.SERVICE_ID = 14
AND A.FEE_TYPE = 33
AND A.FEE_STATUS = 1
AND A.CHANGE_ID = B.CHANGE_ID
AND B.SERVICE_ID = 3
AND B.DUE_TIME = C.DUE_TIME)
AND C.RK = 1),
TMP_ARAP2 AS
(SELECT DISTINCT T1.POLICY_ID,
T1.PRODUCT_ID,
T1.BILL_DATE,
T4.TRANSFER_DATE AS FINISH_TIME /*最近轉賬日期*/,
CASE
WHEN T4.STATUS = 'Y' AND T4.TEXT_STATUS = 4 THEN
'轉賬成功'
WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 4 THEN
'轉賬失敗'
WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 2 THEN
'轉賬中'
END AS FEE_STATUS /*轉賬狀態*/,
(CASE
WHEN T4.STATUS = 'N' AND T4.TEXT_STATUS = 4 THEN
(SELECT MAX(NVL(A1.BACK_MESSAGE,
A1.OTHER_REJECTION_REASON1)) KEEP(DENSE_RANK LAST ORDER BY A1.TRANSFER_DATE, A1.INSERTED_TIMESTAMP)
FROM (SELECT CASE
WHEN T.UNSUCCESS_ID = 5630 THEN
'客戶賬號號碼或者賬號姓名不正確'
ELSE
T.OTHER_REJECTION_REASON
END AS OTHER_REJECTION_REASON1,
T.*
FROM A_FIN_BANK_TEXT_DETAIL_INDIV T) A1
WHERE A1.MASTER_CHG_ID = T1.CHANGE_ID
AND A1.STATUS = 'N'
AND A1.COLLECT_PAY = '1'
AND A1.TEXT_STATUS = '4')
ELSE
''
END) AS FAIL_TRANS_REASON /*轉賬失敗原因*/,
NVL(T2.TRANS_FAIL_NUM, 0) AS TRANS_FAIL_NUM /*轉賬失敗次數*/
/*,NVL((SELECT TRANS_FAIL_NUM
FROM (SELECT T.POLICY_ID
,T.MASTER_CHG_ID
,COUNT(1) AS TRANS_FAIL_NUM
FROM A_FIN_BANK_TEXT_DETAIL_INDIV T
WHERE T.COLLECT_PAY = 1
AND T.TEXT_STATUS = 4
AND T.STATUS = 'N'
AND T.BUSINESS_SOURCE <> 3
GROUP BY T.POLICY_ID
,T.MASTER_CHG_ID) A
WHERE T1.POLICY_ID = A.POLICY_ID(+)
AND T1.CHANGE_ID = A.MASTER_CHG_ID(+))
,0) TRANS_FAIL_NUM_1*/
/*,(CASE
WHEN ((T2.SUSPEND_IND = 'Y' AND T2.SUSPEND_SOURCE_TYPE = 2) OR
(T2.SUSPEND_IND = 'Y' AND T2.SUSPEND_SOURCE_TYPE = 1 AND T2.TRANS_FAIL_NUM = 6)) THEN
'是'
ELSE
'否'
END) AS IS_FROZEN \*是否凍結*\*/,
(CASE
WHEN ((T2.FROM_DATE IS NULL AND T2.SUSPEND_IND = 'Y') OR
(T2.FROM_DATE IS NOT NULL AND
T2.TRANS_FAIL_NUM = 6 AND T2.SUSPEND_IND = 'Y')) THEN
'是'
ELSE
'否'
END) AS IS_FROZEN /*是否凍結*/,
(CASE
WHEN T3.STATUS = 2 THEN
'待發放'
WHEN T3.STATUS = 4 THEN
'已回銷'
ELSE
''
END) AS RENEWAL_DOC_STATUS
FROM (SELECT A.POLICY_ID,
A.PRODUCT_ID,
A.FEE_STATUS,
A.FINISH_TIME,
A.CHANGE_ID,
A.BILL_DATE,
A.DUE_TIME
-- ,ROW_NUMBER() OVER(PARTITION BY A.POLICY_ID, A.PRODUCT_ID, A.BILL_DATE ORDER BY A.FINISH_TIME DESC) AS RK
FROM A_FIN_PREM_ARAP_INDIV A, A_EVT_POLICY_CHANGE B
WHERE B.SERVICE_ID = 3
AND A.POLICY_CHG_ID = B.POLICY_CHG_ID
AND A.FEE_TYPE = 41) T1,
(SELECT *
FROM A_EVT_TRANSFER_SUSPEND T
WHERE T.COLLECT_PAY = 1
AND T.SUSPEND_TYPE = 2) T2,
(SELECT T.POLICY_ID, TRUNC(T.DUE_DATE) AS DUE_DATE, T.STATUS
FROM A_EVT_DOCUMENT T
WHERE T.TEMPLATE_ID = 1031) T3
,
(SELECT POLICY_ID,
STATUS,
TEXT_STATUS,
TRANSFER_DATE,
DUE_TIME,
MASTER_CHG_ID
FROM (SELECT RANK() OVER(PARTITION BY T.POLICY_ID, T.DUE_TIME ORDER BY T.TRANSFER_DATE DESC, T.INSERTED_TIMESTAMP DESC) RK,
T.POLICY_ID,
T.STATUS,
T.TEXT_STATUS,
TRUNC(T.TRANSFER_DATE) AS TRANSFER_DATE,
T.DUE_TIME,
T.MASTER_CHG_ID
FROM A_FIN_BANK_TEXT_DETAIL_INDIV T
WHERE T.COLLECT_PAY = 1
AND T.TEXT_STATUS <> 5
AND T.BUSINESS_SOURCE <> 3)
WHERE RK = 1) T4
WHERE T1.POLICY_ID = T4.POLICY_ID
AND T1.CHANGE_ID = T4.MASTER_CHG_ID and t1.due_time = t4.DUE_TIME
AND T1.POLICY_ID = T2.POLICY_ID(+)
AND T1.DUE_TIME = T2.DUE_DATE(+) and t1.change_id=t2.master_change_id(+)
AND T4.POLICY_ID = T3.POLICY_ID(+)
AND T4.DUE_TIME = T3.DUE_DATE(+)),
--離職單人員的相關信息
TMP AS
(SELECT T.POLICY_ID,
A.AGENT_ID,
A.AGENT_CODE,
C.FIRST_NAME,
NVL(NVL(C.MOBILE, C.OFFICE_TEL), C.HOME_TEL) MOBILE,
A.AGENT_STATUS,
D.LV3_CHANNEL_ORG_NAME,
D.LV3_LEADER_NAME,
D.LV2_CHANNEL_ORG_NAME,
D.LV2_LEADER_NAME,
D.LV1_CHANNEL_ORG_NAME,
D.LV1_LEADER_NAME
FROM A_PTY_POLICY_PRODUCER_ROLE T,
A_ORG_AGENT A,
A_PTY_INDIV_CUST C,
D_CHANNEL_ORG D
WHERE T.PRODUCER_ID = A.AGENT_ID
AND A.AGENT_ID = C.CUSTOMER_ID
AND A.AGENT_CODE = D.AGENT_CODE
AND T.ACTIVE_INDI = 'Y'
AND T.PRODUCER_ROLE = 1
AND D.END_DATE = DATE '9999-12-31')
/*-------------續期保單信息-------------*/
SELECT TT.POLICY_ID,
TT.ITEM_ID,
TT.POLICY_CODE,
TT.ORGAN_ID,
TT.LV3_ORGAN_NAME,
TT.PRODUCT_ID,
TT.PRODUCT_CODE,
TT.PRODUCT_ABBR_NAME,
TT.POLICY_YEAR,
TT.POLICY_PERIOD,
TT.ISSUE_DATE,
TT.VALIDATE_DATE,
TT.BILL_DATE,
TT.PAID_DATE,
TT.NEXT_ISSUE_DATE,
TT.INVALID_DATE,
TT.LIABILITY_STATE_CODE,
TT.LIABILITY_STATE_NAME,
TT.IS_PAID_CODE,
TT.IS_PAID_NAME,
TT.TOTAL_PREM_AF,
TT.DUE_PREM,
TT.DUE_PREM_HL,
TT.DUE_PREM_SCJ,
TT.HOLDER_NAME,
TT.INSURED_NAME,
TT.ROP_APPLICABLE,
TT.HOLDER_MOBILE,
TT.BILL_BANK_NAME,
TT.ACCO_NAME,
TT.BANK_ACCOUNT,
TT.SALES_CHANNEL_CODE,
TT.SALES_CHANNEL_NAME,
TT.SUBMIT_CHANNEL_CODE,
TT.SUBMIT_CHANNEL_NAME,
TT.AGENT_NAME,
TT.AGENT_CODE,
TT.LV2_CHANNEL_ORG_NAME,
TT.LV3_CHANNEL_ORG_CODE,
TT.LV3_CHANNEL_ORG_NAME,
TT.AGENT_MOBILE,
TT.IS_ORPHAN_PLY,
TT.LV1_BANK_CODE,
TT.LV1_BANK_NAME,
TT.LV4_BANK_NAME,
TT.LV6_BANK_NAME,
TT.SELL_TELLER_NAME,
TT.RENEWAL_FEE_STATUS,
TT.INVALID_DAY,
TT.REINSTATE_DATE,
TT.CHARGE_MODE_CODE,
TT.CHARGE_MODE_NAME,
TT.CHARGE_PERIOD_CODE,
TT.CHARGE_PERIOD_NAME,
TT.COVERAGE_PERIOD_CODE,
TT.COVERAGE_PERIOD_NAME,
TT.COVERAGE_YEAR,
TT.CHARGE_YEAR,
TT.AMOUNT,
TT.INS_TYPE,
TT.ETL_UPDATE_TIME,
B1.FINISH_TIME /*最近轉賬日期*/,
B1.FEE_STATUS /*轉賬狀態*/,
B1.FAIL_TRANS_REASON /*轉賬失敗原因*/,
B1.TRANS_FAIL_NUM /*轉賬失敗次數*/,
B1.RENEWAL_DOC_STATUS /*續期函件*/,
B1.IS_FROZEN /*是否凍結*/,
TT.AGENT_STATUS_CODE,
TT.AGENT_STATUS_NAME,
TT.REN_FEE_TYPE,
TT.SURRENDER_DATE /*退保日期*/,
TT.RENEW_DECISION /*自動續保標誌:1 表示自動續保,0 表示非自動續保*/,
TT.VALIDATE_DATE_ORIGINAL /*原始生效日期*/,
TT.DUE_PREM_PRE_APL /*自墊前一個應繳保費*/,
TT.IS_PERMIT_APL,
TT.APL_STATUS,
DECODE(TT.IS_ORPHAN_PLY, 'Y', C.AGENT_CODE, TT.AGENT_CODE) CUR_AGENT_CODE,
DECODE(TT.IS_ORPHAN_PLY, 'Y', C.FIRST_NAME, TT.AGENT_NAME) CUR_AGENT_NAME,
DECODE(TT.IS_ORPHAN_PLY, 'Y', C.MOBILE, TT.AGENT_MOBILE) CUR_AGENT_PHONE,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
DECODE(C.AGENT_STATUS, '1', '離職', '在職'),
'在職') CUR_AGENT_STATUS,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV3_CHANNEL_ORG_NAME,
D.LV3_CHANNEL_ORG_NAME) CUR_AGENT_LV3_CHANNEL_ORG_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV3_LEADER_NAME,
D.LV3_LEADER_NAME) CUR_AGENT_LV3_LEADER_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV2_CHANNEL_ORG_NAME,
D.LV2_CHANNEL_ORG_NAME) CUR_AGENT_LV2_CHANNEL_ORG_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV2_LEADER_NAME,
D.LV2_LEADER_NAME) CUR_AGENT_LV2_LEADER_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV1_CHANNEL_ORG_NAME,
D.LV1_CHANNEL_ORG_NAME) CUR_AGENT_LV1_CHANNEL_ORG_NAME,
DECODE(TT.IS_ORPHAN_PLY,
'Y',
C.LV1_LEADER_NAME,
D.LV1_LEADER_NAME) CUR_AGENT_LV1_LEADER_NAME,
LIABILITY_STATE_CAUSE_CODE,
LIABILITY_STATE_CAUSE_NAME
FROM (SELECT T1.POLICY_ID /*保單ID*/,
T1.ITEM_ID /*保單責任ID*/,
T1.POLICY_CODE /*保單號*/,
T1.ORGAN_ID /*機構代碼*/,
T1.LV3_ORGAN_NAME /*機構名稱*/,
T1.PRODUCT_ID /*險種ID*/,
T1.PRODUCT_CODE /*險種代碼*/,
T1.PRODUCT_ABBR_NAME /*險種名稱*/,
NVL(T2.POLICY_YEAR, 1) AS POLICY_YEAR /*繳費年*/,
NVL(T2.POLICY_PERIOD, 1) AS POLICY_PERIOD /*繳費期*/,
T1.ISSUE_DATE /*承保日期*/,
T1.VALIDATE_DATE /*生效日期*/,
T2.BILL_DATE /*應收日期*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NULL THEN
DECODE(T2.FEE_STATUS, 1, T2.FINISH_TIME)
ELSE
T11.FINISH_TIME
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
T14.FINISH_TIME
ELSE
NULL
END)
END) AS PAID_DATE /*實收日期*/,
(CASE
WHEN T11.ITEM_ID IS NULL THEN
T6.DUE_DATE
WHEN T11.ITEM_ID IS NOT NULL AND
T1.CHARGE_MODE_CODE = '1' THEN
ADD_MONTHS(T2.BILL_DATE, 12)
WHEN T11.ITEM_ID IS NOT NULL AND
T1.CHARGE_MODE_CODE = '4' THEN
ADD_MONTHS(T2.BILL_DATE, 1)
END) AS NEXT_ISSUE_DATE /*下期應收日期*/,
(CASE
WHEN T1.LIABILITY_STATE_CODE = 2 AND T2.FEE_STATUS <> 1 THEN
T1.INVALID_DATE
ELSE
NULL
END) AS INVALID_DATE /*停效日期*/,
T1.LIABILITY_STATE_CODE /*保單狀態代碼*/,
T1.LIABILITY_STATE_NAME /*保單狀態*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NULL THEN
DECODE(T2.FEE_STATUS, 1, 'Y', 'N')
ELSE
'Y'
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
'Y'
ELSE
'N'
END)
END) AS IS_PAID_CODE /*交費狀態代碼*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NULL THEN
DECODE(T2.FEE_STATUS, 1, '已交', '應交')
ELSE
'已交'
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
'已交'
ELSE
'應交'
END)
END) AS IS_PAID_NAME /*交費狀態*/,
NVL(T9.TOTAL_PREM_AF, 0) AS TOTAL_PREM_AF /*首期保費*/,
NVL(T2.FEE_AMOUNT, 0) AS DUE_PREM /*應收保費*/
------------------------------------------------------------------------------
--對於已自墊的保單,“應收保費”字段顯示自墊前一刻的續期保費
,
CASE
WHEN T14.ITEM_ID IS NOT NULL THEN
NVL(TT.FEE_AMOUNT, 0)
ELSE
NVL(T2.FEE_AMOUNT, 0)
END AS DUE_PREM_PRE_APL
---------------------------------------------------------------------------------
,
NVL(T12.FEE_AMOUNT, 0) AS DUE_PREM_HL /*紅利抵交保費*/,
0 AS DUE_PREM_SCJ /*生存金抵交保費*/,
T1.HOLDER_NAME /*投保人*/,
T1.INSURED_NAME /*被保人*/,
T1.ROP_APPLICABLE /*自保件標誌*/,
T5.MOBILE || '/' || T5.OFFICE_TEL || '/' || T5.HOME_TEL AS HOLDER_MOBILE /*客戶電話*/,
T4.BANK_NAME AS BILL_BANK_NAME /*開戶銀行*/,
T3.ACCO_NAME /*繳費戶名*/,
T3.BANK_ACCOUNT /*繳費賬號*/,
T1.SALES_CHANNEL_CODE /*銷售渠道代碼*/,
T1.SALES_CHANNEL_NAME /*銷售渠道*/,
T1.SUBMIT_CHANNEL_CODE /*出單渠道代碼*/,
T1.SUBMIT_CHANNEL_NAME /*出單渠道*/,
T1.AGENT_NAME /*銷售人員*/,
T1.AGENT_CODE /*銷售人員代碼*/,
T1.LV2_CHANNEL_ORG_NAME /*營業部門*/,
T1.LV3_CHANNEL_ORG_CODE /*營業部代碼*/,
T1.LV3_CHANNEL_ORG_NAME /*營業部名稱*/,
T1.LV1_CHANNEL_ORG_NAME /*營業區名稱*/,
T7.MOBILE || '/' || T7.OFFICE_TEL || '/' || T7.HOME_TEL AS AGENT_MOBILE /*銷售人員電話*/,
DECODE(T8.AGENT_STATUS, 1, 'Y', 'N') AS IS_ORPHAN_PLY /*孤兒單標誌:Y/N*/,
T1.LV1_BANK_CODE /*總行代碼*/,
T1.LV1_BANK_NAME /*總行名稱*/,
T1.LV4_BANK_NAME /*支行名稱*/,
T1.LV6_BANK_NAME /*網點名稱*/,
T1.SELL_TELLER_NAME /*銀行銷售人員*/,
(CASE
WHEN T14.ITEM_ID IS NULL THEN
(CASE
WHEN T11.ITEM_ID IS NOT NULL THEN
'超期已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
'應交已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
'寬一已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'寬末已交'
WHEN T2.FEE_STATUS = 1 AND
TO_CHAR(T2.FINISH_TIME, 'yyyymm') >
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'超期已交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
'應交未交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
'寬一未交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'寬末未交'
WHEN T2.FEE_STATUS <> 1 AND
TO_CHAR(SYSDATE, 'yyyymm') >
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'超期未交'
ELSE
NULL
END)
ELSE
(CASE
WHEN T14.FINISH_TIME IS NOT NULL THEN
'自墊還款'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(T2.BILL_DATE, 'yyyymm') THEN
'應交未交'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 1), 'yyyymm') THEN
'寬一未交'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') =
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'寬末未交'
WHEN T14.FINISH_TIME IS NULL AND
TO_CHAR(SYSDATE, 'yyyymm') >
TO_CHAR(ADD_MONTHS(T2.BILL_DATE, 2), 'yyyymm') THEN
'超期未交'
ELSE
NULL
END)
END) AS RENEWAL_FEE_STATUS /*續期指標狀態*/,
(CASE
WHEN T1.LIABILITY_STATE_CODE = 2 AND T2.FEE_STATUS <> 1 THEN
TRUNC(SYSDATE) - T1.INVALID_DATE
ELSE
NULL
END) AS INVALID_DAY /*保單停效天數*/,
T11.FINISH_TIME AS REINSTATE_DATE /*最近復效時間*/,
T1.CHARGE_MODE_CODE /*繳費頻次代碼(繳費方式)*/,
T1.CHARGE_MODE_NAME /*繳費頻次名稱(繳費方式)*/,
T1.CHARGE_PERIOD_CODE /*繳費年期類型代碼*/,
T1.CHARGE_PERIOD_NAME /*繳費年期類型名稱*/,
T1.COVERAGE_PERIOD_CODE /*保障年期類型代碼*/,
T1.COVERAGE_PERIOD_NAME /*保障年期類型名稱*/,
T1.COVERAGE_YEAR /*保險期間(年)*/,
T1.CHARGE_YEAR /*交費期限(年)*/,
T1.AMOUNT /*保額*/,
T1.INS_TYPE /* 是否主險:Y主險,N附加險*/,
SYSDATE AS ETL_UPDATE_TIME /*ETL時間*/,
nvl(T13.AGENT_STATUS, ta.agent_status) AS AGENT_STATUS_CODE /*人員狀態代碼*/,
(SELECT TAS.DESCRIPTION
FROM A_COD_BACM_ORG_STATUS TAS
WHERE TAS.AGT_ORG_STATUS_CODE = T13.AGENT_STATUS) AS AGENT_STATUS_NAME /*人員狀態名稱*/,
(CASE
WHEN T11.ITEM_ID IS NOT NULL THEN
2
WHEN T14.ITEM_ID IS NOT NULL THEN
4
ELSE
1
END) AS REN_FEE_TYPE,
T1.SURRENDER_DATE /*退保日期*/,
T9.RENEW_DECISION /*自動續保標誌:1 表示自動續保,0 表示非自動續保*/,
T9.VALIDATE_DATE_ORIGINAL /*原始生效日期*/,
CASE
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' THEN
'是'
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '1' THEN
'否'
ELSE
''
END AS IS_PERMIT_APL /*是否同意自墊*/,
CASE
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
T14.ITEM_ID IS NULL THEN
'未自墊'
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
T14.ITEM_ID IS NOT NULL AND T14.ITEM_ID_PAY IS NULL THEN
'已自墊'
WHEN T16.APL_PERMIT = 'Y' AND T15.OVERDUE_MANAGE = '2' AND
T14.ITEM_ID IS NOT NULL AND
T14.ITEM_ID_PAY IS NOT NULL THEN
'已還款'
ELSE
''
END AS APL_STATUS /*墊交狀態*/
,
t1.LIABILITY_STATE_CAUSE_CODE,
t1.LIABILITY_STATE_CAUSE_NAME
FROM M_PUB_POLICYPREM_T1 T1,
TMP_ARAP T2,
TMP_ARAP_INIT TT,
A_PTY_BANK_ACCOUNT T3,
A_ORG_BANK T4,
A_PTY_INDIV_CUST T5 /*取投保人信息*/,
A_AGT_POLICY_EXTEND T6,
A_PTY_INDIV_CUST T7 /*取代理人信息*/,
A_ORG_AGENT T8,
(SELECT T.ITEM_ID,
T.RENEW_DECISION,
T.TOTAL_PREM_AF,
CASE
WHEN T.RENEW_DECISION = '1' THEN
(SELECT A.VALIDATE_DATE
FROM A_AGT_POLICY_PRD_INDIV A
WHERE A.ITEM_ID = T.MASTER_ID)
ELSE
NVL(T.INITIAL_VALI_DATE, T.VALIDATE_DATE)
END AS VALIDATE_DATE_ORIGINAL
FROM A_AGT_POLICY_PRD_INDIV T) T9,
(SELECT ITEM_ID,
POLICY_YEAR,
POLICY_PERIOD,
FEE_AMOUNT,
TRUNC(BILL_DATE) AS BILL_DATE /*應繳日期*/,
TRUNC(FINISH_TIME) AS FINISH_TIME /*實收日期*/
FROM A_FIN_PREM_ARAP_INDIV
WHERE SERVICE_ID = 194
AND FEE_TYPE = 41
AND FEE_STATUS = 1) T11 /*復效保單數據*/,
(SELECT A.ITEM_ID,
A.POLICY_PERIOD,
SUM(A.FEE_AMOUNT) AS FEE_AMOUNT
FROM A_FIN_PREM_ARAP_INDIV A
WHERE A.SERVICE_ID = 521
AND A.FEE_TYPE = 905
GROUP BY A.ITEM_ID, A.POLICY_PERIOD) T12 /*紅利抵交保費*/,
A_ORG_BANK_AGT_OTHER T13,
a_org_agent ta,
(SELECT A3.ITEM_ID,
A1.FINISH_TIME,
A1.ITEM_ID AS ITEM_ID_PAY,
A1.FEE_AMOUNT,
A3.POLICY_PERIOD
FROM (SELECT A.ITEM_ID,
A.POLICY_CHG_ID,
B.PRE_POLICY_CHG,
TRUNC(A.FINISH_TIME) FINISH_TIME,
A.POLICY_PERIOD,
SUM(A.FEE_AMOUNT) AS FEE_AMOUNT
FROM A_FIN_PREM_ARAP_INDIV A,
A_EVT_POLICY_CHANGE B
WHERE A.POLICY_CHG_ID = B.POLICY_CHG_ID
AND B.SERVICE_ID = 302
AND B.POLICY_CHG_STATUS = 2
AND A.FEE_STATUS = 1
GROUP BY A.ITEM_ID,
A.POLICY_CHG_ID,
B.PRE_POLICY_CHG,
TRUNC(A.FINISH_TIME),
A.POLICY_PERIOD) A1 /*自墊清償*/,
(SELECT T.ITEM_ID,
T.POLICY_CHG_ID,
SUM(T.FEE_AMOUNT),
T.POLICY_PERIOD
FROM A_FIN_PREM_ARAP_INDIV T
WHERE T.SERVICE_ID = 3
AND T.FEE_TYPE = 41
AND T.FINISH_TIME IS NOT NULL
AND EXISTS
(SELECT 1
FROM A_FIN_PREM_ARAP_INDIV A, A_EVT_POLICY_CHANGE B
WHERE A.POLICY_CHG_ID = B.POLICY_CHG_ID
and b.SERVICE_ID = 14
and b.policy_chg_status = 2
AND A.FEE_TYPE = 33
AND A.FEE_STATUS = 1
AND T.POLICY_CHG_ID = A.POLICY_CHG_ID)
AND T.FEE_AMOUNT > 0 GROUP BY T.ITEM_ID,
T.POLICY_CHG_ID,
T.POLICY_PERIOD) A3 /*自動保費墊交*/
WHERE A3.ITEM_ID = A1.ITEM_ID(+)
AND A3.POLICY_CHG_ID = A1.PRE_POLICY_CHG(+)) T14 /*自動保費墊交*/,
A_AGT_POLICY_PRD_INDIV T15,
A_PRD_INFO T16
WHERE T1.ITEM_ID = T2.ITEM_ID(+)
AND T2.ITEM_ID = TT.ITEM_ID(+)
AND T2.POLICY_PERIOD = TT.POLICY_PERIOD(+)
AND T1.IS_REVERSE = 'N'
AND T1.CHARGE_MODE_CODE <> '5' /*期繳*/
AND T1.LIABILITY_STATE_CODE NOT IN ('0', '31', '33') --剔除待生效、契撤、銀保通當日退保(這些單不可能產生續期)
AND T2.ACCOUNT_ID = T3.ACCOUNT_ID(+)
AND T3.BANK_CODE = T4.BANK_CODE(+)
AND T1.HOLDER_ID = T5.CUSTOMER_ID(+)
AND T1.ITEM_ID = T6.ITEM_ID(+)
AND T1.AGENT_ID = T7.CUSTOMER_ID(+)
AND T1.AGENT_ID = T8.AGENT_ID(+)
AND T1.ITEM_ID = T9.ITEM_ID(+)
AND T2.ITEM_ID = T11.ITEM_ID(+)
AND T2.BILL_DATE = T11.BILL_DATE(+)
AND T2.ITEM_ID = T12.ITEM_ID(+)
AND T2.POLICY_PERIOD = T12.POLICY_PERIOD(+)
AND T2.ITEM_ID = T14.ITEM_ID(+)
AND T2.POLICY_PERIOD = T14.POLICY_PERIOD(+)
AND T1.AGENT_ID = T13.AGENT_ID(+)
AND T1.AGENT_ID = Ta.AGENT_ID(+)
AND T1.POLICY_ID = T15.POLICY_ID
AND T1.PRODUCT_ID = T15.PRODUCT_ID
AND T15.PRODUCT_ID = T16.PRODUCT_ID
AND T13.IS_VALID(+) = 'Y') TT,
TMP_ARAP2 B1,
TMP C,
(SELECT T.AGENT_CODE,
T.LV1_CHANNEL_ORG_NAME,
T.LV1_LEADER_NAME,
T.LV2_CHANNEL_ORG_NAME,
T.LV2_LEADER_NAME,
T.LV3_CHANNEL_ORG_NAME,
T.LV3_LEADER_NAME
FROM D_CHANNEL_ORG T
WHERE T.END_DATE = DATE '9999-12-31') D
WHERE TT.POLICY_ID = B1.POLICY_ID(+)
AND TT.PRODUCT_ID = B1.PRODUCT_ID(+)
AND TT.BILL_DATE = B1.BILL_DATE(+)
AND TT.AGENT_CODE = D.AGENT_CODE(+)
AND TT.POLICY_ID = C.POLICY_ID(+);
/*獲取受影響行數*/
V_INT_ROW_CNT := SQL%ROWCOUNT;
COMMIT; ---提交DML操作
------------------------------修改主險是自墊保費,附加險也調整成自墊保費---------------------------------------------
UPDATE MID_DATA.M_PUB_POLICYREN T
SET T.REN_FEE_TYPE = 4
WHERE EXISTS (SELECT 1
FROM MID_DATA.M_PUB_POLICYREN S
WHERE S.REN_FEE_TYPE = 4
AND S.INS_TYPE = 'Y'
AND S.POLICY_CODE = T.POLICY_CODE)
AND T.INS_TYPE = 'N';
COMMIT; ---提交DML操作
/*DML運行結束時間*/
V_DTE_RUN_END_DT := SYSDATE;
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_AGENT_CODE on MID_DATA.M_PUB_POLICYREN (AGENT_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_BILL_DATE on MID_DATA.M_PUB_POLICYREN (BILL_DATE)',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_IS_PAID_CODE on MID_DATA.M_PUB_POLICYREN (IS_PAID_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);*/
/* SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_LBT_S_CD on MID_DATA.M_PUB_POLICYREN (LIABILITY_STATE_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('create bitmap index IDX_M_PUB_PRN_ORGAN_ID on MID_DATA.M_PUB_POLICYREN (ORGAN_ID)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create bitmap index IDX_M_PUB_PRN_PRD_CD on MID_DATA.M_PUB_POLICYREN (PRODUCT_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);
/* SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_SLS_CHNL_CD on MID_DATA.M_PUB_POLICYREN (SALES_CHANNEL_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_SUB_CHNL_CD on MID_DATA.M_PUB_POLICYREN (SUBMIT_CHANNEL_CODE)',
O_RESULT_FLAG,
O_RESULT_MSG);*/
SP_TRUNCATE_TBL_MID('create index IDX_M_PUB_PRN_PLY_ID on MID_DATA.M_PUB_POLICYREN (POLICY_ID)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('create index IDX_MPP_DATE_ORIGINAL on MID_DATA.M_PUB_POLICYREN (VALIDATE_DATE_ORIGINAL)',
O_RESULT_FLAG,
O_RESULT_MSG);
SP_TRUNCATE_TBL_MID('alter table MID_DATA.M_PUB_POLICYREN add constraint PK_M_PUB_POLICYREN primary key (ITEM_ID, POLICY_PERIOD)',
O_RESULT_FLAG,
O_RESULT_MSG);
/*記錄成功的日誌信息*/
PKG_PUBLIC.SP_ETL_LOAD_DML_LOG(V_INT_STEP,
I_DATA_START_TIME /*數據開始日期*/,
I_DATA_END_TIME /*數據結束日期*/,
I_ORG_ID /*機構代碼*/,
V_VAR_PROC_NAME /*存儲過程名稱*/,
V_VAR_STEP_DESC /*操作步驟描述*/,
V_VAR_STEP_DML_TYPE /*操作類型*/,
V_INT_ROW_CNT /*受影響行數*/,
V_VAR_CST_SUCCESS /*執行結果*/,
V_DTE_RUN_BEGIN_DT /*運行開始時間*/,
V_DTE_RUN_END_DT /*運行結束時間*/,
'' /*運行結果詳細信息*/);
/*整個過程執行成功*/
O_RESULT_FLAG := V_VAR_CST_RESULT_SUCC;
/*整個過程運行結果描述信息*/
O_RESULT_MSG := '';
/*異常處理部分*/
EXCEPTION
WHEN OTHERS THEN
---回滾DML操作
ROLLBACK;
/*記錄異常信息*/
O_RESULT_FLAG := V_VAR_CST_RESULT_FAIL; ----失敗
O_RESULT_MSG := SQLERRM;
---記錄異常日誌信息
PKG_PUBLIC.SP_ETL_LOAD_DML_LOG(V_INT_STEP,
I_DATA_START_TIME /*數據開始日期*/,
I_DATA_END_TIME /*數據結束日期*/,
I_ORG_ID /*機構代碼*/,
V_VAR_PROC_NAME /*存儲過程名稱*/,
V_VAR_STEP_DESC /*操作步驟描述*/,
V_VAR_STEP_DML_TYPE /*操作步驟類型*/,
V_INT_ROW_CNT /*返回的受影響行數*/,
V_VAR_CST_FAIL /*運行結果 0 失敗; 1 成功*/,
V_DTE_RUN_BEGIN_DT /*運行開始時間*/,
V_DTE_RUN_END_DT /*運行結束時間*/,
O_RESULT_MSG /*運行結果詳細信息*/);
END SP_M_PUB_POLICYREN;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.