Supplier Statement Reconciliation

Automatically verify vendor statements against live Coupa data, identifying paid, disputed, and unmatched invoices without manual lookups.

Functional Overview

The Vendor Statement Reconciliation feature extends the Rossum-Coupa integration by automatically verifying vendor statements against live data in Coupa. Instead of manually checking which invoices have been paid, disputed, or received, Rossum performs an AI-driven lookup for every line item on a statement and provides a clear reconciliation status. This solution significantly reduces manual effort and improves financial accuracy by identifying discrepancies in real-time.

At a glance

  1. Ingestion: Statements are sent to a dedicated Rossum queue alongside standard invoices and credit notes.

  2. AI Extraction: Rossum identifies the document type as a statement and extracts header data (Supplier, Total Amount, …) and line items (Invoice Numbers, Dates, Amounts) using AI.

  3. Coupa Matching: Every line item is matched against the Coupa instance using the Invoice Number and Supplier Number.

  4. Status Evaluation: Rossum applies business logic to determine the "health" of each invoice and generates a human-readable Evaluation Result.

  5. Output: A reconciled table is generated (XLSX sheet), which can be exported or emailed directly back to the supplier to resolve issues.

Extraction schema

The Supplier Statement Reconciliation feature uses a predefined document extraction schema (see subpage for details). This schema is designed based on experience with various Statement documents.

Rossum’s extraction schema is open and can be customized based on customer needs. Any schema modification must be analyzed, and appropriate adjustments to the logic must be designed and implemented.

Data Replication

A key part of the solution is the use of master data from Coupa. Rossum replicates objects from Coupa via API, using them in logic and validation.

The Supplier Statement Reconciliation logic replicates and uses data from the following Coupa objects:

Coupa object name (API endpoint) * CIB default MDH dataset name ** Comment
Account Types (/account_types) account_types_statements_test The Account Types object in Coupa holds information about entities and is often referred to as the Chart of Accounts. Used in the Customer Matching logic. The data is replicated every 2 hours (new and updated).
Suppliers (/suppliers) suppliers_statements_test Used in the Supplier matching logic. The data is replicated every day (new and updated).
Invoices (/invoices) invoices_test Main dataset for the reconciliation of the invoices extracted from the Statement document. The data is replicated every 15 minutes (new and updated).

Core Business Logic & Validation Rules

  • Reconciliation: Every invoice or credit note extracted from the statement is matched against invoices replicated from Coupa, and the result is used in the reconciliation logic.

  • Extraction Consistency: The system validates that the sum of all lines matches the Total Amount at the header level.

  • Balance Integrity: For every line, the logic verifies that the total amount equals the balance due plus the amount paid (Total Amount = Balance Due + Amount Paid).

  • Duplicate Logic: he system identifies cases where multiple records exist for the same supplier and total amount, pushes those invoice numbers into a list, and alerts the user if any are found.

  • Payment Scheduling: If an invoice is approved but not yet paid, the system calculates the next payment date based on the customer’s specified payment schedule.

Evaluation Result Matrix (Reconciliation logic)

Based on the Coupa match, each line is assigned one of the following statuses. The logic below represents a baseline solution that will be subject to customisation based on the customer’s needs.

Coupa Status Paid? Evaluation Result Message

Not Found

N/A The invoice was not found in our systems. Please send it again.

Approved

False The invoice was approved and will be paid based on standard payment schedule (see payment date column in the schema specification sub-page).

Approved

True The invoice was approved and paid.

Draft

N/A The invoice is being processed by our AP team. It will be paid soon.

Disputed

N/A The invoice is disputed. Dispute reasons are: {dispute_reason}

Pending Receipt

N/A We are waiting for the goods to be received. The invoice will be approved and paid afterwards.

Voided

N/A The invoice was rejected as invalid. Please ask for details in a separate email or resend the corrected invoice

Supplier Statement Reconciliation Schema Documentation

Reference for the extraction schema used in supplier statement reconciliation, covering header fields, line item fields, and their business rules.

Note:

Key (color coding for the fields in the schema)

Captured fields - Fields that are extracted from the document using Rossum AI predictions and OCR reading.

Matching fields - Fields that are the result of matching against master data maintained in Rossum’s Master Data Hub. The majority of the datasets are replicated directly from Coupa.

Calculated/Manual fields - Fields that are calculated based on the values of other fields or on default values. Formula fields are fields that contain the business logic.

Header Fields

Name Properties Description
Basic Information
Document Type

"id": "document_type",

"type": "enum",

"required": false

Trainable classification to recognize the document as a statement. Business rules: Defaulted to statement.
Amount Total

"id": "amount_due",

"type": "number",

"required": false

Total amount due from the statement header.

Business rules: Validated against the sum of line item totals (item_amount_total).

Issue Date

"id": "date_issue",

"type": "date",

"required": false

The date the statement document was issued.
Currency

"id": "currency",

"type": "enum",

"required": true

Currency code (USD, EUR, etc.) extracted from the document.
Customer Section
Customer Name

"id": "recipient_name",

"type": "string",

"required": false

Customer entity name extracted from the document.
Customer Match

"id": "recipient_match",

"type": "enum",

"required": true

Match of the active Customer record replicated from Coupa.
Supplier Section
Supplier Name

"id": "sender_name",

"type": "string",

"required": false

Supplier name extracted from the document.
Supplier Match

"id": "sender_match",

"type": "enum",

"required": true

Match of the active Supplier record replicated from Coupa.

Business rules: Used as a filter for all line-item lookups.

Statement Reconciliation

(Re)generate

results

"id": "regenerate_results",

"type": "button"

Triggers creation of the reconciliation result file which is attached to the annotation document and to the outgoing email.
Send results

"id": "send_results",

"type": "button"

Triggers sending the evaluation results to the supplier by email.

Results

Email To

"id": "results_email_to",

"type": "string"

Formula: Sets Payment Date based on Coupa invoice status: uses Due Date (Coupa) if Paid? (Coupa) is True, defaults to today if paid without a due date, or calculates the next Tuesday or Thursday payment schedule date if Status (Coupa) is approved but not yet paid.

Line Item Fields

Name Properties Description
Invoice Number

"id": "item_invoice_number",

"type": "string",

"required": true

The invoice number extracted from the statement line.
Invoice Date

"id": "item_date_issue",

"type": "date",

"required": false

The issue date of the specific invoice.
Total Amount

"id": "item_amount_total",

"type": "number",

"required": false

The total value of the invoice line.
Amount Paid

"id": "item_amount_paid",

"type": "number",

"required": false

Extracted amount already paid for this invoice.
Balance Due

"id": "item_balance_due",

"type": "number",

"required": false

Remaining balance to be paid.

Business rules: Checked against Total Amount.

Invoice (Coupa)

"id": "item_coupa_invoice_match",

"type":

"enum",

"required": false

Exact match of the Supplier, Invoice Number, Invoice Date and Invoice Amount found in the Coupa system.
Invoice Duplicates (Coupa)

"id": "item_coupa_potential_duplicates_match",

"type": "enum"

Returns potential duplicates: Invoices with the same Supplier, Amount, and Date.
Status (Coupa)

"id": "item_coupa_invoice_status_match",

"type": "enum"

Current invoice status from Coupa (approved, disputed, draft, etc.).
Payment Date

"id": "item_payment_date",

"type": "date"

Formula: Calculates the next payment run date (Tuesday/Thursday) or the actual payment date.
Evaluation result

"id": "evaluation_result",

"type": "string"

Formula: Human-readable reconciliation message based on Coupa status.