Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sincronismo

A definifição de Sincronismo é quando o dado vem do sistema de terceiros para o NFS.

A busca de dados no banco para saber se será feito um insert/update é definido pelos campos que são definidos como Primary Key (Chave Primária), então é bom sempre fazer uma análise nos dados que serão recebidos e verificar se ele é uma chave primária ou não, isso não quer dizer que ele será uma PK no DB do NFS e sim serão valores unicos.

Estrutura

Estrutura Pai

{
  "alias": "NomeTabelaApelido",
  "table": "TABELA_NOME",
  "field": {
  }
}
ChaveObrigatórioValorDescrição
aliasSimApelidoTabelaDeve ser um apelido para tabela sem espaço.
tableSimTABELA_NOMEÉ a Tabela Nome que está na nfs_core_ds_tabela, usada para referênciar a uma tabela do NFS
fieldSimConjunto de JsonÉ onde ficam configurados os json de cada campo que vira do sincronismo, veja na tabela abaixo a configuração desses campos de forma detalhada, basicamento é o nome do campo que vem do terceiro e suas propriedades.
deleteExistDataNãotrue/falsePor padrão é false e se for definido como true, os dados existentes são deletados e inseridos novos.
Compartilhado

Para inserir um dado que é compartilhado, a primeira coisa é conferir na nfs_core_sys_tabela_compartilhada e ver se suas tabelas estão compartilhadas para filial e local, se não pode não funcionar. O segundo item é configurar na Api na hierarquia principal é possível usar a propriedade filial e local da seguinte forma:

{
  "alias": "NomeTabelaApelido",
  "table": "TABELA_NOME",
  "filial": { "share": true}, 
  "field": {
  }
}

Vale ressaltar que é independente, no caso acima a filial inserida sempre vai ser 9999.

{
  "alias": "NomeTabelaApelido",
  "table": "TABELA_NOME",
  "local": { "share": true}, 
  "field": {
  }
}

por local ou até ambos

{
  "alias": "NomeTabelaApelido",
  "table": "TABELA_NOME",
  "filial": { "share": true}, 
  "local": { "share": true}, 
  "field": {
  }
}

Estrutura do Field

Será descrito com mais detalhes o que pode conter na configuração do fields.

{
  "alias": "NomeTabelaApelido",
  "table": "TABELA_NOME",
  "field": {
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "CodigoOperacao": {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 100,
      "description": "CodigoOperacao da Operacao",
      "primaryKey": true,
      "required" : true
    }
  }
}

Como é possível observar CodigoEmpresa e CodigoOperacao, são campos que vem num json que é enviado por um sistema de terceiro e para cada um deles vai ter uma configuração.

ChaveObrigatórioValorDescrição
columnSimSTRINGNome da Coluna no NFS.
typeSimVarcharTipo da Coluna, geralmente é varchar
sizeSimINTEGERTamanho maximo do dado que está sendo sincronizado, ainda não é usado esse valor, mas será útil para validações futuras
descriptionNãoSTRINGDescrição da chave/Coluna, pode ser que isso ajude na manutenção para outras pessoas entenderem o que foi realizado, para que ser, de onde pertence.
primaryKeyNãotrue/falseIndica que aquela chave/coluna é chave primária, pode até não ser no banco mas ela é importanta para fazer buscas verificando se existe o campo no banco do NFS para ver se é necessário fazer um update ou insert
requiredNãotrue/falseÉ um atributo importante, se marcado como true exije que o sistema de terceiro envie o valor, se não enviar será enviado uma mensagem de erro dizendo que o campo é obrigatório. Lembrando que se o campo não é obrigado não é necessário usar esse atributo
fieldMsgReturnNãoSTRINGÉ usado como um apelido para o campo de mensagem na primeira validação que é quando há uma pré condição para fazer um sincronismo, por exemplo, no caso de OS se ela já foi integrada não pode ser mais atualizada pelo sincronismo, e o campo é CodigoOS mas o cliente deseja que seja somente OS com isso na mensagem de retorno vai Exibir OS ao invés de CodigoOS, veja mais em mensagem de retorno
fkNãotrue/falseIndica que a coluna é uma FK
tableOriginNãoSTRINGÉ somente usada quando o campo é marcado com "fk" : true e indica qual a tabela de origem.
columnOriginNãoSTRINGÉ somente usada quando o campo é marcado com "fk" : true, "tableOrigin" : "ESTADO" e indica qual é a coluna que representa, no caso pode ser que seja enviada a sigla do estado ficando "fk" : true, "tableOrigin" : "ESTADO", "columnOrigin" : "SIGLA" , com isso será salvo o ESTADO_SEQ_DB com o valor da SIGLA enviado Exemplo de config com FK.
fieldsCompNãoJson ArrayUsado quando a FK depende de mais de um campo que é enviado, o que chamamos de fk composta, na tabela de equipamento para ele ser unico depende CodigoLinhaEquip(LINHA), CodigoModeloEquip(MODELO), Chassi(CHASSI) veja no exemplo Exemplo de Configuração com FK Composta
multipleFKNãoJson ArrayUsado quando é o campo FK da tabela origem também é um FK veja no Exemplo de Configuração Multiple FK
parentNãotrue/falseUtilizado para quando precisa obter o valor de um informação que esteja no json pai, veja mais em Exemplo de Configuração de Parent

Tipos do Field

  • varchar: Tipo básico que representa strings
  • boolean: Tipo verdadeiro ou falso e aceita os seguintes valores verdadeiros: 1, yes, s, sim, ativo, a, verdadeiro. Tudo diferente desses valores vai ser considerado como falso.
  • int: Tipo inteiro
  • float: Tipo ponto flutuante

Se for passado um tipo que não existe acima vai ser considerado como uma string.

Exemplos

Configuração de Operação [Simples]

{
  "alias": "OperacaoServico",
  "table": "OPERACAO",
  "field": {
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "CodigoLinhaOper": {
      "column": "CODIGO_LINHA",
      "type": "Varchar",
      "size": 100,
      "description": "Codigo Linha da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "CodigoOperacao": {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 100,
      "description": "CodigoOperacao da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "Descricao": {
      "column": "DESCRICAO",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao da Operacao",
      "required" : true
    },
    "DescricaoCompl": {
      "column": "DESCRICAO_COMPLETA",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao Completa da Operacao"
    },
    "TipoOperacao": {
      "column": "TIPO_OPERCAO",
      "type": "Varchar",
      "size": 2,
      "description": "Tipo da Operacao",
      "required" : true
    }
  }
}

