您的应收账款数据模板
您的应收账款数据模板
- 用于应收账款分析的全套推荐属性
- 需监控的核心流程活动与里程碑
- 针对 Oracle Fusion Financials 的特定系统提取指南
应收账款属性
| 名称 | 描述 | ||
|---|---|---|---|
| 事件timestamp EventStartDateTime | 活动发生的特定日期和时间。 | ||
| 描述 此属性记录活动在系统内发生的精确时刻。它用于按时间顺序排列事件,是流程挖掘中所有基于时间的计算的基础。 通过分析时间戳,企业可以计算活动之间的周期时间,例如发票创建与派发之间的时长。这对于衡量 DSO 等 KPI 以及识别付款行为的时间模式至关重要。 为何重要 计算时长、前置时间和周期时间的基础。 获取方式 Oracle Fusion Financials: 各交易表中的 CREATION_DATE 或 LAST_UPDATE_DATE 列。 示例 2023-10-15T08:30:00Z2023-10-16T14:45:12Z2023-11-01T09:00:00Z | |||
| 发票编号 InvoiceNumber | Oracle Fusion 中分配给发票交易的唯一标识符。 | ||
| 描述 此属性作为识别应收账款模块内财务义务的唯一键。它将所有后续活动(如调整、争议和付款)链接到原始销售交易。 在流程挖掘分析中,此属性充当 Case ID。它允许分析人员追踪应收款从创建到完全核销的端到端生命周期,从而方便计算周期时间和流程变体。 为何重要 它是追踪从信用到现金生命周期的基本分析单元。 获取方式 Oracle Fusion Financials: RA_CUSTOMER_TRX_ALL.TRX_NUMBER 示例 INV-2023-00110056789AR-99887755002211 | |||
| 活动名称 ActivityName | 在应收账款流程中执行的具体事件或操作。 | ||
| 描述 此属性描述流程中采取的步骤,例如创建发票、过账付款或开启争议。它定义了流程图的走向,并允许实现事件序列的可视化。 分析人员使用此字段来识别流程变体、循环和瓶颈。它对于确定对标准操作程序的遵循情况以及计算特定事件(如返工或手动干预)的频率至关重要。 为何重要 用于定义流程流并可视化事件序列。 获取方式 从交易历史表(如 AR_PAYMENT_SCHEDULES_ALL, RA_CUST_TRX_LINE_GL_DIST_ALL)导出。 示例 发票已创建已发送付款催促已过账部分付款争议 case 已开启 | |||
| 最后数据更新 LastDataUpdate | 流程挖掘工具中数据最后一次刷新的时间戳。 | ||
| 描述 此属性指示数据集最后一次与源 Oracle 系统同步的时间。它帮助用户了解分析的时效性,以及洞察是否反映了当前的运营状态。 监控此字段对于确保仪表板显示最新信息非常重要,尤其是对于开启争议或未应用现金的运营监控。 为何重要 提供关于数据时效性和可靠性的背景信息。 获取方式 提取时的系统时间。 示例 2023-11-15T23:59:59Z2023-11-16T00:00:00Z | |||
| 源系统 SourceSystem | 数据来源的记录系统。 | ||
| 描述 此属性识别提取流程数据的软件环境。在此上下文中,它确认数据来自 Oracle Fusion Financials 环境。 虽然对于单系统提取这通常是一个静态值,但在合并来自多个 ERP 实例的数据或集成第三方催收工具时,它变得至关重要。它确保了多系统流程环境中的数据血缘和可追溯性。 为何重要 确保 data 血缘并区分不同的 ERP 实例。 获取方式 在提取期间硬编码,或在 data 流水线中配置。 示例 Oracle Fusion FinancialsOracle Cloud ERP - 美国Oracle Cloud ERP - 欧洲、中东和非洲 | |||
| 业务单元 BusinessUnit | 组织内负责该发票的业务实体。 | ||
| 描述 此属性映射到 Oracle Fusion 中的组织 ID,代表拥有该应收款的特定业务部门或分部。它实现了企业不同部门的流程绩效细分。 比较不同业务部门的 KPI(如争议解决时间或 DSO)有助于领导层识别高绩效团队并标准化最佳实践。它还突出了可能需要额外资源或流程重组的部门。 为何重要 组织基准测试和绩效对比的核心维度。 获取方式 Oracle Fusion Financials: 通过 ORG_ID 链接的 HR_ORGANIZATION_UNITS.NAME。 示例 美国东部销售欧洲、中东及非洲地区服务亚太地区制造业 | |||
| 事务类型 TransactionType | 应收款单据的分类(发票、贷项通知单、借项通知单)。 | ||
| 描述 此属性区分不同类型的财务单据。常见值包括发票、贷项通知单和借项通知单。这种区分对于“贷项通知单量与返工”仪表板至关重要。 通过过滤此属性,分析人员可以隔离由贷项通知单引起的返工循环,或专门关注主开票流程。它有助于了解应收账款工作量的构成。 为何重要 区分标准发票与调整及修正。 获取方式 Oracle Fusion Financials: RA_CUST_TRX_TYPES_ALL.NAME 示例 发票贷项通知单借项通知单追偿(Chargeback) | |||
| 到期日期 DueDate | 预计收到付款的日期。 | ||
| 描述 此属性是根据发票日期和付款条件计算的付款截止日期。它作为确定付款是否逾期的参考点。 它用于“催收提醒时机差异”KPI,以衡量团队相对于截止日期的行动积极程度。它也是在账龄报告中将应收账款分类为正常或逾期的阈值。 为何重要 确定逾期和准时绩效的主要基准。 获取方式 Oracle Fusion Financials: AR_PAYMENT_SCHEDULES_ALL.DUE_DATE 示例 2023-11-302023-12-152024-01-01 | |||
| 发票金额 InvoiceAmount | 发票的总货币价值。 | ||
| 描述 此属性代表发票的原始到期金额。它是许多分析的主要权重因子,允许企业将高价值交易置于低价值交易之上。 在“未应用贷项与流失视图”背景下,此字段有助于量化未解决项目的财务影响。它还用于计算加权平均 DSO,从而提供更以财务为中心的流程效率视角。 为何重要 为分析提供财务权重,并支持基于价值的优先级排序。 获取方式 Oracle Fusion Financials: RA_CUSTOMER_TRX_ALL.AMOUNT_DUE_ORIGINAL 示例 1500.00250.5010000.00 | |||
| 客户名称 CustomerName | 交易中被计费的实体名称。 | ||
| 描述 此属性识别与发票关联的客户。它是分析客户层面的付款行为、争议频率和催收有效性的基础。 分析人员使用此字段来精准定位经常逾期付款或提出争议的特定客户。这一洞察支持“客户付款行为分析”仪表板,并有助于针对个人客户情况量身定制信用条款和催收策略。 为何重要 对于以客户为中心的分析和风险特征提取至关重要。 获取方式 Oracle Fusion Financials: 通过 BILL_TO_CUSTOMER_ID 链接的 HZ_PARTIES.PARTY_NAME。 示例 Acme公司环球公司Soylent Corp | |||
| 客户细分 CustomerSegment | 基于规模、行业或风险的客户分类。 | ||
| 描述 此属性将客户分为战略客户、企业、中小企业或高风险等组别。它通常源自 Oracle Fusion 中的客户类别或配置文件类。 利用此属性可以分析不同市场细分的流程变体。例如,它有助于验证“战略客户”是否获得了预期的优质服务,或者“高风险客户”的付款合规性是否受到了密切监控。 为何重要 支持对收款策略和风险进行细分分析。 获取方式 Oracle Fusion Financials: HZ_CUSTOMER_PROFILES.PROFILE_CLASS_ID。 示例 企业小微企业政府高风险 | |||
| 收款专员姓名 CollectorName | 分配给发票的催收人员或资源的名称。 | ||
| 描述 此属性识别负责发票催收的特定员工或团队成员。它是“催收人员处理量”仪表板的关键维度。 该字段的数据使组织能够衡量每位代理的生产力、识别培训需求并平衡工作负载。它增强了责任感,并有助于标准化整个财务团队的催收工作。 为何重要 资源绩效分析和工作量平衡的关键。 获取方式 Oracle Fusion Financials: 与客户配置文件关联的 AR_COLLECTORS.NAME。 示例 约翰·史密斯收款 A 组Jane Doe | |||
| 是否已自动化 IsAutomated | 标记该活动是否在无人工干预的情况下完成。 | ||
| 描述 此布尔属性确定活动是由系统流程(例如自动发票、自动收款机)还是由人工执行。它是“现金认领自动化率”KPI 的主要驱动力。 通过长期追踪自动化与手动活动的比例,组织可以验证数字化转型计划的成功,并识别仍处于手动状态的特定流程步骤。 为何重要 数字化转型和效率衡量的核心指标。 获取方式 基于 UserName 的计算逻辑(例如:若 User == 'BATCH_USER' 则为 true)。 示例 truefalse | |||
| 用户名称 UserName | 执行该活动的系统用户。 | ||
| 描述 此属性记录执行特定活动(例如过账发票、匹配银行对账单)的人员的登录 ID 或姓名。它映射到通用的“用户”字段。 这些数据对于合规审计和“催收人员处理量”仪表板至关重要。它允许将机器驱动的操作(通常由“系统”用户执行)与人为操作分开,支持自动化分析。 为何重要 支持用户层级的绩效跟踪和职责分离分析。 获取方式 Oracle Fusion Financials: 关联到用户表的 CREATED_BY 或 LAST_UPDATED_BY 列。 示例 sysadminjsmith财务批处理作业 | |||
| 争议原因 DisputeReason | 开启争议时分配的类别或原因代码。 | ||
| 描述 此属性捕获了发生“开启争议 Case (Dispute Case Opened)”活动时提供的理由。常见值可能包括“定价错误”、“数量不符”或“货物损坏”。 在“争议生命周期与瓶颈”仪表板中分析此属性有助于识别付款延迟的根源。如果“定价错误”频繁出现,企业就知道应该调查上游的销售报价流程,而不仅仅是催收流程。 为何重要 对延迟付款和返工的根因分析至关重要。 获取方式 Oracle Fusion Financials: RA_CM_REQUESTS.REASON_CODE 或 AR_DISPUTE_HISTORY。 示例 价格争议税务错误未收到货物重复计费 | |||
| 付款条款 PaymentTerms | 约定的付款时间条件(例如,Net 30)。 | ||
| 描述 此属性定义了合同约定的付款期限。它用于计算“到期日”,对于“催收策略有效性”仪表板至关重要。 不同客户付款条件的差异可以解释 DSO 的差异。此属性允许分析人员将绩效数据标准化,确保具有 Net 60 条款的客户不会因为与 Net 30 条款的客户对比而被不公平地标记为“付款慢”。 为何重要 根据合同约定衡量付款速度。 获取方式 Oracle Fusion Financials: RA_TERMS.NAME 示例 净 30 天立即2/10 Net 30净 60 天 | |||
| 创建来源 CreationSource | 发票的来源,显示是手动录入还是导入。 | ||
| 描述 此属性揭示发票进入 Oracle 系统的方式,例如“手动录入”、“自动发票”或通过特定的外部数据源。它是通用映射中“渠道”的代表。 这对于“现金认领自动化监控”至关重要。它有助于区分完全数字化流程与需要手动设置的流程。高销量的“手动录入”可能表明缺乏上游集成或系统缺陷。 为何重要 识别上游自动化程度和 data 来源。 获取方式 Oracle Fusion Financials: RA_BATCH_SOURCES_ALL.NAME 示例 自动发票手动项目实施订单管理 | |||
| 区域 Region | 与业务单位或客户关联的地理区域。 | ||
| 描述 此属性将交易映射到更广泛的地理区域,例如北美、EMEA 或 APAC。它对于高层管理报告以及“DSO 和现金周期趋势”仪表板非常有用。 区域分析有助于考虑付款行为的文化差异(例如,南欧的标准付款条件通常比美国长),并确保在正确的本地背景下解读全球 KPI。 为何重要 为全球报告提供高层级的地理细分。 获取方式 Oracle Fusion Financials: 派生自业务单元或客户地址。 示例 北美欧洲、中东和非洲亚太拉美地区 | |||
| 应收账款周转天数 (DSO) DaysSalesOutstanding | 从发票创建到核销的天数。 | ||
| 描述 此计算属性衡量从“发票已创建”到“发票已核销”的时长。它是“平均 DSO”KPI 的直接计算基础。 虽然这可以在仪表板中动态计算,但将其作为 case 级别的预计算属性可以更轻松地进行过滤和细分(例如,显示所有 DSO > 60 天的案例)。 为何重要 衡量应收账款效率的核心指标。 获取方式 计算公式:Date(Invoice Cleared) - Date(Invoice Created)。 示例 45天12天60天 | |||
| 折扣资格日期 DiscountEligibilityDate | 客户为获得早付款折扣而付款的截止日期。 | ||
| 描述 此属性标记了客户利用“2/10 Net 30”(10天内付款享受2%折扣)等条款的截止日期。它是“早付款折扣分析”仪表板所必需的。 根据此日期分析付款情况可以揭示“早付款折扣获取率”。它帮助企业了解其折扣策略是否有效加速了现金流,或者是否被客户忽视。 为何重要 支持分析激励措施的有效性和现金流加速情况。 获取方式 Oracle Fusion Financials: AR_PAYMENT_SCHEDULES_ALL.DISCOUNT_DATE 示例 2023-11-102023-12-05 | |||
| 是否返工 IsRework | 标记该发票是否经历了修正或争议循环。 | ||
| 描述 此布尔属性识别发票是否经历过与错误纠正相关的活动,例如“已开具贷项通知单”或“已调整发票”。它支持“贷项通知单量与返工”仪表板。 识别返工案例有助于将“快乐路径”流程与有问题的流程隔离开来。高返工率是主数据或销售订单录入流程中上游数据质量问题的先行指标。 为何重要 识别流程流中的浪费和低效环节。 获取方式 计算公式:若 case 包含 ‘Credit Memo Issued’ 或 ‘Dispute Case Opened’ 则为 True。 示例 truefalse | |||
| 货币代码 CurrencyCode | 发票金额所使用的货币。 | ||
| 描述 此属性指定财务金额的货币(例如 USD、EUR)。为了正确解读发票金额以及在需要全球报告货币时进行货币转换,这是必需的。 对于全球化组织,此属性有助于分析不同经济区域的催收表现,并允许财务团队将汇率影响与运营流程绩效分开。 为何重要 在多币种环境下为财务数值提供背景信息。 获取方式 Oracle Fusion Financials: RA_CUSTOMER_TRX_ALL.INVOICE_CURRENCY_CODE 示例 美元EURGBPJPY | |||
应收账款活动
| 活动 | 描述 | ||
|---|---|---|---|
| 全额款项已收到 | 当收款应用使发票余额归零时触发。这是催收流程的主要成功事件。 | ||
| 为何重要 对早期付款折扣分析至关重要。此 event 的 timestamp 决定了现金是否在折扣窗口期内回收。 获取方式 源自 AR_RECEIVABLE_APPLICATIONS_ALL,其中 STATUS = 'APP' 且产生的剩余到期金额为 0。 捕获 通过比较字段 X 和 Y 派生 事件类型 calculated | |||
| 发票已创建 | 此活动标志着系统中发票记录的初始创建。它捕获了交易抬头首次保存在 Oracle Receivables 表中的时间戳。 | ||
| 为何重要 建立流程生命周期的起点和账龄计算的基准。对于计算总周期时间和派发前置时间必不可少。 获取方式 利用 CREATION_DATE 或 TRX_DATE 列从 RA_CUSTOMER_TRX_ALL 表导出。 捕获 在交易行插入时记录 事件类型 explicit | |||
| 发票已完成 | 表示发票创建流程已结束,发票已准备好进行处理、打印和过账。当交易状态从“未完成”转为“已完成”时触发。 | ||
| 为何重要 区分起草时间和处理时间。此处的延迟预示着内部账单生成过程存在瓶颈。 获取方式 当 RA_CUSTOMER_TRX_ALL 中的 COMPLETE_FLAG 变为 ‘Y’ 时识别。 捕获 比较状态字段的前后变化 事件类型 inferred | |||
| 发票已寄出 | 代表通过打印、电子邮件或 XML 将发票发送给客户。这标志着从企业向客户的正式交接。 | ||
| 为何重要 衡量账单派发绩效的关键。创建与派发之间的间隙会直接延误现金回收周期。 获取方式 根据 RA_CUSTOMER_TRX_ALL 中的 PRINTING_ORIGINAL_DATE 推断;如果使用 XML,则根据 Oracle Collaboration Messaging Framework 中的特定日志推断。 捕获 比较状态字段的前后变化 事件类型 inferred | |||
| 发票已清算 | 发票在系统中关闭的最终状态,通常是因为付款、贷项通知单或调整使余额归零。 | ||
| 为何重要 该事件的时间戳用于计算 DSO。它代表了流程实例的结束。 获取方式 当 AR_PAYMENT_SCHEDULES_ALL 中的 STATUS 变为 ‘CL’(已关闭)时识别。 捕获 比较状态字段的前后变化 事件类型 inferred | |||
| 已过账部分付款 | 当收款应用于发票但金额小于总欠款余额时触发。这将使发票保持未结状态,但余额减少。 | ||
| 为何重要 高频发生表明支付行为碎片化(部分付款频率 KPI),这会增加对账工作量。 获取方式 源自 AR_RECEIVABLE_APPLICATIONS_ALL,其中 STATUS = 'APP' 且已应用金额 < 剩余到期金额。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 争议 case 已开启 | 标志着正式发票争议的开始。在调查问题期间,标准催收活动将暂停。 | ||
| 为何重要 关键瓶颈指标。高争议率通常意味着上游的订单履行或计费准确性存在质量问题。 获取方式 通过 RA_CM_REQUESTS_ALL 中的记录或关联至发票的特定贷记单请求 workflow 识别。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 争议已解决 | 表示争议调查的终结。结果可能是批准贷记通知单(争议有效)或拒绝(争议无效)。 | ||
| 为何重要 用于计算“平均争议解决时间”。解决时间过长会负面影响客户满意度和 DSO。 获取方式 根据 RA_CM_REQUESTS_ALL 中状态变更为 ‘APPROVED’ 或 ‘REJECTED’ 导出。 捕获 比较状态字段的前后变化 事件类型 inferred | |||
| 发票已核销 | 一种特殊的调整类型,即将剩余余额视为无法收回并作为坏账核销。这是一个负面的终结状态。 | ||
| 为何重要 对财务健康监控至关重要。它能将运营效率(付款速度)与信用质量问题区分开来。 获取方式 源自 AR_ADJUSTMENTS_ALL,其中调整类型被分类为“核销 (Write-off)”或链接到坏账账户。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 发票已调整 | 捕获发票余额的手动调整(如小额核销或汇率调整),这与贷记通知单不同。 | ||
| 为何重要 帮助识别收入流失和非标准的流程路径(即未付款却核销了余额的情况)。 获取方式 源自与发票链接的 AR_ADJUSTMENTS_ALL 表。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 发票已过账至总账 | 记录发票会计分录完成并过账到总账 (General Ledger) 的事件。这可确保财务合规和期末结账就绪。 | ||
| 为何重要 虽然不影响客户视图,但此处的延迟会影响财务结账周期和报告的及时性。 获取方式 从 RA_CUST_TRX_LINE_GL_DIST_ALL 表中的 GL_DATE 导出。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 已发送付款催促 | 捕获向客户发出的催款函或收款提醒。该 event 由高级收款(Advanced Collections)模块生成。 | ||
| 为何重要 分析收款策略有效性的关键。将其与支付关联,有助于确定哪种提醒策略能带来最快的现金回收。 获取方式 位于链接至客户账户的 IEX_DUNNING 或 IEX_STRATEGY_WORK_ITEMS 表中。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 已收到付款承诺 | 记录客户在特定日期前支付特定金额的承诺。这通常由催收人员在与客户沟通时手动录入。 | ||
| 为何重要 客户支付行为分析的关键。失约预示着高信用风险和潜在的未来坏账。 获取方式 源自催收模块中的 IEX_PROMISE_DETAILS 表。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 贷记通知单已开具 | 捕获针对发票创建的贷记通知单交易。这会减少应付余额,通常是对争议或退货的回应。 | ||
| 为何重要 追踪贷项通知单返工率和收入流失。频繁的贷项通知单表明存在系统性计费错误。 获取方式 源自 RA_CUSTOMER_TRX_ALL,其中交易类型 (TRX_TYPE) 为贷项通知单 (Credit Memo) 且 RELATED_CUSTOMER_TRX_ID 与发票匹配。 捕获 在执行事务码 X 时记录 事件类型 explicit | |||
| 银行对账单已匹配 | 表示核销至发票的收款已与银行对账单明细匹配。这确认了资金已正式进入银行账户。 | ||
| 为何重要 衡量现金认领自动化。付款过账与银行匹配之间的时间差代表了未确认的现金。 获取方式 通过对账引用从 AR_CASH_RECEIPTS_ALL 关联至 CE_STATEMENT_LINES(现金管理)。 捕获 比较状态字段的前后变化 事件类型 inferred | |||
提取指南
步骤
访问 Oracle BI Cloud Connector (BICC) 控制台。前往 Manage Offerings and Data Stores 部分。
配置存储连接。确保已建立到 Oracle Universal Content Management (UCM) 或外部对象存储(如 OCI Object Storage)的有效连接,用于存放导出的 CSV/Parquet 文件。
选择财务 Offering。定位到 Financials offering 以访问应收账款 View Objects。
选择并配置 View Objects (VOs)。您必须选择构建 event 日志所需的特定公共视图对象 (PVO)。核心 PVO 包括:
- FscmTopModelAM.FinExtractAM.ArBiccExtractAM.TransactionHeaderExtractPVO(发票头)
- FscmTopModelAM.FinExtractAM.ArBiccExtractAM.TransactionLineExtractPVO(发票行)
- FscmTopModelAM.FinExtractAM.ArBiccExtractAM.ReceiptApplicationExtractPVO(支付与贷记单核销)
- FscmTopModelAM.FinExtractAM.ArBiccExtractAM.AdjustmentExtractPVO(调整与核销)
- FscmTopModelAM.FinExtractAM.IexBiccExtractAM.PromiseDetailExtractPVO(付款承诺)
- FscmTopModelAM.FinExtractAM.IexBiccExtractAM.StrategyWorkItemExtractPVO(催收/提醒)
定义过滤条件(修剪)。在 Manage Extract Schedules 或 PVO 配置中,针对 CreationDate 或 LastUpdateDate 设置过滤器,以提取分析期内(如近 12 个月)相关的 data。
调度提取任务。创建作业计划以每日运行提取。选择增量加载 (Incremental Load),以便在首次全量加载后仅提取变更 data。
下载与摄取。使用自动化脚本或集成工具从 UCM/对象存储中获取文件,并将其加载到数据仓库的暂存表(例如 STG_AR_TRX_HEADER, STG_AR_APPLICATIONS)。
应用转换逻辑。针对暂存表运行“查询”部分提供的 SQL 脚本,将关系型 data 扁平化为 ProcessMind event 日志格式。
验证 data 类型。确保在转换过程中将日期字段转换为 datetime 对象,并正确处理数值金额的小数点。
导出为 CSV/Parquet。从数据仓库中将最终结果集导出为单个文件。
上传至 ProcessMind。导入该文件,将 InvoiceNumber 映射为 Case ID,ActivityName 映射为 Activity,EventStartDateTime 映射为 Timestamp。
配置
- 提取频率:建议每日(增量)提取,以捕获最新的状态变化。
- 初始加载:首次运行请选择 ‘Full Extract’,随后根据 Last Update Date 切换为 ‘Incremental’。
- 核心 PVO:TransactionHeaderExtractPVO、ReceiptApplicationExtractPVO、AdjustmentExtractPVO、StrategyWorkItemExtractPVO。
- 日期过滤:在 CreationDate >= '202X-01-01' 上设置过滤器以限制 data 量。
- Fetch Size:默认通常为 50000 行;如果使用 UCM 下载,请根据网络带宽进行调整。
- 主键:确保下游数据仓库使用 PVO 主键(通常为 CustomerTrxId、ReceivableApplicationId 等)处理 Upsert,以防止行重复。
- 审计历史:标准的 BICC PVO 捕获当前状态。对于状态变更(如 Dispute Opened)的精确历史 timestamp 记录,如果交易表未持久化历史记录,则可能需要在 Fusion 中启用审计策略并提取 Audit View Objects。
a 查询示例 config
/*
Transformation Script for Oracle BICC Data
Assumes raw BICC PVO CSVs are loaded into a SQL Staging Area with tables named:
- STG_AR_TRX_HEADER (TransactionHeaderExtractPVO)
- STG_AR_APPLICATIONS (ReceiptApplicationExtractPVO)
- STG_AR_ADJUSTMENTS (AdjustmentExtractPVO)
- STG_IEX_PROMISES (PromiseDetailExtractPVO)
- STG_IEX_STRATEGY (StrategyWorkItemExtractPVO)
- STG_CE_STMTS (BankStatementLineExtractPVO - Optional/Advanced)
*/
WITH Base_Log AS (
/* 1. Invoice Created */
SELECT
TrxNumber AS InvoiceNumber,
'Invoice Created' AS ActivityName,
CreationDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
(Quantity * UnitSellingPrice) AS InvoiceAmount,
TrxClass AS TransactionType,
CreatedBy AS UserName,
'Yes' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE TrxClass IN ('INV', 'DM')
UNION ALL
/* 2. Invoice Completed */
SELECT
TrxNumber AS InvoiceNumber,
'Invoice Completed' AS ActivityName,
TrxDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
TrxClass AS TransactionType,
LastUpdatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE CompleteFlag = 'Y'
AND TrxClass IN ('INV', 'DM')
UNION ALL
/* 3. Invoice Dispatched */
/* Using PrintingOriginalDate as proxy for dispatch */
SELECT
TrxNumber AS InvoiceNumber,
'Invoice Dispatched' AS ActivityName,
PrintingOriginalDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
TrxClass AS TransactionType,
LastUpdatedBy AS UserName,
'Yes' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE PrintingOriginalDate IS NOT NULL
AND TrxClass IN ('INV', 'DM')
UNION ALL
/* 4. Invoice Posted to GL */
SELECT
TrxNumber AS InvoiceNumber,
'Invoice Posted to GL' AS ActivityName,
GlDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
TrxClass AS TransactionType,
'System' AS UserName,
'Yes' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE GlDate IS NOT NULL
AND TrxClass IN ('INV', 'DM')
UNION ALL
/* 5. Payment Reminder Sent */
/* Links via Customer or Account, mapped back to Trx via Collections Strategy logic */
/* Simplified join assumption based on Trx Id availability in Work Item */
SELECT
H.TrxNumber AS InvoiceNumber,
'Payment Reminder Sent' AS ActivityName,
W.CreationDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
H.TrxClass AS TransactionType,
W.CreatedBy AS UserName,
'Yes' AS IsAutomated
FROM STG_IEX_STRATEGY W
JOIN STG_AR_TRX_HEADER H ON W.ObjectPk1 = H.CustomerTrxId
WHERE W.WorkItemTemplateName LIKE '%Reminder%'
UNION ALL
/* 6. Promise to Pay Received */
SELECT
H.TrxNumber AS InvoiceNumber,
'Promise to Pay Received' AS ActivityName,
P.CreationDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
P.PromiseAmount AS InvoiceAmount,
H.TrxClass AS TransactionType,
P.CreatedBy AS UserName,
'No' AS IsAutomated
FROM STG_IEX_PROMISES P
JOIN STG_AR_TRX_HEADER H ON P.CustTrxId = H.CustomerTrxId
UNION ALL
/* 7. Dispute Case Opened */
/* Triggered when dispute amount is updated/created */
SELECT
TrxNumber AS InvoiceNumber,
'Dispute Case Opened' AS ActivityName,
DisputeDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
TrxClass AS TransactionType,
LastUpdatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE DisputeDate IS NOT NULL
UNION ALL
/* 8. Dispute Resolved */
/* Approximated by update date when dispute amount returns to 0 after being positive */
/* Note: Accurate dispute history requires Audit Trail extraction. This is a best-effort proxy based on header state. */
SELECT
TrxNumber AS InvoiceNumber,
'Dispute Resolved' AS ActivityName,
LastUpdateDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
TrxClass AS TransactionType,
LastUpdatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE DisputeDate IS NOT NULL AND DisputeAmount = 0
UNION ALL
/* 9. Credit Memo Issued (Applied) */
SELECT
H.TrxNumber AS InvoiceNumber,
'Credit Memo Issued' AS ActivityName,
APP.ApplyDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
APP.AmountApplied AS InvoiceAmount,
H.TrxClass AS TransactionType,
APP.CreatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_APPLICATIONS APP
JOIN STG_AR_TRX_HEADER H ON APP.AppliedCustomerTrxId = H.CustomerTrxId
WHERE APP.ApplicationType = 'CM' -- Credit Memo application
UNION ALL
/* 10. Partial Payment Posted */
SELECT
H.TrxNumber AS InvoiceNumber,
'Partial Payment Posted' AS ActivityName,
APP.ApplyDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
APP.AmountApplied AS InvoiceAmount,
H.TrxClass AS TransactionType,
APP.CreatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_APPLICATIONS APP
JOIN STG_AR_TRX_HEADER H ON APP.AppliedCustomerTrxId = H.CustomerTrxId
WHERE APP.ApplicationType = 'CASH'
AND APP.Status = 'APP'
AND (H.AmountDueRemaining > 0) -- Invoice still has balance
UNION ALL
/* 11. Full Payment Received */
SELECT
H.TrxNumber AS InvoiceNumber,
'Full Payment Received' AS ActivityName,
APP.ApplyDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
APP.AmountApplied AS InvoiceAmount,
H.TrxClass AS TransactionType,
APP.CreatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_APPLICATIONS APP
JOIN STG_AR_TRX_HEADER H ON APP.AppliedCustomerTrxId = H.CustomerTrxId
WHERE APP.ApplicationType = 'CASH'
AND APP.Status = 'APP'
AND H.AmountDueRemaining = 0 -- Invoice fully paid
UNION ALL
/* 12. Bank Statement Matched */
/* Requires joining Receipt Application -> Cash Receipt -> Bank Statement Line */
/* Placeholder logic assuming availability of Bank Statement PVO data */
SELECT
H.TrxNumber AS InvoiceNumber,
'Bank Statement Matched' AS ActivityName,
BSL.StatementDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
BSL.Amount AS InvoiceAmount,
H.TrxClass AS TransactionType,
BSL.CreatedBy AS UserName,
'Yes' AS IsAutomated
FROM STG_AR_APPLICATIONS APP
JOIN STG_AR_TRX_HEADER H ON APP.AppliedCustomerTrxId = H.CustomerTrxId
-- Join to Receipt then to Bank Stmt would happen here
JOIN STG_CE_STMTS BSL ON APP.CashReceiptId = BSL.ReferenceId -- Simplified Join
WHERE APP.ApplicationType = 'CASH'
UNION ALL
/* 13. Invoice Adjusted */
SELECT
H.TrxNumber AS InvoiceNumber,
'Invoice Adjusted' AS ActivityName,
ADJ.ApplyDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
ADJ.Amount AS InvoiceAmount,
H.TrxClass AS TransactionType,
ADJ.CreatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_ADJUSTMENTS ADJ
JOIN STG_AR_TRX_HEADER H ON ADJ.CustomerTrxId = H.CustomerTrxId
WHERE ADJ.AdjustmentType != 'WRITE_OFF'
UNION ALL
/* 14. Invoice Written Off */
SELECT
H.TrxNumber AS InvoiceNumber,
'Invoice Written Off' AS ActivityName,
ADJ.ApplyDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
H.BusinessUnitName AS BusinessUnit,
H.BillToCustomerName AS CustomerName,
H.InvoiceCurrencyCode AS Currency,
ADJ.Amount AS InvoiceAmount,
H.TrxClass AS TransactionType,
ADJ.CreatedBy AS UserName,
'No' AS IsAutomated
FROM STG_AR_ADJUSTMENTS ADJ
JOIN STG_AR_TRX_HEADER H ON ADJ.CustomerTrxId = H.CustomerTrxId
WHERE ADJ.AdjustmentType = 'WRITE_OFF'
UNION ALL
/* 15. Invoice Cleared */
/* The moment the invoice balance hits 0 */
SELECT
TrxNumber AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
LastUpdateDate AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
BusinessUnitName AS BusinessUnit,
BillToCustomerName AS CustomerName,
InvoiceCurrencyCode AS Currency,
NULL AS InvoiceAmount,
TrxClass AS TransactionType,
LastUpdatedBy AS UserName,
'Yes' AS IsAutomated
FROM STG_AR_TRX_HEADER
WHERE AmountDueRemaining = 0
)
SELECT
InvoiceNumber,
ActivityName,
EventStartDateTime,
SourceSystem,
GETDATE() AS LastDataUpdate,
BusinessUnit,
CustomerName,
Currency,
InvoiceAmount,
TransactionType,
UserName,
IsAutomated
FROM Base_Log
WHERE EventStartDateTime IS NOT NULL
ORDER BY InvoiceNumber, EventStartDateTime 步骤
登录 Oracle Fusion Applications:前往 Tools > Reports and Analytics。点击 Browse Catalog 打开 Oracle BI Publisher 界面。
创建 Data Model:点击左上角的 New 并选择 Data Model。这是存放 SQL 提取逻辑的容器。
定义 SQL 数据集:在左侧的 Data Model 树下,点击 Data Sets,然后选择 New Data Set > SQL Query。
配置 Data Source:为数据集命名(如
ProcessMining_AR)。选择ApplicationDB_FSCM(Financials Supply Chain Management) 作为 Data Source,以确保可以访问所需的 AR 和 RA 表。粘贴查询语句:复制下方查询部分提供的完整 SQL 脚本,并将其粘贴到 SQL Query 文本框中。除非需要重命名特定的弹性域 (DFF),否则请勿修改核心逻辑。
设置参数:查询包含一个占位符
:p_start_date,用于按交易创建日期进行过滤。在 Data Model 的 Parameters 选项卡中,创建一个名为p_start_date的新参数,Data Type 设为 Date,并设置默认值(如01-01-2023)。查看 data:点击 Data 选项卡,输入有效的参数日期,然后点击 View。确保输出结果包含
InvoiceNumber、ActivityName和EventStartDateTime等列。保存 Data Model:将对象保存在 Shared Folders > Custom 目录下(例如
/Shared Folders/Custom/ProcessMining/AR_Extract_DM)。调度与导出:若要提取大量 data,请使用此 Data Model 点击 Create Report。在报表编辑器中,确认布局为简单表格并保存报表。随后使用 Scheduler 运行报表并将输出格式设为 CSV 或 XML。
最终格式化:下载输出文件。如果是 CSV,请确保日期格式统一(推荐 ISO 8601)。将此文件上传至 ProcessMind,将
InvoiceNumber映射为 Case ID,ActivityName映射为 Activity,EventStartDateTime映射为 Timestamp。
配置
- Data Source:使用
ApplicationDB_FSCM访问财务表。 - Date Filter:查询使用
ra_customer_trx_all.creation_date >= :p_start_date。请将其配置为滚动窗口加载 data(例如最近12个月)。 - 性能:对于超过10万张发票的数据集,建议在测试期间添加
ROWNUM限制,或按月份分块提取。 - 业务单位(BU)过滤:如果您的组织有多个业务单位且仅需其中之一,请取消
Where子句中AND trx.org_id = ...行的注释。 - 用户名:查询通过
FND_USER将CREATED_BY用户 ID 解析为用户名。请确保提取用户拥有读取FND_USER的权限。 - 高级收款(Advanced Collections):‘Payment Reminder Sent’ 和 ‘Promise to Pay Received’ 活动依赖于 IEX(高级收款)模块表。如果您未使用该模块,这些部分将返回零行。
a 查询示例 sql
/* 1. Invoice Created */
SELECT
trx.trx_number AS InvoiceNumber,
'Invoice Created' AS ActivityName,
trx.creation_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
ra_customer_trx_all trx
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
LEFT JOIN fnd_user u ON trx.created_by = u.user_id
WHERE
trx.creation_date >= :p_start_date
UNION ALL
/* 2. Invoice Completed */
SELECT
trx.trx_number AS InvoiceNumber,
'Invoice Completed' AS ActivityName,
trx.trx_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'Y' AS IsAutomated
FROM
ra_customer_trx_all trx
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
LEFT JOIN fnd_user u ON trx.last_updated_by = u.user_id
WHERE
trx.complete_flag = 'Y'
AND trx.creation_date >= :p_start_date
UNION ALL
/* 3. Invoice Dispatched */
SELECT
trx.trx_number AS InvoiceNumber,
'Invoice Dispatched' AS ActivityName,
COALESCE(trx.printing_original_date, trx.printing_last_printed, trx.last_update_date) AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'Y' AS IsAutomated
FROM
ra_customer_trx_all trx
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
LEFT JOIN fnd_user u ON trx.last_updated_by = u.user_id
WHERE
(trx.printing_original_date IS NOT NULL OR trx.printing_count > 0)
AND trx.creation_date >= :p_start_date
UNION ALL
/* 4. Invoice Posted to GL */
SELECT
trx.trx_number AS InvoiceNumber,
'Invoice Posted to GL' AS ActivityName,
MAX(dist.gl_date) AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
'System' AS UserName,
'Y' AS IsAutomated
FROM
ra_customer_trx_all trx
JOIN ra_cust_trx_line_gl_dist_all dist ON trx.customer_trx_id = dist.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
WHERE
dist.account_class = 'REC'
AND dist.posting_control_id != -3
AND trx.creation_date >= :p_start_date
GROUP BY
trx.trx_number,
hou.name,
party.party_name,
trx.invoice_currency_code,
ps.amount_due_original,
type.name
UNION ALL
/* 5. Payment Reminder Sent (Advanced Collections) */
SELECT
trx.trx_number AS InvoiceNumber,
'Payment Reminder Sent' AS ActivityName,
dun.creation_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'Y' AS IsAutomated
FROM
iex_dunning_transactions dun
JOIN ar_payment_schedules_all ps ON dun.payment_schedule_id = ps.payment_schedule_id
JOIN ra_customer_trx_all trx ON ps.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
LEFT JOIN fnd_user u ON dun.created_by = u.user_id
WHERE
trx.creation_date >= :p_start_date
UNION ALL
/* 6. Promise to Pay Received */
SELECT
trx.trx_number AS InvoiceNumber,
'Promise to Pay Received' AS ActivityName,
pp.creation_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
iex_promise_details pp
JOIN ar_payment_schedules_all ps ON pp.payment_schedule_id = ps.payment_schedule_id
JOIN ra_customer_trx_all trx ON ps.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
LEFT JOIN fnd_user u ON pp.created_by = u.user_id
WHERE
trx.creation_date >= :p_start_date
UNION ALL
/* 7. Dispute Case Opened */
SELECT
trx.trx_number AS InvoiceNumber,
'Dispute Case Opened' AS ActivityName,
req.creation_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
ra_cm_requests req
JOIN ra_customer_trx_all trx ON req.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
LEFT JOIN fnd_user u ON req.created_by = u.user_id
WHERE
trx.creation_date >= :p_start_date
UNION ALL
/* 8. Dispute Resolved */
SELECT
trx.trx_number AS InvoiceNumber,
'Dispute Resolved' AS ActivityName,
req.last_update_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
ra_cm_requests req
JOIN ra_customer_trx_all trx ON req.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
LEFT JOIN fnd_user u ON req.last_updated_by = u.user_id
WHERE
req.status_code IN ('APPROVED', 'REJECTED')
AND trx.creation_date >= :p_start_date
UNION ALL
/* 9. Credit Memo Issued */
SELECT
trx.trx_number AS InvoiceNumber,
'Credit Memo Issued' AS ActivityName,
cm.trx_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
ra_customer_trx_all cm
JOIN ra_customer_trx_all trx ON cm.previous_customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
JOIN ar_payment_schedules_all ps ON trx.customer_trx_id = ps.customer_trx_id
LEFT JOIN fnd_user u ON cm.created_by = u.user_id
WHERE
trx.creation_date >= :p_start_date
UNION ALL
/* 10 & 11. Partial and Full Payment */
SELECT
trx.trx_number AS InvoiceNumber,
CASE
WHEN ps.status = 'CL' AND app.amount_applied = app.amount_applied_from THEN 'Full Payment Received'
WHEN ps.status = 'CL' AND ps.amount_due_remaining = 0 AND app.application_rule = '60' THEN 'Full Payment Received'
ELSE 'Partial Payment Posted'
END AS ActivityName,
app.apply_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
ar_receivable_applications_all app
JOIN ar_payment_schedules_all ps ON app.applied_payment_schedule_id = ps.payment_schedule_id
JOIN ra_customer_trx_all trx ON ps.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
LEFT JOIN fnd_user u ON app.created_by = u.user_id
WHERE
app.status = 'APP'
AND app.application_type = 'CASH'
AND trx.creation_date >= :p_start_date
UNION ALL
/* 12. Bank Statement Matched */
SELECT
trx.trx_number AS InvoiceNumber,
'Bank Statement Matched' AS ActivityName,
recon.creation_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'Y' AS IsAutomated
FROM
ce_statement_reconcils_all recon
JOIN ar_cash_receipt_history_all crh ON recon.reference_id = crh.cash_receipt_history_id
JOIN ar_cash_receipts_all cr ON crh.cash_receipt_id = cr.cash_receipt_id
JOIN ar_receivable_applications_all app ON cr.cash_receipt_id = app.cash_receipt_id
JOIN ar_payment_schedules_all ps ON app.applied_payment_schedule_id = ps.payment_schedule_id
JOIN ra_customer_trx_all trx ON ps.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
LEFT JOIN fnd_user u ON recon.created_by = u.user_id
WHERE
recon.status_flag = 'M'
AND trx.creation_date >= :p_start_date
UNION ALL
/* 13 & 14. Invoice Adjusted and Written Off */
SELECT
trx.trx_number AS InvoiceNumber,
CASE
WHEN adj.adjustment_type = 'W' THEN 'Invoice Written Off'
ELSE 'Invoice Adjusted'
END AS ActivityName,
adj.apply_date AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
u.user_name AS UserName,
'N' AS IsAutomated
FROM
ar_adjustments_all adj
JOIN ar_payment_schedules_all ps ON adj.payment_schedule_id = ps.payment_schedule_id
JOIN ra_customer_trx_all trx ON ps.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
LEFT JOIN fnd_user u ON adj.created_by = u.user_id
WHERE
adj.status = 'A'
AND trx.creation_date >= :p_start_date
UNION ALL
/* 15. Invoice Cleared (Final Close) */
SELECT
trx.trx_number AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
ps.gl_date_closed AS EventStartDateTime,
'Oracle Fusion' AS SourceSystem,
SYSDATE AS LastDataUpdate,
hou.name AS BusinessUnit,
party.party_name AS CustomerName,
trx.invoice_currency_code AS Currency,
ps.amount_due_original AS InvoiceAmount,
type.name AS TransactionType,
'System' AS UserName,
'Y' AS IsAutomated
FROM
ar_payment_schedules_all ps
JOIN ra_customer_trx_all trx ON ps.customer_trx_id = trx.customer_trx_id
JOIN ra_cust_trx_types_all type ON trx.cust_trx_type_id = type.cust_trx_type_id
JOIN hr_operating_units hou ON trx.org_id = hou.organization_id
JOIN hz_cust_accounts cust ON trx.bill_to_customer_id = cust.cust_account_id
JOIN hz_parties party ON cust.party_id = party.party_id
WHERE
ps.status = 'CL'
AND ps.gl_date_closed IS NOT NULL
AND trx.creation_date >= :p_start_date