# README - Reprocessamento Manual de Abastecimentos

## Resumo

Esta entrega adiciona uma ação manual na rotina `fro003_abastecimento` para reprocessar abastecimentos por empresa, com execução em Python disparada pelo PHP.

## Regras da funcionalidade

- execução por empresa
- usuário informa `data/hora inicial`
- usuário escolhe de `1` a `5` dias
- `data/hora final` é calculada automaticamente na tela
- processamento sempre quebrado em janelas de `10 horas`
- usa as tecnologias ativas em `dim_apiabastecimento where status = 0`
- não usa `acao` da `apiabastecimento`
- não altera `dim_apiabastecimento.tempohr`
- recalcula `kmrodado` em `ft_controleabs`

## Arquivos principais

- `fro003_abastecimento/index.php`
- `fro003_abastecimento/reprocess_lib.php`
- `fro003_abastecimento/reprocess_meta.php`
- `fro003_abastecimento/reprocess_start.php`
- `fro003_abastecimento/reprocess_status.php`
- `fro003_abastecimento/python/reprocessar_abastecimento.py`
- `fro003_abastecimento/HANDOFF_REPROCESSAMENTO.md`

## Fluxo

1. O usuário abre `fro003_abastecimento/index.php`.
2. Clica em `Reprocessar Abastecimentos`.
3. A tela busca tecnologias ativas e o último status em `reprocess_meta.php`.
4. O usuário informa `data_inicio` e `dias`.
5. `reprocess_start.php` valida a solicitação e cria a execução.
6. O PHP dispara `python/reprocessar_abastecimento.py` em background.
7. A tela consulta `reprocess_status.php` para mostrar cronômetro, janela atual, tecnologia atual e logs.

## Endpoints

### `reprocess_meta.php`

Retorna:

- empresa atual
- limite de dias
- chunk fixo de `10h`
- tecnologias agrupadas
- último processamento do usuário/empresa

### `reprocess_start.php`

Responsável por:

- validar `POST`
- bloquear execução concorrente por usuário/empresa
- montar `run_id`
- gravar arquivos de controle
- iniciar o Python em background

### `reprocess_status.php`

Retorna:

- status de uma execução específica por `run_id`
- ou o último status via `latest=1`

## Worker Python

O script `python/reprocessar_abastecimento.py`:

- lê o JSON de configuração criado pelo PHP
- divide o período em janelas de `10h`
- processa as integrações ativas
- grava bruto nas tabelas `fro002_*`
- reprocessa `ft_controleabs`
- aplica pós-tratamentos e recalcula `kmrodado`

Tecnologias já tratadas:

- Connect
- Pro-Frotas
- Veloe
- Ticketlog

## Runtime local

Os arquivos de execução ficam em:

- `arquivos_temporarios/fro003_abastecimento_reprocess/`

Tipos de arquivo:

- `<run_id>_status.json`: status lido pela tela
- `<run_id>.log`: log bruto do Python
- `<run_id>_config.json`: payload temporário de entrada do Python
- `latest_<empresa>_<usuario>.json`: ponteiro para o último processamento do usuário/empresa

Essa pasta está no `.gitignore` e não deve ser versionada.

## Lixo local que pode ser apagado

- `arquivos_temporarios/pycache/`

Esse diretório só foi gerado pela validação local de sintaxe do Python e também está no `.gitignore`.

## Referência de negócio / ETL

Base usada para espelhar o comportamento:

- `C:\Users\Lenovo\Documents\projetos\etl\transformacao\dellmar\abastecimento\abastecimento.kjb`

## Antes de homologar

Vale validar:

- schema real das tabelas `fro002_*`
- schema real de `ft_controleabs`
- credenciais e tokens reais por tecnologia
- execução completa com banco e APIs reais
- tempo de processamento de períodos maiores