Exemplo de Configuração Cliente

{
  "alias": "Cliente",
  "table": "CLIENTE",
  "field": {
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial do Cliente",
      "primaryKey": true,
      "required": true
    },
    "CodigoCliente": {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 20,
      "description": "Código do Cliente Endereço no DMS 999999EEE (Pessoa/Ender)",
      "primaryKey": true,
      "required": true
    },
    "Nome": {
      "column": "DESCRICAO",
      "type": "Varchar",
      "description": "Nome do Cliente",
      "required": true
    },
    "Tipo": {
      "column": "TPPESSOA",
      "type": "Varchar",
      "size": 10,
      "description": "Tipo (Fisica/Juridica) do Cliente",
      "required": true
    },
    "CpfCnpj": {
      "column": "CNPJCPF",
      "type": "Varchar",
      "size": 100,
      "description": "Cpf ou Cnpj do Cliente",
      "required": true
    },
    "NomeEndereco": {
      "column": "ENDERECO",
      "type": "Varchar",
      "size": 100,
      "description": "Endereço do Cliente",
      "required": true
    },
    "Logradouro": {
      "column": "LOGRADOURO",
      "type": "Varchar",
      "size": 100,
      "description": "Logadouro do Cliente",
      "required": true
    },
    "Numero": {
      "column": "NUMERO",
      "type": "Varchar",
      "size": 100,
      "description": "Numero do Cliente"
    },
    "Complemento": {
      "column": "COMPLEMENTO",
      "type": "Varchar",
      "size": 100,
      "description": "Complemento do Cliente"
    },
    "Bairro": {
      "column": "BAIRRO",
      "type": "Varchar",
      "size": 30,
      "description": "Bairro do Cliente"
    },
    "Cidade": {
      "column": "MUNICIPIO",
      "type": "Varchar",
      "size": 30,
      "description": "Municipio do Cliente",
      "required": true
    },
    "UF": { // Exemplo FK
      "column": "ESTADO_SEQ_DB",
      "type": "Varchar",
      "size": 30,
      "description": "Numero do Cliente",
      "fk": true,
      "tableOrigin": "ESTADO",
      "columnOrigin": "SIGLA",
      "required": true
    }
  }
}

Exemplo de configuração com FK Composta e validação de OS

{
  "alias": "OrdemServico",
  "table": "OS",
  "conditions": [
   "STATUS_OS_SEQ_DB IN (3)"
  ],
  "msgForCondictions" : "OS já integrado ou encerrada!",
  "field": {
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da OS",
      "primaryKey": true,
      "required" : true
    },
    "FilialOS": {
      "column": "LOCAL",
      "type": "Varchar",
      "size": 100,
      "description": "Local da OS",
      "primaryKey": true,
      "required" : true
    },
    "CodigoOS": {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 20,
      "description": "Codigo da OS",
      "primaryKey": true,
      "required" : true
    },
    "CodigoCliente": {
      "column": "CLIENTE_SEQ_DB",
      "type": "Varchar",
      "description": "Cliente da OS",
      "fk": true,
      "tableOrigin": "CLIENTE",
      "columnOrigin": "CODIGO",
      "required" : true
    },
    "CodigoLinhaEquip": { // Exemplo de Obter o equipamento da OS
      "column": "EQUIPAMENTO_SEQ_DB",
      "type": "Varchar",
      "description": "Codigo da Linha da OS",
      "fk": true,
      "tableOrigin": "EQUIPAMENTO",
      "columnOrigin": "LINHA",
      "fkComp": true,
      "fieldsComp": {
        "CodigoModeloEquip": {
          "column": "MODELO",
          "type": "Varchar",
          "size": 100,
          "description": "Codigo Modelo da OS"
        },
        "Chassi": {
          "column": "CHASSI",
          "type": "Varchar",
          "size": 100,
          "description": "Chassi da OS"
        }
      }
    },
    "DescricaoProblema": {
      "column": "DESCRICAO_PROBLEMA",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao Problema da OS",
      "required" : true
    },
    "DataAbertura": {
      "column": "DATA_ABERTURA",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao Problema da OS",
      "required" : true
    },
    "Chassi": {
      "column": "CHASSI",
      "type": "Varchar",
      "size": 100,
      "description": "Chassi da OS"
     },
    "Linha": {
      "column": "LINHA",
      "type": "Varchar",
      "size": 100,
      "description": "Linha da OS",
      "required" : true
    },
    "Modelo": {
      "column": "MODELO",
      "type": "Varchar",
      "size": 100,
      "description": "Modelo da OS",
      "required" : true
    },
    "IdOS": {
      "column": "",
      "type": "Varchar",
      "size": 100,
      "description": "SEQ_DB da OS no NFS"
    },
    "Servicos": {
      "type": "lovn",
      "table": "SERVICO",
      "aliasOrigin": "Operacao",
      "tableLovn": "OS_SERVICO"
    },
    "Tecnicos": {
      "type": "lovn",
      "aliasOrigin": "Tecnico",
      "tableLovn": "OS_TECNICO"
    },    
    "AgendaTecnicos": {
      "type": "lovn",
      "aliasOrigin": "AgendaTecnicos",
      "tableLovn": "OS_TECNICO_DETALHE"
    },
    "Pecas": {
      "type": "lovn",
      "table": "PECA",
      "aliasOrigin": "Peça",
      "tableLovn": "OS_PECA"
    }
  }
}

Sincronismo de LOVN

Nesse exemplo o Sincronismo de OS tem LOVN com Serviço (OS x Serviço), Técnico (OS x Técnico), Agenda de Técnico (OS x Agenda Tecnico), Peças (OS x Peça).

Como é possível observar nos exemplos abaixo na configuração da LOVN somente é necessário:

"NomeChave": { 
   "type": "lovn",
   "aliasOrigin": "AliasDoEntryPointConfiguracao",
   "tableLovn": "NOME_TABLE_LOVN"
}

A request de envio será parecida:

       "AgendaTecnicos": // Detalhe importante que é sempre um json array
        [
            {
                "AgendaId": 39564,
                "CodigoEmpresaTec": "PALM",
                "CodigoTecnico": 161,
                "DataHoraInicio": "2023-02-02T09:10:00",
                "DataHoraTermino": "2023-02-02T11:10:00"
            }
        ],

