ISO 20022 Message Generator for US Payment Rails
Project description
MISO20022 Python Library
This package provides a set of tools for generating and working with ISO 20022 financial messages, with a focus on the US Payment Rails.
Installation
You can install the package from PyPI:
pip install miso20022
Usage Examples
This section provides detailed examples for the core functionalities of the library.
Index:
- Generating a
pacs.008.001.08(Customer Credit Transfer) Message - Generating a
pacs.028.001.03(Payment Status Request) Message - Parsing a
pacs.008.001.08XML to JSON - Parsing a
pacs.002.001.10(Payment Status Report) XML to JSON
Input JSON Structure
The generate_fedwire_message function expects a specific JSON structure for the payload argument. Below are the expected formats for the supported message types.
pacs.008.001.08 (Customer Credit Transfer)
The payload for a pacs.008 message should follow this structure:
{
"fedWireMessage": {
"inputMessageAccountabilityData": {
"inputCycleDate": "20250109",
"inputSource": "MBANQ",
"inputSequenceNumber": "001000001"
},
"amount": {
"amount": "1000"
},
"senderDepositoryInstitution": {
"senderABANumber": "<routing_number>",
"senderShortName": "Pypi Bank"
},
"receiverDepositoryInstitution": {
"receiverABANumber": "<routing_number>",
"receiverShortName": "HelloBank"
},
"originator": {
"personal": {
"name": "JANE SMITH",
"address": {
"addressLineOne": "456 eat street",
"addressLineTwo": "SOMEWHERE, CA 67890",
"addressLineThree": ""
},
"identifier": "<account_number>"
}
},
"beneficiary": {
"personal": {
"name": "JOHN DOE",
"address": {
"addressLineOne": "123 Main street",
"addressLineTwo": "ANYTOWN, TX 12345",
"addressLineThree": ""
},
"identifier": "<account_number>"
}
}
}
}
pacs.028.001.03 (Payment Status Request)
The payload for a pacs.028 message should follow this structure:
{
"fedWireMessage": {
"inputMessageAccountabilityData": {
"inputCycleDate": "20250109",
"inputSource": "MBANQ",
"inputSequenceNumber": "001000002"
},
"senderDepositoryInstitution": {
"senderABANumber": "<routing_number>",
"senderShortName": "<short_name>"
},
"receiverDepositoryInstitution": {
"receiverABANumber": "<routing_number>",
"receiverShortName": "<short_name>"
}
},
"message_id": "PACS028REQ20250109001",
"original_msg_id": "20250109MBANQ001000001",
"original_msg_nm_id": "pacs.008.001.08",
"original_creation_datetime": "2025-01-09T12:34:56Z",
"original_end_to_end_id": "MEtoEIDCJShqZKb"
}
Generating a pacs.008.001.08 (Customer Credit Transfer) Message
This example shows how to generate a Fedwire pacs.008 message from a JSON payload.
import json
from miso20022.fedwire import generate_fedwire_message
# 1. Load your payment data from a JSON object
with open('sample_files/sample_payload.json', 'r') as f:
payload = json.load(f)
# 2. Define the necessary message parameters
message_code = 'urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08'
environment = "TEST" # Or "PROD"
fed_aba = '000000008' # The ABA number for the Fed
xsd_path = 'proprietary_fed_file.xsd' # The XSD file for fedwire format
# 3. Generate the complete XML message
_, _, complete_message = generate_fedwire_message(
message_code=message_code,
environment=environment,
fed_aba=fed_aba,
payload=payload,
xsd_path=xsd_path
)
# 4. The `complete_message` variable now holds the XML string
if complete_message:
print(complete_message)
Generating a pacs.028.001.03 (Payment Status Request) Message
This example shows how to generate a pacs.028 payment status request.
import json
from miso20022.fedwire import generate_fedwire_message
# 1. Load the payload for the status request
with open('sample_files/sample_pacs028_payload.json', 'r') as f:
payload = json.load(f)
# 2. Define message parameters
message_code = 'urn:iso:std:iso:20022:tech:xsd:pacs.028.001.03'
environment = "TEST" # Or "PROD"
fed_aba = '000000008'
xsd_path = 'proprietary_fed_file.xsd'
# 3. Generate the XML message
_, _, complete_message = generate_fedwire_message(
message_code=message_code,
environment=environment,
fed_aba=fed_aba,
payload=payload,
xsd_path=xsd_path
)
# 4. The `complete_message` variable now holds the XML string
if complete_message:
print(complete_message)
Parsing a pacs.008.001.08 XML to JSON
This example shows how to parse a pacs.008 XML file and convert it into a simplified JSON object.
from miso20022.fedwire import generate_fedwire_payload
import json
# 1. Define the path to your XML file and the message code
xml_file = 'incoming_pacs.008.xml'
message_code = 'urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08'
# 2. Parse the XML file
fedwire_json = generate_fedwire_payload(xml_file, message_code)
# 3. The `fedwire_json` variable now holds the parsed dictionary
if fedwire_json:
print(json.dumps(fedwire_json, indent=4))
Parsing a pacs.002.001.10 (Payment Status Report) XML to JSON
This example shows how to parse a pacs.002 payment status report (ack/nack) into a JSON object.
from miso20022.fedwire import generate_fedwire_payload
import json
# 1. Define the path to your XML file and the message code
xml_file = 'sample_files/pacs.002_PaymentAck.xml'
message_code = 'urn:iso:std:iso:20022:tech:xsd:pacs.002.001.10'
# 2. Parse the XML to get the JSON payload
fedwire_json = generate_fedwire_payload(xml_file, message_code)
# 3. The `fedwire_json` variable now holds the parsed dictionary
if fedwire_json:
print(json.dumps(fedwire_json, indent=4))
Command-Line Interface (CLI)
The package includes a command-line tool, miso20022, for generating and parsing messages directly from your terminal.
Generating a Message
Usage:
miso20022 generate --message_code [MESSAGE_CODE] --environment [ENV] --fed-aba [ABA_NUMBER] --input-file [PAYLOAD_FILE] --output-file [OUTPUT_XML]
Arguments:
--message_code: The ISO 20022 message code (e.g.,urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08).--environment: The environment for the message (TESTorPROD).--fed-aba: The Fedwire ABA number.--input-file: Path to the input JSON payload file.--output-file: (Optional) Path to save the generated XML message.--xsd-file: (Optional) Path to the XSD file for validation.
Example:
miso20022 generate \
--message_code urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08 \
--environment TEST \
--fed-aba 000000008 \
--input-file sample_files/sample_payment.json \
--output-file pacs.008_output.xml
Parsing a Message
Usage:
miso20022 parse --input-file [INPUT_XML] --message-code [MESSAGE_CODE] --output-file [OUTPUT_JSON]
Arguments:
--input-file: Path to the input ISO 20022 XML file.--message-code: The ISO 20022 message code of the input file.--output-file: (Optional) Path to save the output JSON payload.
Example:
miso20022 parse \
--input-file sample_files/pacs.008.001.008_2025_1.xml \
--message-code urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08 \
--output-file parsed_payload.json
Supported Message Types
The library provides different levels of support for various message types.
Message Generation (generate_fedwire_message)
The following message types are fully supported with dedicated data models for generating complete XML messages:
pacs.008.001.08: FI to FI Customer Credit Transferpacs.028.001.03: FI to FI Payment Status Request
While other message types might be generated using the generic handlers, these are the ones with first-class support.
XML to JSON Parsing (generate_fedwire_payload)
The library can parse the following XML message types into a simplified Fedwire JSON format:
pacs.008.001.08: FI to FI Customer Credit Transferpacs.002.001.10: FI to FI Payment Status Report
Support for parsing other message types can be added by creating new mapping functions.
Future Support
We are actively working to expand the range of supported message types. Future releases will include built-in support for additional pacs, camt, and other ISO 20022 messages, with planned support for FedNow services. Stay tuned for updates!
Contributing
Contributions are welcome! Please refer to the Project repository for contribution guidelines, to open an issue, or to submit a pull request.
Built with ❤️ in the Beautiful State of Washington!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 miso20022-0.1.6.tar.gz.
File metadata
- Download URL: miso20022-0.1.6.tar.gz
- Upload date:
- Size: 26.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39c4ce540c943de62a4d58cc377bca4523698e484c86e4e92b453c6d7857d708
|
|
| MD5 |
7f82145e616ecc40aebace6809254093
|
|
| BLAKE2b-256 |
32af025ce2ed20e2e8d581abe609fdf5e315750a7e9873129b596375a016defc
|
File details
Details for the file miso20022-0.1.6-py3-none-any.whl.
File metadata
- Download URL: miso20022-0.1.6-py3-none-any.whl
- Upload date:
- Size: 26.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47589cf7064aedca1cc2e2ad204e4732612d40d02e93c1f9251832d524ee9875
|
|
| MD5 |
73328daff4ee4cfcaa99f85b81937ee7
|
|
| BLAKE2b-256 |
9aafa3af678d71c9f7aa55dcdd2f5c2c35d896c34dce23f3992129b99169ad65
|