Skip to content

Solede-SA/solede_openbanking

Repository files navigation

Solede OpenBanking

License: AGPL v3 Frappe ERPNext

Frappe app per l'integrazione con ACube Open Banking API. Questa app permette di integrare le tue aziende ERPNext con le banche europee attraverso gli standard PSD2 Open Banking.

✨ Funzionalità

Gestione Autenticazione

  • Token JWT Automatico - Generazione e rinnovo automatico dei token (validità 24 ore)
  • Decodifica Token - Visualizzazione dettagli token per debugging
  • Credenziali Sicure - Password crittografate usando i meccanismi di sicurezza di Frappe

Business Registry

  • Creazione Business Registry - Registrazione azienda presso ACube Open Banking
  • Gestione per Company - Configurazione separata per ogni azienda ERPNext
  • Info Registry - Visualizzazione dettagli completi del Business Registry

Connessioni Bancarie

  • Flusso OAuth - Connessione sicura con autorizzazione bancaria
  • Multi-Account - Supporto per più account bancari per azienda
  • Gestione Account - Abilitazione/disabilitazione account autorizzati
  • Eliminazione Account - Rimozione completa delle connessioni bancarie
  • Test Mode - Ambiente sandbox con banche fake per test

Transazioni Bancarie

  • Import Transazioni - Importazione automatica movimenti bancari in Bank Transaction
  • Filtri Avanzati - Ricerca per data, account, importo
  • Transaction Log - Tracciamento completo di tutte le operazioni
  • Riconciliazione - Integrazione nativa con Bank Reconciliation Tool di ERPNext
  • Dati Completi - Salvataggio raw data JSON per audit e debugging

Pagamenti SEPA

  • Bonifici da Purchase Invoice - Esegui pagamenti SEPA direttamente da fatture fornitori
  • SEPA Instant - Supporto bonifici istantanei (completati in pochi secondi)
  • Validazione SEPA - Controllo automatico paese IBAN per bonifici SEPA
  • IBAN Enrichment - Creazione automatica Bank/Bank Account da IBAN
  • Payment Entry Automatico - Creazione automatica Payment Entry da webhook con status confirmed
  • Associazione Banca Corretta - Il Payment Entry usa il conto bancario effettivo del pagamento (lookup IBAN)
  • Callback Page - Pagina di ritorno dopo autorizzazione pagamento
  • Mode of Payment Configurabile - Modalità pagamento configurabile per ogni company
  • Tracking Completo - Tracciamento UUID e End-to-End ID per ogni pagamento

Reporting

  • Authorized Bank Accounts Report - Visualizzazione conti autorizzati in sola lettura
  • Ordinamento per Balance - Conti ordinati per saldo decrescente
  • Permessi Granulari - Accesso report anche per utenti non amministratori
  • Workspace Dedicato - Interfaccia centralizzata per tutte le operazioni

UI/UX

  • Interfaccia Intuitiva - Pulsanti contestuali e dropdown organizzati
  • Modal con Dettagli - Visualizzazione completa dati API per ogni account
  • Auto-Return URL - Redirect automatico dopo autorizzazione bancaria
  • Validazione Password - Controlli pattern per password Business Registry

📋 Requisiti

  • Frappe Framework v15+
  • ERPNext v15+
  • Python 3.10+
  • Account ACube Open Banking valido
  • Company con Partita IVA (Tax ID) configurata

🚀 Installazione

1. Scarica l'app da GitHub

cd frappe-bench
bench get-app https://github.com/Solede-SA/solede_openbanking.git

2. Installa sul sito

bench --site your-site.local install-app solede_openbanking

3. Migra il database

bench --site your-site.local migrate

4. Riavvia il bench

bench restart

⚙️ Configurazione

1. Configurazione Company

Prima di tutto, assicurati che il documento Company abbia:

  • Tax ID (Partita IVA) configurato correttamente
  • Company Name compilato

Questi dati verranno usati per creare il Business Registry.

2. OpenBanking Settings

Naviga in OpenBanking > OpenBanking Settings e crea un nuovo documento:

