DNATech :: 🔍 **Integração com IA e Totvs Protheus — Cuidado com valores decimais!**

_Créditos da imagem: ChatGPT

🔍 **Integração com IA e Totvs Protheus — Cuidado com valores decimais!**

Durante alguns testes de integração de pedidos de venda via *Inteligência Artificial* no Protheus, me deparei com um problema curioso: mesmo com os totais corretos, o sistema invalidava os pedidos quando o preço dos produtos era fracionário (valores com decimais).

Tentei ajustar a quantidade de casas decimais nos campos, revisei configurações, mas nada resolvia — até encontrar o ponto crítico: uma **configuração específica no `appserver.ini`** que muda completamente a forma como o Protheus lida com cálculos de ponto flutuante.

💡 A solução foi incluir a chave:

```
[General]
FloatingPointPrecise=1
```

📎 Documentação oficial: [https://tdn.totvs.com/display/tec/FloatingPointPrecise](https://tdn.totvs.com/display/tec/FloatingPointPrecise)

Depois disso, os testes passaram a funcionar perfeitamente, sem inconsistências no total.

💬 Acredito que a validação interna do Protheus — especialmente no programa MATA410 e outros, que verifica diferenças de arredondamento no total dos pedidos — poderia ser reavaliada. Em cenários de integração com modelos de linguagem (LLMs), os dados são gerados dinamicamente e podem sofrer pequenas variações nos cálculos. Mesmo quando os valores estão matematicamente corretos, o sistema pode rejeitar o pedido por conta de regras muito rígidas de arredondamento. Esse comportamento reduz a flexibilidade e pode impactar negativamente a automação de processos.

🧪 Exemplo de prompt e cenário de teste (para desenvolvedores que usam LLMs integradas ao Protheus):

```
#PRAGMA @__BEGINPROMPT@
pode inserir o pedido conforme abaixo

Tipo: N, cliente: 1, loja: 1, Tipo do cliente: F, condição de pagamento: 15, Natureza: 1
produto: 000000000000001, quantidade:  3 unidades, Preço Unitário: 2.75, TES: 501, local: 01
produto: 000000000000002, quantidade: 15 unidades, Preço Unitário: 5.50, TES: 501, local: 01
produto: 000000000000003, quantidade: 25 unidades, Preço Unitário: 8.25, TES: 501, local: 01
produto: 4, qtd: 3 unidades, Preço Unitário: 11.00, TES: PRODUTO SEM IMPOSTO, local: 1
produto: 5, 5 unidades, Preço Unitário: 13.75, TES: PRODUTO SEM IMPOSTO, local: 1
produto: 6, quant: 2 unidades, Preço por unidade: 16.50, TES: PRODUTO SEM IMPOSTO, local: 1
...
```
📉 Antes da correção, os erros apresentados eram como:

```
ID:0000000135
AJUDA:TOTAL     
Valor total inválido.

Tabela SC5 05/06/2025 07:59:45
Tipo Pedido          - C5_TIPO      := N
Cliente              - C5_CLIENTE   := 000001
Loja                 - C5_LOJACLI   := 01
Tipo Cliente         - C5_TIPOCLI   := F
Cond. Pagto          - C5_CONDPAG   := 15 
Natureza             - C5_NATUREZ   := 0000000001
Comentario           - C5_COMENT    := {"ID":"0000000135"}
--------------------------------------------------------------------------------
Tabela SC6 05/06/2025 07:59:45
Erro no Item   2
--------------------------------------------------------------------------------
Item                 - C6_ITEM      := 02
Produto              - C6_PRODUTO   := 000000000000002
Unidade              - C6_UM        := UN
Quantidade           - C6_QTDVEN    := 15
Vlr.Total            - C6_VALOR     := 75 
Tipo Saida           - C6_TES       := 501
Armazem              - C6_LOCAL     := 01
Prc Lista            - C6_PRUNIT    := 5
--------------------------------------------------------------------------------
ID:0000000133
AJUDA:TOTAL     
Valor total inválido.

Tabela SC5 05/06/2025 07:48:22
Tipo Pedido          - C5_TIPO      := N
Cliente              - C5_CLIENTE   := 000001
Loja                 - C5_LOJACLI   := 01
Tipo Cliente         - C5_TIPOCLI   := F
Cond. Pagto          - C5_CONDPAG   := 15 
Natureza             - C5_NATUREZ   := 0000000001
Comentario           - C5_COMENT    := {"ID":"0000000133"}
--------------------------------------------------------------------------------
Tabela SC6 05/06/2025 07:48:22
Erro no Item   1
--------------------------------------------------------------------------------
Item                 - C6_ITEM      := 01
Produto              - C6_PRODUTO   := 000000000000001
Unidade              - C6_UM        := UN
Quantidade           - C6_QTDVEN    := 3
Vlr.Total            - C6_VALOR     := 9.3 
Tipo Saida           - C6_TES       := 501
Armazem              - C6_LOCAL     := 01
Prc Lista            - C6_PRUNIT    := 3.1
```

💡 Após Configurar a chave :

```json
{    "data": {
        "C5_TIPO": "N",
        "C5_CLIENTE": "0001",
        "C5_LOJACLI": "1",
        "C5_TIPOCLI": "F",
        "C5_CONDPAG": "15 ",
        "C5_NATUREZ": "0000000001",
        "SC6": [{
                "C6_ITEM": "01",
                "C6_PRODUTO": "000000000000001",
                "C6_UM": "UN",
                "C6_QTDVEN": 3,
                "C6_PRUNIT": 2.75,
                "C6_VALOR": 7.275,
                "C6_TES": "501",
                "C6_LOCAL": "01"
            }, {
                "C6_ITEM": "02",
                "C6_PRODUTO": "000000000000002",
                "C6_UM": "UN",
                "C6_QTDVEN": 15,
                "C6_PRUNIT": 5.5,
                "C6_VALOR": 82.5,
                "C6_TES": "501",
                "C6_LOCAL": "01"
            }, {
                "C6_ITEM": "03",
                "C6_PRODUTO": "000000000000003",
                "C6_UM": "UN",
                "C6_QTDVEN": 25,
                "C6_PRUNIT": 8.25,
                "C6_VALOR": 206.25,
                "C6_TES": "501",
                "C6_LOCAL": "01"
            }, {
                "C6_ITEM": "04",
                "C6_PRODUTO": "000000000000004",
                "C6_UM": "UN",
                "C6_QTDVEN": 3,
                "C6_PRUNIT": 11,
                "C6_VALOR": 33,
                "C6_TES": "501",
                "C6_LOCAL": "1"
            }, {
                "C6_ITEM": "05",
                "C6_PRODUTO": "000000000000005",
                "C6_UM": "UN",
                "C6_QTDVEN": 5,
                "C6_PRUNIT": 13.75,
                "C6_VALOR": 68.75,
                "C6_TES": "501",
                "C6_LOCAL": "1"
            }, {
                "C6_ITEM": "06",
                "C6_PRODUTO": "000000000000006",
                "C6_UM": "UN",
                "C6_QTDVEN": 2,
                "C6_PRUNIT": 16.5,
                "C6_VALOR": 33,
                "C6_TES": "501",
                "C6_LOCAL": "1"
            }
        ]
    }
}
```

```json
{
    "ID": "0000000201",
    "C5_NUM": "000110",
    "RecNo": 118,
    "status": "success",
    "message": "Pedido inserido com sucesso conforme especificado."
}
```

Se você também lida com integração de IA ao Protheus, vale revisar esse detalhe. Pequenas configurações fazem grande diferença no sucesso dos testes.

\#Protheus #TOTVS #DNATech #ERP #Integração #IA #LLM #TFW #DevTOTVS #SalesOrder #FloatingPointPrecise #TLMStudio

---

Torne-se um Sponsor: 🥊(дави)={0.5x[(Налдо)+(Алине)]}🥊

Comentários

Postagens mais visitadas