Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Reason given by maintainers: Renamed to oxedi: pip install oxedi

oxedi835

A fast EDI 835 (electronic remittance advice) parser for Python, written in Rust.

  • Lossless. Every byte of the file is kept, so write() returns the file exactly as it was read.
  • Ready-made tables. Payments, claims, service lines and adjustments come out as typed tables that open in Polars, pandas, pyarrow or DuckDB without copying the data.
  • Problems are reported, not raised. A file that is valid EDI but has questionable data still parses; each issue is returned as a diagnostic that names the rule, the position and the value.
  • Large files. stream yields one transaction at a time, so memory stays bounded.
  • Extensible. Add segments or table columns with a small JSON patch, without touching the code.

Install

pip install oxedi835               # no Python dependencies
pip install "oxedi835[polars]"     # with Polars
pip install "oxedi835[pandas]"     # with pandas and pyarrow

Requires Python 3.11 or later. Wheels are available for Linux (x86_64 and aarch64, plus musl on x86_64), macOS (Intel and Apple silicon) and Windows (x86_64).

Quick start

import oxedi835

result = oxedi835.parse_file("remittance.835")

claims = result.tables["claims"].to_polars()      # or .to_pandas()
services = result.tables["services"].to_polars()

print(result.count_claims(), result.sum_payments())  # sum_payments() is a Decimal
print(result.payer["name"], result.payee["name"])

for diagnostic in result.diagnostics:
    print(diagnostic)

oxedi835.parse(data) does the same from bytes. A file that is not an 835 at all (for example, one that does not start with an ISA segment) raises oxedi835.ParseError.

Tables

Table One row per Linked by
payments payment (transaction) —
claims claim payment
services service line payment, claim
adjustments claim or service adjustment payment, claim, service
provider_adjustments provider-level adjustment payment

result.tables.keys() lists them and table.columns lists a table's columns. Amounts are decimals, dates are dates, and text fields are kept as the raw bytes from the file (Arrow binary), so nothing is lost to an encoding guess. Tables follow the Arrow PyCapsule interface, so any Arrow-aware library reads them directly:

import duckdb, polars as pl

claims = result.tables["claims"]
duckdb.sql("select claim_status, sum(payment_amount) from claims group by 1")
pl.DataFrame(result.tables["services"])

Large files

from pathlib import Path

for batch in oxedi835.stream(Path("big.835").read_bytes()):
    services = batch.tables["services"].to_polars()

Each batch holds the tables and diagnostics of one transaction. Pass by="2100" (or any other loop id) to get one batch per claim instead. Parsing releases the GIL, so several files can be parsed in parallel from threads.

Writing the file back

data = Path("remittance.835").read_bytes()
assert oxedi835.parse(data).document.write() == data

Extending the spec

The structure of the 835 and the columns of each table are defined by a JSON spec. A patch in JSON Merge Patch format (RFC 7386) adapts it to a payer's variations:

spec = oxedi835.Spec.builtin().patch({
    "tables": {"claims": {"columns": {
        "contract_class": {"segment": "REF", "where": {"1": "CE"}, "element": 2}
    }}}
})
result = oxedi835.parse(data, spec=spec)   # claims now has a contract_class column

Objects merge key by key, while arrays are replaced whole: to allow an extra segment in a loop, list the loop's full segments:

{"loops": {"1000A": {"segments": ["N3", "N4", "REF", "PER", "XX"]}}}

parse and stream both accept spec=.

Spec versions

parse, parse_file and stream read the version a file declares (ISA12 and GS08) and use the matching built-in spec: 5010 (005010X221A1) by default, 4010 (004010X091A1) for 4010 files. Pass spec= to override, or pick one yourself:

spec = oxedi835.Spec.builtin(version="4010")

Validating with pyx12

pip install "oxedi835[pyx12]" adds pyx12's implementation-guide validation. parse never calls it; validate does, on demand:

import oxedi835
from oxedi835.pyx12 import validate

result = oxedi835.parse(data)
findings = result.diagnostics + validate(data)    # bytes, a path or a binary file object
for d in sorted(findings, key=lambda d: d.level):
    print(d.origin, d.code, d)                    # "oxedi835" or "pyx12"; pyx12's own code
    if d.segment is not None:
        start, end = result.document[d.segment].span  # the segment's bytes in your file