Exemplo de Request de OS

[
    {
        "CodigoEmpresa": "PALM",
        "FilialOS": 1,
        "CodigoOS": "00001",
        "CodigoCliente": "0011",
        "CodigoLinhaEquip": "0119",
        "Linha": "COLHEITADEIRAS ",
        "CodigoModeloEquip": "CR5.85              ",
        "Modelo": "CR5.85                        ",
        "Chassi": "JHFY3585JHJF09160   ",
        "DescricaoProblema": "CORREIA DO ALTERNADOR",
        "DataAbertura": "2023-02-02T08:41:21",
        "IdOS": 0,
        "NomeContato": "CONTATO FICTICIO",
        "TelefoneContato": "(12) 123456789",
        "Servicos":
        [
            {
                "SeqServico": "001-0001-0000",
                "CodigoEmpresaOper": "PALM",
                "CodigoLinhaOper": "0119",
                "CodigoOperacao": "9999999     ",
                "DescricaoOperacao": "VERIFICAR CORREIA DO ALTERNADOR",
                "TempoOperacao": 120,
                "Deslocamento": 0
            },
            {
                "SeqServico": "KM",
                "CodigoEmpresaOper": "PALM",
                "CodigoLinhaOper": "0119",
                "CodigoOperacao": "DESLOCAMENTO",
                "DescricaoOperacao": "Deslocamento",
                "TempoOperacao": 1,
                "Deslocamento": 1
            }
        ],
        "Tecnicos":
        [
            {
                "CodigoEmpresaTec": "PALM",
                "CodigoTecnico": 161
            }
        ],
        "AgendaTecnicos":
        [
            {
                "AgendaId": 39564,
                "CodigoEmpresaTec": "PALM",
                "CodigoTecnico": 161,
                "DataHoraInicio": "2023-02-02T09:10:00",
                "DataHoraTermino": "2023-02-02T11:10:00"
            }
        ],
        "Pecas":
        [
            {
                "CodigoEmpresaPec": "PALM",
                "CodigoPeca": "87699094       ",
                "Descricao": "CORREIA DE BORR",
                "DescricaoCompl": "CORREIA DE BORR",
                "Quantidade": 1
            }
        ]
    }
]

Configuração de OS

{
  "alias": "OrdemServico",
  "table": "OS",
  "conditions": [
    "STATUS_OS_SEQ_DB IN (3)"
  ],
  "msgForCondictions": "OS já integrado ou encerrada!",
  "field": {
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da OS",
      "primaryKey": true,
      "required": true
    },
    "FilialOS": {
      "column": "LOCAL",
      "type": "Varchar",
      "size": 100,
      "description": "Local da OS",
      "primaryKey": true,
      "required": true
    },
    "NomeContato": {
      "column": "NOME_CONTATO",
      "type": "Varchar",
      "size": 60,
      "description": "Nome do contato da OS"
    },
    "TelefoneContato": {
      "column": "TELEFONE_CONTATO",
      "type": "Varchar",
      "size": 20,
      "description": "Telefone do contato da OS"
    },
    "CodigoOS": {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 20,
      "description": "Codigo da OS",
      "primaryKey": true,
      "required": true
    },
    "CodigoCliente": {
      "column": "CLIENTE_SEQ_DB",
      "type": "Varchar",
      "description": "Cliente da OS",
      "fk": true,
      "tableOrigin": "CLIENTE",
      "columnOrigin": "CODIGO",
      "required": true
    },
    "CodigoModeloEquip": {
      "column": "EQUIPAMENTO_SEQ_DB",
      "type": "Varchar",
      "description": "Codigo",
      "fk": true,
      "tableOrigin": "EQUIPAMENTO",
      "columnOrigin": "MODELO_EQUIPAMENTO_SEQ_DB",
      "fkComp": true,
      "multipleFK": {
        "CodigoModeloEquip": {
          "column": "MODELO_EQUIPAMENTO_SEQ_DB",
          "type": "Varchar",
          "description": "Codigo do Modelo",
          "fk": true,
          "tableOrigin": "MODELO_EQUIPAMENTO",
          "columnOrigin": "CODIGO",
          "required": true,
          "primaryKey": true,
          "fieldsComp": {
            "CodigoEmpresa": {
              "column": "FILIAL",
              "type": "Varchar",
              "size": 100,
              "description": "filial do tipo equipamento",
              "primaryKey": true,
              "required": true,
              "parent" : true
            },
            "CodigoLinhaEquip": {
              "column": "TIPO_EQUIPAMENTO_SEQ_DB",
              "type": "Varchar",
              "description": "Codigo da Linha",
              "fk": true,
              "tableOrigin": "TIPO_EQUIPAMENTO",
              "columnOrigin": "CODIGO",
              "required": true,
              "fieldsComp": {
                "CodigoEmpresa": {
                  "column": "FILIAL",
                  "type": "Varchar",
                  "size": 100,
                  "description": "filial do tipo equipamento",
                  "primaryKey": true,
                  "required": true,
                  "parent" : true
                }
              }
            }
          }
        }
      },
      "fieldsComp": {
        "CodigoEmpresa": {
          "column": "FILIAL",
          "type": "Varchar",
          "size": 100,
          "description": "filial do tipo equipamento",
          "primaryKey": true,
          "required": true,
          "parent" : true
        },
        "Chassi": {
          "column": "CHASSI",
          "type": "Varchar",
          "size": 100,
          "description": "Chassi da OS",
          "primaryKey": true
        }
      }
    },
    "DescricaoProblema": {
      "column": "OBSERVACAO",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao Problema da OS",
      "required": true
    },
    "DataAbertura": {
      "column": "DATA_ABERTURA",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao Problema da OS",
      "required": true
    },
    "Chassi": {
      "column": "CHASSI",
      "type": "Varchar",
      "size": 100,
      "description": "Chassi da OS"
    },
    "Linha": {
      "column": "",
      "type": "Varchar",
      "size": 100,
      "description": "Linha da OS",
      "required": true
    },
    "Modelo": {
      "column": "",
      "type": "Varchar",
      "size": 100,
      "description": "Modelo da OS",
      "required": true
    },
    "IdOS": {
      "column": "",
      "type": "Varchar",
      "size": 100,
      "description": "SEQ_DB da OS no NFS"
    },
    "Servicos": {
      "type": "lovn",
      "aliasOrigin": "Operacao",
      "tableLovn": "OS_SERVICO"
    },
    "Tecnicos": {
      "type": "lovn",
      "aliasOrigin": "Tecnico",
      "tableLovn": "OS_TECNICO"
    },
    "AgendaTecnicos": {
      "type": "lovn",
      "aliasOrigin": "AgendaTecnicos",
      "tableLovn": "OS_TECNICO_DETALHE"
    },
    "Pecas": {
      "type": "lovn",
      "aliasOrigin": "Peça",
      "tableLovn": "OS_PECA"
    }
  }
}

