---
# System prepended metadata

title: Integração de Romaneio de colheita

---

# Integração de Romaneio de colheita
### Preparação para integração
#### SAP
- [x] Testar endpoint "Apontamento produção" da SPRO
    - não conseguium retorno com sucesso, pois não tenho um código de `orderNumber` válido. Erro: `{"root":{"Sistema":"AGROT","MatDoc":"310000348","Status":"101","Desc":"Erro: Ordem 310000348 não existe ou sem autorização para movimento de mercadorias 310000348   "}}`

#### Worker
- [x] Entender como usar o kafka (criar tópico, publicar mensagem).
    - utilizar http://kmanager.knet.agrotis.local/clusters/Plataforma.
    - adicionar a linha `10.0.0.10 vmpkube001.agrotis.local knet.agrotis.local dashboard.knet.agrotis.local grafana.knet.agrotis.local kmanager.knet.agrotis.local` no arquivo *hosts*.
- [x] Entender como rodar o projeto integrador jotabasso.
    - utilizar o eclipse e rodar como é explicado em https://bitbucket.org/agrotis/integrador-jotabasso/src/master/.
- [x] Criar tópico no kafka exclusivo `PlatArmRomaneioColheitaJotabasso`.
- [x] Criar grupo no kafka exclusivo `Jotabasso.
- [x] Criar uma classe exclusiva listener **PlataformaKafkaListenerApontamentoProducao** para o tópico `PlatArmRomaneioColheitaJotabasso`.
    - utilizar a annotation `@Service` na classe.
    - implmentar método `listen()` com a annotation `@KafkaListener`, assim o spring já inicializa o consumer para o tópico.
    - instancia o json lido do tópico em **RomaneioColheitaAgrotis**.
    - chama `gerarApontamentoProducaoIn()` em **ApontamentoProducaoIn**.
- [x] Criar uma classe para gerar/enviar apontamento de produção **ApontamentoProducaoIn**.
    - utilizar a annotation `@Component` na classe.
    - implementar método `gerarApontamentoProducaoIn()`:
        - converter **RomaneioColheitaAgrotis** em **RomaneioColheitaSAP**.
        - chamar endpoint https://l400325-iflmap.hcisbp.br1.hana.ondemand.com/http/PP/ApontamentoProducao
        - atualiza operacao armazenagem na plataforma.
- [x] Criar diretório */integracao/plataforma/romaneioColheita*.
- [x] Criar classe **RomaneioColheitaAgrotis**.
    - será lido do tópico um json com esses dados.
    - precisa ter os seguintes atributos: `Long id`, `Long idEmpresa`, `Date data`, `Long idProdutoArmazenagem`, `Long quantidade`. 
- [x] Criar classe **RomaneioColheitaSAP**.
    - será enviado como json para o endpoint "Apontamento produção".
    - utilizar a annotation `@Builder` na classe.
- [x] Criar classe **MaterialRomaneioSAP**.
    - é objeto `Materias` dentro de **RomaneioColheitaSAP**.

#### Plataforma
- [x] Criar classe **RomaneioColheitaIntegracaoApi**
    - utilizar tópico `PlatArmRomaneioColheitaJotabasso`.
    - precisa ter os seguintes atributos: `Long id`, `Long idEmpresa`, `Date data`, `Long idProdutoArmazenagem`, `Long quantidade`.
- [x] Implementar método `notificarMensageriaJotabasso()` em **OperacaoArmazenagemRn**
    - se o `statusIntegracao` for `NAO_NOTIFICAR` ou `INTEGRADO` não faz nada.
    - alterar o `statusIntegracao` para `NOTIFICANDO` no início do método e para `NOTIFICADO` no final do método.



---

### Processo
1. Persiste romaneio com campo de produção
    - status de integração pendente.
    - notifica tópico no kafka com **RomaneioColheitaIntegracaoApi**.
2. Worker processa mensagem no kafka
    - verifica mensagem recebida no tópico
    - converte o objeto **RomaneioAgrotis** em **RomaneioEntradaSAP**.
    - chama endpoint 'Apontamento Produção In' com **RomaneioEntradaSAP**.
    - atualizar status de integração do romaneio como integrado.
    - criar objeto **OperacaoSap** através de endpoint na plataforma. 

### Endpoint SPRO/SAP
#### url
https://l400325-iflmap.hcisbp.br1.hana.ondemand.com/http/PP/ApontamentoProducao
#### auth
- username: S0021938399
- password: Agrotis@2020
#### o que precisa ser enviado:
- Sistema (`Sistema`):
    - enviar valor 'AGROT'.
    - corresponde ao código legado em alguns documentos.
- Ordem de produção (`OrderNumber`):
    - corresponde a `integracaoTerceiros` de **CampoProducaoConsultaApi**
- Tipo de movimento (`MovType`):
    - enviar valor padrão '101', à confirmar.**
- Centro (`Plant`):
    - obter valor do de-para de Empresa/Filial correspondente a `idEmpresa`.
- Depósito (`Lgort`):
    - enviar valor padrão '20' (depósito de grãos e sementes).
- Data (`PstngDate`):
    - enviar data do romaneio no formato 'aaaammdd' (ex: '20200422').
- Materiais (`Materiais`):
    - lista com os materias
- Material (`Material`):
    - enviado dentro do objeto `Materiais`
    - possui os seguintes campos:
        - Número Material (`Matnr`):
            - obter valor do de-para de Materiais correspondente a `idProdutoArmazenagem`.
        - Quantidade (`Quantity`):
            - corresponde a `quantidade` de **Romaneio**
        - Unidade de Medida (`QuantityUom`):
            - enviar valor padrão 'KG'
        - Lote (`Charg`):
            - enviar valor 'PADRAO', quando o material for Commodities Agrícolas > Soja > Grãos (codigo='000770000600000001')
            - enviar valor nulo, quando demais materiais
#### exemplo
``` 
{
    "Sistema": "AGROT",
    "OrderNumber": "310000348",
    "MovType": "261",
    "Plant": "C002",
    "Lgort": "02",
    "PstngDate": "20200422",
    "Materiais": {
      "Material": [
        {
          "Matnr": "6000306",
          "Quantity": "50",
          "QuantityUom": "",
          "Charg": "0000028891"
        }
      ]
    }
}
```