validate returns oxedi835.Diagnostic, the type parse returns, so the two lists mix, sort by level and filter by origin. A pyx12 finding has kind == "External", origin == "pyx12", code set to pyx12's error code and an empty path (pyx12 does not report the loop); interchange, group and transaction findings are level 1, segment and element findings level 2. A file pyx12 cannot read, or an exception inside pyx12, comes back as one level 1 finding with no code whose rule starts with could not finish validating, instead of a traceback.

Coming from another library

Coming from edi-835-parser? See the migration guide.

Versioning

The project follows semantic versioning. While the version is 0.x, a minor release may change the API. See the changelog.

License

MIT. See LICENSE and THIRD_PARTY_NOTICES.

Metadata

Release files for oxedi835 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oxedi835 0.2.0
File Size Uploaded
oxedi835-0.2.0.tar.gz 214.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for oxedi835 0.2.0
File
oxedi835-0.2.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
oxedi835-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details
oxedi835-0.2.0-cp311-abi3-manylinux_2_28_x86_64.whl CPython 3.11 abi3 Linux glibc 2.28+ x86-64 Details
oxedi835-0.2.0-cp311-abi3-manylinux_2_28_aarch64.whl CPython 3.11 abi3 Linux glibc 2.28+ ARM64 Details
oxedi835-0.2.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
oxedi835-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 5.8 MB

Release files / oxedi835-0.2.0.tar.gz

Download URL oxedi835-0.2.0.tar.gz
Size 214.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7a0c2a6cb21e3db90e37511e0da9d8605bd0c1475cbebdf01492879a295ee42c
BLAKE2b-256 checksum
How to use checksums
ab2767e79c95a61224f15841ac34d8580d4fe313171fa141bf868dc1e60c9195
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / oxedi835-0.2.0-cp311-abi3-win_amd64.whl

Download URL oxedi835-0.2.0-cp311-abi3-win_amd64.whl
Size 743.0 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
f1124eb36a9e42601e2ae5e0d559def7cd6a647cca8026a0e63a994fbb64ba73
BLAKE2b-256 checksum
How to use checksums
0e07cf35dad1218e172b9524cd02fbd1bde8360520a01317ec101ac220477240
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / oxedi835-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl

Download URL oxedi835-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
df21855ad8779d7a58dd19e7ad1a2c743e782455ff2b63bcc0c42b620ef67d02
BLAKE2b-256 checksum
How to use checksums
a2dfde40803e0fcdbdf298158a39eac3e15e126af2d26c3702ce4d37d7a72d4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / oxedi835-0.2.0-cp311-abi3-manylinux_2_28_x86_64.whl

Download URL oxedi835-0.2.0-cp311-abi3-manylinux_2_28_x86_64.whl
Size 986.7 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
4eaad57b35b8b86cf7f84ffde84fbf18b6dd8b215906324329ed1a61f5ee2068
BLAKE2b-256 checksum
How to use checksums
3b6549f6daf13e2d80bd40f92e0c8f69f26821af0519315cd36aeec2815fd3f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / oxedi835-0.2.0-cp311-abi3-manylinux_2_28_aarch64.whl

Download URL oxedi835-0.2.0-cp311-abi3-manylinux_2_28_aarch64.whl
Size 950.7 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
7008a51bf9fb1673bd24c50a98705d5aa5e9aac192e0720bbd73bc3cd53e6af7
BLAKE2b-256 checksum
How to use checksums
a52f71332d8de15afdf21ec35ccbe359da8c99030ac005b8b1b81c120d8538fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / oxedi835-0.2.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL oxedi835-0.2.0-cp311-abi3-macosx_11_0_arm64.whl
Size 834.6 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
90522080045e7a087ee4fa70a5a7b4caf410483599573ead98f0618a73057166
BLAKE2b-256 checksum
How to use checksums
2aa457983541b028a8c9033a326ab64b0218316d0a670110d67dbcf88fc4f011
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / oxedi835-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL oxedi835-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 870.1 kB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
a4c1fc63ba1273afb4979828e4a5c8cc5d7a73357c5e2d1cf963e327f285e67b
BLAKE2b-256 checksum
How to use checksums
5d394a64097ad620d74e5ed62cb76ca820057370e6bd1bd46b8064b21d73736d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.1

7 release files

This release

0.2.0 This release

7 release files

0.1.0

7 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page