Configuração OS Servico

Como é possível observar também na configuração você vai encontrar uma referência para a tabela de OS_SEQ_DB que é a referência para SERVICO, isso acontece porque primeiro é inserido/atualizado a OS (Com isso temos o seu SEQ_DB), depois é necessário passar isso na configuração para ser relacionado.

Apesar de ser uma FK, vamos deixar como INT porque vai pegar o valor do SEQ_DB que está me memória, também deixaremos o primaryKey para saber que tem que buscar com esse valor para saber se vai atualizar ou inserir um novo registro.

  "OS": {
      "column": "OS_SEQ_DB",
      "type": "int",
      "description": "Tempo da da Tecnico com OS",
      "primaryKey": true
    },

Configuração completa da OS_SERVICO.

{
  "alias": "Servicos",
  "table": "OS_SERVICO",
  "field": {
    "CodigoEmpresaOper": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da Operacao",
      "primaryKey": true,
      "required": true
    },
    "CodigoLinhaOper": {
      "column": "SERVICO_SEQ_DB",
      "type": "Varchar",
      "description": "Codigo da Linha da Operacao",
      "primaryKey": true,
      "fk": true,
      "tableOrigin": "SERVICO",
      "columnOrigin": "CODIGO_LINHA",
      "fkComp": true,
      "fieldsComp": {
        "CodigoOperacao": {
          "column": "CODIGO",
          "type": "Varchar",
          "size": 100,
          "description": "CodigoOperacao da Operacao"
        },
        "SeqServico": {
          "column": "SEQ_OPERACAO",
          "type": "Varchar",
          "size": 100,
          "description": "SeqServico da Operacao com OS"
        },
        "CodigoOS": {
          "column": "CODIGO_OS",
          "type": "varchar",
          "parent": true,
          "description": "Codigo da OS do pai"
        },
        "CodigoEmpresaOper": {
          "column": "FILIAL",
          "type": "Varchar",
          "size": 100,
          "description": "Filial da Operacao",
          "primaryKey": true,
          "required": true,
          "parent": true
        },
        "FilialOS": {
          "column": "LOCAL",
          "type": "Varchar",
          "size": 100,
          "description": "Local da OS",
          "primaryKey": true,
          "required": true,
          "parent": true
        }
      },
      "required": true
    },
    "SeqServico": {
      "column": "SEQ_OPERACAO",
      "type": "Varchar",
      "size": 100,
      "description": "SeqServico da Operacao com OS",
      "primaryKey": true,
      "required": true
    },
    "DescricaoOperacao": {
      "column": "DESCRICAO_OPERACAO",
      "type": "Varchar",
      "size": 100,
      "description": "SeqServico da Operacao com OS",
      "required": true
    },
    "TempoOperacao": {
      "column": "TEMPO_OPERACAO",
      "type": "int",
      "description": "Tempo da da Operacao com OS"
    },
    "OS": {
      "column": "OS_SEQ_DB",
      "type": "int",
      "description": "Tempo da da Operacao com OS",
      "primaryKey": true
    },
    "CodigoOS": {
      "column": "",
      "type": "varchar",
      "parent": true,
      "description": "Codigo da OS do pai"
    },
    "FilialOS": {
      "column": "LOCAL",
      "type": "Varchar",
      "size": 100,
      "description": "Local da OS",
      "primaryKey": true,
      "required": true,
      "parent": true
    }
  }
}

Configuração OS x Técnico

Como é possível observar também na configuração você vai encontrar uma referência para a tabela de OS_SEQ_DB que é a referência para TECNICO, isso acontece porque primeiro é inserido/atualizado a OS (Com isso temos o seu SEQ_DB), depois é necessário passar isso na configuração para ser relacionado.

Para mais detalhes ver Configuração OS Servico.

{
  "alias": "Tecnicos",
  "table": "OS_TECNICO",
  "field": {
    "CodigoEmpresaTec": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial do Tecnico com OS",
      "primaryKey": true,
      "required" : true
    },
    "CodigoTecnico": {
      "column": "FUNCIONARIO_SEQ_DB",
      "type": "Varchar",
      "description": "Técnico da OS",
      "primaryKey": true,
      "fk": true,
      "tableOrigin": "FUNCIONARIO",
      "columnOrigin": "CRACHA",
      "required" : true
    },
    "OS": {
      "column": "OS_SEQ_DB",
      "type": "int",
      "description": "Tempo da da Tecnico com OS",
      "primaryKey": true
    },
    "DataAgendada": {
      "column": "DATA_ABERTURA",
      "type": "Varchar",
      "size": 100,
      "description": "Data de Abertura da OS",
      "required" : true
    },
    "FilialOS": {
      "column": "LOCAL",
      "type": "Varchar",
      "size": 100,
      "description": "Local da OS",
      "required" : true,
      "primaryKey" : true,
      "parent": true
    }
  }
}

Configuração Agenda Técnico

Nessa configuração existe "deleteExistData": true uma opção que deleta o que existe e cria um novo registro.

Nessa configuração já é diferente, usamos a OS_SEQ_DB para encontrar o registro da OS_TECNICO.

Para mais detalhes ver Configuração OS Servico.