Configurazione API

  • Company: Seleziona la tua azienda
  • Common API URL: Endpoint autenticazione
    • Sandbox: https://common-sandbox.api.acubeapi.com
    • Production: https://common.api.acubeapi.com
  • Open Banking API URL: Endpoint operazioni
    • Sandbox: https://ob-sandbox.api.acubeapi.com
    • Production: https://ob.api.acubeapi.com

Credenziali

  • Email: Email del tuo account ACube
  • Password: Password del tuo account ACube

Configurazione Pagamenti (opzionale)

  • Callback Base URL: URL pubblico per callback pagamenti
    • Sandbox: https://your-ngrok-url.ngrok.io
    • Production: https://your-domain.com
  • Mode of Payment: Modalità di pagamento per Payment Entry automatici
    • Seleziona un Mode of Payment esistente (es. "Bonifico Bancario")

Configurazione IBAN Validation API (opzionale)

  • IBAN API Provider: Provider per validazione IBAN
    • Opzioni: iban.com, ibanapi.com, api-ninjas
  • IBAN API Key: Chiave API del provider selezionato

📖 Guida all'Uso

Step 1: Genera Token

  1. Apri il documento OpenBanking Settings della tua Company
  2. Clicca Generate Token
  3. Il token verrà generato e salvato automaticamente
  4. Puoi visualizzare i dettagli del token nella sezione "Token Information"

Il token ha validità di 24 ore e viene rinnovato automaticamente quando necessario.

Step 2: Crea Business Registry

  1. Clicca Actions > Create Business Registry
  2. Inserisci l'email dell'azienda da associare al Business Registry (riceverà alert e notifiche)
  3. Conferma la creazione

⚠️ Attenzione: Questa operazione comporta un addebito da parte di ACube.

Il sistema userà:

  • Fiscal ID: dalla Partita IVA della Company
  • Business Name: dal nome della Company
  • Email: quella inserita dall'operatore nel dialog (specifica per l'azienda, diversa dalle credenziali ACube)

Step 3: Connetti Banca

  1. Clicca Actions > Connect Bank Account
  2. Configura i parametri (opzionali):
    • Bank Manager Email: Email del responsabile
    • Consent Days: Durata consenso (1-180 giorni, default: 180)
    • Test Mode: Attiva per usare banca fake in sandbox
  3. Clicca Connect

Si aprirà una nuova finestra dove potrai:

  1. Selezionare la banca
  2. Autenticarti con le credenziali bancarie
  3. Autorizzare l'accesso agli account

Il sistema usa automaticamente l'URL corrente come return URL.

Step 4: Aggiorna Lista Account

Dopo aver completato l'autorizzazione:

  1. Clicca Refresh Accounts
  2. Gli account autorizzati verranno mostrati nella tab "Authorized Bank Accounts"

Per ogni account puoi:

  • View Details: Visualizzare tutti i dati dell'account
  • Enable/Disable: Abilitare o disabilitare l'account
  • Delete: Eliminare la connessione (solo se disabilitato)

Step 5: Importa Transazioni

  1. Naviga in OpenBanking > OpenBanking Settings
  2. Clicca Actions > Import Transactions
  3. Configura i filtri:
    • Account: Seleziona un account specifico o lascia vuoto per tutti
    • From Date: Data inizio
    • To Date: Data fine
  4. Clicca Import

Le transazioni verranno importate in:

  • Bank Transaction: Per la riconciliazione
  • ACube Transaction Log: Per il tracciamento

Step 6: Esegui Bonifici SEPA

