Operação Offline de Colaboradores com QR Codes G10

Esta documentação define como o aplicativo deve funcionar para usuários do tipo Colaborador, permitindo atuação em várias fazendas do projeto G10 sem precisar limpar o armazenamento do app ou refazer pareamento por fazenda.

account_type: colaborador Sincronização automática ao abrir QR Code identifica o contexto Reaproveita tela do produtor Operação offline

1) Objetivo

Permitir que colaboradores da Eko's, como equipe técnica e operacional, consigam visitar fazendas diferentes e utilizar o mesmo app já existente para produtores e funcionários do produtor.

O app deve continuar sendo único. A diferença será apenas o comportamento conforme o account_type retornado no pareamento/login.

Para usuários do tipo colaborador, o app deve identificar a fazenda dinamicamente por meio da leitura de qualquer QR Code G10 disponível no local. Após identificar o cliente e a participação G10, o app deve reaproveitar a mesma tela já existente do produtor para exibir dados da fazenda, cultura, quantidade de plantas e geocerca.

2) Regra principal

O colaborador não deve selecionar manualmente a fazenda antes de ler o QR Code. O próprio QR Code é quem identifica o contexto da operação.

Fluxo correto:
Ler QR Code → app localiza no cache → identifica fazenda/G10 → mostra dados → registra operação

Isso evita erro humano, porque o colaborador pode visitar mais de uma fazenda no mesmo dia. Se houvesse seleção manual, ele poderia selecionar uma fazenda e ler QR Code de outra.

3) Reaproveitamento da tela existente do produtor

Não deve ser criada uma nova tela exclusiva para colaboradores exibirem dados da fazenda. O app deve reaproveitar a estrutura que já existe para o produtor.

A tela atual que já exibe os dados abaixo deve ser usada também na versão colaborador:

  • dados da fazenda;
  • cultura;
  • idade do pomar;
  • variedade da planta;
  • porta-enxerto;
  • quantidade de plantas da área tratada;
  • geocerca;
  • mapa/polígono da área.

A única diferença é a origem do contexto ativo:

Produtor / funcionário do produtor
→ contexto vem do device token

Colaborador
→ contexto vem da leitura de qualquer QR Code G10 salvo no cache offline

4) Fluxo operacional do colaborador

  1. Colaborador abre o app.
  2. Se houver internet, o app executa automaticamente f=sincronizacao_offline.
  3. ERP identifica que o device é account_type=colaborador.
  4. ERP retorna QR Codes ativos de todas as fazendas G10.
  5. ERP retorna dados básicos das fazendas, participações G10 e geocercas.
  6. App salva tudo no banco offline local.
  7. Colaborador chega na fazenda, mesmo sem internet.
  8. Na tela do colaborador, toca em Identificar Cliente.
  9. App abre a câmera.
  10. Colaborador lê qualquer QR Code G10 disponível naquela fazenda.
  11. App procura o QR Code no cache offline local.
  12. Se encontrar, app identifica cliente_id e id_g10_participacao.
  13. App define o contexto ativo da fazenda.
  14. App abre a mesma tela já existente usada pelo produtor.
  15. Colaborador visualiza dados da fazenda, cultura, quantidade de plantas e geocerca.
  16. Colaborador executa a operação necessária.
  17. Se estiver offline, o evento fica na fila local.
  18. Quando voltar internet, app envia os eventos pendentes ao ERP.

5) Botão Identificar Cliente

Para usuários do tipo colaborador, a tela inicial deve exibir um botão principal:

Identificar Cliente

Esse botão deve abrir a câmera e permitir a leitura de qualquer QR Code G10 ativo disponível na fazenda.

O QR Code pode ser de:

  • página pública;
  • kit de entrega;
  • coleta de solo;
  • coleta de folha;
  • preparo Eko's Bio;
  • aplicação, caso exista no fluxo.

O QR Code não será usado para selecionar manualmente uma fazenda. Ele será usado apenas como chave para localizar no cache offline qual cliente/G10 está vinculado àquele código.

QR Code lido
→ procurar no cache local
→ localizar cliente_id e id_g10_participacao
→ definir contexto ativo
→ abrir tela existente do produtor

6) Contexto ativo da fazenda

Para produtor e funcionário do produtor, o contexto ativo vem diretamente do device token.

{
  "cliente_id_ativo": 664,
  "id_g10_participacao_ativo": 2,
  "origem_contexto": "device_token"
}

Para colaborador, o contexto ativo deve ser definido após a leitura de um QR Code G10.

{
  "cliente_id_ativo": 664,
  "id_g10_participacao_ativo": 2,
  "origem_contexto": "qrcode",
  "qrcode_id": 10,
  "tipo_conteudo": "kit_entrega"
}

Após definir esse contexto, o app deve abrir a mesma tela de dados/geocerca já usada pelo produtor, apenas passando o cliente_id_ativo e o id_g10_participacao_ativo identificados.

Caso o colaborador visite outra fazenda, basta tocar novamente em Identificar Cliente e ler um QR Code da nova fazenda.

7) Endpoint de sincronização offline

POST https://agroecologia.grupoekos.com.br/router/action.php