{
  "alias": "AgendaTecnicos",
  "table": "OS_TECNICO_DETALHE",
  "deleteExistData": true, // Detalhe importante
  "field": {
    "CodigoEmpresaTec": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial do Tecnico com OS",
      "primaryKey": true,
      "required": true
    },
    "FilialOS": {
      "column": "LOCAL",
      "type": "Varchar",
      "size": 100,
      "description": "Local da OS",
      "primaryKey": true,
      "required" : true,
      "parent": true
    },
    "CodigoTecnico": {
      "column": "OS_TECNICO_SEQ_DB",
      "type": "Varchar",
      "description": "Codigo Tenico OS",
      "fk": true,
      "tableOrigin": "OS_TECNICO",
      "columnOrigin": "FUNCIONARIO_SEQ_DB",
      "fkComp": true,
      "multipleFK": {
        "CodigoTecnico": {
          "column": "FUNCIONARIO_SEQ_DB",
          "type": "Varchar",
          "description": "Codigo do Funcionario da OS x Tecnico",
          "fk": true,
          "tableOrigin": "FUNCIONARIO",
          "columnOrigin": "CRACHA",
          "required": true,
          "fieldsComp": {
            "CodigoEmpresaTec": {
		      "column": "FILIAL",
		      "type": "Varchar",
		      "size": 100,
		      "description": "Filial do Tecnico com OS"
		    }
          }
        }
      },
      "primaryKey": true,
      "fkComp": true,
      "required": true,
      "fieldsComp": {
        "OS": {
          "column": "OS_SEQ_DB", // SEQ_DB da OS inserido ou atualizado
          "type": "int",
          "description": "Tempo da da Tecnico com OS"
        },
        "CodigoEmpresaTec": {
          "column": "FILIAL",
          "type": "Varchar",
          "description": "Filial do Tecnico com OS",
          "parent": true
        },
        "FilialOS": {
          "column": "LOCAL",
          "type": "Varchar",
          "size": 100,
          "description": "Local da OS",
          "parent": true
        }
      }
    },
    "DataHoraInicio": {
      "column": "DATA_INICIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Data de Inicia de Agendamento da OS",
      "required": true
    },
    "DataHoraTermino": {
      "column": "DATA_FINAL",
      "type": "Varchar",
      "size": 100,
      "description": "Data de Inicia de Agendamento da OS",
      "required": true
    },
    "AgendaId": {
      "column": "SEQ_AGENDA",
      "type": "Varchar",
      "size": 12,
      "description": "Id da Agenda",
      "required": true
    }
  }
}

Configuração Peças

Como é possível observar também na configuração você vai encontrar uma referência para a tabela de OS_SEQ_DB que é a referência para PECA, isso acontece porque primeiro é inserido/atualizado a OS (Com isso temos o seu SEQ_DB), depois é necessário passar isso na configuração para ser relacionado.

Para mais detalhes ver Configuração OS Servico.

{
  "alias": "Pecas",
  "table": "OS_PECA",
  "field": {
    "CodigoEmpresaPec": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial do Peca com OS",
      "primaryKey": true,
      "required" : true
    },
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial do Peca com OS",
      "primaryKey": true,
      "required" : true
    },
    "CodigoPeca": {
      "column": "PECA_SEQ_DB",
      "type": "Varchar",
      "description": "Peca da OS",
      "primaryKey": true,
      "fk": true,
      "tableOrigin": "PECA",
      "columnOrigin": "CODIGO",
      "required" : true
    },
    "OS": {
      "column": "OS_SEQ_DB",
      "type": "int",
      "description": "OS_SEQ_DB de Peca com OS",
      "primaryKey": true
    },
    "Quantidade": {
      "column": "QTD_REQUISITADA",
      "type": "varchar",
      "description": "Quantidade da Peca com OS"
    },
    "FilialOS": {
      "column": "LOCAL",
      "type": "Varchar",
      "size": 100,
      "description": "Local da OS",
      "primaryKey": true,
      "required" : true,
      "parent": true
    }
  }
}

Sincronismo dos dados em uma única chamada

É possível enviar todos os dados da OS na própria OS sem precisar realizar um sincronismo de equipamento, funcionário, cliente antes, basicamente é enviar na chave um array com seus respectivos dados. Então no equipamento ao invés de mandar o código dele, peça poara ser enviado um array com os dados do equipamento, mesma coisa para o funcionário, cliente e etc.

Para isso também é necessário ter as configurações da API do Funcionário, Equipamento e Cliente como se fosse enviar eles separadamente.

Exemplo de json que é enviado para API

Nesse caso a chave para trazer o equipamento é ChassiEquipamento, porém nesse caso em especial e é um bom caso, o equipamento também precisa do Modelo e ele do Tipo, então criou-se uma dependência mais profunda. Equipamento -> Modelo -> Tipo.

Como comentei na introdução dessa funcionalidade o cliente também é enviado, como um array com todos os seus dados, então o sincronismo vai buscar o cliente, se existir faz a atualização, se não insere.

[
	{
		"Filial": "Brasília",
		"Local": "Brasília",
		"CodigoOS": "9991089",
		"DataAbertura": "2022-07-08 12:00:00",
		"Ativo": "1",
		"Observacao": "Teste de OS Dalton",
		"ChassiEquipamento": [
			{
				"ChassiEquipamento": "dasd10X",
				"CodigoEquipamento": "123321",
				"Ativo": 1,
				"Descricao": "Super Ultra Keyboard",
				"CodigoModeloEquipamento": [
					{
						"CodigoModeloEquipamento": "12344321",
						"Descricao": "Keyboard S-line",
						"CodigoTipoEquipamento": [
							{
								"CodigoTipoEquipamento": "789987",
								"Ativo": 1,
								"Descricao": "Split"
							}
						]
					}
				],
				"SeqCliente": "1234567890"
			}
		],
		"CodigoCliente": [
			{
				"CodigoCliente": "12131415",
				"Nome": "Simovers",
				"CpfCnpj": "0987654321",
				"Loja": "Simova Grande Arujá",
				"NroProprietario": "123456",
				"Idenficacao": "Street1",
				"NomeEndereco": "Avenue San Juan",
				"InscricaoEstadual": "CA",
				"Municipio": "San Jose dos Fields",
				"Bairro": "Garden of Mounts",
				"Telefone": "1234567890",
				"Celular": "0987654321",
				"CEP": "18878-555",
				"Email": "xpto@simova.com.br",
				"UF": "SP"
			}
		],
		"SeqStatusOs": "1",
		"SeqTipoOs": "1"
	}
]

Configuração de OS

