High-performance MS-DRG (Medicare Severity Diagnosis Related Groups) grouper
Project description
mz-drg
High-performance CMS claim processing tools written in Zig with Python bindings.
mz-drg provides open-source reimplementations of two CMS tools:
- MS-DRG Grouper — assigns Diagnosis Related Groups based on diagnoses, procedures, and demographics
- Medicare Code Editor (MCE) — validates ICD diagnosis and procedure codes against CMS edit rules
Both are written in Zig, callable from Python, and validated against the CMS reference Java implementations with a 100% match rate on 50,000+ claims.
Why mz-drg?
The official CMS tools are Java applications. While accurate, they come with practical limitations:
| Java (CMS) | mz-drg | |
|---|---|---|
| Startup | JVM warmup, seconds | Instant |
| Throughput (Ryzen 5 5600U) | ~500 claims/sec | ~7,000+ claims/sec |
| Memory | JVM heap overhead | Minimal, memory-mapped data |
| Dependencies | JRE 17+, classpath management | Single shared library |
| Python integration | JPype bridge (fragile) | Native ctypes (simple) |
| Embedding | Requires JVM process | C ABI, any language |
Both engines are ported line-by-line from the decompiled Java source and validated claim-by-claim against the original.
Quick start
Install
pip install msdrg
MS-DRG Grouper
import msdrg
with msdrg.MsdrgGrouper() as grouper:
result = grouper.group({
"version": 431,
"age": 65,
"sex": 0,
"discharge_status": 1,
"pdx": {"code": "I5020"},
"sdx": [{"code": "E1165"}],
"procedures": []
})
print(result["final_drg"]) # 293
print(result["final_mdc"]) # 5
print(result["final_drg_description"]) # "Heart Failure and Shock without CC/MCC"
Medicare Code Editor
import msdrg
with msdrg.MceEditor() as mce:
result = mce.edit({
"discharge_date": 20250101,
"age": 65,
"sex": 0,
"discharge_status": 1,
"pdx": {"code": "I5020"},
"sdx": [{"code": "E1165"}],
"procedures": []
})
print(result["edit_type"]) # "NONE"
print(result["edits"]) # [] — no edits triggered
Unified claim — same dict for both
import msdrg
claim = {
"version": 431,
"discharge_date": 20250101,
"age": 65, "sex": 0, "discharge_status": 1,
"pdx": {"code": "I5020"},
"sdx": [{"code": "E1165"}],
"procedures": []
}
with msdrg.MsdrgGrouper() as g, msdrg.MceEditor() as mce:
drg = g.group(claim)
mce_result = mce.edit(claim)
MS-DRG Grouper
Input format
{
"version": 431, # MS-DRG version (e.g. 400, 410, 421, 431)
"age": 65, # Patient age in years
"sex": 0, # 0=Male, 1=Female, 2=Unknown
"discharge_status": 1, # 1=Home/Self Care, 20=Died
"hospital_status": "NOT_EXEMPT", # "NOT_EXEMPT" (default), "EXEMPT", or "UNKNOWN"
"pdx": { # Principal diagnosis (required)
"code": "I5020",
"poa": "Y" # Present on Admission: Y/N/U/W (optional)
},
"admit_dx": { # Admission diagnosis (optional)
"code": "R0602"
},
"sdx": [ # Secondary diagnoses (optional)
{"code": "E1165", "poa": "Y"},
{"code": "I10", "poa": "Y"}
],
"procedures": [ # Procedure codes (optional)
{"code": "02703DZ"}
]
}
Hospital status
The hospital_status field controls how Hospital-Acquired Condition (HAC) processing is applied, per CMS rules:
| Value | Behavior |
|---|---|
"NOT_EXEMPT" |
Standard HAC processing. Default. |
"EXEMPT" |
Hospital is exempt from POA reporting. No HAC/POA ungroupable conditions. |
"UNKNOWN" |
Stricter POA validation with specific ungroupable return codes. |
Output format
{
"initial_drg": 293,
"final_drg": 293,
"initial_mdc": 5,
"final_mdc": 5,
"initial_drg_description": "Heart Failure and Shock without CC/MCC",
"final_drg_description": "Heart Failure and Shock without CC/MCC",
"initial_mdc_description": "Diseases and Disorders of the Circulatory System",
"final_mdc_description": "Diseases and Disorders of the Circulatory System",
"return_code": "OK",
"pdx_output": {
"code": "I5020",
"mdc": 5,
"severity": "CC",
"drg_impact": "BOTH",
"poa_error": "POA_NOT_CHECKED",
"flags": ["VALID", "MARKED_FOR_INITIAL", "MARKED_FOR_FINAL"]
},
"sdx_output": [...],
"proc_output": [...]
}
Supported DRG versions
| Version | CMS Fiscal Year |
|---|---|
| 400 | FY 2023 (Oct 2022 – Apr 2023) |
| 401 | FY 2023 (Apr 2023 – Sep 2023) |
| 410 | FY 2024 (Oct 2023 – Apr 2024) |
| 411 | FY 2024 (Apr 2024 – Sep 2024) |
| 420 | FY 2025 (Oct 2024 – Apr 2025) |
| 421 | FY 2025 (Apr 2025 – Sep 2025) |
| 430 | FY 2026 (Oct 2025 – Apr 2026) |
| 431 | FY 2026 (Apr 2026 – Sep 2026) |
Medicare Code Editor (MCE)
The MCE validates ICD diagnosis and procedure codes against CMS edit rules. It checks for sex conflicts, age conflicts, unacceptable principal diagnoses, E-codes as PDX, non-covered procedures, bilateral procedures, and more.
Input format
{
"discharge_date": 20250101, # YYYYMMDD integer (required for MCE)
"icd_version": 10, # 9 or 10 (default: 10)
"age": 65,
"sex": 0, # 0=Male, 1=Female, 2=Unknown
"discharge_status": 1,
"pdx": {"code": "I5020"},
"admit_dx": {"code": "R0602"},
"sdx": [{"code": "E1165"}],
"procedures": [{"code": "02703DZ"}]
}
Output format
{
"version": 20260930,
"edit_type": "PREPAYMENT", # NONE, PREPAYMENT, POSTPAYMENT, or BOTH
"edits": [ # List of triggered edits (empty if NONE)
{
"name": "E_CODE_AS_PDX",
"count": 1,
"code_type": "DIAGNOSIS",
"edit_type": "PREPAYMENT"
}
]
}
Example — E-code as principal diagnosis
import msdrg
with msdrg.MceEditor() as mce:
result = mce.edit({
"discharge_date": 20250101,
"age": 65, "sex": 0, "discharge_status": 1,
"pdx": {"code": "V0001XA"}, # E-code
"sdx": [], "procedures": []
})
print(result["edit_type"]) # "PREPAYMENT"
print(result["edits"][0]["name"]) # "E_CODE_AS_PDX"
Supported edit types
The MCE detects ~35 edit types including:
- INVALID_CODE — code not in CMS master for date range
- SEX_CONFLICT — code restricted by patient sex
- AGE_CONFLICT — code restricted by patient age
- E_CODE_AS_PDX — E-code used as principal diagnosis
- MANIFESTATION_AS_PDX — manifestation code used as PDX
- UNACCEPTABLE_PDX — code unacceptable as principal diagnosis
- NON_COVERED — procedure not covered by Medicare
- BILATERAL — bilateral procedure without bilateral PDX
- OPEN_BIOPSY — open biopsy without prior biopsy
MCE validation
The MCE implementation is validated against the CMS Java MCE 2.0 v43.1 with a 100% match rate on 50l,000 test claims.
Architecture
┌──────────────────────────────────────────────────────┐
│ Python (msdrg) │
│ ctypes ──► C API (c_api.zig, mce_c_api.zig) │
│ │ │
│ ┌───────────┴───────────┐ │
│ ▼ ▼ │
│ MS-DRG Grouper MCE Editor │
│ (GrouperChain) (MceComponent) │
│ │ │ │
│ ▼ ▼ │
│ Chain of Links: Validation Pipeline: │
│ Preprocess → Group Code Check → Edit Rules │
│ → HAC → Final DRG → Output Counts │
│ │ │ │
│ ▼ ▼ │
│ Memory-mapped .bin files (22 total) │
└──────────────────────────────────────────────────────┘
Both engines share the same shared library and data files. The grouping pipeline is a chain of composable processors; the MCE is a linear validation pipeline. Both mirror the original Java architecture for validation purposes.
Building from source
Prerequisites
- Zig 0.16+ — download or via package manager
- Python 3.11+
- uv (recommended) or pip
Setup
git clone https://github.com/Bedrock-Billing/mz-drg.git
cd mz-drg
# Create venv and install
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
This compiles the Zig shared library and bundles all data files into the Python package.
Run tests
# Zig unit tests (60+ tests)
cd zig_src && zig build test
# Python tests (MS-DRG + MCE)
python -m pytest tests/
Data pipeline
The binary data files (data/bin/*.bin) are prebuilt and included in the repository. To regenerate them from the raw CMS CSVs:
bash scripts/setup_data.sh
This runs extract → import → compile → zig build in sequence. See scripts/ for individual steps.
Comparison testing
The tests/ directory contains tools for validating mz-drg against the reference Java implementations.
# Generate random test claims
python tests/generate_test_claims.py --count 1000 --out tests/claims.json
# Compare MS-DRG grouper
python tests/compare_groupers.py --file tests/claims.json
# Compare MCE editor
python tests/compare_mce.py --file tests/claims.json
# Benchmark
python tests/compare_groupers.py --file tests/claims.json --benchmark
The Java comparisons require JDK 17+ and the reference JARs in
jars/. This is only needed for validation — the Python package itself has no Java dependency.
C API
mz-drg exposes a C ABI for integration with any language. A complete header is auto-generated at zig-out/include/msdrg.h after building.
JSON API (simple — single call)
#include "msdrg.h"
void* ctx = msdrg_context_init("/path/to/data/bin");
const char* result = msdrg_group_json(ctx, "{\"version\":431,...}");
msdrg_string_free(result);
msdrg_context_free(ctx);
Structured API (no JSON — fine-grained control)
#include "msdrg.h"
MsdrgContext ctx = msdrg_context_init("/path/to/data/bin");
MsdrgVersion ver = msdrg_version_create(ctx, 431);
MsdrgInput inp = msdrg_input_create();
msdrg_input_set_pdx(inp, "I5020", 'Y');
msdrg_input_add_sdx(inp, "E1165", 'Y');
msdrg_input_set_demographics(inp, 65, 0, 1);
MsdrgResult res = msdrg_group(ver, inp);
int32_t drg = msdrg_result_get_final_drg(res);
int32_t mdc = msdrg_result_get_final_mdc(res);
const char* desc = msdrg_result_get_final_drg_description(res);
msdrg_result_free(res);
msdrg_input_free(inp);
msdrg_version_free(ver);
msdrg_context_free(ctx);
The structured API gives C/C++/Rust callers direct access to all 47 result fields without JSON parsing overhead. For Python, the JSON API (group()) is faster due to fewer FFI crossings. See zig-out/include/msdrg.h for the full function reference.
MCE Editor
#include "msdrg.h"
MceContext mce = mce_context_init("/path/to/data/bin");
const char* result = mce_edit_json(mce, "{\"discharge_date\":20250101,...}");
msdrg_string_free(result);
mce_context_free(mce);
Functions are thread-safe after initialization. The context is immutable and can be shared across threads.
Project structure
mz-drg/
├── msdrg/ # Python package
│ ├── __init__.py
│ ├── grouper.py # MsdrgGrouper class
│ └── mce.py # MceEditor class
├── zig_src/ # Zig source
│ ├── build.zig
│ ├── main.zig
│ └── src/
│ ├── c_api.zig # MS-DRG C ABI exports
│ ├── json_api.zig # MS-DRG JSON in/out
│ ├── msdrg.zig # GrouperChain + version routing
│ ├── chain.zig # Composable processor chain
│ ├── models.zig # Data models
│ ├── preprocess.zig # Exclusion & attribute handling
│ ├── grouping.zig # DRG formula matching
│ ├── marking.zig # Code marking logic
│ ├── hac.zig # Hospital-Acquired Conditions
│ ├── mce.zig # MCE main editor
│ ├── mce_c_api.zig # MCE C ABI exports
│ ├── mce_json_api.zig # MCE JSON in/out
│ ├── mce_data.zig # MCE data loading
│ ├── mce_enums.zig # MCE attributes & edits
│ ├── mce_editing.zig # MCE edit rules
│ └── mce_validation.zig # MCE validation logic
├── data/bin/ # Prebuilt binary data (22 files)
├── scripts/ # Data extraction & compilation
├── tests/ # Comparison & benchmark tools
├── pyproject.toml
└── setup.py
License
MIT — see LICENSE.
Documentation
Full documentation is available at Bedrock-Billing.github.io/mz-drg.
Acknowledgments
This project is intended for healthcare IT professionals who need fast, embeddable, and auditable claim processing tools.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file msdrg-0.1.6.tar.gz.
File metadata
- Download URL: msdrg-0.1.6.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f0c91ee5dfa387a7942e32ae317343f3dff0c93371c8eec8919adc8a77160b3
|
|
| MD5 |
c6fdaa6b24288b718634f09b8fa70887
|
|
| BLAKE2b-256 |
006b90fadd284d11827b42d14e9c9bd96e693c56c7593646ff8832116b04fc0b
|
Provenance
The following attestation bundles were made for msdrg-0.1.6.tar.gz:
Publisher:
build.yml on Bedrock-Billing/mz-drg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
msdrg-0.1.6.tar.gz -
Subject digest:
0f0c91ee5dfa387a7942e32ae317343f3dff0c93371c8eec8919adc8a77160b3 - Sigstore transparency entry: 1201559507
- Sigstore integration time:
-
Permalink:
Bedrock-Billing/mz-drg@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/Bedrock-Billing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file msdrg-0.1.6-py3-none-win_amd64.whl.
File metadata
- Download URL: msdrg-0.1.6-py3-none-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33a3e513f8da4b2cf1f2c49a5b3addf622483e7f1e13a5bb73a4c4e6ab51243d
|
|
| MD5 |
df94104827230aff74dae2499766cdb9
|
|
| BLAKE2b-256 |
10b27f2a3fdbb81a7368ce84814a3623db4200ca108db1e70dffb31b7dafca24
|
Provenance
The following attestation bundles were made for msdrg-0.1.6-py3-none-win_amd64.whl:
Publisher:
build.yml on Bedrock-Billing/mz-drg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
msdrg-0.1.6-py3-none-win_amd64.whl -
Subject digest:
33a3e513f8da4b2cf1f2c49a5b3addf622483e7f1e13a5bb73a4c4e6ab51243d - Sigstore transparency entry: 1201559521
- Sigstore integration time:
-
Permalink:
Bedrock-Billing/mz-drg@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/Bedrock-Billing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file msdrg-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: msdrg-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
766e7dd2eb4a831cd6cd7c5143d989f941381f899ca9ae31ba5319be38c963fb
|
|
| MD5 |
accb31d14c4fe335d328d33652b8dbdf
|
|
| BLAKE2b-256 |
70058ede029dc7e5fc02b94ae13825904d25549a95bb02dce530b54e9c02058f
|
Provenance
The following attestation bundles were made for msdrg-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
build.yml on Bedrock-Billing/mz-drg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
msdrg-0.1.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
766e7dd2eb4a831cd6cd7c5143d989f941381f899ca9ae31ba5319be38c963fb - Sigstore transparency entry: 1201559558
- Sigstore integration time:
-
Permalink:
Bedrock-Billing/mz-drg@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/Bedrock-Billing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file msdrg-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: msdrg-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14a1b7ec4fe9cb86be5f0470aa5589cf18de46f440e9e8ecb1731017fe7e98d1
|
|
| MD5 |
0df86814515ce0542ae9f32c5145d55b
|
|
| BLAKE2b-256 |
292148c7b1ff33480432265af9a065441dee3ee1a7d50a2826f137dd047f59b7
|
Provenance
The following attestation bundles were made for msdrg-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
build.yml on Bedrock-Billing/mz-drg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
msdrg-0.1.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
14a1b7ec4fe9cb86be5f0470aa5589cf18de46f440e9e8ecb1731017fe7e98d1 - Sigstore transparency entry: 1201559597
- Sigstore integration time:
-
Permalink:
Bedrock-Billing/mz-drg@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/Bedrock-Billing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file msdrg-0.1.6-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: msdrg-0.1.6-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.8 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef54cc0abb3c2679224afc8691f559fec6f953a29ab1fb1294d78419286b2ac2
|
|
| MD5 |
47c66335c75c14155fd2060ccb7b82fc
|
|
| BLAKE2b-256 |
a1de0dc50350658d5b412be03e9c269f92787d90d2d06c1b5aec4326315c91f8
|
Provenance
The following attestation bundles were made for msdrg-0.1.6-py3-none-macosx_11_0_arm64.whl:
Publisher:
build.yml on Bedrock-Billing/mz-drg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
msdrg-0.1.6-py3-none-macosx_11_0_arm64.whl -
Subject digest:
ef54cc0abb3c2679224afc8691f559fec6f953a29ab1fb1294d78419286b2ac2 - Sigstore transparency entry: 1201559578
- Sigstore integration time:
-
Permalink:
Bedrock-Billing/mz-drg@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/Bedrock-Billing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file msdrg-0.1.6-py3-none-macosx_10_13_x86_64.whl.
File metadata
- Download URL: msdrg-0.1.6-py3-none-macosx_10_13_x86_64.whl
- Upload date:
- Size: 1.8 MB
- Tags: Python 3, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f7a7c0bc0b2b0d88d711b60b7177dc8f302290927ca5e96c29b3e4128940127
|
|
| MD5 |
d4f5ca192b715bd3b6537f949a28fd73
|
|
| BLAKE2b-256 |
70a8e947eed2b66e1a59c2d9af77e2d1144e675b0ea3effeaf428f7ff6f2a127
|
Provenance
The following attestation bundles were made for msdrg-0.1.6-py3-none-macosx_10_13_x86_64.whl:
Publisher:
build.yml on Bedrock-Billing/mz-drg
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
msdrg-0.1.6-py3-none-macosx_10_13_x86_64.whl -
Subject digest:
9f7a7c0bc0b2b0d88d711b60b7177dc8f302290927ca5e96c29b3e4128940127 - Sigstore transparency entry: 1201559532
- Sigstore integration time:
-
Permalink:
Bedrock-Billing/mz-drg@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/Bedrock-Billing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@8e6dfe073c470033ef7ef6cbb28f719b7067e3c9 -
Trigger Event:
push
-
Statement type: