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.
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
| Metric | Weight | Check |
|---|---|---|
| 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
- /app/data/dividends.csvPay-date-stamped and missing-dividend variant.
- /app/portfolio/transactions.csv
- /app/data/prices/
Outputs
What the verifier reads from /app/output
- /app/output/reconciliation.jsonJSONPer-ticker reconciliation stats.
- /app/output/dividends_corrected.csvCSVCorrected dividend series.
- /app/output/tr_index.csvCSV wideTotal-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