Pular para o conteúdo principal

Rotina: Coleta de Leite

Captação de leite de produtores rurais: rotas, coleta diária offline, sync, análise de qualidade e faturamento ao produtor.


Módulos Delphi​

ArquivoPapel
source/CAP001/UCAP001.pasCadastro e consulta de captação de leite
source/CAP001/UdmCAP001.pasDataModule — CD_ITEMLEITE, CD_TABDESCLEITE, PC_INDENIZACAO
source/CAP002/UCAP002.pasLançamento de análise de qualidade (CCS, CBT, gordura)
source/CAP003/UCAP003.pasRelatórios de captação por rota/produtor/período

Apps Mobile (Android nativo — CaptacaoMobile)​

Localização: source/Mobile/CaptacaoMobile/CaptacaoMobileAPK/ Package: br.com.junsoft.captacaomobile

Arquitetura offline-first​

┌─────────────────────────────────────────┐
│ App Android (Java, SDK 21-34) │
│ │
│ SQLite local (BD offline) │
│ ├── rotas, produtores, tickets do dia │
│ ├── movimentos de coleta não sync │
│ └── configuração de equipamento │
│ │
│ GPSLocationListener │
│ └── Registra posição em cada parada │
│ │
│ Sync (quando há conectividade) │
│ ├── RotaSinc → GET /rotas │
│ ├── ProdutorSinc → GET /produtores │
│ ├── MovtoLeiteSinc → POST /movimentos │
│ └── MilkRouteSync → sync completo │
└─────────────────────────────────────────┘

Classes de sincronização​

ClasseDireçãoEndpoint
RotaSincDownloadGET /api/rotas/:cdEmpresa
ProdutorSincDownloadGET /api/produtores/:cdRota
MovtoLeiteSincUploadPOST /api/movimentos/leite
MilkRouteSyncBidirecionalOrquestrador geral de sync

API REST Java (CaptacaoMobile)​

Localização: source/Server/CaptacaoMobile/ Tecnologia: Spring Boot, WAR para WildFly

DAOs principais​

DAOTabela principalResponsabilidade
RotaDAOROTACAPTACAOLista rotas por empresa/motorista
ProdutorDAOPRODUTORLEITECadastro de produtores por rota
MovtoLeiteDAOCAPTACAOLEITERecebe e persiste movimentos de coleta
ProdutorRotaDAOPRODUTORROTACAPOrdem de parada na rota

Portal Web Angular (PortalWebAPP)​

Localização: source/JunsoftPortalWeb/PortalWebAPP/src/app/coletas/

ComponenteFunção
ColetaMainServiceEstado central, carrega rotas e movimentos
coleta-listLista coletas do dia/período
coleta-detailDetalhe por produtor (QT, temperatura, qualidade)
coleta-rotaMapa da rota e status de cada parada
coleta-relatorioRelatório de produção por produtor/período

Tabelas do Banco de Dados​

CAPTACAOLEITE — Registro de Coleta​

DDL: docs/schema/tables/CAPTACAOLEITE.sql Chave primária: (CD_EMPRESA, NR_CAPTACAOLEITE)

CampoTipoDescrição
NR_CAPTACAOLEITEINTEGERSequencial (PK)
CD_ROTACAPTACAOINTEGERRota de coleta (FK → ROTACAPTACAO)
CD_PRODUTORINTEGERProdutor rural (FK → PRODUTORLEITE)
DT_COLETADATEData da coleta
HR_COLETATIMEHora da coleta
QT_INFORMADANUMERIC(15,3)Quantidade informada pelo produtor (litros)
QT_LEITURANUMERIC(15,3)Quantidade medida pelo medidor do caminhão
PC_DIFERENCANUMERIC(5,2)% de diferença (QT_LEITURA vs QT_INFORMADA)
QT_TEMPERATURANUMERIC(5,2)Temperatura na coleta (°C)
ST_QUALIDADECHAR(1)'A'=Aprovada, 'R'=Reprovada, 'P'=Pendente análise
ST_SINCRONIZADOCHAR(1)'S'=Sincronizado com servidor, 'N'=Apenas local
NR_LATITUDENUMERIC(10,7)Latitude GPS da parada
NR_LONGITUDENUMERIC(10,7)Longitude GPS da parada
DS_OBSERVACAOVARCHAR(500)Observações do motorista
CD_USUARIO_SYNCVARCHAR(5)Motorista/usuário que realizou a coleta
DT_SYNCTIMESTAMPData/hora da sincronização