Headers

X-APP-KEY: <APP_KEY_FIXA_DO_APP>
X-DEVICE-TOKEN: <DEVICE_TOKEN_DO_APARELHO>

Body

action=apiG10
f=sincronizacao_offline
last_sync_at=YYYY-MM-DD HH:MM:SS

O campo last_sync_at é opcional. Quando enviado, o ERP pode retornar apenas dados criados ou atualizados após essa data.

8) Regra por tipo de usuário

Tipo O que recebe na sincronização
produtor Recebe somente dados e QR Codes da própria fazenda.
produtor_funcionario Recebe somente dados e QR Codes da fazenda vinculada ao produtor.
colaborador Recebe dados e QR Codes ativos de todas as fazendas participantes do G10.

9) Dados retornados para colaborador

Para o colaborador operar offline, a sincronização deve retornar dados leves, separados por blocos. Não devem ser retornadas imagens, PDFs, trajetos completos ou histórico pesado.

{
  "success": true,
  "msg": "Sincronização offline realizada com sucesso.",
  "data": {
    "server_time": "2026-06-25 08:00:00",
    "device_id": 999,
    "cliente_id": 112,
    "account_type": "colaborador",
    "ttl_qr_horas": 48,

    "qrcodes": [],
    "fazendas": [],
    "geocercas": []
  }
}

10) Bloco qrcodes

Contém todos os QR Codes ativos que o colaborador poderá ler no campo.

{
  "qrcode_id": 10,
  "referencia": "KIT PEDIDO 1500",
  "qrcode": "CONTEUDO_DO_QRCODE",
  "tipo_conteudo": "kit_entrega",
  "nome_tabela": "pedidos",
  "id_tabela": 1500,
  "status": 1,
  "cliente_id": 664,
  "id_g10_participacao": 2,
  "updated_at": "2026-06-25 07:50:00"
}

Tipos esperados

tipo_conteudo Uso Vínculo
kit_entrega Registrar kit de entrega. pedidos
preparo_bio Registrar preparo Eko´s Bio. pedidos
coleta_analise_solo Registrar coleta de solo. pedidos
coleta_analise_folha Registrar coleta de folha. pedidos
pagina_publica Identificar área/talhão G10. g10_participacoes

11) Bloco fazendas

Contém os dados básicos das fazendas/participações G10 vinculadas aos QR Codes retornados.

{
  "cliente_id": 664,
  "razao_social": "FAZENDA MODELO",
  "cidade": "Araras",
  "uf": "SP",
  "idade_pomar": "8",
  "variedade_planta": "Pera Rio",
  "porta_enxerto": "Swingle",
  "id_g10_participacao": 2,
  "unidade_referencia": "G10 - 02"
}

12) Bloco geocercas

Contém a geocerca da fazenda para o app exibir no mapa mesmo sem internet.

{
  "id_geocerca": 1,
  "cliente_id": 664,
  "id_g10_participacao": 2,
  "descricao": "Talhão 9",
  "qtde_plantas_area_tratada": 450,
  "poligonos": [
    {
      "latitude": -21.86456790,
      "longitude": -47.49966836,
      "ordem": 1
    },
    {
      "latitude": -21.86449821,
      "longitude": -47.49988561,
      "ordem": 2
    }
  ]
}

13) Como o app deve usar offline

Ao ler um QR Code sem internet, o app deve procurar o conteúdo lido no banco local.

qrcode lido → procurar em qrcodes.qrcode

Se encontrar, o app usa:

  • qrcodes.cliente_id para localizar a fazenda.
  • qrcodes.id_g10_participacao para localizar a unidade G10.
  • geocercas.id_g10_participacao para exibir o polígono no mapa.
  • tipo_conteudo para decidir qual operação executar.

A validação definitiva continuará acontecendo no ERP quando o app voltar a ter internet e enviar o evento pendente.

14) O que não deve ser carregado nessa sincronização

  • Fotos ou imagens em base64.
  • Metadados de fotos.
  • PDFs.
  • Trajetos completos de aplicação.
  • Histórico completo de análises.
  • Resultados detalhados de indicadores.

Esses dados devem ser carregados em endpoints próprios, sob demanda, quando houver internet.

15) Resumo para o desenvolvedor

  • O app continua sendo único para produtor, funcionário do produtor e colaborador.
  • A tela de dados da fazenda/geocerca já existente para produtor deve ser reaproveitada.
  • Não deve ser criada uma tela duplicada para colaborador.
  • Colaborador pareia uma única vez com account_type=colaborador.
  • Ao abrir o app com internet, a sincronização offline roda automaticamente.
  • A sincronização retorna QR Codes, fazendas e geocercas.
  • No campo, o colaborador toca em Identificar Cliente.
  • O app lê qualquer QR Code G10 da fazenda.
  • O app procura o QR Code no cache offline.
  • Encontrando o QR Code, define cliente_id_ativo e id_g10_participacao_ativo.
  • Depois abre a mesma tela do produtor usando esse contexto ativo.
  • Não existe seleção manual de fazenda.
  • Fotos, PDFs, trajetos e arquivos pesados ficam fora dessa sincronização.