-- 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)Services / Corporate Finance
Mortgage finance for business and commercial property
Evaluate the property investment within the company’s finances
Buying, building or refurbishing business premises is a long-term investment. A commercial mortgage should be assessed alongside the company’s other commitments, including working-capital and investment requirements.
Review the project and repayment
We examine the property’s business use, budget, available equity and expected payment dates. Construction or refurbishment may require funding stages and resources beyond those needed to buy an existing property. A business plan helps compare proposed repayments with operating cash flows under explicit interest-rate and business assumptions.
Compare conditions
Interest, fees, maturity, repayment structure, collateral, guarantees and other contractual conditions affect the proposal. The lender’s property assessment and credit decision are separate from the company’s own financial analysis. An affordable instalment alone does not establish that the investment is suitable.
Prepare the request
The company may need accounts, current management information, property documentation and a description of the investment and funding structure. Requirements depend on the lender and transaction.
We help organise the financial preparation and compare proposals within an agreed scope. Leasing and other business investment finance may also be relevant. Contact us with the project and preferred timing.