PRODUTORLEITE — Cadastro do Produtor Rural​

DDL: docs/schema/tables/PRODUTORLEITE.sql Chave primária: (CD_EMPRESA, CD_PRODUTOR)

CampoTipoDescrição
CD_PRODUTORINTEGERCódigo do produtor (FK → PESSOA)
NR_INSCRICAOPRODUTORVARCHAR(20)Inscrição estadual rural
PC_FATURAMENTONUMERIC(5,2)% a reter para custos (FUNRURAL, etc.)
QT_ANIMAISINTEGERRebanho atual (vacas em lactação)
QT_MEDIA_DIANUMERIC(10,3)Produção média diária estimada
CD_ITEMLEITEINTEGERProduto/item para faturamento (FK → ITEM)
CD_TABELAPRECOINTEGERTabela de preço pago ao produtor
ST_PRODUTORCHAR(1)'A'=Ativo, 'I'=Inativo, 'S'=Suspenso
DT_INICIODATEData de início do contrato
DT_FIMDATEData de encerramento do contrato
ST_RESFRIAMENTOCHAR(1)'P'=Próprio, 'C'=Coletivo, 'N'=Não possui
DS_BANCO, NR_AGENCIA, NR_CONTA—Dados bancários para pagamento

ROTACAPTACAO — Rotas de Coleta​

DDL: docs/schema/tables/ROTACAPTACAO.sql Chave primária: (CD_EMPRESA, CD_ROTACAPTACAO)

CampoTipoDescrição
CD_ROTACAPTACAOINTEGERCódigo da rota
DS_ROTACAPTACAOVARCHAR(60)Descrição
CD_MOTORISTAINTEGERMotorista responsável (FK → PESSOA)
CD_VEICULOINTEGERCaminhão/veículo (FK → VEICULO)
CD_ESTABELECIMENTOINTEGERUsina/laticínio de destino (FK → PESSOA)
DT_COLETACHAR(7)Dias de coleta: ex 'STQQSSD' (Dom=S, Seg=S, Ter=T...)
KM_TOTALNUMERIC(10,2)Quilometragem total da rota
ST_ROTACHAR(1)'A'=Ativa, 'I'=Inativa

PRODUTORROTACAP — Produtores em Ordem na Rota​

DDL: docs/schema/tables/PRODUTORROTACAP.sql Chave primária: (CD_EMPRESA, CD_ROTACAPTACAO, CD_PRODUTOR)

CampoTipoDescrição
NR_ORDEMCOLETASMALLINTPosição na rota (ordem de parada)
KM_DISTANCIANUMERIC(8,2)Distância do ponto anterior até este produtor
ST_COLETACHAR(1)'A'=Coleta neste produtor, 'S'=Suspenso temporariamente
DS_REFERENCIAVARCHAR(200)Ponto de referência / localização

ANALISELEITE — Análise de Qualidade​

DDL: docs/schema/tables/ANALISELEITE.sql

CampoTipoDescrição
CD_PRODUTORINTEGERProdutor (FK)
DT_COLETADATEData de referência
NR_CCSINTEGERContagem de Células Somáticas (×1000/mL)
NR_CBTINTEGERContagem Bacteriana Total (×1000 UFC/mL)
PC_GORDURANUMERIC(4,2)% de gordura
PC_PROTEINANUMERIC(4,2)% de proteína
PC_LACTOSENUMERIC(4,2)% de lactose
ST_QUALIDADECHAR(1)'A'=Aprovada, 'R'=Reprovada
VL_BONIFICACAONUMERIC(15,2)Valor de bonificação por qualidade
VL_DESCONTO_QUALIDADENUMERIC(15,2)Desconto por padrão abaixo do mínimo

Regras IN-77 (MAPA): CCS ≤ 500.000/mL e CBT ≤ 300.000 UFC/mL para leite aprovado.


Parâmetros (PARMCAPTACAO)​

