# StatementBench accuracy sample set: specimen statements that banks, credit unions, government
# agencies and educators publish to teach people how to read a statement. Every account holder
# in these documents is fictional ("JOHN TEST", "MARY MEMBER", "Jane Customer", "CARD TESTER").
# No real person's statement, nothing leaked or user-uploaded, nothing behind a login.
#
# The PDFs are not committed. Download and verify them with:
#   python data/benchmark/fetch_samples.py        (saves to data/private/benchmark-pdfs/<id>.pdf)
# then run the harness:
#   node engine/tools/statement-pdf-to-csv/bench.mjs
# and, for the converter benchmark (converters.yaml, converters/<id>/):
#   node data/benchmark/converter_bench.mjs export-statementbench && node data/benchmark/converter_bench.mjs score
#
# Fields: id, institution, publisher_type, kind (checking | savings | credit_card; the main
# account type shown), document_type (statement | guide | lesson), source_url (the PDF),
# page_url (the public page that links to it; null when none was found),
# page_url_archived (an Internet Archive copy when the live page has changed), found_how,
# retrieved (date downloaded), sha256 (of the PDF bytes), text_based (does the statement
# itself have a text layer), notes, document_issues (arithmetic or layout errors in the
# sample itself, checked by hand), truth and truth_scope (hand-made ground truth, for the
# eleven samples that have it: five made on 2026-10-07 while fixing the free converter, six
# added the same day for the converter benchmark), printed_balances (the opening and closing
# balance printed on the statement, in the ground truth's sign convention, and whether the
# statement's own rows reach them; used for the "reconciles" check in the converter benchmark).
#
# Excluded after review: a city's real U.S. Bank card statement from a public meeting packet
# (a real account, not a specimen), two worksheets marked "members only" / "reproduction by
# subscription only", a vendor demo statement, templates with placeholder amounts only, and a
# sample served only to browsers (blocked to scripts, so not reproducible).
version: 1
retrieved_by: StatementBench
samples:
  - id: carson-bank-checking
    institution: Carson Bank (Mulvane, Kansas)
    publisher_type: bank
    kind: checking
    document_type: statement
    source_url: https://www.carsonbank.com/wp-content/uploads/2021/01/Sample-Statement.pdf
    page_url: https://www.carsonbank.com/disclosure/
    found_how: >-
      Linked as "Sample Statement PDF".
    retrieved: 2026-10-07
    sha256: f1aa9c97ef0a64fec8fac14f93153d10d1e10c305287d8400db2c2288d14fe67
    text_based: true
    notes: >-
      Six-page sample for a fictional customer. Checking transactions with Debits, Credits and
      Balance columns over two pages, wrapped descriptions, a check list, a daily balance
      summary, a Ready Reserve line-of-credit section with principal/interest columns, and a
      reconciliation form.
    document_issues: >-
      The summary box (previous balance 3,005.93, ending balance 6,682.22) does not match the
      transaction table, which runs from 445.28 to 942.82 and chains row by row. In the Ready
      Reserve section the 26.08 payment lowers the principal by 13.17 (12.91 is interest),
      printed over two lines.
    truth: truth/carson-bank-checking.csv
    truth_scope: >-
      All 47 rows of the checking TRANSACTIONS table (pages 1-2) and the Ready Reserve payment
      (page 4): 48 rows. The checks list and the daily balance summary summarize; they are not
      separate rows. The table's Previous Balance line is the opening, not a row.
    printed_balances:
      opening: 3005.93
      closing: 6682.22
      rows_reach_balances: false
      note: The summary box does not match the transaction table (see document_issues).

  - id: bofa-how-to-read
    institution: Bank of America
    publisher_type: bank
    kind: checking
    document_type: guide
    source_url: https://www.bankofamerica.com/content/documents/CG2/How%20To%20Read/en_US/HTR-043235.pdf
    page_url: null
    found_how: >-
      No public page linking this PDF was found (it may be linked only inside Online Banking); it was found by web search and is served from bankofamerica.com without a login.
    retrieved: 2026-10-07
    sha256: c4255bc5d9b30ac9d2edff29bb58cb4c538bd56d8ab2d91878ea2589472431d0
    text_based: true
    notes: >-
      Four-page "How to read your statement" brochure with annotated statement excerpts. Several
      excerpt images are stacked on top of one another, so their text layers overlap; uses
      placeholder amounts (9,999.99) and lorem ipsum. A hard case, not a typical download.

  - id: associated-cu-statement
    institution: Associated Credit Union (Georgia)
    publisher_type: credit_union
    kind: checking
    document_type: guide
    source_url: https://www.acuonline.org/home/fiFiles/static/documents/how_to_read_your_statement.pdf
    page_url: null
    found_how: >-
      No public page linking this PDF was found (the guide points readers to acuonline.org/estatements); it was found by web search and is served without a login.
    retrieved: 2026-10-07
    sha256: 4d362e2d16f37a6e0fa14610389369eafefc039932fe4566572b25d2083013f7
    text_based: true
    notes: >-
      Two-page guide around a one-page member statement (share savings, checking, line of
      credit) with callout text in the left margin. In the text layer, amounts and even column
      headings end in a "-" that is not visible on the rendered page.
    document_issues: >-
      Draft 001256: 19,859.39 - 1,894.61 = 17,964.78, but 17,965.08 is printed (0.30 off). The
      line-of-credit payment shows principal 4,871.80 while the balance drops by the full
      5,000.00.

  - id: scott-cu-statement
    institution: Scott Credit Union (Illinois)
    publisher_type: credit_union
    kind: checking
    document_type: guide
    source_url: https://www.scu.org/wp-content/uploads/2025/07/How-to-read-your-statement.pdf
    page_url: https://www.scu.org/statements/
    page_url_archived: https://web.archive.org/web/20250905141259/https://www.scu.org/statements/
    found_how: >-
      Linked as "How to Read Your Statement"; the live page returned 404 on 2026-10-07, the archived copy shows the link.
    retrieved: 2026-10-07
    sha256: fdb75033aa92be1881892ddb1449bff54cd2b81c5d2296ed012dc7b5167197db
    text_based: true
    notes: >-
      One-page guide with a member statement in the same statement-vendor format as the
      Associated Credit Union sample (invisible trailing "-" in the text layer). Withdrawal,
      Deposit and Balance columns; callout text in the left margin.
    document_issues: >-
      Draft 4501 (1,306.50) is printed with a balance of 9,097.85, which does not follow from
      350.04; the summary counts one withdrawal of 200.00 and ends at 450.04.
    truth: truth/scott-cu-statement.csv
    truth_scope: >-
      The 3 rows of the ID 0020 Extreme Checking table. The transfer's posting date (01/18) and
      its "Eff 1/19" effective date both match. The draft's printed balance (9,097.85) is kept as
      printed. Added 2026-10-07 for the converter benchmark.
    printed_balances:
      opening: 550.04
      closing: 450.04
      rows_reach_balances: false
      note: Draft 4501 (1,306.50) does not follow from the balance above it, so even a perfect extraction cannot reach the printed ending balance.

  - id: stpaul-grad-ready-bank
    institution: City of Saint Paul, Parks and Recreation (Grad Ready; content by NorthStar Education Services)
    publisher_type: government
    kind: checking
    document_type: lesson
    source_url: https://www.stpaul.gov/sites/default/files/Media%20Root/Parks%20&%20Recreation/Grad-Ready_How-to-Read-Bank-Statement.pdf
    page_url: https://www.stpaul.gov/departments/parks-and-recreation/right-track/youth/youth-resources
    found_how: >-
      Linked as "How to Read a Bank Statement Handout" (a GradReady resource).
    retrieved: 2026-10-07
    sha256: 83173761a37b541438dd00ce3994a33c31f4814d08be0a52b7627acdc2be39e3
    text_based: true
    notes: >-
      One-page teaching sample with numbered callouts placed among the rows. Dates like "Jan 1"
      with no year on the rows, check number, deposit and withdrawal columns, no running
      balance; beginning and ending balance in an activity summary.
    document_issues: >-
      Check 1006 (Jan 14) has no amount on its line; 25.15 is printed on the Jan 19 line
      beside the 75.00 deposit, so one printed line holds two movements.
    truth: truth/stpaul-grad-ready-bank.csv
    truth_scope: >-
      The 7 movements in the Transaction History table; year from the date range (Jan. 1 - Jan.
      31, 2013). Check 1006 has no amount on its own line: its 25.15 is printed on the Jan 19
      line, and the Summary of Checks dates it Jan 14, so either date matches. Added 2026-10-07
      for the converter benchmark.
    printed_balances:
      opening: 527.63
      closing: 321.88
      rows_reach_balances: true

  - id: cfpb-credit-card-handout
    institution: Consumer Financial Protection Bureau
    publisher_type: government
    kind: credit_card
    document_type: lesson
    source_url: https://files.consumerfinance.gov/f/documents/cfpb_building_block_activities_sample-credit-card-statement_handout.pdf
    page_url: https://www.consumerfinance.gov/consumer-tools/educator-tools/youth-financial-education/teach/activities/analyzing-credit-card-statements/
    found_how: >-
      Listed under "Student materials".
    retrieved: 2026-10-07
    sha256: 755073d4d13732eb9bd9b340c6ff28325741835c369a6c8b58b3f4650ffed52d
    text_based: true
    notes: >-
      One-page student handout: payment information, account summary and rates only. There is
      no transaction list, so the correct output is zero rows; a test for summary lines being
      read as transactions.
    truth: truth/cfpb-credit-card-handout.csv
    truth_scope: >-
      No rows: the handout has no transaction list, so every extracted row is an invented row.
      Added 2026-10-07 for the converter benchmark.
    printed_balances:
      opening: 482.42
      closing: 1392.71
      rows_reach_balances: false
      note: No transaction list is printed; the correct output is no rows.

  - id: uga-extension-credit-card
    institution: University of Georgia, College of Family and Consumer Sciences (reproduces the Federal Reserve Board sample statement)
    publisher_type: education
    kind: credit_card
    document_type: lesson
    source_url: https://www.fcs.uga.edu/docs/credit_ho_5.pdf
    page_url: null
    found_how: >-
      No public page linking this PDF was found; the PDF itself is served without a login. The statement image is the Federal Reserve Board sample (Credit_HO#5, June 2010).
    retrieved: 2026-10-07
    sha256: 60487b86d323ef2f3f2d91f68f99eea9ced7c74e3b82a3b064fd89574fd561c1
    text_based: false
    notes: >-
      The two statement pages are images with no text layer (a scan-like case); only the two
      explanation pages have text. The free tool does not do OCR, so the correct outcome is
      no rows with an explanation.

  - id: rbfcu-credit-card-lesson
    institution: Randolph-Brooks Federal Credit Union ("It's a Money Thing" lesson by Currency Marketing)
    publisher_type: credit_union
    kind: credit_card
    document_type: lesson
    source_url: https://www.rbfcu.org/docs/default-source/its-a-money-thing-docs/using-your-credit-card.pdf
    page_url: https://www.rbfcu.org/learn/its-a-money-thing/using-your-credit-card
    found_how: >-
      Linked as "Download the handout".
    retrieved: 2026-10-07
    sha256: 81cee0ce7c9007ebe46f2084ba1c1f072157cb50c38a93c009d84adf94303e0c
    text_based: true
    notes: >-
      One-page handout. Transaction and posting dates are printed as separate day and month
      cells ("26 | 08", header DD/MM/YYYY) after a transaction number; no year; the payment is
      shown with a CR suffix; no running balance.
    truth: truth/rbfcu-credit-card-lesson.csv
    truth_scope: >-
      The 9 rows of Regular Transactions Details. No year is printed, so dates are compared by
      month and day (DD MM as printed). Purchases positive, the 207.93CR payment negative.
      Added 2026-10-07 for the converter benchmark.
    printed_balances:
      opening: null
      closing: 1468.00
      rows_reach_balances: false
      note: No previous balance is printed, so the rows cannot be checked against the new balance.

  - id: caped-cu-credit-card-lesson
    institution: CapEd Credit Union (Idaho; "It's a Money Thing" lesson by Currency Marketing)
    publisher_type: credit_union
    kind: credit_card
    document_type: lesson
    source_url: https://capedcu.com/assets/documents/learn/its-a-money-thing/lesson-plans/using-your-credit-card.pdf
    page_url: https://capedcu.com/learn/learning-center/its-a-money-thing/
    found_how: >-
      Linked as "Using Your Credit Card" under Lesson Plans.
    retrieved: 2026-10-07
    sha256: 45eced39c3a9b41f81ce552b80bb4fb31d2c0b40378e3ab9af0b4d9fcac4ae4e
    text_based: true
    notes: >-
      Eight-page lesson plan; page 4 is a sample statement in the same template as the RBFCU
      handout with different data (split day/month cells, a refund shown as -35.21). Only page 1
      of the statement is shown, so the listed rows do not add up to the summary.
    document_issues: >-
      Only page 1 of 2 of the statement is shown: the listed rows (215.83 net) do not add up
      to the summary's purchases of 1,316.80.

  - id: money-mentors-credit-card
    institution: Money Mentors (Alberta non-profit credit counselling)
    publisher_type: nonprofit
    kind: credit_card
    document_type: lesson
    source_url: https://moneymentors.ca/wp-content/uploads/Reading-a-Credit-Card-Statement.pdf
    page_url: https://moneymentors.ca/schools/programs/high-school/grade-12/credit-paying-for-post-secondary/
    page_url_archived: https://web.archive.org/web/20191114091755/https://moneymentors.ca/schools/programs/high-school/grade-12/credit-paying-for-post-secondary/
    found_how: >-
      Linked as the "Reading a Credit Card Statement" extension activity; the live page now redirects, the archived copy shows the link. The PDF is still served.
    retrieved: 2026-10-07
    sha256: 5fcffd24750a8e1464ef6c564a08fb9f1294cb13e18f3cf88c7599aafd7e2a43
    text_based: true
    notes: >-
      Canadian sample statement in a five-page lesson. Month-name transaction and posting dates
      ("Feb 8", "Feb 10"), the year printed as "20XX", previous and new balance lines inside the
      transaction table, the payment as -$168.80.
    document_issues: >-
      'Net amount of monthly activity' is printed as 137.84 (the purchases total); the rows
      net to -30.96, and 168.80 - 30.96 = 137.84 is the new balance.
    truth: truth/money-mentors-credit-card.csv
    truth_scope: >-
      The 7 dated rows. The year is printed as 20XX, so dates are compared by month and day
      only. The previous balance and new balance lines are not rows.
    printed_balances:
      opening: 168.80
      closing: 137.84
      rows_reach_balances: true

  - id: niagara-univ-savings
    institution: Niagara University (international admissions)
    publisher_type: education
    kind: savings
    document_type: lesson
    source_url: https://www.niagara.edu/wp-content/uploads/2024/12/Financial-Examples-for-I20.pdf
    page_url: https://www.niagara.edu/admissions/international-admissions/i-20/
    found_how: >-
      Linked as "Example Financial Eligibility".
    retrieved: 2026-10-07
    sha256: 6196dd97ba8071953c61e667dbdfaa1d6007025d85e150e75d29e82af9f241d9
    text_based: true
    notes: >-
      Example savings statement from a fictional bank for I-20 applicants, plus a bank letter.
      Dates like "Nov – 01", a cheque-number and value-date column, whole-dollar amounts with no
      cents beside balances with cents.

  - id: cuanswers-black-bars
    institution: CU*Answers (credit union service organization), "Black Bars" statement style
    publisher_type: credit_union_service_organization
    kind: checking
    document_type: statement
    source_url: https://store.cuanswers.com/wp-content/uploads/2020/02/black_bars.pdf
    page_url: https://store.cuanswers.com/product/sage-direct-member-statement-samples/
    found_how: >-
      Linked as "Black Bars".
    retrieved: 2026-10-07
    sha256: 6a4768595de47231c956c943e58fc8cf9f0d88f2471a3e566b55f3d7025937f7
    text_based: true
    notes: >-
      Specimen member statement (savings, IRA, checking, HSA, certificate and loan sections) and
      a credit card statement (pages 7-9). Each section has its own beginning and ending balance
      rows; the balance is printed before the description in the same text run; amounts like
      ".00"; transaction and posting dates; loan sections with interest, payment and
      disbursement columns.
    document_issues: >-
      Interest charges (147.38) are listed on page 9 without dates, so the dated rows alone do
      not reach the card's new balance. IRA rows are dated 9/xx/19 in a December statement;
      one loan row has transaction date 1/01/10.
    truth: truth/cuanswers-black-bars.csv
    truth_scope: >-
      Every dated row in the savings, IRA, checking, HSA, certificate, auto loan and overdraft
      line sections (Beginning and Ending Balance rows excluded) and the 10 card rows on page
      7: 55 rows. A loan payment is the payment amount, negative; a disbursement is positive.
      Card purchases positive, the CR payment negative. The undated interest lines on page 9
      are not rows.
    printed_balances:
      opening: null
      closing: null
      rows_reach_balances: false
      note: Several accounts, each with its own beginning and ending balance, and a card whose interest is listed without dates; no single statement-level check applies.

  - id: cuanswers-two-column
    institution: CU*Answers (credit union service organization), "Two-Column" statement style
    publisher_type: credit_union_service_organization
    kind: checking
    document_type: statement
    source_url: https://store.cuanswers.com/wp-content/uploads/2020/02/two_column.pdf
    page_url: https://store.cuanswers.com/product/sage-direct-member-statement-samples/
    found_how: >-
      Linked as "Two Column".
    retrieved: 2026-10-07
    sha256: ea579f8ede70cd34a1c8f82ef46c11ec67b0c4008caaf5f1f1587a05033512aa
    text_based: true
    notes: >-
      The same specimen data as the Black Bars style, laid out in two side-by-side columns per
      page with a single signed amount column.

  - id: commerce-bank-checking
    institution: Commerce Bank (Kansas City, Missouri)
    publisher_type: bank
    kind: checking
    document_type: statement
    source_url: https://www.commercebank.com/-/media/cb/pdf/personal/bank/statement_sample1.pdf
    page_url: https://www.commercebank.com/personal/bank/statement-options
    found_how: >-
      Linked as "View a sample Paper Statement [PDF]".
    retrieved: 2026-10-07
    sha256: 53cb0d6fcea0691c567f874309df843df7d7386842a5443907825fc3ddeb235c
    text_based: true
    notes: >-
      One-page 2003 sample for a fictional customer. Transactions grouped by type (deposits, ATM
      withdrawals, checks); in the deposit and ATM sections the date comes after the
      description ("05-15"); in the checks section a reference number follows the amount.
    document_issues: >-
      The summary shows checks paid -200.00; the checks section lists 75.00 + 30.00 + 200.00 =
      305.00.
    truth: truth/commerce-bank-checking.csv
    truth_scope: >-
      The deposit, the ATM withdrawal (transaction date 05-18, paid 05-19) and the three checks
      in Checks Paid: 5 rows. Year from the statement date (June 5, 2003). Added 2026-10-07 for
      the converter benchmark.
    printed_balances:
      opening: 7126.11
      closing: 10521.19
      rows_reach_balances: false
      note: The summary counts 200.00 of checks; the Checks Paid section lists 305.00, so the listed rows cannot reach the printed ending balance.

  - id: bac-bank-statement-example
    institution: Boston Architectural College (international admissions)
    publisher_type: education
    kind: checking
    document_type: lesson
    source_url: https://the-bac.edu/Documents/Departments/Admissions%20Financial%20Aid/Admitted%20Students/International/Bank%20Statement%20Example%20Final.pdf
    page_url: https://the-bac.edu/info-for/admitted-students/international-admitted-students
    found_how: >-
      Linked as "sample bank statement (PDF)".
    retrieved: 2026-10-07
    sha256: a17b26f9924c40e1910cb503e39c2f888ff00eb860844668bdbe991693c0c831
    text_based: true
    notes: >-
      UK-style example ("YourBank", pound amounts, "1 February" dates, Money out / Money in /
      Balance with the header split over two lines). Several rows carry no date (same day as
      the row above); a balance brought forward line.
    document_issues: >-
      18 February, Randomford's Deli: 45,207.16 - 15.00 = 45,192.16, but 45,195.16 is printed
      (the next row is 3.00 off the other way). The final balance is printed '44.079.83' and
      the summary opening '£40,000,00'.
    truth: truth/bac-bank-statement-example.csv
    truth_scope: >-
      The 13 rows under the balance brought forward; year from the period (1 February to 1
      March, 2019). Rows without a date take the date above. Balances as printed (including
      the two that are 3.00 off). Added 2026-10-07 for the converter benchmark.
    printed_balances:
      opening: 40000.00
      closing: 44079.83
      rows_reach_balances: true
      note: The running balances carry two offsetting 3.00 errors and the summary's "money in" is 1.00 short, but the balance brought forward plus the rows reaches the final balance.

  - id: ncua-money-basics
    institution: National Credit Union Administration (MyCreditUnion.gov)
    publisher_type: government
    kind: checking
    document_type: guide
    source_url: https://mycreditunion.gov/sites/default/files/documents/money-basics-guide-savings-checking-accounts.pdf
    page_url: https://mycreditunion.gov/brochure-publications/brochure/money-basics-guide-savings-and-checking-accounts
    found_how: >-
      Linked as "Download Money Basics Guide".
    retrieved: 2026-10-07
    sha256: f483cd9dc725301c9254c38b512b1e3fceb11f3e4d9783c8d1f06add49336a51
    text_based: true
    notes: >-
      29-page "Money Basics Guide to Savings and Checking Accounts". The same sample "Statement
      of Account" appears twice: page 17 with callouts, page 18 for an activity. Signed amount
      and balance columns, MM-DD dates, statement period 11/22/22 - 12/21/22.
    document_issues: >-
      The last row (Electric Co., -80.00) prints 3,240.00, but 3,220.00 - 80.00 = 3,140.00;
      the Remaining Balance repeats 3,240.00.
    truth: truth/ncua-money-basics.csv
    truth_scope: >-
      The 11 rows of the sample statement, printed twice (pages 17 and 18): 22 rows. Year from
      the period 11/22/22 - 12/21/22.
    printed_balances:
      opening: null
      closing: 3240.00
      rows_reach_balances: false
      note: The last printed balance is 100.00 off its own arithmetic, and the sample is printed twice.

  - id: stanford-fcu-credit-card
    institution: Stanford Federal Credit Union
    publisher_type: credit_union
    kind: credit_card
    document_type: guide
    source_url: https://www.sfcu.org/getContentAsset/16d45ef9-00ec-4b6e-b58f-cc1cd499d9e7/c03b315a-46e9-462a-9072-f0e24631b193/How-to-Read-Your-CC-Statement-0124.pdf?language=en
    page_url: https://www.sfcu.org/cards/card-center
    page_url_archived: https://web.archive.org/web/20260707190956/https://www.sfcu.org/cards/card-center
    found_how: >-
      Linked as "How to Read Your Credit Card Statement"; the live page blocks automated requests, the archived copy shows the link.
    retrieved: 2026-10-07
    sha256: ab511aa0cb6e18b089edb5e9c5093eb8639ff4837eeeac967dd3c6fc8e462c73
    text_based: true
    notes: >-
      Two-page "How to Read Your Credit Card Statement" for a fictional "CARD TESTER" with
      callouts in the right margin. Transaction date, posting date, description, reference
      number and amount; separate Fees and Interest Charged sections; one 0.00 interest line.
    truth: truth/stanford-fcu-credit-card.csv
    truth_scope: >-
      The 3 purchases, the late fee and the two interest lines (the 0.00 line is ignored when
      scoring): 5 scored rows. Year from the closing date 04/02/2023.
    printed_balances:
      opening: 8.10
      closing: 395.84
      rows_reach_balances: true
