-- estrazione dei dati di bilancio dalla tassonomia XBRL italianaSELECT f.codice_fiscale, f.anno,SUM(CASEWHEN f.concetto = 'itcc-ci:TotaleValoreProduzione'THEN f.valore END) AS valore_produzione,SUM(CASEWHEN f.concetto = 'itcc-ci:CostiProduzionePersonaleTotale'THEN f.valore END) AS costo_personale,SUM(CASEWHEN f.concetto = 'itcc-ci:AmmortamentiSvalutazioniTotale'THEN f.valore END) AS ammortamenti,SUM(CASEWHEN f.concetto = 'itcc-ci:DebitiTotaleDebiti'THEN f.valore END) AS debitiFROM xbrl_fatti AS fWHERE f.contesto = 'esercizio_corrente'AND f.anno BETWEEN2022AND2025GROUPBY f.codice_fiscale, f.annoORDERBY f.anno DESC;# leibniz/valutazione/modello.pyimport numpy as npfrom leibniz.dati import carica_bilanci_xbrl, carica_comparabilifrom leibniz.ia import ModelloSettorialefrom leibniz.core import enterprise_valuedef multiplo_ev_ebitda(settore: str, anno: int) -> float: campione = carica_comparabili(settore, anno) multipli = [c.ev / c.ebitda for c in campione if c.ebitda > 0]returnfloat(np.median(multipli))def simulazione_monte_carlo(fcf_base, wacc, g, n=10_000, seed=42): rng = np.random.default_rng(seed) crescita = rng.normal(g, 0.005, n) tassi = rng.normal(wacc, 0.01, n) ev = [enterprise_value(fcf_base, w, c) for w, c in zip(tassi, crescita)]return np.percentile(ev, [10, 50, 90])bilanci = carica_bilanci_xbrl(codice_fiscale, anni=range(2022, 2026))modello = ModelloSettoriale.carica("ateco-2025", versione="3.2")segnali = modello.analizza(bilanci, indicatori=["dscr", "pfn_ebitda", "rotazione_crediti"])p10, p50, p90 = simulazione_monte_carlo(segnali.fcf, wacc=0.0874, g=0.02)/* leibniz/core/cashflow.c */#include <math.h>#include"bilancio.h"#define ALIQUOTA_FISCALE 0.279typedefstruct {double ebit;double ammortamenti;double capex;double delta_ccn;} FlussiOperativi;double fcff(const FlussiOperativi *f){double nopat = f->ebit * (1.0 - ALIQUOTA_FISCALE);return nopat + f->ammortamenti - f->capex - f->delta_ccn;}double valore_terminale(double fcf_n, double wacc, double g){if (wacc <= g) return NAN;return fcf_n * (1.0 + g) / (wacc - g);}double enterprise_value(constdouble *fcf, int anni, double wacc, double g){double ev = 0.0;for (int t = 0; t < anni; t++) ev += fcf[t] / pow(1.0 + wacc, t + 1); ev += valore_terminale(fcf[anni - 1], wacc, g) / pow(1.0 + wacc, anni);return ev;}double delta_ccn(const StatoPatrimoniale *sp, const StatoPatrimoniale *prec){double ccn = sp->crediti_commerciali + sp->rimanenze - sp->debiti_fornitori;double ccn_prec = prec->crediti_commerciali + prec->rimanenze - prec->debiti_fornitori;return ccn - ccn_prec;}package it.progemafin.leibniz.analisi;import java.math.BigDecimal;import java.math.RoundingMode;publicfinalclass RiclassificazioneBilancio {privatestaticfinal BigDecimal ALIQUOTA = new BigDecimal("0.279");public ContoEconomicoRiclassificato aValoreAggiunto(Bilancio b) { BigDecimal valoreProduzione = b.ricavi() .add(b.variazioneRimanenze()) .add(b.altriRicavi()); BigDecimal valoreAggiunto = valoreProduzione .subtract(b.costiMateriePrime()) .subtract(b.costiServizi()) .subtract(b.godimentoBeniTerzi()); BigDecimal ebitda = valoreAggiunto.subtract(b.costoPersonale()); BigDecimal ebit = ebitda .subtract(b.ammortamenti()) .subtract(b.svalutazioni());returnnew ContoEconomicoRiclassificato(valoreProduzione, valoreAggiunto, ebitda, ebit); }public BigDecimal posizioneFinanziariaNetta(StatoPatrimoniale sp) {return sp.debitiVersoBanche() .add(sp.debitiVersoAltriFinanziatori()) .add(sp.obbligazioni()) .subtract(sp.disponibilitaLiquide()) .subtract(sp.attivitaFinanziarieCorrenti()); }public BigDecimal dscr(FlussiDiCassa f, ServizioDebito s) { BigDecimal servizio = s.quotaCapitale().add(s.interessi());if (servizio.signum() == 0) returnnull;return f.flussoOperativo().divide(servizio, 4, RoundingMode.HALF_UP); }public BigDecimal margineEbitda(ContoEconomicoRiclassificato ce) {return ce.ebitda().divide(ce.valoreProduzione(), 4, RoundingMode.HALF_UP); }}-- estrazione dei dati di bilancio dalla tassonomia XBRL italianaSELECT f.codice_fiscale, f.anno,SUM(CASEWHEN f.concetto = 'itcc-ci:TotaleValoreProduzione'THEN f.valore END) AS valore_produzione,SUM(CASEWHEN f.concetto = 'itcc-ci:CostiProduzionePersonaleTotale'THEN f.valore END) AS costo_personale,SUM(CASEWHEN f.concetto = 'itcc-ci:AmmortamentiSvalutazioniTotale'THEN f.valore END) AS ammortamenti,SUM(CASEWHEN f.concetto = 'itcc-ci:DebitiTotaleDebiti'THEN f.valore END) AS debitiFROM xbrl_fatti AS fWHERE f.contesto = 'esercizio_corrente'AND f.anno BETWEEN2022AND2025GROUPBY f.codice_fiscale, f.annoORDERBY f.anno DESC;package it.progemafin.leibniz.analisi;import java.math.BigDecimal;import java.math.RoundingMode;publicfinalclass RiclassificazioneBilancio {privatestaticfinal BigDecimal ALIQUOTA = new BigDecimal("0.279");public ContoEconomicoRiclassificato aValoreAggiunto(Bilancio b) { BigDecimal valoreProduzione = b.ricavi() .add(b.variazioneRimanenze()) .add(b.altriRicavi()); BigDecimal valoreAggiunto = valoreProduzione .subtract(b.costiMateriePrime()) .subtract(b.costiServizi()) .subtract(b.godimentoBeniTerzi()); BigDecimal ebitda = valoreAggiunto.subtract(b.costoPersonale()); BigDecimal ebit = ebitda .subtract(b.ammortamenti()) .subtract(b.svalutazioni());returnnew ContoEconomicoRiclassificato(valoreProduzione, valoreAggiunto, ebitda, ebit); }public BigDecimal posizioneFinanziariaNetta(StatoPatrimoniale sp) {return sp.debitiVersoBanche() .add(sp.debitiVersoAltriFinanziatori()) .add(sp.obbligazioni()) .subtract(sp.disponibilitaLiquide()) .subtract(sp.attivitaFinanziarieCorrenti()); }public BigDecimal dscr(FlussiDiCassa f, ServizioDebito s) { BigDecimal servizio = s.quotaCapitale().add(s.interessi());if (servizio.signum() == 0) returnnull;return f.flussoOperativo().divide(servizio, 4, RoundingMode.HALF_UP); }public BigDecimal margineEbitda(ContoEconomicoRiclassificato ce) {return ce.ebitda().divide(ce.valoreProduzione(), 4, RoundingMode.HALF_UP); }}/* leibniz/core/cashflow.c */#include <math.h>#include"bilancio.h"#define ALIQUOTA_FISCALE 0.279typedefstruct {double ebit;double ammortamenti;double capex;double delta_ccn;} FlussiOperativi;double fcff(const FlussiOperativi *f){double nopat = f->ebit * (1.0 - ALIQUOTA_FISCALE);return nopat + f->ammortamenti - f->capex - f->delta_ccn;}double valore_terminale(double fcf_n, double wacc, double g){if (wacc <= g) return NAN;return fcf_n * (1.0 + g) / (wacc - g);}double enterprise_value(constdouble *fcf, int anni, double wacc, double g){double ev = 0.0;for (int t = 0; t < anni; t++) ev += fcf[t] / pow(1.0 + wacc, t + 1); ev += valore_terminale(fcf[anni - 1], wacc, g) / pow(1.0 + wacc, anni);return ev;}double delta_ccn(const StatoPatrimoniale *sp, const StatoPatrimoniale *prec){double ccn = sp->crediti_commerciali + sp->rimanenze - sp->debiti_fornitori;double ccn_prec = prec->crediti_commerciali + prec->rimanenze - prec->debiti_fornitori;return ccn - ccn_prec;}# leibniz/valutazione/modello.pyimport numpy as npfrom leibniz.dati import carica_bilanci_xbrl, carica_comparabilifrom leibniz.ia import ModelloSettorialefrom leibniz.core import enterprise_valuedef multiplo_ev_ebitda(settore: str, anno: int) -> float: campione = carica_comparabili(settore, anno) multipli = [c.ev / c.ebitda for c in campione if c.ebitda > 0]returnfloat(np.median(multipli))def simulazione_monte_carlo(fcf_base, wacc, g, n=10_000, seed=42): rng = np.random.default_rng(seed) crescita = rng.normal(g, 0.005, n) tassi = rng.normal(wacc, 0.01, n) ev = [enterprise_value(fcf_base, w, c) for w, c in zip(tassi, crescita)]return np.percentile(ev, [10, 50, 90])bilanci = carica_bilanci_xbrl(codice_fiscale, anni=range(2022, 2026))modello = ModelloSettoriale.carica("ateco-2025", versione="3.2")segnali = modello.analizza(bilanci, indicatori=["dscr", "pfn_ebitda", "rotazione_crediti"])p10, p50, p90 = simulazione_monte_carlo(segnali.fcf, wacc=0.0874, g=0.02)leibniz> analisi avviata bilanci=1284 esercizi=2022..2025leibniz> riclassificazione a valore aggiunto ......... okleibniz> flussi di cassa FCFF / FCFE ................. ok ebitda_margin = 0.1418 pfn_su_ebitda = 2.31 dscr = 1.47 wacc = 0.0874 g_terminale = 0.0200 ev_p50 = 12640000leibniz> modello settoriale ateco-2025 v3.2 ........ in corsoleibniz> scenari Monte Carlo n=10000 ev_p10 = 10910000 ev_p90 = 14380000leibniz> report di sintesi in preparazione/* leibniz/core/cashflow.c */#include <math.h>#include"bilancio.h"#define ALIQUOTA_FISCALE 0.279typedefstruct {double ebit;double ammortamenti;double capex;double delta_ccn;} FlussiOperativi;double fcff(const FlussiOperativi *f){double nopat = f->ebit * (1.0 - ALIQUOTA_FISCALE);return nopat + f->ammortamenti - f->capex - f->delta_ccn;}double valore_terminale(double fcf_n, double wacc, double g){if (wacc <= g) return NAN;return fcf_n * (1.0 + g) / (wacc - g);}double enterprise_value(constdouble *fcf, int anni, double wacc, double g){double ev = 0.0;for (int t = 0; t < anni; t++) ev += fcf[t] / pow(1.0 + wacc, t + 1); ev += valore_terminale(fcf[anni - 1], wacc, g) / pow(1.0 + wacc, anni);return ev;}double delta_ccn(const StatoPatrimoniale *sp, const StatoPatrimoniale *prec){double ccn = sp->crediti_commerciali + sp->rimanenze - sp->debiti_fornitori;double ccn_prec = prec->crediti_commerciali + prec->rimanenze - prec->debiti_fornitori;return ccn - ccn_prec;}leibniz> analisi avviata bilanci=1284 esercizi=2022..2025leibniz> riclassificazione a valore aggiunto ......... okleibniz> flussi di cassa FCFF / FCFE ................. ok ebitda_margin = 0.1418 pfn_su_ebitda = 2.31 dscr = 1.47 wacc = 0.0874 g_terminale = 0.0200 ev_p50 = 12640000leibniz> modello settoriale ateco-2025 v3.2 ........ in corsoleibniz> scenari Monte Carlo n=10000 ev_p10 = 10910000 ev_p90 = 14380000leibniz> report di sintesi in preparazione# leibniz/valutazione/modello.pyimport numpy as npfrom leibniz.dati import carica_bilanci_xbrl, carica_comparabilifrom leibniz.ia import ModelloSettorialefrom leibniz.core import enterprise_valuedef multiplo_ev_ebitda(settore: str, anno: int) -> float: campione = carica_comparabili(settore, anno) multipli = [c.ev / c.ebitda for c in campione if c.ebitda > 0]returnfloat(np.median(multipli))def simulazione_monte_carlo(fcf_base, wacc, g, n=10_000, seed=42): rng = np.random.default_rng(seed) crescita = rng.normal(g, 0.005, n) tassi = rng.normal(wacc, 0.01, n) ev = [enterprise_value(fcf_base, w, c) for w, c in zip(tassi, crescita)]return np.percentile(ev, [10, 50, 90])bilanci = carica_bilanci_xbrl(codice_fiscale, anni=range(2022, 2026))modello = ModelloSettoriale.carica("ateco-2025", versione="3.2")segnali = modello.analizza(bilanci, indicatori=["dscr", "pfn_ebitda", "rotazione_crediti"])p10, p50, p90 = simulazione_monte_carlo(segnali.fcf, wacc=0.0874, g=0.02)Servizi / Corporate Finance
Finanziamenti fintech per le PMI
Canali digitali da affiancare al credito bancario
Accanto a banche e società di leasing operano piattaforme online che finanziano le imprese con processi in gran parte digitali. Per una PMI possono essere un canale utile da affiancare al credito tradizionale, non da usare al suo posto.
Gli strumenti principali
- Prestiti tramite piattaforme online (lending): finanziamenti chirografari a medio termine, con istruttoria e erogazione spesso più rapide di quelle bancarie.
- Factoring digitale e cessione di fatture (invoice trading): anticipo dei crediti verso clienti tramite piattaforma, anche per singole fatture.
- Finanziamenti con garanzia pubblica erogati da operatori digitali, quando previsti.
Pro e contro
I vantaggi sono velocità, procedure semplici e flessibilità sugli importi. Il costo complessivo, però, può essere più alto di quello bancario, e non tutte le piattaforme hanno la stessa solidità. Per questo va valutata ogni proposta sul costo totale, sui tempi e sulle condizioni contrattuali.
Come lavoriamo
Inseriamo gli strumenti digitali nel quadro complessivo della finanza per gli investimenti dell’impresa: prima la capacità di rimborso, poi la scelta del canale più adatto, digitale o tradizionale. Per il factoring vedi anche la pagina dedicata al factoring.
Scrivici dal modulo qui sotto per un confronto tra le alternative disponibili.