{
    "alias": "OrdemServico",
    "table": "OS",
    "field":
    {
        "CodigoOS":
        {
            "column": "CODIGO",
            "type": "varchar",
            "size": 8,
            "description": "Codigo da OS",
            "primaryKey": true,
            "required": true
        },
        "Filial":
        {
            "column": "FILIAL",
            "type": "int",
            "size": 10,
            "description": "Filial da OS"
        },
        "Local":
        {
            "column": "LOCAL",
            "type": "int",
            "size": 10,
            "description": "Local da OS"
        },
        "Ativo":
        {
            "column": "ATIVO",
            "type": "int",
            "size": 10,
            "description": "OS Ativo"
        },
        "Observacao":
        {
            "column": "OBSERVACAO",
            "type": "text",
            "description": "Observacao da OS"
        },
        "DataAbertura":
        {
            "column": "DATA_ABERTURA",
            "type": "timestamp",
            "description": "Data de abertura da OS"
        },
        "SeqStatusOs":
        {
            "column": "STATUS_OS_SEQ_DB",
            "type": "Bigint",
            "size": 20,
            "description": "Sequencial do status da OS",
            "fk": true,
            "tableOrigin": "STATUS_OS",
            "columnOrigin": "SEQ_DB"
        },
        "CodigoCliente":
        {
            "column": "CLIENTE_SEQ_DB",
            "type": "varchar",
            "size": 20,
            "description": "Código do cliente",
            "fk": true,
            "tableOrigin": "CLIENTE",
            "columnOrigin": "CODIGO",
            "fkComp": true,
            "fieldsComp":
            {
                "Loja":
                {
                    "column": "LOJA",
                    "type": "Varchar",
                    "size": 100,
                    "description": "Código da Loja do Cliente"
                }
            }
        },
        "ChassiEquipamento":
        {
            "column": "EQUIPAMENTO_SEQ_DB",
            "type": "varchar",
            "size": 20,
            "description": "Sequencial do equipamento",
            "fk": true,
            "tableOrigin": "EQUIPAMENTO",
            "columnOrigin": "CHASSI"
        },
        "SeqTipoOs":
        {
            "column": "TIPO_OS_SEQ_DB",
            "type": "Bigint",
            "size": 20,
            "description": "Sequencial do tipo de OS",
            "fk": true,
            "tableOrigin": "TIPO_OS",
            "columnOrigin": "SEQ_DB"
        }
    }
}

Configuração de Cliente

{
  "alias": "Cliente",
  "table": "CLIENTE",
  "field": {
    "CodigoCliente" : {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 20,
      "description": "Código do Cliente/Endereço no DMS 999999EEE (Pessoa/Ender)",
      "primaryKey": true
    },
    "Nome": {
      "column": "DESCRICAO",
      "type": "Varchar",
      "size": 250,
      "description": "Nome do Cliente"
    },
    "CodigoEmpresa": {
       "column": "",
       "type": "Varchar",
       "filial": true,
       "description": "Filial NFS"
    },
    "CpfCnpj": {
      "column": "CNPJCPF",
      "type": "Varchar",
      "size": 100,
      "description": "Cpf ou Cnpj do Cliente"
    },
    "Loja": {
      "column": "LOJA",
      "type": "Varchar",
      "size": 20,
      "description": "Loja do Cliente"
    },
    "NroProprietario": {
      "column": "NRO_PROPRIETARIO",
      "type": "Varchar",
      "size": 50,
      "description": "Nro proprietario do Cliente"
    },
    "Identificacao": {
      "column": "IDENTIFICACAO",
      "type": "Varchar",
      "size": 50,
      "description": "Identificacao do Cliente"
    },
    "NomeEndereco": {
      "column": "ENDERECO",
      "type": "Varchar",
      "size": 100,
      "description": "Endereço do Cliente"
    },
    "InscricaoEstadual": {
      "column": "INSCRICAO_ESTADUAL",
      "type": "Varchar",
      "size": 100,
      "description": "Inscricao estadual do Cliente"
    },
    "Municipio": {
      "column": "MUNICIPIO",
      "type": "Varchar",
      "size": 250,
      "description": "Municipio do Cliente"
    },
    "Bairro": {
      "column": "BAIRRO",
      "type": "Varchar",
      "size": 30,
      "description": "Bairro do Cliente"
    },
    "Telefone": {
      "column": "TELEFONE",
      "type": "Varchar",
      "size": 100,
      "description": "Telefone do Cliente"
    },
    "Celular": {
      "column": "CELULAR",
      "type": "Varchar",
      "size": 100,
      "description": "Celular do Cliente"
    },
    "CEP": {
      "column": "CEP",
      "type": "Varchar",
      "size": 100,
      "description": "CEP do Cliente"
    },
    "Email": {
      "column": "E_MAIL",
      "type": "Varchar",
      "size": 100,
      "description": "Email do Cliente"
    },
    "UF": {
      "column": "ESTADO_SEQ_DB",
      "type": "Varchar",
      "size": 30,
      "description": "Numero do Cliente",
      "fk": true,
      "tableOrigin": "ESTADO",
      "columnOrigin": "SIGLA"
    }
  }
}

Configuração de Equipamento

{  
  "alias": "Equipamento",
  "table": "EQUIPAMENTO",
  "field": {
    "ChassiEquipamento": {
      "column": "CHASSI",
      "type": "varchar",
      "size": 20,
      "description": "Chassi do equipamento",
      "primaryKey": true,
      "required": true
    },
    "CodigoEquipamento": {
      "column": "CODIGO",
      "type": "varchar",
      "size": 250,
      "description": "Codigo do equipamento"
    },
    "Ativo": {
      "column": "ATIVO",
      "type": "int",
      "size": 10,
      "description": "Modelo de equipamento Ativo"
    },
    "Descricao": {
      "column": "DESCRICAO",
      "type": "varchar",
      "size": 250,
      "description": "Descricao do modelo do equipamento"
    },
    "CodigoModeloEquipamento": {
      "column": "MODELO_EQUIPAMENTO_SEQ_DB",
      "type": "varchar",
      "size": 20,
      "description": "Sequencial do modelo do equipamento",
      "fk": true,
      "tableOrigin": "MODELO_EQUIPAMENTO",
      "columnOrigin": "CODIGO"
    },
    "SeqCliente": {
      "column": "CLIENTE_SEQ_DB",
      "type": "varchar",
      "size": 20,
      "description": "Sequencial do cliente",
      "fk": true,
      "tableOrigin": "CLIENTE",
      "columnOrigin": "CODIGO"
    }
  }
}

