Credit Card Issuer Invoice Report
Reconciles the corporate-card issuer's invoice to the card transactions recorded in Expenses — matching what the bank billed against what employees expensed — so the company pays the issuer the right amount and catches unexpensed or disputed charges.
Sample build of the Credit Card Issuer Invoice Report — reconciled, and rendered tool-neutral so it runs in Power BI, ThoughtSpot, or Tableau.
| Employee | Card Number | Transaction Date | Merchant | Charge Amount | Expensed | Status |
|---|---|---|---|---|---|---|
| Sample | 1001 | 2026-04-30 | Sample | $1,240,500.00 | Sample | Open |
| — | 1002 | 2026-03-31 | — | $842,150.75 | — | Posted |
| Sample | 1003 | 2026-02-28 | Sample | $96,400.00 | Sample | Validated |
| — | 1004 | 2026-01-31 | — | $1,005,233.10 | — | Open |
| Sample | 1005 | 2025-12-31 | Sample | $58,720.40 | Sample | Paid |
| Sample | 1001 | 2026-04-30 | Sample | $1,240,500.00 | Sample | Open |
The report ties EXM_CREDIT_CARD_TRXNS to EXM_EXPENSES and the card master, comparing issuer-billed charges to what employees submitted.
$108K of issuer charges are not on any expense report yet, concentrated among a few cardholders — the company owes the issuer for amounts not yet matched to a business purpose.
Chase the cardholders with unexpensed charges before paying the issuer; persistent gaps usually mean a card-feed mapping issue or a cardholder who has left.
This is the report's BI Publisher data model — the SQL data set BI Publisher runs against Oracle tables to produce the output. The same SQL becomes a dbt model in your warehouse, so one definition drives both the formatted report and the analytics layer.
Data sources
- PER_ALL_ASSIGNMENTS_M
- GL_CODE_COMBINATIONS
- EXM_CREDIT_CARD_TRXNS
- EXM_EXPENSES
- EXM_CARDS
- IBY_CREDITCARD
- PER_ALL_PEOPLE_F
- PER_PERSON_NAMES_F_V
- HR_ORGANIZATION_UNITS_F_TL
- LE_TBL
Show / hide SQL
<![CDATA[WITH LE_TBL AS
(SELECT distinct default_Code_comb_id, PERSON_ID FROM per_all_assignments_m WHERE ASSIGNMENT_TYPE = 'E'
AND SYSDATE BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE)
SELECT
PPNFV.FULL_NAME EMPLOYEE_NAME,
PAPF.PERSON_NUMBER EMPLOYEE_NUMBER,
IC.MASKED_CC_NUMBER CORPORATE_CARD_NUMBER,
ECCT.REFERENCE_NUMBER,
TRUNC(ECCT.CREATION_DATE) CREATION_DATE,
TRUNC(ECCT.POSTED_DATE) POSTED_DATE,
TRUNC(ECCT.BILLED_DATE) BILLED_DATE,
TRUNC(ECCT.TRANSACTION_DATE) TRANSACTION_DATE,
ECCT.BILLED_AMOUNT,
HOUFTL.NAME BUSINESS_UNIT,
--LT.name LEGAL_ENTITY,
EE.EXPENSE_REPORT_ID,
(SELECT gcc.segment1||' - '||gl_flexfields_pkg.get_description_sql(gcc.chart_of_accounts_id,1,gcc.segment1) FROM GL_CODE_COMBINATIONS GCC WHERE GCC.CODE_COMBINATION_ID = LT.default_Code_comb_id) LEGAL_ENTITY
FROM
EXM_CREDIT_CARD_TRXNS ECCT,
EXM_EXPENSES EE,
EXM_CARDS EC,
IBY_CREDITCARD IC,
PER_ALL_PEOPLE_F PAPF,
PER_PERSON_NAMES_F_V PPNFV,
HR_ORGANIZATION_UNITS_F_TL HOUFTL,
LE_TBL LT
WHERE 1=1
AND ECCT.CREDIT_CARD_TRXN_ID = EE.CREDIT_CARD_TRXN_ID
AND ECCT.CARD_ID = EC.CARD_ID
AND EC.CARD_REFERENCE_ID = IC.INSTRID
AND EE.PERSON_ID = PAPF.PERSON_ID
AND PAPF.PERSON_ID = PPNFV.PERSON_ID
AND EE.ORG_ID = HOUFTL.ORGANIZATION_ID
AND HOUFTL.LANGUAGE = USERENV('LANG')
--AND ECCT.REFERENCE_NUMBER = '140110948441234'
AND SYSDATE BETWEEN PPNFV.EFFECTIVE_START_DATE AND PPNFV.EFFECTIVE_END_DATE
AND SYSDATE BETWEEN HOUFTL.EFFECTIVE_START_DATE AND HOUFTL.EFFECTIVE_END_DATE
AND (-1) = (
nvl(
EE.ITEMIZATION_PARENT_EXPENSE_ID, -1
)
)
AND PAPF.PERSON_ID = LT.PERSON_ID
AND (HOUFTL.NAME IN (:P_BU) OR 'All' IN ('All'||:P_BU))
AND ((SELECT SEGMENT1 FROM GL_CODE_COMBINATIONS GCC WHERE GCC.CODE_COMBINATION_ID = LT.default_Code_comb_id) IN (:P_LEGAL_ENTITY) OR 'All' IN ('All'||:P_LEGAL_ENTITY))
AND ECCT.POSTED_DATE BETWEEN :P_POSTED_DATE_FROM AND :P_POSTED_DATE_TO
AND ECCT.CREATION_DATE BETWEEN NVL(:P_CREATION_DATE_FROM,ECCT.CREATION_DATE) AND NVL(:P_CREATION_DATE_TO,ECCT.CREATION_DATE)
ORDER BY
ECCT.TRANSACTION_DATE DESC,
PPNFV.FULL_NAME]]>The data-warehouse model — one fact surrounded by conformed dimensions (what you slice by) and measures (what you aggregate), expressed as dbt so it migrates with you. Grain: one row per source transaction.
| Element | Type | Definition |
|---|---|---|
| GL_CODE_COMBINATIONS | dimension | dimension |
| EXM_CREDIT_CARD_TRXNS | dimension | dimension |
| EXM_EXPENSES | dimension | dimension |
| EXM_CARDS | dimension | dimension |
| Charge Amount | measure | measure |
Every source object behind this report. Each linked table has its own page with full column descriptions, drawn from the Oracle BICC lineage and articulated for practitioners.
| Table | Reporting columns | Subject areas |
|---|---|---|
| PER_ALL_ASSIGNMENTS_M | 129 | 21 |
| GL_CODE_COMBINATIONS | 7 | 61 |
| EXM_CREDIT_CARD_TRXNS | 1 | 1 |
| EXM_EXPENSES | 36 | 1 |
| EXM_CARDS | Setup / configuration table — joined for reference, not exposed for analytics | |
| IBY_CREDITCARD | 10 | 1 |
| PER_ALL_PEOPLE_F | 105 | 26 |
| PER_PERSON_NAMES_F_V | 124 | 169 |
| HR_ORGANIZATION_UNITS_F_TL | 13 | 172 |
| LE_TBL | Setup / configuration table — joined for reference, not exposed for analytics | |