Da Purchase Invoice

  1. Crea una Purchase Invoice e fai Submit
  2. Assicurati che abbia un outstanding_amount > 0
  3. Clicca OpenBanking > Esegui Bonifico
  4. Il sistema verifica/crea il Bank Account del fornitore:
    • Se il fornitore ha già un IBAN configurato: selezionalo o inseriscine uno nuovo
    • Se non ha IBAN: inserisci l'IBAN del fornitore
    • Il sistema validerà l'IBAN e creerà automaticamente Bank e Bank Account
  5. Configura il pagamento:
    • Conto da cui pagare: Seleziona l'account OpenBanking (solo account con supporto pagamenti SEPA)
    • IBAN Fornitore: IBAN destinatario (deve essere paese SEPA)
    • Bonifico Istantaneo: Spunta per SEPA Instant (max €100.000)
  6. Clicca Avvia Bonifico
  7. Si apre una finestra per autorizzare il pagamento presso la banca
  8. Dopo l'autorizzazione, il sistema:
    • Crea un documento OpenBanking Payment con status "pending"
    • Quando la banca completa il pagamento, ACube invia un webhook
    • Il webhook crea automaticamente un Payment Entry con Mode of Payment configurato
    • La Purchase Invoice viene marcata come Paid

Monitoraggio Pagamento

  • Nella Purchase Invoice vedrai lo status del pagamento
  • Clicca OpenBanking > Aggiorna Status per controllare manualmente
  • Il documento OpenBanking Payment mostra tutti i dettagli (UUID, End-to-End ID, status)

Stati Pagamento

  • pending: Pagamento inizializzato, in attesa autorizzazione
  • requested: Autorizzazione completata, in elaborazione
  • processing: Pagamento in corso
  • confirmed: Pagamento confermato dalla banca (Payment Entry creato automaticamente)
  • failed: Pagamento fallito
  • cancelled: Pagamento annullato (solo lato sistema, non presso la banca)

Gestione Pagamenti Bloccati (PENDING/FAILED)

Se un pagamento rimane in stato pending o failed, hai a disposizione diverse opzioni:

1. Riprova Pagamento

  • Riapre l'URL di autorizzazione presso la banca
  • Utile se l'utente non ha completato l'autorizzazione o la finestra si è chiusa
  • Clicca OpenBanking > Riprova Pagamento dalla Purchase Invoice
  • Si aprirà una nuova finestra per completare l'autorizzazione
  • Dopo aver completato, clicca Aggiorna Status per verificare l'esito

