// Brisas do Lago — fluxo de checkout (cadastro → contrato → pagamento) // e área do cliente logado (boletos, contrato, obra) const { useState, useEffect, useRef } = React; // ─── Stepper visual ─────────────────────────────────────────── function Stepper({steps, current}) { return (
{steps.map((s, i) => (
{i < current ? : i + 1}
{s}
{i < steps.length - 1 &&
} ))}
); } // ─── Reserva (lock 24h) ───────────────────────────────────── function BuyerReservar({lote, onBack, onContinue}) { return (

Trave seu lote por 24h

Vamos reservar o Lote {lote.numero} · Quadra {lote.quadra} em seu nome. Nas próximas 24h ninguém mais conseguirá adquiri-lo enquanto você finaliza cadastro, contrato e entrada.

{lote.numero}
Quadra {lote.quadra}
{fmtBRL(lote.valorTotal)}
{lote.area.toFixed(0)} m²
Sem custo · sem compromisso · cancele a qualquer momento
); } // ─── Cadastro ─────────────────────────────────────────────── function BuyerCadastro({lote, onBack, onContinue}) { const [form, setForm] = useState({ nome:'Ana Carolina Rocha', cpf:'012.345.678-90', rg:'05.184.965-2014-6', email:'ana.rocha@email.com', telefone:'(98) 99876-5432', nascimento:'1987-04-12', estadoCivil:'Casada', profissao:'Engenheira civil', endereco:'Av. Litorânea, 4500', complemento:'Apto 1203 · Bloco A', bairro:'Calhau', cidade:'São Luís', uf:'MA', cep:'65071-380' }); const set = (k,v) => setForm({...form, [k]:v}); return (
◇ Pessoais
set('nome', v)}/> set('cpf',v)}/> set('rg',v)}/> set('email',v)}/> set('telefone',v)}/> set('nascimento',v)}/> set('estadoCivil',v)}/> set('profissao',v)}/>
◇ Endereço
set('endereco',v)}/> set('cep',v)}/> set('complemento',v)}/> set('bairro',v)}/> set('cidade',v)}/> set('uf',v)}/>
◇ Documentos
Seus dados são criptografados e usados apenas para o contrato de compra. Não compartilhamos com terceiros.
); } function Field({label, value, onChange, type='text', as, options}) { return ( ); } const inputStyle = { width:'100%', padding:'11px 14px', borderRadius:8, border:'1px solid var(--line)', background:'var(--bg-elev)', fontSize:13.5, color:'var(--ink)', outline:'none' }; const Grid2 = ({children, cols='1fr 1fr'}) => (
{children}
); function UploadDoc({label, done, doneText}) { return (
{label}
{done ? doneText : 'JPG, PNG ou PDF até 10MB'}
); } function ReservaTimerCard({lote}) { const [time, setTime] = useState({h:23, m:47, s:32}); useEffect(() => { const t = setInterval(() => { setTime(prev => { let s = prev.s - 1, m = prev.m, h = prev.h; if (s < 0) { s = 59; m -= 1; } if (m < 0) { m = 59; h -= 1; } if (h < 0) h = 0; return {h, m, s}; }); }, 1000); return () => clearInterval(t); }, []); const pad = n => String(n).padStart(2,'0'); return (
◐ Reserva ativa
Lote {lote.numero}
Quadra {lote.quadra}
Restam para completar a compra:
{pad(time.h)}:{pad(time.m)}:{pad(time.s)}
); } // ─── Contrato (assinatura eletrônica) ─────────────────────── function BuyerContrato({lote, onBack, onContinue}) { const [aceito, setAceito] = useState(false); const [aceitoCondominio, setAceitoCondominio] = useState(false); return (
contrato-compra-venda-{lote.numero}.pdf
11 páginas · pré-preenchido com seus dados
CONTRATO PARTICULAR DE COMPROMISSO DE COMPRA E VENDA
LOTEAMENTO BRISAS DO LAGO – Primeira Cruz/MA

Por este instrumento particular de compromisso de compra e venda, entre partes justas e contratadas, abaixo qualificadas, simplesmente denominadas VENDEDORA e COMPRADOR, fica certa e convencionada a celebração deste contrato.

I – DAS PARTES

VENDEDORA – LOTEAMENTO BRISAS DO LAGO CASSÓ SPE LTDA, CNPJ 53.205.736/0001-62, com sede à Avenida Fátima Costa, S/Nº, Lagoa do Cassó, Primeira Cruz/MA, CEP 65190-000.

COMPRADOR(A)Ana Carolina Rocha, brasileira, casada, engenheira civil, portadora do CPF nº 012.345.678-90, residente em São Luís/MA.

II – DO IMÓVEL

A VENDEDORA, justo título, é senhora proprietária e possuidora do imóvel urbano denominado Condomínio Brisas do Lago, situado no Povoado Cassó, Município de Primeira Cruz/MA, matrícula nº 518, livro 2D do Cartório Registro Imóvel de Primeira Cruz.

III – DO COMPROMISSO

A VENDEDORA compromete-se a vender ao COMPRADOR o Lote nº {lote.numero}, na Quadra {lote.quadra}, com área total de {lote.area.toFixed(2)} m².

IV – DO PREÇO E CONDIÇÕES

O preço total, certo e ajustado, é de {fmtBRL(lote.valorTotal)}, a ser pago: 10% no ato da compra ({fmtBRL(lote.valorTotal * 0.1)}); 10% na entrega da chave; saldo em 48 parcelas mensais de {fmtBRL(lote.valorTotal * 0.8 / 48)} via boleto bancário ou PIX.

[...continua nas demais cláusulas...]

◇ Assinatura eletrônica
Receba o link no e-mail / WhatsApp
Você assina pelo celular usando token + biometria. Sem precisar imprimir.
◇ Resumo do contrato
); } function Row({k, v, bold}) { return (
{k} {v}
); } function CheckRow({checked, onChange, label}) { return ( ); } // ─── Pagamento (PIX) ──────────────────────────────────────── function BuyerPagamento({lote, onBack, onFinish}) { const [metodo, setMetodo] = useState('pix'); const [pago, setPago] = useState(false); const entrada = lote.valorTotal * 0.1; // Simular pagamento automaticamente após 5s useEffect(() => { if (metodo === 'pix' && !pago) { const t = setTimeout(() => setPago(true), 8000); return () => clearTimeout(t); } }, [metodo, pago]); if (pago) { return (

O lote é seu.

Pagamento confirmado. O contrato assinado já está no seu e-mail e na sua área do cliente. Em breve nossa equipe entrará em contato para os próximos passos.

); } return (
{/* Tabs */}
{[['pix','PIX','qr'],['cartao','Cartão de crédito','creditCard'],['boleto','Boleto','file']].map(([k, lbl, icon]) => ( ))}
{metodo === 'pix' && (
Aponte a câmera do seu app bancário
ou copie o código abaixo
00020126360014BR.GOV.BCB.PIX0114+55989988877760202BL5204000053039865406295880580...
Aguardando pagamento...
)} {metodo === 'cartao' && (
{}}/> {}}/> {}}/> {}}/> {}}/>
)} {metodo === 'boleto' && (
Gerar boleto da entrada
Vencimento em 3 dias úteis. Sua reserva continua válida durante esse período.
)}
◇ Resumo
Após o pagamento da entrada, o contrato torna-se efetivo. Você receberá no e-mail o contrato assinado e cronograma de parcelas.
); } function QRCode() { // SVG QR placeholder (visualmente um QR code) const cells = []; const seed = 7; for (let y = 0; y < 25; y++) { for (let x = 0; x < 25; x++) { const v = (x * 31 + y * 17 + seed * x * y) % 7; const isDark = v < 3 || (x < 7 && y < 7) || (x > 17 && y < 7) || (x < 7 && y > 17); if (isDark) cells.push([x, y]); } } return ( {cells.map(([x,y]) => )} {/* Position markers */} {[[0,0],[18,0],[0,18]].map(([cx,cy], i) => ( ))} {/* Logo center */} ); } Object.assign(window, { BuyerReservar, BuyerCadastro, BuyerContrato, BuyerPagamento, });