pacs008 API-referens
Projektet tillhandahåller både ett REST-API och CLI för operativa arbetsflöden för betalningsmeddelanden.
Installation
Installera paketet från PyPI. Kräver Python 3.10 eller senare.
python -m pip install pacs008
REST API
Starta den inbyggda FastAPI-servern för att tillhandahålla HTTP-ändpunkter för validering och generering.
Starta servern
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000
Ändpunkter
| Endpoint | Beskrivning |
|---|---|
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— Statusrapport för betalning mellan finansinstitutpacs.003.001.09— Autogiro för kund mellan finansinstitutpacs.004.001.11— Betalningsreturpacs.007.001.11— Betalningsåterföring mellan finansinstitutpacs.008.001.13— Kundkreditöverföring mellan finansinstitutpacs.009.001.10— Kreditöverföring mellan finansinstitutpacs.010.001.05— Autogiro mellan finansinstitutpacs.028.001.05— Statusförfrågan för betalning mellan finansinstitut
Valideringsexempel
Skicka in betalningsdata för validering innan XML genereras.
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": []
}
Synkront genereringsexempel
Generera en XML-fil för pacs.008.001.13 från JSON-data.
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
Asynkron generering
För större filer eller pipelineanvändning, skicka in ett asynkront jobb och polla tills det är klart.
# 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
Kommandoradsgränssnittet tar en datafil, meddelandeversion, mall och schema. Det validerar indata och skriver genererad XML till utdatakatalogen.
Grundläggande användning
pacs008 -t \
-m \
-s \
-d
Exempel
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
Torrkörningsläge
Använd --dry-run för att validera indata utan att generera XML. Utgångskoden visar om valideringen lyckades (0) eller misslyckades (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
Lägg till --verbose för detaljerad utdata under generering.
Python API
Använd biblioteket direkt i Python-skript eller tjänster.
Generera XML från betalningsposter
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)
SWIFT-efterlevnadskontroll
Kontrollera och rensa data mot SWIFT:s tecken- och fältlängdsregler före generering.
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
Kör API:et i en container med den medföljande 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
IBAN- och BIC-validering
Validera finansiella identifierare oberoende av XML-generering.
from pacs008.validation import validate_iban, validate_bic
is_valid, error = validate_iban("DE89370400440532013000", strict=False)
is_valid, error = validate_bic("DEUTDEFF", strict=False)
Strömning
Ladda stora dataset i konfigurerbara block för att begränsa minnesanvändningen.
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())
Valideringstjänst
Kör hela förgenereringens valideringspipeline programmatiskt.
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)
Obligatoriska datafält
Varje betalningspost måste innehålla dessa fält. Versionsspecifika fält listas nedan.
| Fält | Beskrivning | Begränsning |
|---|---|---|
msg_id | Meddelandeidentifierare | Max 35 tecken |
creation_date_time | Tidsstämpel för skapande | ISO 8601-format |
nb_of_txs | Antal transaktioner | Positivt heltal |
settlement_method | Avvecklingsmetod | CLRG, INDA, COVE eller INGA |
end_to_end_id | Identifierare från början till slut | Max 35 tecken |
interbank_settlement_amount | Interbankavvecklingsbelopp | Decimal, t.ex. `25000.00` |
interbank_settlement_currency | Avvecklingsvaluta | ISO 4217-kod |
charge_bearer | Avgiftsbärare | DEBT, CRED, SHAR eller SLEV |
debtor_name | Gäldenärens namn | Max 140 tecken |
debtor_agent_bic | Gäldenärsagentens BIC | 8 eller 11 tecken |
creditor_agent_bic | Borgenärsagentens BIC | 8 eller 11 tecken |
creditor_name | Borgenärens namn | Max 140 tecken |
Versionsspecifika fält
| Fält | Beskrivning | Begränsning |
|---|---|---|
uetr | Unik transaktionsreferens från början till slut | UUID-format — tillgänglig från v08 |
mandate_id | Mandatidentifierare | Tillgänglig från v10 |
expiry_date_time | Tidsstämpel för meddelandets utgång | Tillgänglig i v13 |