amostra 06/protótipo
OrçaFácil
Um orçamento de serralheria montado em minutos, com a plataforma sugerindo e o serralheiro decidindo.
- Next
- Prisma
- Zod
- Motion
01
Contexto
O OrçaFácil é um protótipo autoral inspirado no fluxo de uma serralheria familiar, com um objetivo simples: montar um orçamento completo em minutos.
O cenário foi modelado a partir de um catálogo de materiais e de um fluxo realista para adicionar cada item ao orçamento.
02
Ponto de partida
O protótipo parte de um catálogo com 15 categorias e de um fluxo de sete passos, definidos antes da primeira linha de código.
15
categorias de ferros e serviços no catálogo
7
passos no fluxo original para adicionar um material
4
passos no fluxo final, condensado
03
Linha do tempo
Marcos registrados durante o desenvolvimento.
16 de set. de 2026
Catálogo e fluxo definidos
Catálogo com 15 categorias e o fluxo de sete passos para adicionar um material.
16 de set. de 2026
Modelo de dados
Esquema pronto para várias empresas desde o início, com cada linha do orçamento guardando um retrato dos valores.
17 de set. de 2026
Protótipo navegável
Painel de orçamentos, editor e o assistente de quatro passos com cálculo ao vivo, ainda com dados simulados.
04
Mapa de decisões
Reconstruído a partir do histórico de commits, do README e da documentação do projeto.
01
A plataforma sugere, o serralheiro decide
Todo valor calculado pode ser sobrescrito. O preço muda com o mercado, e quem está na oficina sabe o valor real.
02
O orçamento é um retrato
Cada linha copia os valores no momento em que é criada. Mudar o catálogo depois não altera um orçamento já enviado.
03
Sete passos viraram quatro
O fluxo original foi condensado em categoria, material, medidas e revisão, com o cálculo aparecendo enquanto se digita.
04
Pronto para várias empresas
Toda tabela já nasce com o identificador da serralheria. O protótipo simula uma operação e pode evoluir para várias sem refazer o banco.
05
Vencido é uma conta, não uma rotina
A validade é calculada a partir da data de emissão. Não existe rotina agendada só para marcar orçamentos vencidos.
06
Feito para a luz da oficina
Tema claro fixo e botão principal com contraste alto para facilitar a leitura em diferentes condições de oficina.
05
Arquitetura
As mesmas cinco camadas desta página, aplicadas ao projeto.
000 m/interface
- Painel de orçamentos
- Assistente de quatro passos com cálculo ao vivo
- Modais e seleção acessíveis com Radix
060 m/serviço
- Módulo único de cálculo: consumo, perda, barras e totais
090 m/repositório
- Esquema Prisma com a empresa em toda tabela
- Linha do orçamento como retrato dos valores
120 m/persistência
- Postgres, conectado na próxima fase
06
Código
Um trecho do repositório privado, só para mostrar a camada funcionando.
Da medida à barra comprada
A regra de negócio mora num lugar só, e a interface apenas consome. Barra se compra fechada, por isso o arredondamento é sempre para cima.
// Regra de ouro: a plataforma SUGERE, o serralheiro DECIDE. Estas funções
// calculam os valores propostos; os componentes deixam o usuário sobrescrever
// qualquer campo depois.
/** Consumo real de material somando a perda. Ex.: 14 m + 10% = 15,40 m. */
export function consumoComPerda(quantidadeConsumo: number, perdaPercent: number): number {
const q = Math.max(0, quantidadeConsumo);
const p = Math.max(0, perdaPercent);
return q * (1 + p / 100);
}
/**
* Quantas barras inteiras comprar pra cobrir o consumo com perda.
* Compra-se barra fechada: por isso arredonda pra cima. Ex.: 15,40 m ÷ 6 m = 3.
*/
export function barrasNecessarias(consumoComPerdaM: number, comprimentoBarraM: number): number {
if (!comprimentoBarraM || comprimentoBarraM <= 0) return 0;
return Math.ceil(consumoComPerdaM / comprimentoBarraM);
}
/** Faz o caminho completo: consumo → perda → barras → subtotal (sugerido). */
export function calcularMaterial(e: EntradaCalculoMaterial): ResultadoCalculoMaterial {
const comPerda = consumoComPerda(e.quantidadeConsumo, e.perdaPercent);
const barras = barrasNecessarias(comPerda, e.comprimentoBarraM);
return {
consumoComPerda: comPerda,
quantidadeCompra: barras,
subtotal: barras * Math.max(0, e.precoUnitario),
};
}07
Resultado
4
passos para adicionar um item
6
modelos no esquema de dados
100%
dos valores editáveis pelo serralheiro
Estado atual
Protótipo navegável com dados simulados. A próxima fase conecta o banco e troca a simulação por dados reais.