Ecossistema | Cobertura | Offline-first | Stack | ERP | Status
Aplicativo Android de campo integrado ao Granith ERP. O app foi desenhado para funcionarios, motoristas, coordenadores e equipes operacionais que precisam registrar ponto, consultar obras, executar rotas, solicitar materiais, trabalhar offline e sincronizar dados com o ERP.
Status: beta operacional avancado. O app ja possui base funcional para uso de campo com Supabase, SQLite, geofence, rotas, notificacoes, offline-first e IA local. Para producao ampla, ainda exige homologacao em aparelhos reais, hardening de permissoes, bateria, telemetria e validacao operacional.
| Campo Ponto, obra, equipe, requisicoes e evidencias. |
Rotas Google Maps, checkpoints, tracking e KM real. |
Offline SQLite, fila de sync e primeira conexao automatica. |
| Push FCM, notificacoes locais e gatilho de sincronizacao. |
IA local flutter_gemma para diarios, ocorrencias e resumos. |
ERP Dados voltam para analise, financeiro e gestao web. |
O Granith Mobile nao tenta replicar o ERP web. O ERP concentra cadastro, aprovacao, financeiro, DRE, clientes e administracao. O mobile concentra execucao:
ERP Web
cadastra obras, equipes, rotas, permissoes e regras
|
v
Granith Mobile
coleta ponto, rota, evidencias, requisicoes e eventos offline
|
v
Supabase
sincroniza dados para analise, financeiro e gestao no ERP
| Area | Cobertura |
|---|---|
| Login | Supabase Auth, Google OAuth e usuarios internos |
| Vinculo usuario/funcionario | Associacao com funcionario sem depender apenas de e-mail Google |
| Obras e equipes | Consulta de obras, equipe vinculada, coordenador e informacoes do colaborador |
| Ponto | Registro com geofence, logs de avaliacao e auditoria de tentativa rejeitada |
| Geofence | Cercas sincronizadas do ERP, validacao local e monitoramento Android |
| Rotas | Minha rota hoje, mapa, checkpoints, tracking, KM real e sync |
| Navegacao | Google Maps SDK, Routes API e abertura externa no Maps/Waze |
| Requisicoes | Solicitacao de materiais integrada ao ERP e status sincronizado |
| Estoque mobile | Recebimento, baixa e transferencia simples orientada ao campo |
| Frota | Veiculos, abastecimento, odometro e base para checklist/ocorrencias |
| Notificacoes | FCM, notificacoes locais, armazenamento local e sync em background |
| Offline-first | SQLite, cache local, fila de sincronizacao e primeira sync ao conectar |
| IA local | Chatbot com flutter_gemma e modelo SLM local no aparelho |
O app foi pensado para uso em obra, nao para escritorio:
- telas diretas e com poucas decisoes por fluxo;
- informacoes do funcionario e da equipe em primeiro plano;
- status claro de sincronizacao;
- rotas e ponto com feedback operacional;
- consulta offline quando a rede falha;
- notificacoes para atualizar o celular quando o ERP muda algo relevante;
- identidade visual alinhada ao Granith ERP.
O app carrega cercas da obra, avalia a localizacao atual e decide se a batida pode ser validada.
Localizacao atual
|
v
Cercas sincronizadas no SQLite
|
v
Comparacao local com tolerancia/precisao
|
v
Batida validada ou tentativa rejeitada
|
v
Sync com Supabase quando houver rede
Tabelas relacionadas:
projectstime_clock_afd_eventsmobile_work_hour_entries
Rotas sao planejadas no ERP e executadas pelo motorista no app.
ERP cria rota
|
v
Motorista recebe "minha rota hoje"
|
v
App exibe mapa, checkpoints e instrucoes
|
v
Tracking em foreground/background
|
v
Sync de pontos, KM real, checkpoints e bonus
Tabelas relacionadas:
purchase_delivery_routespurchase_delivery_route_stopspurchase_delivery_route_tracking_points
O colaborador solicita material no app usando itens existentes sempre que possivel. Quando necessario, o fluxo permite registrar item novo para o ERP tratar depois.
Seleciona obra
|
v
Busca item existente no catalogo/estoque
|
v
Solicita quantidade e observacao
|
v
ERP aprova, compra, entrega ou baixa estoque
O ERP envia eventos para funcionarios especificos ou grupos operacionais. O app recebe em primeiro e segundo plano, persiste localmente e pode usar a notificacao como gatilho de sincronizacao.
Exemplos:
- obra atribuida;
- rota atribuida;
- requisicao aprovada;
- compra entregue;
- ponto fora da cerca;
- alteracao de equipe, cargo ou permissao.
O app usa flutter_gemma com modelo local. Depois de instalado, o modelo fica no aparelho e nao precisa ser baixado em todo acesso.
Objetivos:
- redigir diarios;
- resumir rotas;
- melhorar texto de ocorrencias;
- apoiar consulta offline;
- operar sem custo por token quando o modelo local estiver ativo.
O app foi preparado para funcionar mesmo com rede instavel:
- SQLite como cache operacional;
- dados essenciais carregados na abertura do app;
- fila local para eventos pendentes;
- sync automatico quando a primeira conexao volta;
- tracking de rota persistido localmente e enviado depois;
- notificacoes salvas localmente;
- documentos e dados de obra preparados para consulta offline.
| Camada | Tecnologia |
|---|---|
| App | Flutter Android |
| Estado | Riverpod |
| Backend | Supabase |
| Auth | Supabase Auth, Google Sign-In e usuarios internos |
| Offline | SQLite/sqflite |
| Localizacao | geolocator |
| Background | flutter_background_service |
| Mapas | google_maps_flutter |
| Rotas | Google Routes API |
| Push | Firebase Cloud Messaging |
| Notificacoes locais | flutter_local_notifications |
| IA local | flutter_gemma |
| Midia | image_picker |
lib/
core/
ai/ SLM, modelo local e chatbot
config/ variaveis e configuracoes
services/ Supabase, sync, notificacoes e infraestrutura
theme/ identidade visual
widgets/ componentes compartilhados
features/
auth/ login e sessao
delivery/ rotas, mapa, checkpoints e tracking
field_operations/
obras, equipe, requisicoes, documentos e operacao de campo
home/ resumo do colaborador
time_clock/ ponto, geofence e horas trabalhadas
models/ entidades legadas/compartilhadas
| Origem | Destino | Resultado |
|---|---|---|
| ERP atribui obra/equipe | Mobile sincroniza perfil | Funcionario ve obra, equipe e coordenador |
| ERP cria rota | Mobile baixa rota | Motorista executa com mapa e tracking |
| Mobile envia ponto | ERP consolida | Analise de horas e custo de mao de obra |
| Mobile solicita material | ERP aprova/compra | Requisicao entra no fluxo de compras |
| ERP atualiza status | Mobile recebe push | App sincroniza dados locais |
| Mobile registra evidencia | ERP consulta | Gestao tem rastreabilidade de campo |
Variaveis via --dart-define:
SUPABASE_URL
SUPABASE_PUBLISHABLE_KEY
GOOGLE_OAUTH_WEB_CLIENT_ID
GOOGLE_MAPS_API_KEY
HUGGINGFACE_TOKEN
GRANITH_SLM_MODEL_URL
Arquivos locais que nao devem ir para o Git:
android/app/google-services.json
lib/firebase_options.dart
android/key.properties
*.jks
.env.local
O repositorio ja ignora credenciais, keystores, APKs/AABs, service accounts e arquivos gerados.
Exemplo:
flutter pub get
flutter run -d SEU_DEVICE_ID `
--dart-define=SUPABASE_URL="https://example.supabase.co" `
--dart-define=SUPABASE_PUBLISHABLE_KEY="placeholder" `
--dart-define=GOOGLE_OAUTH_WEB_CLIENT_ID="client-id.apps.googleusercontent.com" `
--dart-define=GOOGLE_MAPS_API_KEY="SUA_CHAVE"Para instalar em aparelho fisico, use o adb do Android SDK:
& "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe" devices
flutter run -d SEU_DEVICE_IDO projeto usa assinatura local fora do Git. Depois de configurar android/key.properties e o keystore:
flutter build apk --release --split-per-abi `
--dart-define=SUPABASE_URL="https://example.supabase.co" `
--dart-define=SUPABASE_PUBLISHABLE_KEY="placeholder" `
--dart-define=GOOGLE_OAUTH_WEB_CLIENT_ID="client-id.apps.googleusercontent.com" `
--dart-define=GOOGLE_MAPS_API_KEY="SUA_CHAVE"Consultar SHA-1/SHA-256 do keystore:
keytool -list -v `
-keystore android\app\signing\granith-release.jks `
-alias granith_releaseO app depende das migrations do ERP para as tabelas principais. Antes de testar fluxos completos, confirme que o banco possui:
- usuarios internos e vinculo com funcionarios;
- projetos com coordenador/equipe;
- geofences de obra;
- time clock;
- requisicoes de materiais;
- rotas e tracking de entregas;
- FCM tokens;
- notificacoes;
- dados offline/sync necessarios.
Quando o historico remoto de migrations estiver diferente do local, use o ERP como fonte principal do schema e sincronize o repositorio antes de aplicar db push.
O app registra token FCM e associa ao usuario/funcionario. O token permite que o ERP envie push para pessoas especificas ou grupos operacionais.
Requisitos:
- projeto Firebase configurado;
- app Android com package name correto;
- SHA-1/SHA-256 cadastrados;
google-services.jsonlocal;- Supabase com tabela de tokens e Edge Function de disparo.
Checklist:
- package name igual ao
AndroidManifest; - SHA-1 e SHA-256 do APK debug/release cadastrados no Google Cloud/Firebase;
google-services.jsonbaixado novamente depois de cadastrar SHA;- Supabase Auth com provider Google ativo;
- redirect/deep link configurado.
O modelo local recomendado pode ser instalado pelo app. Quando o modelo exigir acesso no Hugging Face, gere token com permissao de leitura e use:
--dart-define=HUGGINGFACE_TOKEN=SEU_TOKEN
Se quiser trocar o modelo:
--dart-define=GRANITH_SLM_MODEL_URL=URL_DO_MODELO_TASK
flutter analyze
flutter testPara fluxos de GPS, background service, Maps, FCM e OAuth, a validacao real precisa ser feita em aparelho Android fisico, porque emulador e teste widget nao cobrem todos os servicos nativos.
O Granith Mobile esta praticamente completo como base de app operacional:
- possui login e vinculo com funcionarios;
- possui rotas com mapa e tracking;
- possui ponto por geofence;
- possui sincronizacao offline-first;
- possui notificacoes;
- possui requisicoes e estoque mobile;
- possui IA local;
- possui identidade visual integrada ao ERP.
O que ainda falta antes de producao ampla e endurecimento: bateria, permissao em diferentes fabricantes Android, telemetria de background, politicas de sync, validacao de UX em campo, monitoramento de falhas e revisao de seguranca.
- Homologacao em aparelhos reais usados pela equipe.
- Telemetria de sync, GPS e background service.
- Checklist de veiculo e ocorrencias com evidencia.
- Documentos offline por obra.
- Relatorios enxutos para coordenador no mobile.
- Assistente local mais contextual por modulo.
- Publicacao controlada por APK assinado ou Play Internal Testing.
Projeto em desenvolvimento ativo. Antes de uso comercial, revise licenciamento, credenciais, termos de terceiros, privacidade, localizacao em background e politicas de dados.
