Skip to content

DEV-W-NK/Granith-Mobile

Repository files navigation

Granith

Granith Mobile

Status Android Flutter Supabase SQLite

Granith Mobile animated headline

Ecossistema | Cobertura | Offline-first | Stack | ERP | Status


Granith Mobile

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.

Papel no Ecossistema

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

Cobertura Atual

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

Experiencia do Usuario

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.

Fluxos Principais

Ponto por Geofence

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:

  • projects
  • time_clock_afd_events
  • mobile_work_hour_entries

Rotas de Coleta e Entrega

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_routes
  • purchase_delivery_route_stops
  • purchase_delivery_route_tracking_points

Requisicoes e Estoque

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

Notificacoes

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.

IA Local

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.

Offline-first

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.

Stack Tecnica

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

Arquitetura

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

Integracao com o ERP

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

Configuracao Local

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.

Rodando em Desenvolvimento

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_ID

APK Release

O 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_release

Supabase

O 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.

Firebase/FCM

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.json local;
  • Supabase com tabela de tokens e Edge Function de disparo.

Google OAuth Android

Checklist:

  • package name igual ao AndroidManifest;
  • SHA-1 e SHA-256 do APK debug/release cadastrados no Google Cloud/Firebase;
  • google-services.json baixado novamente depois de cadastrar SHA;
  • Supabase Auth com provider Google ativo;
  • redirect/deep link configurado.

IA Offline com flutter_gemma

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

Testes

flutter analyze
flutter test

Para 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.

Estado do Produto

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.

Roadmap

  1. Homologacao em aparelhos reais usados pela equipe.
  2. Telemetria de sync, GPS e background service.
  3. Checklist de veiculo e ocorrencias com evidencia.
  4. Documentos offline por obra.
  5. Relatorios enxutos para coordenador no mobile.
  6. Assistente local mais contextual por modulo.
  7. Publicacao controlada por APK assinado ou Play Internal Testing.

Licenca

Projeto em desenvolvimento ativo. Antes de uso comercial, revise licenciamento, credenciais, termos de terceiros, privacidade, localizacao em background e politicas de dados.

About

Projeto Mobile Integrando o ERP com o Funcionário.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors