{"id":50436922,"url":"https://github.com/moov-io/fedach","last_synced_at":"2026-05-31T17:31:02.821Z","repository":{"id":360992180,"uuid":"1251431489","full_name":"moov-io/fedach","owner":"moov-io","description":"FedACH reports parser","archived":false,"fork":false,"pushed_at":"2026-05-28T18:31:28.000Z","size":1274,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-28T19:27:46.624Z","etag":null,"topics":["ach","fedach","payments-reporter"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moov-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-27T15:12:51.000Z","updated_at":"2026-05-28T18:32:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/moov-io/fedach","commit_stats":null,"previous_names":["moov-io/fedach"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/moov-io/fedach","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moov-io%2Ffedach","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moov-io%2Ffedach/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moov-io%2Ffedach/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moov-io%2Ffedach/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moov-io","download_url":"https://codeload.github.com/moov-io/fedach/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moov-io%2Ffedach/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33742185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ach","fedach","payments-reporter"],"created_at":"2026-05-31T17:30:59.050Z","updated_at":"2026-05-31T17:31:02.816Z","avatar_url":"https://github.com/moov-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fedach\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/moov-io/fedach.svg)](https://pkg.go.dev/github.com/moov-io/fedach)\n[![Go Report Card](https://goreportcard.com/badge/github.com/moov-io/fedach)](https://goreportcard.com/report/github.com/moov-io/fedach)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n\nGo library and CLI for parsing output files from the Federal Reserve's\n[FedPayments Reporter](https://www.frbservices.org/financial-services/ach/fedpayments-reporter/)\nservice.\n\nFedPayments Reporter produces operational and exception reports for ACH files\nin several formats, including fixed-width visual text reports (often delivered\nwith newlines removed or flattened), Excel (`.xlsx`), and PDF. This module makes\nthose reports machine-readable and programmatically usable.\n\n## Features\n\n- **Robust stage-1 extractor** for noisy, concatenated, or fixed-width tagged\n  report formats (no reliance on `\\n` separators)\n- **Two-stage architecture**: reliable logical record extraction first,\n  semantic/structured parsing later\n- Small, extensible **CLI** that dispatches by file extension\n- Currently ships with first-class support for **FAHK / ACK**\n  (\"Acknowledgement of ACH File Deposits\") reports via `pkg/ack`\n\n## Installation\n\n### CLI\n\n```sh\n# Install the latest released version\ngo install github.com/moov-io/fedach/cmd/fedach@latest\n\n# Or build from source\ngit clone https://github.com/moov-io/fedach.git\ncd fedach\nmake build\n./bin/fedach --help\n```\n\n### Library\n\n```sh\ngo get github.com/moov-io/fedach/pkg/ack\n```\n\n## Quick Start\n\n### CLI\n\nThe CLI inspects the file extension and routes to the appropriate handler.\n\n```sh\n# Shorthand (most convenient)\n./fedach testdata/ack/raw/ACHFAHK673960043AIN202605261654134.ack\n\n# Explicit subcommand\n./fedach parse some-report.ack\n./fedach parse --help\n```\n\nOutput includes:\n\n- Reconstructed visual lines (what a human would have seen on screen)\n- The underlying tagged logical records (`A`–`Z` + `Z` terminators)\n- Summary of any file-level (`I/J/K/Z`) or batch-level (`W/X/Y/Z`) error blocks\n\n### Go Library (ACK reports)\n\n```go\nimport (\n    \"fmt\"\n    \"os\"\n\n    \"github.com/moov-io/fedach/pkg/ack\"\n)\n\ndata, _ := os.ReadFile(\"report.ack\")\n\n// Stage 1: extract logical records (the foundation for everything else)\nrecs := ack.Split(data)\nlines := ack.SplitLines(data)\n\n// recs is []ack.Record — each entry preserves the original bytes for that\n// logical record (including its single-letter prefix).\nfor _, r := range recs {\n    fmt.Printf(\"[%c] %s\\n\", r.Prefix, string(r.Content))\n}\n\n// Helper to group the two common error block patterns\nfileErrs, batchErrs := ack.FindErrorBlocks(recs)\n```\n\nSee the full [pkg/ack documentation](pkg/ack/README.md) for format quirks,\ngolden testing strategy, and the `Record` type.\n\n## Architecture\n\nThis project follows a deliberate **two-stage model**:\n\n1. **Stage 1 (Extraction)** — `Split` / `SplitLines` and friends reliably turn\n   messy physical input (concatenated lines, embedded newlines, repeated page\n   headers, glued tags, etc.) into a clean sequence of logical records or\n   reconstructed visual lines. The exact original content of each record is\n   preserved.\n2. **Stage 2 (Semantic Parsing)** — Future packages under `pkg/` will consume\n   the stage-1 output and turn it into typed Go structs (file headers, batch\n   totals, error details, quoted original ACH entry data, etc.).\n\nThis separation keeps the hard low-level parsing work reusable and testable\nindependently of any particular report's business meaning.\n\nNew report types should follow the same pattern:\n- Live under `pkg/\u003csomething\u003e/`\n- Provide their own `Split*` style extractors when needed\n- The root CLI will grow a handler for the corresponding file extension\n\n## Currently Supported\n\n| Report | Extension | Package          | Status                  |\n|--------|-----------|------------------|-------------------------|\n| FAHK / ACK (Acknowledgement of ACH File Deposits) | `.ack` | `pkg/ack` | Stage 1 complete + CLI |\n| Other FedPayments Reporter formats (various Excel, PDF, fixed-width) | (various) | — | Planned |\n\nSee `testdata/` for real (anonymized) sample files from the Federal Reserve.\n\n## Development\n\n```sh\n# Run tests (includes golden regression tests for the ACK extractor)\ngo test ./...\n\n# Build the CLI with a dev version stamp\nmake build\n\n# Full project checks (linting, coverage, etc.)\nmake check\n```\n\nThe ACK package uses a \"just a filename\" golden table test pattern. Raw inputs\nlive in `testdata/ack/raw/` and the corresponding expected line-by-line output\nlives in `testdata/ack/lines/` under the exact same basename. Adding a new\nregression case is as simple as dropping the pair of files and adding the name\nto the test slice.\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE).\n\n## Acknowledgements\n\nThis project is part of the [moov-io](https://github.com/moov-io) family of\nfinancial infrastructure libraries. Special thanks to the Federal Reserve\nBanks for publishing the FedPayments Reporter service and its sample reports.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoov-io%2Ffedach","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoov-io%2Ffedach","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoov-io%2Ffedach/lists"}