Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Pyx12

Build Status

Pyx12 is a HIPAA X12 document parser, validator and converter. It reads an ANSI X12 data file and validates it against a representation of the X12 Implementation Guidelines. By default, it creates a 997 response for 4010 and a 999 response for 5010. It can create an HTML representation of the X12 document and can translate to and from an XML representation of the data file.

Usage

As a command line X12 validator

x12valid.exe <filename>

Fixes common X12 structural errors. Can add or remove line breaks. Can fix loop and segment counting.

x12norm.exe --fix --eol <filename>

Code Examples

Iterate over a loop.  Alter children. Show changes
    src = pyx12.x12context.X12ContextReader(param, errh, fd_in)
    for datatree in src.iter_segments('2300'):
        # do something with a 2300 claim loop
        # we have access to the 2300 loop and all its children
        for loop2400 in datatree.select('2400'):
            print(loop2400.get_value('SV101'))
            # update something
            loop2400.set_value('SV102', 'xx')
            # delete something
            if loop2400.exists('PWK'):
                loop2400.delete('PWK')
        # iterate over all the child segments
        for seg_node in datatree.iterate_segments():
            print(seg_node.format())

Install

uv pip install pyx12

Contributing

The most useful contributions are new implementation-guide maps — either upgrading an existing 4010 map to its 5010 counterpart, or adding support for an X12 transaction pyx12 doesn't yet cover. Pyx12's design already handles the engine; the bottleneck is map coverage.

Where the maps live

XML maps live under pyx12/map/, one file per (transaction, version) pair, named like <transaction>.<version>.<X-number>[.A<n>].xml — e.g. 834.4010.X095.A1.xml, 837.5010.X222.A1.xml. The index that pyx12 consults at runtime is pyx12/map/maps.xml; each entry binds a (vriic, fic[, tspc]) triple to a map filename:

Name Abbreviation X12 Element
Interchange Control Version Number ICVN ISA12
Version / Release / Industry Identifier Code VRIIC GS08
Functional Identifier Code FIC GS01
Transaction Set Purpose Code (used only for 278) TSPC BHT02

Converting a 4010 map to 5010

Several 4010 maps don't yet have 5010 siblings — the candidates are listed in the commented-out block in maps.xml (270/271 eligibility, 276/277 claim status, 277U, 278 services review, 837D dental, 841). To add one:

  1. Get the 5010 implementation guide for the transaction from X12.org or its HIPAA companion guide.

  2. Copy the existing 4010 map as a starting point — cp pyx12/map/270.4010.X092.A1.xml pyx12/map/270.5010.X279.A1.xml (the X-number changes between versions).

  3. Walk the IG diff and apply structural changes: new loops, new segments, renamed elements, added or removed code values, changed usage flags, changed max_use, changed repeat, changed syntax rules. The 834.4010 ↔ 834.5010 pair is a good reference for the typical scope of changes.

  4. Update the <valid_codes> lists from the 5010 code list. Many external-code references (<external>) stay pointed at the same bundled list in codes.xml but the lists themselves may need refreshing — see the commit history for codes.xml for the pattern.

  5. Register the new file under the <version icvn="00501"> block in maps.xml:

    <map vriic="005010X279A1" fic="HS" abbr="270">270.5010.X279.A1.xml</map>
    
  6. Add a fixture and a test. Tests live under pyx12/test/; the simplest pattern is a test_x12n_document.py entry that runs x12n_document against a sample file from the IG and compares the 997/999 output, or a focused test_map_if_load.py entry that just confirms the map parses cleanly.

Adding a new X12 IG

The same shape applies — pyx12 is HIPAA-focused but the map engine is transaction-agnostic. Drop a new XML map into pyx12/map/, register it in maps.xml with the right (icvn, vriic, fic[, tspc]), and you're in. If the transaction uses code lists that aren't already bundled, add them under <codeset> blocks in codes.xml and reference them from your map's <external> elements.

Running the project

# Set up the dev environment
uv sync --extra dev

# Tests
uv run pytest

# Type check
uv run mypy

# Format & sort imports
uv run ruff format pyx12/
uv run ruff check --select I --fix pyx12/

A green pytest and mypy --strict run is required for CI to pass. PRs welcome via github.com/azoner/pyx12.

Licensing

Pyx12 uses a BSD license. The full license text is included with the source code for the package.

Metadata

Release files for pyx12 4.1.0rc1

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

Source distribution (sdist)

Source distribution for pyx12 4.1.0rc1
File Size Uploaded Provenance Actions
pyx12-4.1.0rc1.tar.gz 553.6 kB With provenance Details for pyx12-4.1.0rc1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pyx12 4.1.0rc1
File Interpreter ABI Platform Actions
pyx12-4.1.0rc1-py3-none-any.whl Python 3 none any Details for pyx12-4.1.0rc1-py3-none-any.whl

Total release size: 1.2 MB

Release files / pyx12-4.1.0rc1.tar.gz

Download URL pyx12-4.1.0rc1.tar.gz
Size 553.6 kB
Tags Source
SHA-256 checksum
How to use checksums
fd2005d7a5144716a61ac875c328d8b4019b29ea1e61607f848a41f36a2f203b
BLAKE2b-256 checksum
How to use checksums
73749c53273ea88a20ca397f53dd8949525abc754931e7c9b1ba534171831fed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 31, 2026.

Transparency log

Release files / pyx12-4.1.0rc1-py3-none-any.whl

Download URL pyx12-4.1.0rc1-py3-none-any.whl
Size 646.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9c5276daba93f33c9b424b3bf872642833e47b8c2c0b4f4c129fd4666d2aeb29
BLAKE2b-256 checksum
How to use checksums
f793c525ce02d5a6187d35dec30dbc16b84f9f1984b9f094026d8e99b7bab96f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 31, 2026.

Transparency log

Security for pyx12 4.1.0rc1

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pyx12-4.1.0rc1.tar.gz

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 31, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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