ParâmetroTipoEfeito
CD_ITEMLEITEINTEGERItem padrão do produto leite no faturamento
CD_TABDESCLEITEINTEGERTabela de descontos (FUNRURAL, SENAR...)
PC_INDENIZACAONUMERIC% de indenização sobre o leite rejeitado
ST_CONTROLETEMPS/N'S' = exige temperatura na coleta
VL_TEMP_MAXNUMERICTemperatura máxima aceitável (°C) — padrão 7°C
ST_GPSOBRIGATORIOS/N'S' = exige GPS em cada parada
PC_DIFMAXNUMERIC% máximo de diferença (QT_LIDA vs QT_INFORMADA) tolerado

Fluxo Completo — Coleta de Leite​

┌──────────────────────────────────────────────────────────┐
│ 1. PREPARAÇÃO DA ROTA (Servidor / Desktop) │
│ Técnico configura ROTACAPTACAO + PRODUTORROTACAP │
│ Atribui motorista e veículo │
│ Sync download para o app (RotaSinc + ProdutorSinc) │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 2. COLETA NO CAMPO (App Android — offline) │
│ Motorista segue NR_ORDEMCOLETA na rota │
│ Para cada produtor: │
│ - QT_LEITURA (medidor do caminhão) │
│ - QT_TEMPERATURA (obrigatório se ST_CONTROLETEMP='S') │
│ - GPS: NR_LATITUDE, NR_LONGITUDE │
│ - DS_OBSERVACAO (anomalias, rejeições) │
│ INSERT local no SQLite: ST_SINCRONIZADO='N' │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 3. SINCRONIZAÇÃO (com conectividade) │
│ MovtoLeiteSinc → POST /api/movimentos/leite │
│ Servidor: INSERT CAPTACAOLEITE (ST_SINCRONIZADO='S') │
│ Calcula PC_DIFERENCA = (QT_LEITURA - QT_INFORMADA) │
│ / QT_INFORMADA × 100 │
│ Se |PC_DIFERENCA| > PC_DIFMAX: alerta para revisão │
│ Se QT_TEMPERATURA > VL_TEMP_MAX: ST_QUALIDADE='P' │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 4. ANÁLISE DE QUALIDADE (CAP002) │
│ Laboratório insere resultados: CCS, CBT, gordura │
│ INSERT ANALISELEITE │
│ Se fora dos padrões: ST_QUALIDADE='R' → PC_INDENIZACAO │
│ Cálculo de bonificação (VL_BONIFICACAO) │
└─────────────────────────┬────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────┐
│ 5. FATURAMENTO AO PRODUTOR (mensal) │
│ SUM(QT_LEITURA) por produtor no período │
│ × VL_UNITARIO (tabela de preço do produtor) │
│ + VL_BONIFICACAO (qualidade) │
│ − Deduções (FUNRURAL, SENAR, ILPI, insumos) │
│ conforme CD_TABDESCLEITE │
│ − VL_DESCONTO_QUALIDADE (se reprovado) │
│ Gera CONTAS (TP_CONTAS='E') — pagamento ao produtor │
│ Transferência bancária conforme DS_BANCO do produtor │
└──────────────────────────────────────────────────────────┘

Portal Web — Monitoramento em Tempo Real​

O ColetaMainService (Angular) permite:

  • Visualizar mapa da rota com status de cada produtor (coletado/pendente/suspenso)
  • Comparar QT_INFORMADA vs QT_LEITURA por produtor e rota
  • Alertas automáticos de temperatura fora do padrão
  • Relatório de produção acumulada por período (CAP003)
  • Histórico de qualidade por produtor (CCS/CBT/gordura ao longo do tempo)

Influências em Outros Módulos​

→ Contas a Pagar​

  • Faturamento mensal ao produtor gera título a pagar (TP_CONTAS='E')
  • Pagamento via transferência bancária (dados do produtor em PRODUTORLEITE)

→ Emissão NF-e​

  • Nota Fiscal de Produtor Rural pode ser emitida para cada entrega
  • Nota de entrada de leite (TP_NOTA='E') registra o recebimento da usina

→ Estoque e Movimentação​

  • Cada entrega (ticket de pesagem) gera entrada em MOVESTOQUE (CD_ITEMLEITE)
  • Controle de saldo de leite recebido na usina

→ Mobile​

  • App Android CaptacaoMobile é o principal ponto de coleta de dados
  • SQLite local garante operação sem conectividade (zonas rurais sem sinal)

→ APIs Java​

  • CaptacaoMobile Java API: RotaDAO, MovtoLeiteDAO, ProdutorDAO
  • Endpoint de sync: POST /api/movimentos/leite (recebe batches do app)