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.