2. Annulla Pagamento

  • Cambia lo stato del pagamento a cancelled
  • Sblocca la fattura permettendo di creare un nuovo pagamento
  • Clicca OpenBanking > Annulla Pagamento dalla Purchase Invoice
  • Conferma nel dialog (include warning che l'annullamento è solo locale)
  • Il bottone Esegui Bonifico riapparirà per creare un nuovo pagamento

3. Aggiorna Status

  • Interroga l'API ACube per ottenere lo status aggiornato del pagamento
  • Clicca OpenBanking > Aggiorna Status dalla Purchase Invoice
  • Lo status locale verrà sincronizzato con quello del sistema bancario

Nota importante: L'operazione "Annulla Pagamento" annulla SOLO il record locale nel sistema. Se il pagamento è già stato autorizzato presso la banca, NON verrà annullato automaticamente. In quel caso, dovrai procedere manualmente tramite il portale della banca.

Visualizza Report

Naviga in OpenBanking Workspace e clicca su Authorized Bank Accounts per visualizzare tutti gli account autorizzati ordinati per saldo decrescente.

Il report è accessibile anche a utenti con ruolo "Accounts User" o "Accounts Manager".

📁 Struttura

solede_openbanking/
├── api/
│   ├── authentication.py        # Gestione JWT token
│   ├── business_registry.py     # Business Registry e operazioni
│   ├── client.py                # Client API centralizzato
│   ├── payments.py              # Gestione pagamenti SEPA
│   ├── iban_enrichment.py       # Validazione e enrichment IBAN
│   ├── webhooks.py              # Gestione webhook ACube
│   └── utils.py                 # Utility functions
├── solede_openbanking/
│   ├── doctype/
│   │   ├── openbanking_settings/
│   │   │   ├── openbanking_settings.json
│   │   │   ├── openbanking_settings.py
│   │   │   └── openbanking_settings.js
│   │   ├── openbanking_account/
│   │   │   ├── openbanking_account.json
│   │   │   └── openbanking_account.py
│   │   ├── openbanking_payment/
│   │   │   ├── openbanking_payment.json
│   │   │   └── openbanking_payment.py
│   │   ├── acube_transaction_log/
│   │   │   ├── acube_transaction_log.json
│   │   │   └── acube_transaction_log.py
│   │   └── acube_webhook_log/
│   │       ├── acube_webhook_log.json
│   │       └── acube_webhook_log.py
│   ├── report/
│   │   └── authorized_bank_accounts/
│   │       ├── authorized_bank_accounts.json
│   │       └── authorized_bank_accounts.py
│   └── workspace/
│       └── openbanking/
│           └── openbanking.json
├── public/
│   └── js/
│       ├── openbanking_helpers.js  # Helper JavaScript
│       ├── purchase_invoice.js     # Client-side pagamenti Purchase Invoice
│       ├── supplier.js             # Validazione IBAN fornitore
│       └── bank_transaction.js     # Arricchimento transazioni
├── templates/
│   └── pages/
│       ├── payment_callback.py     # Callback page pagamenti
│       └── payment_callback.html   # Template callback
├── fixtures/                       # Custom fields e configurazioni
├── hooks.py
└── README.md

🔌 API Endpoints

Autenticazione

Endpoint Method Descrizione
/login POST Genera token JWT

Business Registry

Endpoint Method Descrizione
/business-registry POST Crea Business Registry
/business-registry/{fiscalId} GET Info Business Registry
/business-registry/{fiscalId}/connect POST Avvia connessione banca

Account

Endpoint Method Descrizione
/business-registry/{fiscalId}/accounts GET Lista account autorizzati
/accounts/{uuid} PUT Abilita/disabilita account
/accounts/{uuid} DELETE Elimina account

Transazioni

Endpoint Method Descrizione
/business-registry/{fiscalId}/transactions GET Recupera transazioni

Pagamenti

Endpoint Method Descrizione
/payments/send/sepa POST Invia bonifico SEPA
/payments/send/sepa-instant POST Invia bonifico SEPA Instant
/payments/{uuid} GET Recupera status pagamento

Webhook

Endpoint Method Descrizione
/api/method/solede_openbanking.api.webhooks.acube_webhook POST Riceve webhook da ACube

🔐 Sicurezza

  • Password Crittografate: Uso del campo Password di Frappe per crittografia automatica
  • Token JWT: Autenticazione Bearer token per tutte le chiamate API
  • Raw Data Storage: Salvataggio completo JSON per audit trail
  • Validazione Campi: Controlli pattern per email, password e altri campi critici

🎨 Principi di Design

Questa app segue rigorosamente i principi:

  • DRY (Don't Repeat Yourself): Codice riutilizzabile e modulare
  • KISS (Keep It Simple, Stupid): Soluzioni semplici e dirette
  • No Fallback: Gli errori vengono sempre mostrati all'utente senza sistemi di fallback
  • Explicit Errors: Messaggi di errore chiari e dettagliati

🗃️ Modello Dati

OpenBanking Settings (DocType)

Configurazione principale per ogni Company.

Campi principali:

  • company (Link): Company di riferimento
  • api_url (Data): URL API Common
  • openbanking_api_url (Data): URL API Open Banking
  • email (Data): Email account ACube
  • password (Password): Password crittografata
  • business_registry_created (Check): Flag creazione registry
  • access_token (Long Text): Token JWT corrente
  • token_created_at (Datetime): Data creazione token
  • token_expires_at (Datetime): Data scadenza token
  • callback_base_url (Data): URL base per callback pagamenti
  • payment_mode_of_payment (Link): Mode of Payment per Payment Entry automatici
  • accounts (Table): Child table con account autorizzati

OpenBanking Account (Child Table)

Account bancari autorizzati.

Campi principali:

  • uuid (Data): Identificativo univoco ACube
  • iban (Data): IBAN account
  • bank_display (Data): Nome banca
  • balance_display (Data): Saldo formattato
  • enabled (Check): Stato attivo/disattivo
  • raw_data (Long Text): JSON completo da API (include campo "systems" con capabilities pagamenti)

OpenBanking Payment (DocType)

Tracciamento pagamenti SEPA.

Campi principali:

  • uuid (Data): UUID pagamento da ACube
  • payment_direction (Select): outbound/inbound
  • status (Data): pending/requested/processing/confirmed/failed/cancelled
  • system (Select): sepa/sepa-instant
  • amount (Currency): Importo pagamento
  • currency_code (Data): Valuta (default EUR)
  • description (Small Text): Descrizione pagamento
  • reference_doctype (Link): DocType di riferimento (es. Purchase Invoice)
  • reference_name (Dynamic Link): Nome documento di riferimento
  • company (Link): Company
  • supplier (Link): Fornitore
  • creditor_name (Data): Nome beneficiario
  • creditor_iban (Data): IBAN beneficiario
  • account_uuid (Data): UUID account OpenBanking debitore
  • connect_url (Data): URL autorizzazione pagamento
  • end_to_end_id (Data): End-to-End ID transazione
  • error_message (Text): Messaggio errore se failed
  • raw_response (Code): Risposta completa API JSON

ACube Transaction Log (DocType)

Log di tutte le transazioni importate.

Campi principali:

  • company (Link): Company
  • bank_account (Link): Bank Account ERPNext
  • acube_account_uuid (Data): UUID account ACube
  • transaction_date (Date): Data transazione
  • acube_transaction_id (Data): ID transazione ACube
  • transaction_status (Data): Stato transazione
  • amount (Currency): Importo
  • currency (Link): Valuta
  • import_status (Select): Pending/Imported/Failed
  • bank_transaction (Link): Link a Bank Transaction
  • error_message (Text): Messaggio errore se fallita
  • raw_data (Long Text): JSON completo

Custom Fields su Payment Entry

L'app aggiunge campi custom a Payment Entry:

  • custom_openbanking_payment (Link): Collegamento al documento OpenBanking Payment

Custom Fields su Bank Transaction

L'app aggiunge campi custom a Bank Transaction:

  • acube_section (Section Break): Sezione dati ACube
  • acube_transaction_id (Data): ID transazione univoco
  • api_source (Data): Fonte (sempre "ACube")
  • acube_booking_date (Date): Data registrazione
  • acube_value_date (Date): Data valuta
  • acube_status (Data): Stato transazione
  • acube_category (Data): Categoria
  • acube_raw_data (Long Text): Dati completi JSON

🔧 Funzioni API Principali

authentication.py

generate_token(company)
# Genera nuovo token JWT

get_valid_token(company)
# Ottiene token valido (rinnova se scaduto)

decode_token_payload(token)
# Decodifica payload JWT per debug

business_registry.py

create_business_registry(company, business_email)
# Crea Business Registry con email specifica per l'azienda

get_business_registry_info(company)
# Recupera info Business Registry

start_connect_request(company, return_url, bank_manager_email, days, test_mode)
# Avvia connessione bancaria

get_accounts(company)
# Recupera account autorizzati

toggle_account(company, uuid, enabled)
# Abilita/disabilita account

delete_account(company, uuid)
# Elimina account

import_transactions(company, account_uuid, from_date, to_date)
# Importa transazioni in Bank Transaction

payments.py

get_supplier_bank_accounts(supplier_name)
# Recupera Bank Account del fornitore

get_company_openbanking_accounts(company)
# Recupera account OpenBanking con capabilities pagamenti

initiate_sepa_payment(reference_doctype, reference_name, account_uuid,
                     creditor_iban, creditor_name, use_instant)
# Avvia pagamento SEPA/SEPA Instant
# Valida IBAN paese SEPA e capabilities account

get_payment_status(payment_uuid)
# Aggiorna status pagamento da API

cancel_payment(payment_name)
# Annulla un pagamento OpenBanking (solo lato sistema)
# Cambia status a 'cancelled' per sbloccare la fattura
# Permette solo su pagamenti pending/requested/failed

create_or_get_supplier_bank_account(supplier_name, iban, account_name)
# Crea/recupera Bank Account fornitore da IBAN

webhooks.py

acube_webhook()
# Endpoint pubblico per ricevere webhook ACube
# Gestisce eventi: connect, reconnect, payment

handle_payment_webhook(payload, company, log_name)
# Gestisce webhook pagamento
# Crea automaticamente Payment Entry se status = "confirmed"

create_payment_entry_from_payment(payment_doc)
# Crea Payment Entry da OpenBanking Payment
# Associa il conto bancario corretto (lookup IBAN da account_uuid)
# Usa Mode of Payment da settings

client.py

class ACubeAPIClient:
    # Client centralizzato per chiamate API
    # Gestisce automaticamente:
    # - Autenticazione token
    # - Headers comuni
    # - Error handling
    # - Logging

🌍 Ambienti

Sandbox (Testing)

  • Common API: https://common-sandbox.api.acubeapi.com
  • OpenBanking API: https://ob-sandbox.api.acubeapi.com
  • Usa Test Mode per connetterti a banche fake (country code: XF)

Production

  • Common API: https://common.api.acubeapi.com
  • OpenBanking API: https://ob.api.acubeapi.com
  • Banche reali italiane (country code: IT)

🐛 Troubleshooting

Il token non viene generato

  • Verifica che email e password siano corretti
  • Controlla che gli URL API siano configurati correttamente
  • Verifica i log di sistema per errori dettagliati

Business Registry fallisce

  • Assicurati che la Company abbia Tax ID configurato
  • Verifica che il formato Tax ID sia valido (Partita IVA italiana)
  • Controlla di avere credito sufficiente su ACube

Connessione banca non funziona

  • Verifica che il Business Registry sia stato creato
  • Controlla che la finestra popup non sia bloccata dal browser
  • Usa Test Mode in sandbox per fare prove

Transazioni non vengono importate

  • Verifica che l'account sia abilitato
  • Controlla che la valuta esista in ERPNext
  • Verifica che la valuta della transazione corrisponda a quella del Bank Account
  • Controlla ACube Transaction Log per vedere errori specifici

Pagamento SEPA non funziona

  • Verifica che l'account OpenBanking supporti pagamenti (campo "systems" in raw_data)
  • Controlla che l'IBAN destinatario sia di un paese SEPA
  • Per SEPA Instant: importo massimo €100.000
  • Verifica che callback_base_url sia configurato e raggiungibile pubblicamente
  • In sandbox: importo massimo €10

Payment Entry non viene creato automaticamente

  • Verifica che payment_mode_of_payment sia configurato in OpenBanking Settings
  • Controlla ACube Webhook Log per verificare ricezione webhook (lo status atteso da ACube e' confirmed)
  • Controlla Error Log (cerca "Payment Webhook Error") per eccezioni durante creazione Payment Entry
  • Verifica che Purchase Invoice abbia ancora outstanding_amount > 0
  • Verifica che il Bank Account ERPNext abbia l'IBAN corrispondente all'account OpenBanking usato per il pagamento

Errore "Not allowed to change Mode of Payment after submission"

  • Assicurati di aver configurato payment_mode_of_payment in OpenBanking Settings prima di testare
  • Il Mode of Payment deve essere impostato PRIMA del submit del Payment Entry

Pagamento bloccato in stato PENDING

  • Usa Riprova Pagamento per riaprire l'URL della banca e completare l'autorizzazione
  • Se il pagamento non può essere completato, usa Annulla Pagamento per sbloccare la fattura
  • Dopo l'annullamento, potrai creare un nuovo pagamento
  • Ricorda: l'annullamento è solo locale, verifica presso la banca che il pagamento non sia stato eseguito

Pagamento in stato FAILED

  • Controlla il campo error_message nel documento OpenBanking Payment per vedere il motivo
  • Usa Annulla Pagamento per rimuovere il pagamento fallito
  • Crea un nuovo pagamento risolvendo il problema (es. saldo insufficiente, IBAN errato)

🤝 Contributing

I contributi sono benvenuti! Per contribuire:

  1. Fai fork del progetto
  2. Crea un branch per la tua feature (git checkout -b feature/AmazingFeature)
  3. Commit delle modifiche (git commit -m 'feat: Add some AmazingFeature')
  4. Push al branch (git push origin feature/AmazingFeature)
  5. Apri una Pull Request

Setup Pre-commit

L'app usa pre-commit per formattazione e linting:

cd apps/solede_openbanking
pre-commit install

Tool configurati:

  • ruff: Linting Python
  • eslint: Linting JavaScript
  • prettier: Formattazione
  • pyupgrade: Aggiornamento sintassi Python

Convenzioni Commit

Usa Conventional Commits:

  • feat: Nuove funzionalità
  • fix: Bug fix
  • refactor: Refactoring codice
  • docs: Modifiche documentazione
  • test: Aggiunta/modifica test
  • chore: Maintenance tasks

📝 Changelog

v1.3.0 (Current)

  • 🐛 Fix Payment Entry automatico - Corretto status webhook da "completed" a "confirmed" (allineamento con API ACube)
  • Associazione banca corretta - Il Payment Entry usa il conto bancario effettivo del pagamento (lookup IBAN da account_uuid)
  • Custom field Payment Entry - Aggiunto campo custom_openbanking_payment su Payment Entry per tracciabilità
  • 🐛 Fix KeyError endToEndId - Accesso sicuro al campo endToEndId nel webhook payload
  • 🐛 Fix deductions vuote - Pulizia deductions auto (es. early payment discount) che potevano bloccare la creazione del Payment Entry

v1.2.0

  • Gestione Pagamenti Bloccati - Nuove funzionalità per gestire pagamenti PENDING/FAILED
  • Riprova Pagamento - Riapri l'URL della banca per completare autorizzazioni incomplete
  • Annulla Pagamento - Annulla pagamenti locali per sbloccare fatture e crearne di nuovi
  • Stati Pagamento Migliorati - Aggiunto stato "cancelled" con indicatore grigio
  • UX Migliorata - Bottoni contestuali basati sullo stato del pagamento
  • 🔧 API Cancel Payment - Nuova funzione whitelisted per annullamento pagamenti

v1.1.0

  • Pagamenti SEPA - Bonifici SEPA da Purchase Invoice
  • SEPA Instant - Supporto bonifici istantanei
  • IBAN Enrichment - Creazione automatica Bank/Bank Account da IBAN
  • Validazione SEPA - Controllo paese IBAN per bonifici SEPA
  • Payment Entry Automatico - Creazione automatica da webhook
  • Callback Page - Pagina ritorno dopo autorizzazione
  • Mode of Payment Configurabile - Per ogni company
  • Webhook Management - Gestione completa webhook ACube
  • NO FALLBACK - Errori sempre mostrati all'utente

v1.0.0

  • ✨ Gestione completa Business Registry
  • ✨ Connessione multi-account bancari
  • ✨ Import transazioni con riconciliazione
  • ✨ Report conti autorizzati
  • ✨ Workspace dedicato OpenBanking
  • ✨ Transaction Log completo
  • ✨ Client API centralizzato (DRY principle)
  • ✨ Test mode con fake banks

📄 Licenza

GNU Affero General Public License v3.0 - vedi il file LICENSE per dettagli.

Copyright (C) 2024-2026 Solede SA and contributors

Questa app è rilasciata sotto licenza AGPL v3. Se modifichi questa app e la offri come servizio web/SaaS, DEVI rendere disponibile il codice sorgente modificato a tutti gli utenti del servizio.

Questo significa:

  • ✅ Puoi usare, modificare e distribuire liberamente
  • ✅ Puoi offrire come servizio commerciale (hosting/SaaS)
  • ✅ DEVI condividere le modifiche se offri come servizio web
  • ✅ Il codice derivato deve rimanere AGPL v3

Per maggiori informazioni: https://www.gnu.org/licenses/agpl-3.0.html

👥 Autori

Solede SA

🙏 Credits

💬 Supporto

Per problemi, domande o richieste di funzionalità:

📚 Risorse Utili


Made with ❤️ by Solede SA

About

Open Banking integration for ERPNext - Connect banks, import transactions, and process SEPA payments via PSD2 APIs

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors