Imóveis
Urbanos, comerciais e lotes, com matrícula e imobiliária responsável.
Fazendas
Área, matrícula, CAR, cultura e coordenada do sede.
Armazéns e silos
Capacidade estática, tipo de estrutura e ocupação.
Proprietários
Titulares dos bens sob minha gestão, com taxa de administração e contato.
Aluguéis
Contratos, inquilinos, vencimento e reajuste.
Matrículas
Registro de cartório por ativo, com ônus e averbações.
Financeiro
Receitas, despesas e comissões por ativo.
Patrimônio
Composição do portfólio por classe de ativo.
Geo-referência
Coordenadas e polígonos dos ativos, prontos para a camada Google Earth.
PicPay
Ciclo de gestão: cobrar o inquilino, repassar ao proprietário, retirar a administração.
Arquitetura
Três camadas, um repositório, tudo local com um comando.
nexoterra/ ├─ apps/ │ ├─ web/ console, login, sidebar recolhível │ └─ api/ auth, imóveis, fazendas, armazéns, financeiro ├─ packages/ │ ├─ db/ Prisma schema + migrações │ └─ ui/ componentes compartilhados ├─ docker-compose.yml Postgres 16 + PostGIS └─ .env.example
Banco de dados
Esquema criado vazio pelas migrações.
create extension if not exists pgcrypto; create extension if not exists postgis; create table users ( id uuid primary key default gen_random_uuid(), username text unique not null, password text not null, -- hash argon2 role text not null default 'admin', created_at timestamptz default now() ); create table agencies ( -- imobiliárias id uuid primary key default gen_random_uuid(), name text not null, cnpj text unique, creci text, city text, state char(2), manager text ); create table properties ( -- imóveis id uuid primary key default gen_random_uuid(), agency_id uuid references agencies(id), title text not null, kind text, address text, city text, state char(2), area_m2 numeric(12,2), bedrooms int, registration text, -- matrícula price_cents bigint, status text default 'draft', lat numeric(9,6), lng numeric(9,6) ); create table farms ( -- fazendas id uuid primary key default gen_random_uuid(), name text not null, municipality text, state char(2), hectares numeric(12,2), registration text, car_code text, crop text, price_cents bigint, status text default 'draft', geom geometry(Polygon, 4674) ); create table warehouses ( -- armazéns e silos id uuid primary key default gen_random_uuid(), name text not null, kind text, -- silo | granel | convencional city text, state char(2), country text default 'BR', capacity_t numeric(12,2), occupancy_pct numeric(5,2), price_cents bigint, status text default 'draft' ); create table leases ( -- aluguéis id uuid primary key default gen_random_uuid(), asset_type text not null, asset_id uuid not null, tenant text not null, rent_cents bigint, due_day int, start_date date, end_date date, status text default 'active' ); create table ledger ( -- financeiro id uuid primary key default gen_random_uuid(), description text not null, kind text not null, -- receita | despesa category text, amount_cents bigint, entry_date date, asset_type text, asset_id uuid ); create table market_quotes ( id bigserial primary key, region text, commodity text, price numeric(14,4), currency char(3), observed_at timestamptz default now() );
Rodar no VSCode
Do clone ao login funcionando. Requer Node 20, pnpm e Docker.
git clone <repo> nexoterra cd nexoterra pnpm install
docker compose up -d db cp .env.example .env
pnpm --filter db prisma migrate dev pnpm --filter db bootstrap:admin # admin / 123
pnpm dev
DATABASE_URL="postgresql://nexo:nexo@localhost:5432/nexoterra" JWT_SECRET="troque-este-valor" API_URL="http://localhost:3001" GOOGLE_MAPS_API_KEY=""