Portfolio Agent EvalsHarbor task suite · ETF analyze → backtest → rebalance
Data Forensics & Canonicalization/pf-data-dividend-reconciliation

Reconcile custodian dividends against the vendor file and rebuild total-return indices

Reconcile dividends in the account transactions log against the vendor dividend file, find the ticker whose vendor records are stamped on pay-date instead of ex-date, and build a correct total-return index.

T3hardAnalyzemulti-metricready
Edit
readystatic
Agent budget
40 min
Verifier budget
4 min
Tier target
25–50% pass expected

instruction.md

What the agent sees (CONVENTIONS.md is appended automatically)

Reconcile dividends and build total-return indices

/app/data/dividends.csv (vendor) and /app/portfolio/transactions.csv (custodian cash dividends actually received) disagree for some tickers. For exactly one ticker the vendor file's ex_date column actually holds pay dates for its whole history. Some dividends are missing from the vendor file. Some custodian dividends have a separate foreign-tax withholding line.

Matching rule: a custodian dividend matches a vendor dividend for the same ticker if per-share amounts agree within 0.5% and dates are within 45 calendar days. Per-share amount = gross cash / shares held at the vendor ex-date, where shares held must be reconstructed from the transactions log.

Deliver:

  • /app/output/reconciliation.json — per ticker: {n_matched, n_vendor_only, n_custodian_only, date_offset_days_mode, suspected_paydate_stamped}
  • /app/output/dividends_corrected.csv — ex-date-stamped dividend series with vendor gaps filled from custodian records
  • /app/output/tr_index.csv — total-return index per ticker, base 100 at first price, dividends reinvested at the ex-date close

Verification

reward.json metrics · weights sum to 1.00

MetricWeightCheck
paydate_ticker_identified
0.25
suspected_paydate_stamped true for exactly the planted ticker.
corrected_series
0.35
Dates exact and amounts rel 1e-6 vs oracle.
tr_index
0.4
rel 1e-8 vs oracle.

Harbor scaffold

Generated from this record — task.toml, Dockerfile, verifier, oracle stub

schema_version = "1.4"

[task]
name = "portfolio-agent-evals/pf-data-dividend-reconciliation"
version = "1.0.0"
description = "Reconcile dividends in the account transactions log against the vendor dividend file, find the ticker whose vendor records are stamped on pay-date instead of ex-date, and build a correct total-return index."
keywords = ["etf", "portfolio", "analyze", "data-forensics", "reconciliation", "dividend-math", "position-reconstruction"]

[metadata]
author_name = "portfolio-agent-evals"
difficulty = "hard"
category = "quant-finance"
tags = ["data-forensics", "tier-3", "analyze", "multi-metric"]
theme = "Data Forensics & Canonicalization"
tier = 3
reward_type = "multi-metric"

[agent]
timeout_sec = 2400.0

[verifier]
timeout_sec = 240.0

[environment]
# Offline by design: all data is synthetic and generated at build time.
network_mode = "none"
cpus = 2
memory_mb = 4096
storage_mb = 10240
build_timeout_sec = 900.0

Traps

Each must carry signal: a trap-blind solution must lose credit

  • Shares held change over time; per-share amounts need position reconstruction as of the ex-date.
  • Withholding lines must be netted back to gross before matching.
  • A special dividend is legitimately absent from the vendor file and must be added, not flagged as an error.
  • Filling vendor gaps from custodian data requires converting cash back to per-share amounts.

Inputs

Fixtures mounted in the environment

Outputs

What the verifier reads from /app/output

  • /app/output/reconciliation.json
    JSON
    Per-ticker reconciliation stats.
  • /app/output/dividends_corrected.csv
    CSV
    Corrected dividend series.
  • /app/output/tr_index.csv
    CSV wide
    Total-return indices.

Anti-gaming

Which ticker is pay-date-stamped and which dividends are missing are seed-sampled.

Oracle notes

solution/solve.sh must score 1.0 on five seeds

Oracle reconstructs positions by cumulative sum of signed shares, matches greedily by date distance, then rebuilds the series.

Reviews (0)

Design review before a task is marked ready

    Reviews are read-only in static export.
    Tier 3 · Expert25–50% pass expected. Created 2026-01-01, updated 2026-01-01.