Referensi API pacs008
Il progetto fornisce sia una REST API sia una CLI per i flussi operativi di elaborazione dei messaggi di pagamento.
Note di implementazione
- Usare la generazione sincrona per controlli operativi e piccoli batch quando il chiamante si aspetta subito il file XML.
- Usare la generazione asincrona quando i file di input sono grandi, i job richiedono retry o la generazione fa parte di un processo di orchestrazione più ampio.
- Conservare sia il payload di origine sia il report di validazione affinché i team di supporto possano riprodurre l'output XML durante gli incidenti.
- Bloccare le versioni dei percorsi dei modelli XML e dei file XSD nella configurazione di distribuzione per evitare aggiornamenti silenziosi.
Installazione
Installa il pacchetto da PyPI. È richiesto Python 3.10 o versione successiva.
python -m pip install pacs008
REST API
Avvia il server FastAPI integrato per esporre endpoint HTTP per la validazione e la generazione.
Avvia il server
uvicorn pacs008.api.app:app --reload --host 0.0.0.0 --port 8000
Endpoint
| Endpoint | Descrizione |
|---|---|
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— Rapporto di stato del pagamento tra istituzioni finanziariepacs.003.001.09— Addebito diretto cliente tra istituzioni finanziariepacs.004.001.11— Reso di pagamentopacs.007.001.11— Storno di pagamento tra istituzioni finanziariepacs.008.001.13— Bonifico cliente tra istituzioni finanziariepacs.009.001.10— Bonifico tra istituzioni finanziariepacs.010.001.05— Addebito diretto tra istituzioni finanziariepacs.028.001.05— Richiesta di stato del pagamento tra istituzioni finanziarie
Esempio di validazione
Invia i dati di pagamento per la validazione prima di generare 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": []
}
Esempio di generazione sincrona
Genera un file XML pacs.008.001.13 da un payload JSON.
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
Generazione asincrona
Per file di grandi dimensioni o utilizzo in pipeline, invia un job asincrono e interroga il completamento.
# 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
L'interfaccia a riga di comando accetta un file di dati, una versione del messaggio, un modello XML e uno schema. Valida l'input e scrive l'XML generato nella directory di output.
Utilizzo di base
pacs008 -t \
-m \
-s \
-d
Esempio
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
Modalità dry-run
Usa --dry-run per validare i dati di input senza generare XML. Il codice di uscita indica se la validazione è riuscita (0) o fallita (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
Aggiungi --verbose per un output dettagliato durante la generazione.
Python API
Usa la libreria direttamente in script o servizi Python.
Genera XML da un elenco di record di pagamento
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)
Verifica di conformità SWIFT
Valida e normalizza i dati rispetto alle regole di set di caratteri e lunghezza dei campi SWIFT prima della generazione.
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
Esegui l'API in un container utilizzando il Dockerfile incluso.
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
Validazione IBAN e BIC
Valida gli identificativi finanziari indipendentemente dalla generazione 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
Carica grandi set di dati in blocchi configurabili per limitare l'utilizzo di memoria.
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())
Servizio di validazione
Esegui la pipeline completa di validazione pre-generazione in modo programmatico.
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)
Campi dati obbligatori
Ogni record di pagamento deve includere i seguenti campi. I campi specifici per versione sono indicati ove applicabile.
| Campo | Descrizione | Vincolo |
|---|---|---|
msg_id | Identificatore del messaggio | Max 35 caratteri |
creation_date_time | Timestamp di creazione | Formato ISO 8601 |
nb_of_txs | Numero di transazioni | Numero intero positivo |
settlement_method | Metodo di regolamento | CLRG, INDA, COVE o INGA |
end_to_end_id | Identificatore end-to-end | Max 35 caratteri |
interbank_settlement_amount | Importo di regolamento interbancario | Decimale, es. `25000.00` |
interbank_settlement_currency | Valuta di regolamento | Codice ISO 4217 |
charge_bearer | Portatore delle commissioni | DEBT, CRED, SHAR o SLEV |
debtor_name | Nome del debitore | Max 140 caratteri |
debtor_agent_bic | BIC dell'agente debitore | 8 o 11 caratteri |
creditor_agent_bic | BIC dell'agente creditore | 8 o 11 caratteri |
creditor_name | Nome del creditore | Max 140 caratteri |
Campi specifici per versione
| Campo | Descrizione | Vincolo |
|---|---|---|
uetr | Riferimento univoco di transazione end-to-end | Formato UUID — disponibile dalla v08 |
mandate_id | Identificatore del mandato | Disponibile dalla v10 |
expiry_date_time | Timestamp di scadenza del messaggio | Disponibile nella v13 |