Configuração de Modelo do Equipamento

{
  "alias": "ModeloEquipamento",
  "table": "MODELO_EQUIPAMENTO",
  "field": {
    "CodigoModeloEquipamento": {
      "column": "CODIGO",
      "type": "varchar",
      "size": 50,
      "description": "Codigo do modelo do equipamento",
      "primaryKey": true,
      "required": true
    },
    "Ativo": {
      "column": "ATIVO",
      "type": "int",
      "size": 10,
      "description": "Modelo de equipamento Ativo"
    },
    "Descricao": {
      "column": "DESCRICAO",
      "type": "varchar",
      "size": 250,
      "description": "Descricao do modelo do equipamento"
    },
    "CodigoTipoEquipamento": {
      "column": "TIPO_EQUIPAMENTO_SEQ_DB",
      "type": "Bigint",
      "size": 20,
      "description": "Sequencial do tipo do equipamento",
      "fk": true,
      "tableOrigin": "TIPO_EQUIPAMENTO",
      "columnOrigin": "CODIGO"
    }
  }
}

Configuração do Tipo do Modelo do Equipamento

{
  "alias": "TipoEquipamento",
  "table": "TIPO_EQUIPAMENTO",
  "field": {
    "CodigoTipoEquipamento": {
      "column": "CODIGO",
      "type": "varchar",
      "size": 50,
      "description": "Codigo do tipo de equipamento",
      "primaryKey": true,
      "required": true
    },
    "Ativo": {
      "column": "ATIVO",
      "type": "int",
      "size": 10,
      "description": "Tipo de equipamento Ativo"
    },
    "Descricao": {
      "column": "DESCRICAO",
      "type": "varchar",
      "size": 250,
      "description": "Descricao do tipo de equipamento"
    }
  }
}

Exemplo de OS_TENICO_DETALHE MultipleFK [Caso Especial]

Na OS_TECNICO_DETALHE as FK são:

  • OS_TENICO, porém o que compõe essa chave é CodigoTecnico (FUNCIONARIO_SEQ_DB) e OS
  • OS_SEQ_DB valor da OS que foi inserido, lembrando que quando é lovn primeiro insere os dados sem relacionamento e depois o seu relacionamento.
  • FILIAL filial é enviada no json se sincronismo e o LOCAL é obtido a partir do pai.

Então o fluxo é o seguinte, se não existe OS insere um nova e se existe atualiza, daí tem o valor da OS no NFS, depois disso é feito a relação entre OS_TECNICO_DETALHE, onde já existe o valor da OS e primeiro é encontrado o SEQ_DB da OS_TECNICO e no fim insere OS_TECNICO_DETALHE.

Uma particulariedade desse caso é o seguinte, esse exemplo de configuração foi feito para o MDS e eles não possuem um controle de ativo e desativo da Agenda então sempre é excluído todos os dados e enviado, para isso é usada a opção "deleteExistData": true, deleta e insere novamente.

{
  "alias": "AgendaTecnicos",
  "table": "OS_TECNICO_DETALHE",
  "deleteExistData": true,
  "field": {
    "CodigoEmpresaTec": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial do Tecnico com OS",
      "primaryKey": true,
      "required": true
    },
    "CodigoTecnico": {
      "column": "OS_TECNICO_SEQ_DB",
      "type": "Varchar",
      "description": "Codigo Tenico OS",
      "fk": true,
      "tableOrigin": "OS_TECNICO",
      "columnOrigin": "FUNCIONARIO_SEQ_DB",
      "fkComp": true,
      "multipleFK": { // Exemplo MultipleFK
        "CodigoTecnico": {
          "column": "FUNCIONARIO_SEQ_DB",
          "type": "Varchar",
          "description": "Codigo do Funcionario da OS x Tecnico",
          "fk": true,
          "tableOrigin": "FUNCIONARIO",
          "columnOrigin": "CRACHA",
          "required": true,
          "fieldsComp": {
            "OS": {
              "column": "OS_SEQ_DB",
              "type": "int",
              "description": "Tempo da da Tecnico com OS"
            }
          }
        }
      },
      "primaryKey": true,
      "fkComp": true,
      "required": true,
      "fieldsComp": {
        "OS": {
          "column": "OS_SEQ_DB",
          "type": "int",
          "description": "Tempo da da Tecnico com OS"
        },
        "CodigoEmpresaTec": {
          "column": "FILIAL",
          "type": "Varchar",
          "description": "Filial do Tecnico com OS"
        }
      }
    },
    "DataHoraInicio": {
      "column": "DATA_INICIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Data de Inicia de Agendamento da OS",
      "required": true
    },
    "DataHoraTermino": {
      "column": "DATA_FINAL",
      "type": "Varchar",
      "size": 100,
      "description": "Data de Inicia de Agendamento da OS",
      "required": true
    },
    "AgendaId": {
      "column": "SEQ_AGENDA",
      "type": "Varchar",
      "size": 12,
      "description": "Id da Agenda",
      "required": true
    }
  }
}

Exemplo do uso da opção parent

Acontece bastante em estrutura que são interligadas, então é enviado num sincronismo de OS o seu relacionamento com serviço, e ainda mais o serviço se não existe é adicionado ou atualizado e daí criado o relacionamento com OS x Serviço é criado. Para isso foi criada a opção parent.

No caso no Sincronismo de OS tem uma LOVN com Serviço, com isso para o serviço não ficar sem Local o mesmo é obtido a partir da OS então é usado

 "FilialOS": {
    "column": "LOCAL",
    "type": "Varchar",
    "size": 100,
    "description": "Local da OS",
    "primaryKey": true,
    "required" : true,
    "parent" : true
  }

Lembrando que se não haver o campo de FilialOS no json o mesmo não será usado.

Exemplo completo:

