Reference API pacs008
Projekt poskytuje REST API i CLI pro provozní pracovní postupy zpracování platebních zpráv.
Instalace
Nainstalujte balíček z PyPI. Vyžaduje Python 3.10 nebo novější.
python -m pip install pacs008
REST API
Spusťte vestavěný FastAPI server pro obsluhu HTTP endpointů pro validaci a generování.
Spustit server
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000
Endpointy
| Endpoint | Popis |
|---|---|
GET /api/health | Health check that returns service status |
POST /api/validate | Validate payment data without generating XML |
POST /api/generate | Generate XML now and return the file |
POST /api/generate/async | Submit an async generation job |
GET /api/status/{job_id} | Check job status by ID |
GET /api/download/{job_id} | Download XML after the job completes |
DELETE /api/jobs/{job_id} | Cancel a pending or running job |
GET /api/docs | Swagger UI for testing all endpoints |
pacs.002.001.12— Zpráva o stavu platby mezi finančními institucemipacs.003.001.09— Přímý inkaso zákazníka mezi finančními institucemipacs.004.001.11— Vrácení platbypacs.007.001.11— Storno platby mezi finančními institucemipacs.008.001.13— Úhrada zákazníka mezi finančními institucemipacs.009.001.10— Úhrada mezi finančními institucemipacs.010.001.05— Přímý inkaso mezi finančními institucemipacs.028.001.05— Dotaz na stav platby mezi finančními institucemi
Příklad validace
Odešlete platební data k validaci před generováním XML.
curl -X POST http://localhost:8000/api/validate \
-H "Content-Type: application/json" \
-d '{
"message_type": "pacs.008.001.13",
"data": [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA"
}]
}'
{
"valid": true,
"message_type": "pacs.008.001.13",
"errors": [],
"warnings": []
}
Příklad synchronního generování
Vygenerujte soubor XML pacs.008.001.13 z JSON dat.
curl -X POST http://localhost:8000/api/generate \
-H "Content-Type: application/json" \
-d '{
"message_type": "pacs.008.001.13",
"template": "pacs008/templates/pacs.008.001.13/template.xml",
"schema": "pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
"data": [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"tx_id": "TX-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA"
}]
}' --output pacs008_output.xml
Asynchronní generování
Pro větší soubory nebo použití v pipeline odešlete asynchronní úlohu a dotazujte se na její dokončení.
# Submit the job
JOB=$(curl -s -X POST http://localhost:8000/api/generate/async \
-H "Content-Type: application/json" \
-d '{"message_type":"pacs.008.001.13","data":[...]}')
JOB_ID=$(echo $JOB | jq -r '.job_id')
# Poll for completion
curl http://localhost:8000/api/status/$JOB_ID
# Download the result
curl http://localhost:8000/api/download/$JOB_ID --output result.xml
{
"job_id": "8f7f0d4b-7df9-4d1a-8d47-19f4f28b6d38",
"status": "completed",
"message_type": "pacs.008.001.13",
"download_url": "/api/download/8f7f0d4b-7df9-4d1a-8d47-19f4f28b6d38"
}
CLI
Rozhraní příkazového řádku přijímá datový soubor, verzi zprávy, šablonu a schéma. Validuje vstup a zapisuje vygenerované XML do výstupního adresáře.
Základní použití
pacs008 -t \
-m \
-s \
-d
Příklad
pacs008 -t pacs.008.001.13 \
-m pacs008/templates/pacs.008.001.13/template.xml \
-s pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd \
-d payments.csv
Režim suchého běhu
Použijte --dry-run k validaci vstupních dat bez generování XML. Návratový kód ukazuje, zda validace prošla (0) nebo selhala (1).
pacs008 -t pacs.008.001.13 \
-m pacs008/templates/pacs.008.001.13/template.xml \
-s pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd \
-d payments.csv \
--dry-run
Přidejte --verbose pro podrobný výstup během generování.
Python API
Použijte knihovnu přímo v Python skriptech nebo službách.
Generování XML z platebních záznamů
from pacs008 import generate_xml_string
payments = [{
"msg_id": "MSG-2026-001",
"creation_date_time": "2026-01-15T10:30:00",
"nb_of_txs": "1",
"settlement_method": "CLRG",
"interbank_settlement_date": "2026-01-15",
"end_to_end_id": "E2E-INV-2026-001",
"tx_id": "TX-001",
"interbank_settlement_amount": "25000.00",
"interbank_settlement_currency": "EUR",
"charge_bearer": "SHAR",
"debtor_name": "Acme Corp GmbH",
"debtor_agent_bic": "DEUTDEFF",
"creditor_agent_bic": "COBADEFF",
"creditor_name": "Widget Industries SA",
}]
xml = generate_xml_string(
payments,
"pacs.008.001.13",
"pacs008/templates/pacs.008.001.13/template.xml",
"pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
)
print(xml)
Kontrola souladu se SWIFT
Kontrola a čištění dat proti pravidlům znakové sady a délky polí SWIFT před generováním.
from pacs008.compliance import cleanse_data_with_report
raw = [{"debtor_name": "Müller & Söhne™", "msg_id": "X" * 50}]
clean, report = cleanse_data_with_report(raw)
print(report.summary())
Docker
Spusťte API v kontejneru pomocí přiloženého Dockerfile.
docker build -t pacs008:latest .
docker run -p 8000:8000 pacs008:latest
docker run --rm -e PACS008_LOG_LEVEL=INFO -v $PWD/examples:/data -p 8000:8000 pacs008:latest
Validace IBAN a BIC
Validujte finanční identifikátory nezávisle na generování XML.
from pacs008.validation import validate_iban, validate_bic
is_valid, error = validate_iban("DE89370400440532013000", strict=False)
is_valid, error = validate_bic("DEUTDEFF", strict=False)
Streaming
Načítejte velké datové sady v konfigurovatelných blocích pro omezení využití paměti.
from pacs008.data.loader import load_payment_data_streaming
for chunk in load_payment_data_streaming("large_payments.csv", chunk_size=500):
print(f"Processing {len(chunk)} records")
from pacs008.validation import validate_batch
for chunk in load_payment_data_streaming("large_payments.csv", chunk_size=500):
report = validate_batch(chunk, "pacs.008.001.13")
print(report.summary())
Validační služba
Spusťte úplný předgenerační validační řetězec programově.
from pacs008.validation import ValidationService, ValidationConfig
service = ValidationService()
report = service.validate_all(ValidationConfig(
xml_message_type="pacs.008.001.13",
xml_template_file_path="pacs008/templates/pacs.008.001.13/template.xml",
xsd_schema_file_path="pacs008/templates/pacs.008.001.13/pacs.008.001.13.xsd",
data_file_path="payments.csv",
))
print(report.is_valid, report.errors)
Povinná datová pole
Každý platební záznam musí obsahovat tato pole. Pole specifická pro verzi jsou uvedena níže.
| Pole | Popis | Omezení |
|---|---|---|
msg_id | Identifikátor zprávy | Max. 35 znaků |
creation_date_time | Časové razítko vytvoření | Formát ISO 8601 |
nb_of_txs | Počet transakcí | Kladné celé číslo |
settlement_method | Metoda vypořádání | CLRG, INDA, COVE nebo INGA |
end_to_end_id | Identifikátor end-to-end | Max. 35 znaků |
interbank_settlement_amount | Mezibankovní vypořádací částka | Desetinné číslo, např. `25000.00` |
interbank_settlement_currency | Měna vypořádání | Kód ISO 4217 |
charge_bearer | Nositel poplatků | DEBT, CRED, SHAR nebo SLEV |
debtor_name | Jméno dlužníka | Max. 140 znaků |
debtor_agent_bic | BIC agenta dlužníka | 8 nebo 11 znaků |
creditor_agent_bic | BIC agenta věřitele | 8 nebo 11 znaků |
creditor_name | Jméno věřitele | Max. 140 znaků |
Pole specifická pro verzi
| Pole | Popis | Omezení |
|---|---|---|
uetr | Jedinečná reference transakce end-to-end | Formát UUID — dostupný od v08 |
mandate_id | Identifikátor mandátu | Dostupný od v10 |
expiry_date_time | Časové razítko expirace zprávy | Dostupný ve v13 |