App Frappe/ERPNext per integrazione con servizi OpenAPI.it per fatturazione elettronica italiana e Sistema di Interscambio (SDI).
- β Integrazione completa con API OpenAPI.it
- β Provider SDI per invio automatico fatture al Sistema di Interscambio
- β Webhook per ricezione notifiche SDI in tempo reale
- β Ricerca e validazione aziende tramite P.IVA/Codice Fiscale
- β Auto-popolamento dati anagrafici (denominazione, PEC, sede legale)
- β Credit Scoring Advanced - Verifica creditizia clienti azienda con rating e limite credito
- β Dati Bilancio - Fatturato, patrimonio netto, dipendenti da IT-advanced
- β NegativitΓ Persona - Verifica protesti, pregiudizievoli e procedure per persone fisiche
- β Integrazione OpenAPI per Customer e Supplier con funzioni DRY
- β Import automatico fatture fornitori via webhook
- β Tracking completo stato transazioni SDI
- β Configurazione multi-company con token separati
# Ottieni l'app da GitHub
bench get-app https://github.com/Solede-SA/openapi.git
# Installa nel sito
bench --site [nome-sito] install-app openapi
# Applica modifiche
bench --site [nome-sito] migrateRequisiti: Frappe v15+, ERPNext v15+, Python 3.10+, Account OpenAPI.it
Registrati su OpenAPI.it e ottieni:
- API Token: Token autenticazione per chiamate API
- Webhook URL: URL per ricezione notifiche (configurato automaticamente)
Vai in Company β Seleziona la tua azienda e compila:
- OpenAPI Token: Incolla il token API di OpenAPI.it
- OpenAPI Webhook URL: Auto-generato (es.
https://tuosito.com/api/method/openapi.api.sdi.callback.handle_webhook)
Vai in OpenAPI Services e crea i seguenti record:
| Nome | URL |
|---|---|
Company Start |
https://business.openapi.com |
Company |
https://business.openapi.com |
Credit Scoring Advanced |
https://risk.openapi.com |
Negativita Persona |
https://risk.openapi.com |
Questi servizi sono necessari per le diverse funzionalitΓ :
- Company Start / Company: Ricerca aziende per P.IVA/CF e ragione sociale
- Credit Scoring Advanced: Verifica creditizia clienti azienda (richiede abbonamento specifico)
- Negativita Persona: Verifica protesti, pregiudizievoli e procedure concorsuali per persone fisiche
Questa app funziona come Provider SDI per l'app italian_invoice:
- Installa sia
openapicheitalian_invoice - In Company, imposta Provider SDI = "OpenAPI"
- Le fatture vengono inviate automaticamente al SDI tramite OpenAPI.it
Per clienti di tipo Company con P.IVA, Γ¨ disponibile la verifica creditizia:
- Apri il form Customer
- Clicca OpenAPI > Verifica Creditizia
- Visualizza: Rating (A1-C3), Risk Score, Limite Credito Operativo
- Clicca "Salva nel Cliente" per memorizzare i dati
# Via API
result = frappe.call("openapi.api.aziende.credit_scoring.get_credit_score",
vat_or_tax_code="12345678901")
# Ritorna:
{
"rating": "A2",
"risk_score": "Verde",
"risk_score_description": "Rischio basso",
"operational_credit_limit": 50000.00,
"risk_severity": 150
}Nota: Richiede abbonamento Credit Scoring Advanced su OpenAPI.it
Per clienti di tipo Company con P.IVA, Γ¨ possibile recuperare i dati di bilancio:
- Apri il form Customer (di tipo Company)
- Clicca OpenAPI > Dati Bilancio
- Visualizza: Fatturato, Patrimonio Netto, Dipendenti, Anno Bilancio
- Clicca "Salva nel Cliente" per memorizzare i dati
# Via API
result = frappe.call("openapi.api.aziende.company_start.get_customer_bilancio",
customer_name="ACME SRL")
# Ritorna:
{
"success": True,
"bilancio": {
"fatturato": 2661780,
"patrimonio_netto": 1293177,
"dipendenti": 5,
"anno_bilancio": 2024
},
"full_data": {...}
}Nota: Usa l'endpoint IT-advanced (sincrono). I dati includono lo storico fino a 7 anni.
Per clienti di tipo Individual con codice fiscale, Γ¨ disponibile la verifica negativitΓ :
- Apri il form Customer (di tipo Individual)
- Clicca OpenAPI > Verifica NegativitΓ
- La richiesta viene inviata (API asincrona)
- Usa Controlla Stato NegativitΓ per verificare il completamento
- Visualizza: Protesti, Pregiudizievoli, Procedure Concorsuali
# Via API
result = frappe.call("openapi.api.aziende.negativita_persona.request_negativita_check",
fiscal_code="RSSMRA80A01H501U",
customer_name="Mario Rossi")
# Ritorna:
{
"success": True,
"request_id": "abc123",
"status": "PENDING",
"message": "Richiesta inviata..."
}
# Controlla stato
result = frappe.call("openapi.api.aziende.negativita_persona.check_request_status",
request_id="abc123",
customer_name="Mario Rossi")Nota: Richiede abbonamento NegativitΓ Persona su OpenAPI.it. L'API Γ¨ asincrona e supporta callback webhook.
# Via API
import frappe
# Cerca per P.IVA
result = frappe.call("openapi.api.aziende.search.search_by_vat",
vat_number="12345678901")
# Cerca per Codice Fiscale
result = frappe.call("openapi.api.aziende.search.search_by_fiscal_code",
fiscal_code="RSSMRA80A01H501U")Ritorna dati completi:
{
"denominazione": "ACME SRL",
"partita_iva": "12345678901",
"codice_fiscale": "12345678901",
"pec": "acme@pec.it",
"codice_sdi": "ABCDEFG",
"indirizzo": {
"via": "Via Roma 1",
"cap": "20100",
"citta": "Milano",
"provincia": "MI"
}
}Le fatture create in ERPNext vengono automaticamente inviate al SDI quando:
- Hai configurato Provider SDI = "OpenAPI" in Company
- Fai submit della Sales Invoice
- Clicchi "Genera e-Invoice"
Il sistema:
- Genera XML FatturaPA
- Invia tramite OpenAPI.it al SDI
- Crea Transazione SDI per tracking
- Riceve notifiche via webhook (RC, NS, MC, EC)
Le notifiche SDI vengono ricevute automaticamente:
- RC (Ricevuta Consegna): Fattura consegnata al destinatario
- NS (Notifica Scarto): Fattura scartata dal SDI
- MC (Mancata Consegna): Destinatario non raggiungibile
- EC (Esito Committente): Accettazione/Rifiuto da destinatario
Ogni notifica aggiorna automaticamente lo stato in Transazione SDI.
Quando ricevi una fattura fornitore:
- OpenAPI.it invia notifica via webhook
- Sistema scarica automaticamente XML fattura
- Crea documento "Fattura Fornitori SDI"
- Parsing automatico dati (fornitore, importi, righe)
- Matching con Purchase Orders aperti
- Creazione Purchase Invoice con un click
Configurazione servizi OpenAPI.it:
- API Token: Token autenticazione
- Environment: Produzione/Test
- Company: Company associata
- Webhook Secret: Per validazione webhook
Log webhook ricevuti:
- Webhook Type: Tipo notifica (RC, NS, MC, EC)
- Payload: JSON completo ricevuto
- Status: Processed/Failed
- Error Message: Se processing fallito
- Transaction ID: Link a Transazione SDI
Settings fatturazione elettronica per company:
- Default Tipo Documento: TD01, TD04, etc.
- Regime Fiscale: RF01, RF02, etc.
- Auto-send: Invio automatico dopo submit
frappe.call("openapi.api.aziende.search.search_by_vat",
vat_number="12345678901")frappe.call("openapi.api.aziende.search.search_by_fiscal_code",
fiscal_code="RSSMRA80A01H501U")frappe.call("openapi.api.sdi.fatture.send_invoice",
invoice_name="SINV-00001",
xml_content=xml_string)frappe.call("openapi.api.sdi.fatture.get_invoice_status",
uuid="uuid-fattura")Endpoint automatico per ricezione notifiche SDI:
POST /api/method/openapi.api.sdi.callback.handle_webhook
Headers:
X-Webhook-Signature: <signature>
Body: JSON notifica SDI
openapi/
βββ openapi/
β βββ api/
β β βββ sdi/ # Integrazione SDI
β β β βββ fatture.py # Invio/download fatture
β β β βββ callback.py # Webhook handler
β β β βββ configurazione.py
β β βββ aziende/ # Ricerca aziende
β β β βββ search.py # P.IVA/CF lookup
β β β βββ company_start.py # Dati anagrafici azienda
β β β βββ credit_scoring.py # Credit Scoring Advanced
β β β βββ negativita_persona.py # NegativitΓ persone fisiche
β β βββ eInvoice/ # Import fatture passive
β β βββ purchase_invoice.py
β β
β βββ doctype/ # Custom DocTypes
β β βββ openapi_services/
β β βββ openapi_webhook/
β β βββ configurazione_fattura_sdi/
β β
β βββ tools/ # Utilities
β β βββ openapi/ # Client OpenAPI.it
β β βββ common_data.py
β β
β βββ public/js/ # Client-side scripts
β βββ openapi_party_utils.js # Funzioni comuni Customer/Supplier
β βββ custom_company.js
β βββ custom_customer.js # Ricerca azienda + Credit Scoring
β βββ custom_supplier.js # Ricerca azienda per Supplier
β βββ custom_sales_invoice.js
β βββ custom_purchase_invoice.js
β
βββ README.md
"API Token non configurato"
- Verifica che hai creato OpenAPI Services
- Controlla che API Token sia compilato
- Verifica che Company abbia
custom_open_api_token
"Webhook non ricevuti"
- Verifica URL webhook pubblicamente accessibile
- Controlla firewall/SSL certificate
- Test con
curl -X POST [webhook-url]
"Fattura non inviata al SDI"
- Controlla Provider SDI = "OpenAPI" in Company
- Verifica API Token valido
- Controlla log:
logs/[sito]/error.log
# Abilita developer mode
bench --site [sito] set-config developer_mode 1
bench --site [sito] clear-cache
bench restart
# Test manuale API
bench --site [sito] console
>>> import openapi.api.aziende.search as search
>>> search.search_by_vat("12345678901")Contribuzioni benvenute! Leggi CONTRIBUTING.md per:
- Setup ambiente di sviluppo
- Convenzioni di codice
- Testing e commit conventions
- Come proporre nuove integrazioni API
# Fork e clone
git clone https://github.com/[your-username]/openapi.git
cd openapi
# Crea branch
git checkout -b feature/AmazingFeature
# Sviluppa e testa
bench --site [test-site] run-tests --app openapi
# Commit e PR
git commit -m "feat(sdi): description"
git push origin feature/AmazingFeatureGNU Affero General Public License v3.0 - vedi LICENSE
Copyright (C) 2024-2025 Solede SA and contributors
Puoi usare, modificare e distribuire liberamente. Se offri come servizio web/SaaS, DEVI condividere il codice sorgente modificato.
Sviluppato da Solede SA | GitHub Issues | info@solede.com