Notas sobre API ELK
Notes about API-ELK
Documentação dos campos API-ELK
January 29, 2024 4:27 PM
**ocurrence.time_difference_minutes**
Campo criado para cada status de ocorrência. Essa criação ocorre ao verificar se a data da ocorrência (ocurrence.occurrence_date) é válida. Se for, a função calcula a diferença de tempo em minutos entre a data de criação (ocurrence.created_at) e a data da ocorrência. O resultado desse cálculo é então atribuído ao campo time_difference_minutes.
Obs: A validação citada inclui verificar se occurrenceDate é uma data válida, se seu ano é maior ou igual a 2020 (bug ano 0202) e se é menor ou igual ao ano atual mais dois anos.
occurrence.status_latency_group
Campo criado para agrupamento de latência de status para cada ocorrência.
Lista de grupos de latência de status
const STATUS_LATENCY_STATUS = {
["Disponível para retirada"]: [19, 118],
["Em trânsito"]: [123, 124, 15, 2, 16, 23, 30, 37, 17, 20, 31, 5, 34, 102, 103, 105, 106, 113, 121, 120, 122],
["Entregue"]: [3],
["Problemas com a carga"]: [21, 18, 26, 27, 28, 40, 98, 107, 110, 111, 112, 114, 115, 116, 117, 119],
["Problemas com endereço"]: [97, 42, 43],
["Problemas na entrega"]: [29, 32, 38, 6, 36, 35, 22, 41, 44, 45, 11, 101, 108, 109],
["Processo de devolução / indenização"]: [24, 25, 33, 7, 8, 13, 9, 14, 12, 104],
}
**last_occurrence.time_difference_minutes**
Vide **ocurrence.time_difference_minutes**
Campo criado para o última status de ocorrência.
**pre_processed.receiver_region**
Região do Destinatário
**pre_processed.shipper_region**
Região do Embarcador
**pre_processed.dispatcher_region**
Região do Expedidor
pre_processed.delay_reason
Determina a razão de atraso de um frete. Caso o campo freight.delivered_on_time seja igual a **3** chama uma função para determinar a razão do atraso com base nas ocorrências associadas ao frete.
Por exemplo, se alguma ocorrência conter códigos associados a problemas com endereço, a razão é definida como "Problemas com endereço". O mesmo padrão se aplica para outras razões, como problemas com a carga, problemas na entrega, atraso na entrega, não retirado, devolução/indenização, etc.
Lista de motivos de atraso
const REASONS_FOR_DELAY = {
["Problemas com endereço"]: [97, 42, 43],
["Problemas com a carga"]: ["ea", 21, 18, 26, 27, 28, 40, 107, 110, 111, 112, 114, 115, 116, 117, 119, 98],
["Problemas na entrega"]: [29, 32, 38, 6, 36, 35, 22, 41, 44, 45, 11, 101, 108, 109],
["Atraso na entrega"]: [123, 124, 15, 2, 16, 23, 30, 37, 17, 20, 31, 5, 34, 3, 102, 103, 105, 106, 113, 121, 120, 122],
["Não retirado"]: [19, 118],
["Devolução / indenização"]: [24, 25, 33, 7, 8, 13, 9, 14, 12, 104],
["Atraso na coleta"]: [1],
};
pre_processed.insuccess_reason
Determina a razão de insucesso em uma entrega de um frete baseado no estado de entrega. Caso o campo freight.delivered_on_time seja **1** ou **2** a função retorna null. Caso contrário, verifica os códigos de ocorrência em busca de razões associadas ao insucesso.
Por exemplo, se alguma ocorrência contiver códigos associados a avaria, a razão do insucesso é definida como "Avaria". O mesmo padrão se aplica para outras razões, como extravio, não retirado, problemas com endereço, problemas na entrega, devolução/indenização, sinistro/roubo, etc.
Lista de motivos de insucesso
const INSUCCESS_REASONS = {
["Avaria"]: [28, 98, 114],
["Extravio"]: [27, 40, 115, 117],
["Não retirado"]: [19, 118],
["Problemas com endereço"]: [97, 42, 43],
["Problemas na entrega"]: [29, 32, 38, 6, 36, 35, 22, 41, 44, 45, 11, 101, 108, 109],
["Devolução / indenização"]: [24, 25, 33, 7, 8, 13, 14, 12, 104, 9],
["Sinistro / Roubo"]: [18]
}
**pre_processed.collection_date**
Retorna a data de coleta associada a um frete. Caso seja o status com código 15 (coletado) obtém a data de coleta a partir desse status. Caso contrário, se não houver um status de coleta e o frete tiver mais de duas ocorrências de status, a função retorna a data de contratação freight.hiring_date acrescida de um (**1)** dia.
Se não houver um status de coleta e o frete não tiver mais de duas ocorrências, ou se não houver uma data de coleta válida no status, a função retorna null. Caso contrário, ela retorna a data de coleta.
**pre_processed.expected_delivery_days**
Diferença em dias úteis entre a data de contratação (freight.hiring_date) e a data de estimativa de entrega (freight.expected_delivery_date).
Dias úteis: não inclui sábados, domingos e feriados. Caso a diferença em dias for maior que **365** retorna zero (**0**).
**pre_processed.lead_time_days**
Diferença em dias úteis entre a data de contratação (freight.hiring_date) e a data de entrega (freight.delivery_date).
**pre_processed.transit_time_days**
Diferença em dias úteis entre a data de coleta (**collection_date**) e a data de entrega (freight.delivery_date) . Data de coleta conforme retornado do campo citado acima**pre_processed.collection_date**.
pre_processed.expected_transit_time_days
Diferença em dias úteis entre a data de coleta (**collection_date**) e a data de estimativa de entrega (freight.expected_delivery_date).
pre_processed.total_revenue
Calcula a receita total associada a um frete. Percorre as faturas (NFes) do frete e acumula os valores das faturas não deletadas. Se a soma dos valores das faturas não deletadas for diferente de zero, a função retorna essa soma. Caso contrário, ela retorna o valor total dos volumes do frete.
pre_processed.max_real_weight
Retorna o peso máximo entre o peso real (**freight.real_weight)** e cubado (freight.cubed_weight).
**pre_processed.contingency_amount_ctes**
Verifica se amount_value_ctes é igual a zero. Se for, significa que não há valores nos CTes. Nesse caso, a variável contingency_amount_ctes recebe o preço original da oferta contratada (freight.hired_offer.original_price). Se houver valores nos CTes, contingency_amount_ctes recebe o total calculado em amount_value_ctes. Em resumo, esse campo lida com a contingência, usando o preço original da oferta se não houver valores nos CTes.
Essa solução foi elaborada para casos onde a transportadora não enviou o CTe do respectivo frete - para obtermos o cálculo da margem de frete.
**pre_processed.delivery_in_progress_status**
Retorna o status atual de um frete em andamento com base na ultima ocorrência registada. Recebe o código da última ocorrência (lastOccurrence) associada a um frete e determina o status atual do frete em andamento com base nesse código. Ela verifica em qual categoria de status se enquadra.
Lista de status de frete em andamento
const DELIVERY_IN_PROGRESS_STATUS = {
["Aguardando coleta / postagem"]: [1],
["Cotação em aberto"]: ["ea"],
["Não retirado"]: [19, 118],
["Em trânsito"]: [123, 124, 15, 2, 16, 23, 30, 37, 17, 20, 31, 5, 34, 102, 103, 105, 106, 113, 121, 120, 122],
["Problemas com a carga"]: [21, 18, 26, 27, 28, 40, 98, 107, 110, 111, 112, 114, 115, 116, 117, 119],
["Problemas com endereço"]: [97, 42, 43],
["Problemas na entrega"]: [29, 32, 38, 6, 36, 35, 22, 41, 44, 45, 11, 101, 108, 109],
["Devolução / indenização"]: [24, 25, 7, 8, 13, 14, 12, 104],
};
**pre_processed.business_to_consumer_freight**
verifica se o destinatário do frete é pessoa física, baseado na quantidade de dígitos do campo **freight.receiver.cnpj_cpf**, ou seja é uma Indicação se um frete é do tipo “business-to-consumer” conforme documento (CPF ou CNPJ) do destinatário
**pre_processed.has_occurrence_with_delay**
Retorna true se data prevista de entrega (freight.expected_delivery_date) for maior que a data atual e verificando se alguma das ocorrências tem uma diferença maior que 2 dias entre suas datas.
Resumindo, verifica se há um atraso de mais de **2** dias úteis entre as ocorrências do frete com base nas datas de criação das ocorrências.