← Tutte le idee Gestionali per aziende

Obra

Costi delle commesse, preventivi e fatture per chi lavora nei cantieri

Cosa fa

Software per imprese e artigiani dell'edilizia: costo di ogni lavoro, preventivi e fatturazione.

Come guadagna

Startup appena presentata su BetaList, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: abbonamento mensile per impresa.

Rendilo tuo

  • Per artigiani italiani: computo dei materiali, ore degli operai, margine di ogni cantiere.
  • Con il preventivo da mandare su WhatsApp.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Preventivo Edile": per artigiani e piccole imprese edili: preventivi con le voci di lavorazione (materiali e manodopera), il calcolo corretto del margine, e il controllo dei costi reali del cantiere rispetto al preventivo. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con le funzioni e il prezzo
2. Listino: lavorazioni con unità di misura, materiali, ore di manodopera
3. Nuovo preventivo: voci, quantità, ricarico o margine, PDF per il cliente
4. Cantiere: costi reali (fatture dei materiali, ore), avanzamento lavori
5. Confronto preventivo/consuntivo e fatture

Stile: concreto da cantiere: sfondo bianco, arancione #EA580C, grigio cemento #374151, verde #16A34A per i margini positivi, carattere "Inter", tabelle con totali chiari. Nessuna immagine generica di stock.

Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.

2. Database, account e sicurezza

Collega il progetto a Supabase e attiva la registrazione con email e password.

Crea queste tabelle:
- "lavorazioni": descrizione, unità (m², ml, pezzo, ora), costo materiali e ore di manodopera per unità
- "preventivi" e "voci": cliente, lavorazioni, quantità, prezzo di vendita, stato
- "costi_reali": cantiere, tipo (materiale, manodopera, noleggio), importo, data

Regole di sicurezza obbligatorie:
- ogni impresa vede solo i suoi dati
- un preventivo accettato non si modifica: si fa una variante

Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.

3. Ricarico e margine, senza confonderli

Ogni voce del preventivo parte dal listino: costo materiali e ore di manodopera per unità, moltiplicati per la quantità. Il prezzo di vendita si calcola con il margine voluto, e il sito mostra entrambe le cifre per evitare l'errore più comune: un ricarico del 30% non è un margine del 30% (codice nei Dettagli tecnici).

Il PDF per il cliente mostra solo descrizioni, quantità e prezzi; costi e margini restano interni.

Quando il preventivo è accettato diventa un cantiere: si registrano i costi reali (fatture dei materiali, ore della squadra, noli) e gli stati di avanzamento lavori (SAL) da fatturare.

4. Preventivo contro realtà

Il confronto preventivo/consuntivo mostra per ogni cantiere costo previsto e reale per materiali e manodopera, margine previsto e margine reale, con l'avviso quando i costi superano l'80% del previsto prima della fine.

Statistiche: margine reale medio per tipo di lavoro, per capire quali lavori rendono davvero e correggere il listino.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 19 € al mese. Gratis l'utente ha: 5 preventivi al mese e un cantiere attivo. Con il piano Pro sblocca: preventivi e cantieri illimitati, consuntivi, SAL, statistiche dei margini ed esportazioni.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.

6. Controlli specifici di questo progetto

Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Calcoli: costo 1.000 € con margine voluto 30%: il prezzo deve essere 1.428,57 € (non 1.300 €). Controllalo a mano.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Prezzo dal margine (e non dal ricarico)

Il margine è la parte del prezzo che resta all'impresa; il ricarico è quanto si aggiunge al costo. Con lo stesso 30% i prezzi sono diversi: qui si calcolano entrambi.

export function prezzoVoce(v: {
  quantita: number;
  materialiPerUnita: number;          // euro
  orePerUnita: number;
  costoOrario: number;                // euro, costo aziendale della manodopera
  marginePercento: number;            // es. 30 = il 30% del prezzo resta all'impresa
}) {
  const costo = v.quantita * (v.materialiPerUnita + v.orePerUnita * v.costoOrario);
  const prezzo = costo / (1 - v.marginePercento / 100);           // margine sul prezzo
  const ricaricoEquivalente = ((prezzo - costo) / costo) * 100;    // lo stesso, visto come ricarico
  const arrotonda = (n: number) => Math.round(n * 100) / 100;
  return {
    costo: arrotonda(costo),
    prezzo: arrotonda(prezzo),
    margine: arrotonda(prezzo - costo),
    ricaricoEquivalente: arrotonda(ricaricoEquivalente),
  };
}

// Esempio: costo 1.000 €, margine 30% -> prezzo 1.428,57 € (ricarico equivalente 42,86%)
// Con un ricarico del 30% si otterrebbe 1.300 €, cioè un margine solo del 23,08%

Preventivo contro consuntivo

Per ogni cantiere confronta i costi previsti dal preventivo con quelli reali registrati, e calcola il margine reale.

create table voci (
  id uuid primary key default gen_random_uuid(),
  preventivo_id uuid not null,
  impresa_id uuid not null,
  descrizione text not null,
  quantita numeric not null,
  costo_materiali numeric not null,
  costo_manodopera numeric not null,
  prezzo numeric not null
);

create table costi_reali (
  id uuid primary key default gen_random_uuid(),
  preventivo_id uuid not null,
  impresa_id uuid not null,
  tipo text not null check (tipo in ('materiali', 'manodopera', 'noleggio', 'altro')),
  importo numeric not null,
  data date not null default current_date
);

select p.preventivo_id,
       p.prezzo_totale,
       p.costo_previsto,
       coalesce(r.costo_reale, 0) as costo_reale,
       round(100 * (p.prezzo_totale - p.costo_previsto) / p.prezzo_totale, 1) as margine_previsto,
       round(100 * (p.prezzo_totale - coalesce(r.costo_reale, 0)) / p.prezzo_totale, 1) as margine_reale
from (select preventivo_id, sum(prezzo) as prezzo_totale,
             sum(costo_materiali + costo_manodopera) as costo_previsto
      from voci where impresa_id = 'ID-IMPRESA' group by preventivo_id) p
left join (select preventivo_id, sum(importo) as costo_reale
           from costi_reali group by preventivo_id) r using (preventivo_id);

Pezzi comuni a tutti i progetti

Glossario

Margine
La parte del prezzo che resta all'impresa dopo aver pagato i costi, in percentuale del prezzo.
Ricarico
Quanto si aggiunge al costo per ottenere il prezzo, in percentuale del costo.
SAL
Stato di avanzamento lavori: la parte di lavoro fatta, che si può fatturare prima della fine.