Beruflich Dokumente
Kultur Dokumente
Date: 02/07/2019
Version Changes Date Author
NBG Bank Malta Ltd. has an audit finding in relation to how the data from the data warehouse is being
picked up. Currently, the data is being filtered by using “TIMECODE” which can also be referred to as
“Booking Date”. TIMECODE is an additional column automatically generated from an automated job
which runs daily after T24 COB. It is used in order to keep history of the DAILY COB files generated
every working day.
Issue:
The AD-HOC reports are generated and downloaded daily by Finance Department using the link
provided by NBGM IT Department to MS SQL REPORTING SERVICES.
Scenario:
Today is 02/07/2019, Finance Department downloaded the report from the previous day
(01/07/2019). The data is filtered by “TIMECODE” and not by “VALUEDATE”. If Loans Department or
Operations Department inputs a transaction with VALUEDATE 16/06/2019, the transaction will be
picked up under report with TIMECODE 02/07/2019 making it difficult for Finance to pin point it. This
issue is also on future dated transactions.
Request:
Implementation of the reports which needs to be filtered using “VALUEDATE” on T24. To also have
functionality to be downloaded and transformed to Excel files.
Reports:
Reports can be opened using Microsoft® SQL Server® 2016 Report Builder
https://www.microsoft.com/en-us/download/confirmation.aspx?id=53613
1|Page
RPT_ACCOUNTS_T24
Columns:
EXTERNAL ID NUMBER
OBJECT CURRENCY
BALANCE
EURBALANCE
ID
NAME 1
RESIDENCE
NATIONALITY
COUNTRY
INDUSTRY
SECTOR
TARGET
CUSTOMER STATUS
MNEMONIC
MISUNITS
GROUP COMPANY CODE
MISCOUNTRY
NACEL2
NACEL1
JOINT HOLDERS
MIS GREEK
JOINT HOLDERS COUNT
IS SHIPPING
ISGROUP
2|Page
Query:
SELECT EXTERNAL_ID_NUMBER,M.OBJECT_CURRENCY,ISNULL(CAST(BN.BALANCE_IN_OC AS
DECIMAL(15,2)),0) * -1 BALANCE
,DBO.TOMARKETEURO_T24( ISNULL(CAST(BN.BALANCE_IN_OC AS DECIMAL(15,2)),0) * -1
,M.OBJECT_CURRENCY,@TIMECODE) EURBALANCE,
C.*,
dbo.[GETJOINTTIMEDEPOSITHOLDERS](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) JOINT_HOLDERS,
CASE WHEN [dbo].[GETJOINTTIMEDEPOSITHOLDERSCOUNT](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) =
0 THEN 1 ELSE
[dbo].[GETJOINTTIMEDEPOSITHOLDERSCOUNT](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) + 1 END
[JOINT_HOLDERS_COUNT]
FROM HISTORY_T24RPT_ACC M
LEFT JOIN HISTORY_T24RPT_BLN BN ON BN.EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND
BN.TIMECODE = @TIMECODE
LEFT JOIN VW_T24CUSTOMERS C ON C.ID = M.CUSTOMER_ID
LEFT JOIN Migration.dbo.ACC_ACCOUNT A ON A.OUR_EXT_ACCT_NO = M.EXTERNAL_ID_NUMBER AND
BN.BALANCE_TYPE ='01'
WHERE M.TIMECODE =@TIMECODE AND M.CATEGORY IN (1000, 8999)
AND (BN.ASSET_TYPE NOT IN ('CONTDB', 'CONTDBBL', 'CONTCR', 'CONTCRBL')
OR BN.ASSET_TYPE IS NULL)
ORDER BY 1
Sample
3|Page
RPT_BONDS
Columns
START DATE
DEAL ID
EXTERNAL ID NUMBER
ISIN NUMBER
COUNTERPARTY
COUNTRY
MOODYS DESC
MOODYS RATI
SP DESC
SP RATI
TRADE DATE
VALUE DATE
CURRENCY
COUPON RATE
INTEREST PAYMENT FREQUENCY
LAST COUPON PAYMENT
LAST MARKET PRICE
NOMINAL AMOUNT BANK
NOMINAL AMOUNT BROKER
CLEAN PRICE BANK
PRICE BANK
AMORTISED COST
ACCRUED INTEREST
NEW AMORTISED COST
4|Page
Query
Bonds are currently hard coded because the COB flat files are also showing BONDS which were sold.
USE [ActiveDW]
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Robert Caruana>
-- Alter date: <26/02/2019>
-- Description: <Bonds Report>
-- =============================================
CREATE PROCEDURE [dbo].[RPT_BONDS]
-- Add the parameters for the stored procedure here
@TIMECODE VARCHAR(8)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
;WITH BONDS_CTE AS (
SELECT
START_DATE,
DEAL_ID,
ISIN_NUMBER,
--REMOVE C.NAME_1 BROKER,
CUS.DISPLAY_NAME,
CUS.NATIONALITY,
RAT_M.DESCRIPTION AS MOODYS_DESC,
5|Page
RAT_M.RATING AS MOODYS_RATI,
RAT_SP.DESCRIPTION AS SP_DESC,
RAT_SP.RATING AS SP_RATI,
--REMOVE TRANSACTION_CODE_BANK,
--DEP.NAME_1 DEPOSITORY,
--REMOVE BR_TRANS_CODE_,
CONVERT(varchar(10), CAST(DEAL_DATE AS date)) TRADE_DATE,
CONVERT(varchar(10), CAST(SED.VALUE_DATE AS date)) VALUE_DATE,
OBJECT_CURRENCY,
COUPON_RATE,
INTEREST_PAYMENT_FREQUENCY,
LAST_COUPON_PAYMENT,
LAST_MARKET_PRICE,
SED.NOMINAL_AMOUNT_BANK,
SED.NOMINAL_AMOUNT_BROKER,
CLEAN_PRICE_BANK,
PRICE_BANK,
PRICE_BROKER,
CASE
WHEN DEAL_ID = 'SCTRSC172986ZYQ1' AND (DATEPART(DW,
@TIMECODE)) = 6 THEN -- 6 = FRIDAY, DIVIDE BY 3 BECAUSE SYSTEM CALCULATES ACCRUED INTEREST
FOR FRIDAY + WEEKEND
(CAST(CONVERT(decimal(18,2), SED.NOMINAL_AMOUNT_BANK)
* CONVERT(decimal(18,2), CLEAN_PRICE_BANK)/100 AS decimal(18,2))) +
ISNULL(CAST([dbo].[GETBONDAMORTISEDCOSTADJ](@TIMECODE,
EXTERNAL_ID_NUMBER, 3) AS DECIMAL(10,2)) * (DATEDIFF(DAY, START_DATE, @TIMECODE) +1) ,0)
END
AS AMORTISED_COST,
EXTERNAL_ID_NUMBER,
CASE
WHEN (DATEPART(DW, @TIMECODE)) = 6 THEN -- 6 = FRIDAY,
DIVIDE BY 3 BECAUSE SYSTEM CALCULATES ACCRUED INTEREST FOR FRIDAY + WEEKEND
CAST([dbo].[GETBONDACCRUEDINTEREST](COUPON_RATE,
SED.NOMINAL_AMOUNT_BANK, LAST_COUPON_PAYMENT, @TIMECODE) AS DECIMAL(10,2)) +
CAST([dbo].[GETBONDACCRUEDINTERESTADJ](@TIMECODE,
EXTERNAL_ID_NUMBER, 3) AS DECIMAL(10,2))
6|Page
CAST([dbo].[GETBONDACCRUEDINTERESTADJ](@TIMECODE,
EXTERNAL_ID_NUMBER, 2) AS DECIMAL(10,2))
ELSE
[dbo].[GETBONDACCRUEDINTEREST](COUPON_RATE,
SED.NOMINAL_AMOUNT_BANK, LAST_COUPON_PAYMENT, @TIMECODE)
END AS ACCRUED_INTEREST
END
GO
Sample
7|Page
RPT_MM_T24
Columns
CATEGORY
EXTERNAL ID NUMBER
OBJECT CURRENCY
DEAL DATE
CURRENT INTEREST RATE
FINAL MATURITY DATE
INTEREST RATE KEY
PRINCIPAL
COUNTRY
NAME 1
RESIDENCE
ACCRUAL
NATIONALITY
PRINCIPAL
EUR
INDUSTRY
SECTOR
TARGET
ACCRUAL
EUR
CUSTOMER STATUS
MNEMONIC
MISUNITS
GROUP COMPANY CODE
ISGROUP
NACEL2
NACEL1
8|Page
Query
Sample
9|Page
RPT_NOSTRO_T24
Columns:
EXTERNAL ID NUMBER
NAME 1
NATIONALITY
SECTOR
INDUSTRY
TARGET
COUNTRY1
RESIDENCE
OBJECT CURRENCY
COUNTRY
NACEL1
NACEL2
GROUP COMPANY CODE
MISUNITS
EURBALANCE
BALANCE
Query:
SELECT EXTERNAL_ID_NUMBER,M.OBJECT_CURRENCY,ISNULL(CAST(BN.BALANCE_IN_OC AS
DECIMAL(15,2)),0) * -1 BALANCE
,DBO.TOMARKETEURO_T24( ISNULL(CAST(BN.BALANCE_IN_OC AS DECIMAL(15,2)),0) * -1
,M.OBJECT_CURRENCY,@TIMECODE) EURBALANCE,
C.*
FROM HISTORY_T24RPT_ACC M
LEFT JOIN HISTORY_T24RPT_BLN BN ON BN.EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND
BN.TIMECODE = @TIMECODE
LEFT JOIN VW_T24CUSTOMERS C ON C.ID = M.CUSTOMER_ID
WHERE M.TIMECODE =@TIMECODE AND M.CATEGORY = 5000
AND (BN.ASSET_TYPE NOT IN ('CONTDB', 'CONTDBBL', 'CONTCR', 'CONTCRBL')
OR BN.ASSET_TYPE IS NULL)
ORDER BY 1
10 | P a g e
Sample
RPT_DCS_EX
Columns
ACCRUAL EUR
PRINCIPAL EUR
ID
EXTERNAL ID NUMBER
NAME 1
VALUE DATE
END DATE
RESIDENCE
NATIONALITY
OBJECT CURRENCY
COUNTRY
CURRENT INTEREST RATE
INDUSTRY
SECTOR
TARGET
CUSTOMER STATUS
MNEMONIC
MISUNITS
GROUP COMPANY CODE
MISCOUNTRY
NACEL2
NACEL1
MIS GREEK
DCS
IS SHIPPING
INDUSTRY CODE
ISGROUP
11 | P a g e
Query:
This report runs by using stored procedure name RPT_DCS_CONTRACT
USE [ActiveDW]
GO
SET QUOTED_IDENTIFIER ON
GO
UNION ALL
12 | P a g e
ABS(CAST(RTRIM( DBO.TOMARKETEURO_T24( ISNULL(CAST(BN.BALANCE_IN_OC AS
DECIMAL(15,2)),0) ,M.OBJECT_CURRENCY,@TIMECODE)) AS NUMERIC(15,2))) EURBALANCE,
ABS(CAST(RTRIM(DBO.TOMARKETEURO_T24((SELECT BALANCE_IN_OC FROM HISTORY_T24RPT_BLN
WHERE TIMECODE = @TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND ASSET_TYPE
='50000' ), M.OBJECT_CURRENCY, @TIMECODE)) AS numeric(15,2)) ) ACCRUALEUR,
C.*,
dbo.[GETJOINTTIMEDEPOSITHOLDERS](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))),
CASE WHEN [dbo].[GETJOINTTIMEDEPOSITHOLDERSCOUNT](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) =
0 THEN 1 ELSE
[dbo].[GETJOINTTIMEDEPOSITHOLDERSCOUNT](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) + 1 END
[COUNT_INCLUDING_PRIMARY]
,C.ID CUSTOMERID
FROM HISTORY_T24RPT_ACC M
LEFT JOIN HISTORY_T24RPT_BLN BN ON BN.EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND
BN.TIMECODE = @TIMECODE
LEFT JOIN VW_T24CUSTOMERS C ON C.ID = M.CUSTOMER_ID
LEFT JOIN Migration.dbo.ACC_ACCOUNT A ON A.OUR_EXT_ACCT_NO = M.EXTERNAL_ID_NUMBER
--Added the CLIENTS ACCOUNT categerory 8999
WHERE M.TIMECODE =@TIMECODE AND M.CATEGORY IN (1000, 1030, 8999)
--Filters out the rows having ASSET_TYPE equal to 'CONTDB', 'CONTDBBL', 'CONTCR',
'CONTCRBL'.
--This removes the unecessary two rows from the report.
AND (BN.ASSET_TYPE NOT IN ('CONTDB', 'CONTDBBL', 'CONTCR', 'CONTCRBL') OR
BN.ASSET_TYPE IS NULL)
SELECT ISNULL(ACCRUALEUR/T.JOINT_HOLDERS_COUNT,0)
ACCRUAL_EUR,ISNULL(PRINCIPALEUR/T.JOINT_HOLDERS_COUNT,0) PRINCIPAL_EUR,
T.EXTERNAL_ID_NUMBER,
T.VALUE_DATE,
T.END_DATE,
T.OBJECT_CURRENCY,
T.CURRENT_INTEREST_RATE,
C.ID,
C.NAME_1,
C.RESIDENCE,
C.NATIONALITY,
C.COUNTRY,
C.INDUSTRY,
C.SECTOR,
C.TARGET,
C.CUSTOMER_STATUS,
C.MNEMONIC,
C.MISUNITS,
C.MISCOUNTRY,
C.GROUP_COMPANY_CODE,
C.NACEL2,
C.NACEL1,
C.MIS_GREEK,
C.IS_SHIPPING,
C.ISGROUP,
C.INDUSTRY_CODE,
C.DCS
FROM #DCS_TMP T
JOIN VW_T24CUSTOMERS C ON C.ID = T.CUSTOMERID
UNION ALL
SELECT ISNULL(ACCRUALEUR/T.JOINT_HOLDERS_COUNT,0)
ACCRUAL_EUR,ISNULL(PRINCIPALEUR/T.JOINT_HOLDERS_COUNT,0) PRINCIPAL_EUR,
13 | P a g e
T.EXTERNAL_ID_NUMBER,
T.VALUE_DATE,
T.END_DATE,
T.OBJECT_CURRENCY,
T.CURRENT_INTEREST_RATE,
C.ID,
C.NAME_1,
C.RESIDENCE,
C.NATIONALITY,
C.COUNTRY,
C.INDUSTRY,
C.SECTOR,
C.TARGET,
C.CUSTOMER_STATUS,
C.MNEMONIC,
C.MISUNITS,
C.MISCOUNTRY,
C.GROUP_COMPANY_CODE,
C.NACEL2,
C.NACEL1,
C.MIS_GREEK,
C.IS_SHIPPING,
C.ISGROUP,
C.INDUSTRY_CODE,
C.DCS
FROM #DCS_TMP T
JOIN T24RPT_CTM REL ON REL.EXTERNALT24_ID = T.EXTERNAL_ID_NUMBER
JOIN VW_T24CUSTOMERS C ON C.ID = REL.RELATED_ENTITY_T24_ID
ORDER BY 3
--2281
GO
Sample:
14 | P a g e
RPT_LOANS_T24
Columns:
EXTERNAL ID NUMBER
CATEGORY
OBJECT CURRENCY
OVERDUEPRIN
VALUEDATE
OVERDUEACCRUAL
MATURITYDATE
LOANTYPE
ACCRUAL
TYPE OF RESTRUCTURING
OVERDUEPRIN EUR
OVERDUEINTEREST
OVERDUEINTEREST_EUR
FOREBORNE
COUNTRY
CURRENT INTEREST RATE
OVERDUEACCRUAL EUR
INTEREST RATE SPREAD
PRINCIPAL
ACCRUAL EUR
PRINCIPAL EUR
IFRSCODE
PDSTATUS
PDDAYS
NAME 1
RESIDENCE
NATIONALITY
INDUSTRY
SECTOR
TARGET
CUSTOMER STATUS
MNEMONIC
MISUNITS
ISGROUP
15 | P a g e
GROUP COMPANY CODE
NACEL2
NACEL1
Query:
USE [ActiveDW]
GO
SET QUOTED_IDENTIFIER ON
GO
16 | P a g e
WHERE TIMECODE = @TIMECODE AND EXTERNAL_ID =
M.EXTERNAL_ID_NUMBER AND ASSET_TYPE IN ('51005','51002SP') ),0) AS OVERDUEINTEREST,
(SELECT BALANCE_IN_OC FROM HISTORY_T24RPT_BLN WHERE TIMECODE =
@TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND ASSET_TYPE ='51002' ) AS
OVERDUEACCRUAL,
(SELECT BALANCE_IN_OC FROM HISTORY_T24RPT_BLN WHERE TIMECODE =
@TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND ASSET_TYPE ='51010' ) AS
ACCRUAL,
--(SELECT BALANCE_IN_OC FROM HISTORY_T24RPT_BLN WHERE TIMECODE =
@TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND ASSET_TYPE ='LIVEDB' )
PRINCIPAL,
(SELECT
SUM( CAST(BALANCE_IN_OC AS numeric(15,2)))
FROM HISTORY_T24RPT_BLN
WHERE TIMECODE = @TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND
ASSET_TYPE IN('LIVEDB','50020') ) AS PRINCIPAL,
DBO.[TOMARKETEURO_T24]( (SELECT
[dbo].[TOMARKETEURO_T24](BALANCE_IN_OC,OBJECT_CURRENCY ,@TIMECODE)
FROM HISTORY_T24RPT_BLN
WHERE TIMECODE = @TIMECODE AND EXTERNAL_ID =
M.EXTERNAL_ID_NUMBER AND ASSET_TYPE ='OVERDUEIN' ) , 0) AS numeric(15,2)) +
CAST(ISNULL((SELECT
[dbo].[TOMARKETEURO_T24](BALANCE_IN_OC,OBJECT_CURRENCY ,@TIMECODE)
FROM HISTORY_T24RPT_BLN
WHERE TIMECODE = @TIMECODE AND EXTERNAL_ID =
M.EXTERNAL_ID_NUMBER AND ASSET_TYPE ='51001' ),0) AS numeric(15,2)) +
ISNULL(DBO.TOMARKETEURO_T24((SELECT
BALANCE_IN_OC
FROM
ActiveDW.dbo.HISTORY_T24RPT_BLN
17 | P a g e
WHERE TIMECODE =
@TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND ASSET_TYPE IN
('51005','51002SP') ),OBJECT_CURRENCY,@TIMECODE),0) AS OVERDUEINTEREST_EUR,
IFRS.IFRS,
LS.IMPAIRED,
PD.DAYS,
PDS.DESCRIPTION AS PDSTATUS,
C.*
FROM HISTORY_T24RPT_LNS M
LEFT JOIN VW_T24CUSTOMERS C ON C.ID = M.CUSTOMER_ID
LEFT JOIN LU_CATEGORY CAT ON CAT.ID = M.T24_CATEGORY
LEFT JOIN LU_RESTRUCTURING_TYPE RT ON RT.ID = M.TYPE_OF_RESTRUCTURING
LEFT JOIN VW_LOANSTATUS LS ON LS.EXTERNAL_ID_NUMBER = M.EXTERNAL_ID_NUMBER AND
LS.TIMECODE = @TIMECODE
LEFT JOIN LU_INDUSTRY_IFRS IFRS ON IFRS.T24ID = RTRIM(LTRIM(C.INDUSTRY_CODE)) AND
IFRS.LOANSTATUSID = LS.IMPAIRED
LEFT JOIN VW_LOANSPD PD ON PD.EXTERNAL_ID = M.EXTERNAL_ID_NUMBER
LEFT JOIN LU_PD_STATUS PDS ON PDS.ID = ISNULL(PD.PDSTATUSID,0)
WHERE M.TIMECODE =@TIMECODE
ORDER BY 1
GO
Sample:
18 | P a g e
RPT_TD_T24
Columns:
ID
EXTERNAL ID NUMBER
PRINCIPAL
OPEN DATE
OBJECT CURRENCY
VALUE DATE
ACCRUAL
END DATE
ACCRUALEUR
CURRENT INTEREST RATE
PRINCIPALEUR
COUNTRY
NAME 1
RESIDENCE
NATIONALITY
INDUSTRY
SECTOR
TARGET
CUSTOMER STATUS
MNEMONIC
MISUNITS
GROUP COMPANY CODE
MISCOUNTRY
NACEL2
NACEL1
JOINT HOLDERS
MIS GREEK
JOINT HOLDERS COUNT
IS SHIPPING
ISGROUP
19 | P a g e
Query:
SET QUOTED_IDENTIFIER ON
GO
UNION ALL
20 | P a g e
ABS(CAST(RTRIM(DBO.TOMARKETEURO_T24((SELECT BALANCE_IN_OC FROM HISTORY_T24RPT_BLN
WHERE TIMECODE = @TIMECODE AND EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND ASSET_TYPE
='50000' ), M.OBJECT_CURRENCY, @TIMECODE)) AS numeric(15,2)) ) ACCRUALEUR,
C.*,
dbo.[GETJOINTTIMEDEPOSITHOLDERS](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) JOINT_HOLDERS,
CASE WHEN [dbo].[GETJOINTTIMEDEPOSITHOLDERSCOUNT](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) =
0 THEN 1 ELSE
[dbo].[GETJOINTTIMEDEPOSITHOLDERSCOUNT](RTRIM(LTRIM(EXTERNAL_ID_NUMBER))) +1 END
[COUNT_INCLUDING_PRIMARY]
FROM HISTORY_T24RPT_ACC M
LEFT JOIN HISTORY_T24RPT_BLN BN ON BN.EXTERNAL_ID = M.EXTERNAL_ID_NUMBER AND
BN.TIMECODE = @TIMECODE
LEFT JOIN VW_T24CUSTOMERS C ON C.ID = M.CUSTOMER_ID
LEFT JOIN Migration.dbo.ACC_ACCOUNT A ON A.OUR_EXT_ACCT_NO = M.EXTERNAL_ID_NUMBER
WHERE M.TIMECODE =@TIMECODE AND M.CATEGORY = 1030
GO
Sample:
--------End of Request--------
21 | P a g e