{
  "alias": "OperacaoServico",
  "table": "SERVICO",
  "field": {
    "CodigoEmpresa": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "CodigoEmpresaOper": {
      "column": "FILIAL",
      "type": "Varchar",
      "size": 100,
      "description": "Filial da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "CodigoLinhaOper": {
      "column": "CODIGO_LINHA",
      "type": "Varchar",
      "size": 100,
      "description": "Codigo Linha da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "CodigoOperacao": {
      "column": "CODIGO",
      "type": "Varchar",
      "size": 100,
      "description": "CodigoOperacao da Operacao",
      "primaryKey": true,
      "required" : true
    },
    "Descricao": {
      "column": "DESCRICAO",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao da Operacao",
      "required" : true
    },
    "DescricaoCompl": {
      "column": "DESCRICAO_COMPLETA",
      "type": "Varchar",
      "size": 100,
      "description": "Descricao Completa da Operacao"
    },
    "TipoOperacao": {
      "column": "TIPO_OPERCAO",
      "type": "Varchar",
      "size": 2,
      "description": "Tipo da Operacao",
      "required" : true
    },
    "Deslocamento": {
      "column": "FLAG_DESLOCAMENTO",
      "type": "Varchar",
      "size": 2,
      "description": "Flag indica Deslocamento"
    },
    "SeqServico": {
      "column": "SEQ_OPERACAO",
      "type": "Varchar",
      "size": 100,
      "description": "SeqServico da Operacao com OS",
      "primaryKey": true,
      "required" : true
    },
     "DescricaoOperacao": {
      "column": "DESCRICAO",
      "type": "Varchar",
      "size": 100,
      "description": "SeqServico da Operacao com OS",
      "required" : true
    },
    "TempoOperacao": {
      "column": "TEMPO_OPERACAO",
      "type": "int",
      "description": "Tempo da da Operacao com OS"
    },
    "CodigoOS": {
      "column": "CODIGO_OS",
      "type": "varchar",
      "parent" : true,
      "primaryKey": true,
      "description": "Codigo da OS do pai"
    },
    "CodigoOS": {
      "column": "CODIGO_OS",
      "type": "varchar",
      "parent" : true,
      "primaryKey": true,
      "description": "Codigo da OS do pai"
    },
	    "FilialOS": {
	      "column": "LOCAL",
	      "type": "Varchar",
	      "size": 100,
	      "description": "Local da OS",
	      "primaryKey": true,
	      "required" : true,
	      "parent" : true
	    }
  }
}

Sincronismo de Cliente com CURL

curl --request POST \
  --url http://smartosapi.h.simova.cloud/nfs/api/v1/sync/cliente \
  --header 'authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzbWFydG9zYXBpLmguc2ltb3ZhLmNsb3VkIiwibmFtZSI6ImRhbHRvbiIsImVtYWlsIjoiZGFsdG9uQHNpbW92YS5jb20uYnIiLCJmaWxpYWwiOiJGSUxJQUwgMSIsImxvY2FsIjpudWxsLCJleHAiOiIyMDIwLTAxLTAzIDE2OjM4OjI1In0=.5HyjR60die0HkQ6OWDF93os3gwWk60KojwWnlGiw5ds=' \
  --header 'content-type: application/json' \
  --cookie PHPSESSID=1ss7cakdkkct1714321be413n2 \
  --data '[
	{
		"CodigoEmpresa": "FILIAL 1",
		"CodigoCliente": "008432008",
		"Nome": "34 GAS LTDA ",
		"NomeEndereco": "ROD BR 386 ",
		"Bairro": "JD PRIMAVERA ",
		"Cidade": "Sao Jose",
		"UF": "SP"
	}
]'

Retorno

[
  {
    "type": "success",
    "msg": "Cadastro de Cliente inserido com sucesso",
    "field": "",
    "id": "12693"
  }
]

Erros Frequentes de Sincronismo

Este item já existe! Você pode editá-lo ou inserir um novo

Quando aparecer a seguinte mensagem:

[
  {
    "type": "error",
    "msg": "Erro ao inserir dados de NOME_TABELA : Este item já existe! Você pode editá-lo ou inserir um novo",
    "field": "",
    "id": ""
  }
]

Provavelmente foi tentado inserir um novo registro e ocorreu esse erro, a PRIMEIRA coisa a fazer é OLHAR para ver se não tem ERRO no log, filtre pelo DOMAIN que está trabalhando e level igual a ERROR. A maioria dos casos vai ser onde um registro foi marcado como deleted ou ativo igual a 0, porém, existe um CONSTRAINT no banco de dados que impede de inserir um novo registro, então a API tentou inserir um novo registro, mas no caso o MYSQL não permitiu a nova inserção por violar uma constraint definida no banco de dados. Para resolver isso cabe o Dev avaliar se é melhor mudar algo na API ou excluir a constraint do banco de dados.

Os erros no log quando é de constraint geralmente são:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry VALORES_CONSTRAINT for key NOME_CONSTRAINT

Exemplo:

sql = INSERT INTO APP_PLANEJAMENTO_VIAGEM ( SEQ_DB,  EMPRESA,  FILIAL,  LOCAL,  SOURCE,  UPD_DH,  INS_DH,  ID,  NUMERO_OR,  DATA,  DATA_ENVIO_INTERFACE,  SERIE_OR,  CENTRO,  MAQUINA,  VIAGENS,  POSICAO_DEPOSITO,  MAQUINA_SOLICITANTE,  NUMERO_DEPOSITO,  TIPO_MOVIMENTO,  TIPO_DEPOSITO,  ROTAS,  POSICAO_ORIGEM,  AGENTE_FRETE,  MATERIAL,  DEPOSITO,  DESC_ENVIO_INTERFACE,  FLAG_OR_MANUAL,  FLAG_CONTINGENCIA,  CODIGO_INTEGRACAO,  PEDIDO,  PROC_ST,  PROC_DH,  PROC_DESC,  RO,  ATIVO,  DELETED,  INS_USUARIO_SEQ_DB,  UPD_USUARIO_SEQ_DB) VALUES (0,1,3,3,NULL,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP, (SELECT (IFNULL(MAX(T.ID), 0) + 1) FROM APP_PLANEJAMENTO_VIAGEM T  WHERE T.EMPRESA = 1  AND T.FILIAL IN (3, 9999)  AND T.LOCAL IN (3, 9999) ),'0000000','2023-05-16',null,'A','1369','ECM7A87','1','','','MA2','SC','I2A',NULL,'304-11B001','0000710664','000000000019000088','MA2P','',0,'0','06','SN','0',null,'','0',1,0,47,NULL); getMessage = SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2023-05-16 00:00:00-ECM7A87-1369-1' for key 'app_planejamento_viagem_un'