umarley / seteAPI

BSD 3-Clause "New" or "Revised" License
2 stars 0 forks source link

Criação do endpoint de custo GET `/custo/{cod_municipio}/{id_rota}` #44

Closed marcosroriz closed 2 years ago

marcosroriz commented 2 years ago

Template da resposta:

{
    "result": "true caso calculou o custo/false caso contário",
    "data": {
        "custo": "valor real (ex: 10413.11)",
        "params": [
            {
                "codigo_parametro": "NUM_MOTORISTAS",
                "modulo": "Rotas",
                "result": true,
                "valor": 1
            },
            {
                "codigo_parametro": "NUM_VEICULOS",
                "modulo": "Rotas",
                "result": false,
                "valor": "Parâmetro não informado"
            },
            {
                "codigo_parametro": "SALARIO_MEDIO_MOTORISTA",
                "modulo": "Motoristas",
                "result": true,
                "valor": 1401.99
            }
        ]
    }
}

Caso não seja possível calcular a rota, algum parâmetro está faltando, a resposta deverá retornar result: false. Caso contrário, deverá retornar true

Segue os parâmetros a serem considerados: Nome da Variável Módulo Origem
NUM_MOTORISTAS Rotas Tabela sete_rota_dirigida_por_motorista.
NUM_VEICULOS Rotas Tabela sete_rota_possui_veiculo.
SALARIO_MEDIO_MOTORISTA Motoristas Para cada motorista em sete_motoristas (vindo de sete_rota_dirigida_por_motorista) pegar o campo salario e calcular a média.
Resultado é a média.
PERC_ENCARGO_SOCIAIS Parâmetros Tabela sete_parametros.
PERC_CFT_CUSTO_MANUTENCAO_RODO Parâmetros Tabela sete_parametros (só necessário se a ROTA for rodoviária (tipo == 1)).
PERC_CFT_CUSTO_MANUTENCAO_AQUA Parâmetros Tabela sete_parametros (só necessário se a ROTA for aquaviária (tipo == 2)).
NUM_MONITORES Monitores Tabela sete_rota_atendida_por_monitor.
SALARIO_MEDIO_MONITORES Monitores Para cada motorista em sete_monitores (vindo de sete_rota_atendida_por_monitor) pegar o campo salario e calcular a média.
Resultado é a média.
aplicável se a ROTA possuir monitores.
IPVA_FROTA Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo ipva.
Só necessário se a ROTA for rodoviária (tipo == 1).
Resultado é o somatório.
DPVAT_FROTA Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo dpvat.
Só necessário se a ROTA for rodoviária (tipo == 1).
Resultado é o somatório.
SRC_FROTA Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo seguro_anual.
Resultado é o somatório.
VIDA_UTIL_RODO Parâmetros Tabela sete_parametros (só necessário se a ROTA for rodoviária (tipo == 1)).
VIDA_UTIL_AQUA Parâmetros Tabela sete_parametros (só necessário se a ROTA for aquaviária (tipo == 2)).
PERC_RESIDUAL_RODO Parâmetros Tabela sete_parametros (só necessário se a ROTA for rodoviária (tipo == 1)).
PERC_RESIDUAL_AQUA Parâmetros Tabela sete_parametros (só necessário se a ROTA for aquaviária (tipo == 2)).
PRECO_MEDIO_VEICULOS Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo preco.
Resultado é a média.
PERC_TRC Parâmetros Tabela sete_parametros.
KM_MENSAL_ROTA Rotas Tabela sete_rotas, campo km.
Resultado é a somatória por 20 dias (x20).
CFT_CONSUMO_COMBUSTIVEL Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo consumo (km/l).
Resultado é a média.
PRECO_MEDIO_COMBUSTIVEIS Parâmetros Tabela sete_parametros.
CFT_CONSUMO_OLEO_LUBRIFICANTE Parâmetros Tabela sete_parametros.
PRECO_MEDIO_COMBUSTIVEIS Parâmetros Tabela sete_parametros.
PRECO_MEDIO_PNEUS Parâmetros Tabela sete_parametros.
NÃO ESTÁ ATUALMENTE NA TABELA PARÂMETROS.
Só necessário se a ROTA for rodoviária (tipo == 1)
NUMERO_PNEUS Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo numero_de_pneus.
Resultado é a soma.
Só necessário se a ROTA for rodoviária (tipo == 1)
PRECO_MEDIO_COMBUSTIVEIS Parâmetros Tabela sete_parametros.
PRECO_MEDIO_RECAPAGEM Parâmetros Tabela sete_parametros. NÃO ESTÁ ATUALMENTE NA TABELA PARÂMETROS
NUM_RECAPAGEM Parâmetros Tabela sete_parametros.
VIDA_UTIL_PNEU Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo vida_util_do_pneu.
Resultado é a soma.
CFT_CONSUMO_PECAS Parâmetros Tabela sete_parametros.
PRECO_MEDIO_VEICULOS Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo preco.
Resultado é a média.
PERC_SEGURO_AQUA Parâmetros Tabela sete_parametros.
Só necessário se a ROTA for aquaviária (tipo == 2)
POTENCIA_MOTOR Frota Para cada veículo em sete_veiculos (vindo de sete_rota_possui_veiculo) pegar o campo potencia_do_motor.
Só necessário se a ROTA for aquaviária (tipo == 2)
TEMPO_ROTA Rotas Tabela sete_rotas, campo tempo.
Só necessário se a ROTA for aquaviária (tipo == 2)
DENSIDADE_COMBUSTIVEL Parâmetros Tabela sete_parametros.
Só necessário se a ROTA for aquaviária (tipo == 2)
CONSUMO_LUBRIFICANTE Parâmetros Tabela sete_parametros.
Só necessário se a ROTA for aquaviária (tipo == 2)
DENSIDADE_LUBRIFICANTE Parâmetros Tabela sete_parametros.
Só necessário se a ROTA for aquaviária (tipo == 2)
PRECO_MEDIO_LUBRIFICANTE Parâmetros Tabela sete_parametros.
Só necessário se a ROTA for aquaviária (tipo == 2)
PERC_MANUTENCAO_EMBARCACAO Parâmetros Tabela sete_parametros.
Só necessário se a ROTA for aquaviária (tipo == 2)
NUM_ALUNOS Rotas Tabela sete_rota_atende_aluno.
marcosroriz commented 2 years ago
Algoritmo Principal

Rota <- Consulta para pegar dados da rota via ID (param vem na url)
TipoDaRota <- Rota.Tipo

SE TipoDaRota == 1
    RETURN CALCULO_ROTA_RODOVIARIA(cod_municipio, id_rota, rota)
SENÃO SE TipoDaRota == 2
    RETURN CALCULO_ROTA_AQUAVIARIA(cod_municipio, id_rota, rota)
SENÃO
    RETURN 400
FIMSE

----------------------------------------

CALCULO_ROTA_RODOVIARIA(cod_municipio, id_rota, rota)

CUSTO_VALIDO <- TRUE
PARAMS <- []

// Pegar os Motoristas 
Motoristas <- Pegar motoristas da tabela sete_rota_dirigida_por_motorista

SE Motoristas for vazio
    NUM_MOTORISTAS É INVALIDO (ADD PARAMS)
    SALARIO_MEDIO_MOTORISTA É INVALIDO (ADD PARAMS)
SENÃO
    NUM_MOTORISTAS <- LENGTH(Motoristas) (ADD PARAMS)
    SALARIO_MEDIO_MOTORISTA <- 0

    SALARIO_MEDIO_MOTORISTA_VALIDO <- TRUE

    PARA CADA motorista em Motoristas
        M <- Pegar motorista
        SE M.SALARIO vazio ENTÃO
            SALARIO_MEDIO_MOTORISTA_VALIDO FALSE
        SENÃO
            SALARIO_MEDIO_MOTORISTA <- SALARIO_MEDIO_MOTORISTA + M.SALARIO
        FIMSE

    SE SALARIO_MEDIO_MOTORISTA_VALIDO == TRUE
        SALARIO_MEDIO_MOTORISTA <- SALARIO_MEDIO_MOTORISTA / NUM_MOTORISTAS
        (ADD PARAMS)
    SENÃO
        SALARIO_MEDIO_MOTORISTA É INVÁLIDO
        (ADD PARAMS)

// Lidar com os monitores
Monitores <- ANÁLOGO AO dos motoristas
// Detalhe, caso não tenha, não inválida.

// Lida com os parâmetros
Parametros <- Pegar parâmetros do município (cod_cidade)

PERC_ENCARGO_SOCIAIS
PERC_CFT_CUSTO_MANUTENCAO_RODO
VIDA_UTIL_RODO
PERC_RESIDUAL_RODO
PERC_TRC
PRECO_MEDIO_COMBUSTIVEIS
CFT_CONSUMO_OLEO_LUBRIFICANTE
PRECO_MEDIO_COMBUSTIVEIS
PRECO_MEDIO_PNEUS
PRECO_MEDIO_RECAPAGEM
CFT_CONSUMO_PECAS   

// Lidar com os veículos
Veiculos <- Pegar veiculos da tabela sete_rota_possui_veiculo

SE Veiculos for vazio 
    NUM_VEICULOS É INVALIDO (ADD PARAMS)
    PRECO_MEDIO_VEICULOS É INVÁLIDO (ADD PARAMS)
    IPVA_FROTA É INVÁLIDO (ADD PARAMS)
    DPVAT_FROTA É INVÁLIDO (ADD PARAMS)
    SRC_FROTA É INVÁLIDO (ADD PARAMS)
    CFT_CONSUMO_COMBUSTIVEL É INVÁLIDO (ADD PARAMS)
    NUMERO_PNEUS É INVÁLIDO (ADD PARAMS)
    VIDA_UTIL_PNEU É INVÁLIDO (ADD PARAMS)
SENÃO 
    NUM_VEICULOS <- LENGTH(Veiculos) (ADD PARAMS)

    IPVA_FROTA <- 0
    DPVAT_FROTA <- 0
    SRC_FROTA <- 0
    PRECO_TOTAL_VEICULOS <- 0
    PRECO_MEDIO_VEICULOS <- 0
    CFT_CONSUMO_COMBUSTIVEL_TOTAL <- 0
    CFT_CONSUMO_COMBUSTIVEL <- 0
    NUMERO_PNEUS <- 0
    VIDA_UTIL_PNEU <- 0

    IPVA_FROTA_VALIDO <- TRUE
    DPVAT_FROTA_VALIDO <- TRUE
    SRC_FROTA_VALIDO <- TRUE
    PRECO_MEDIO_VEICULOS_VALIDO <- TRUE
    CFT_CONSUMO_COMBUSTIVEL_VALIDO <- TRUE
    NUMERO_PNEUS_VALIDO <- TRUE
    VIDA_UTIL_PNEU_VALIDO <- TRUE

    PARA CADA veiculo em Veiculos
        V <- Pegar veiculo
        SE V.IPVA vazio ENTÃO
            IPVA_FROTA_VALIDO <- FALSE
        SENÃO
            IPVA_FROTA <- IPVA_FROTA + V.IPVA

        SE V.DPVAT vazio ENTÃO
            DPVAT_FROTA_VALIDO <- FALSE
        SENÃO
            DPVAT_FROTA <- DPVAT_FROTA + V.DPVAT

        SE V.SRC vazio ENTÃO
            SRC_FROTA_VALIDO <- FALSE
        SENÃO
            SRC_FROTA <- SRC_FROTA + V.SRC

        SE V.PRECO vazio ENTÃO
            PRECO_MEDIO_VEICULOS_VALIDO <- FALSE
        SENÃO
            PRECO_TOTAL_VEICULOS <- PRECO_TOTAL_VEICULOS + V.PRECO

        SE V.CFT_CONSUMO_COMBUSTIVEL vazio ENTÃO
            CFT_CONSUMO_COMBUSTIVEL_VALIDO <- FALSE
        SENÃO
            CFT_CONSUMO_COMBUSTIVEL_TOTAL <- CFT_CONSUMO_COMBUSTIVEL_TOTAL + V.CFT_CONSUMO_COMBUSTIVEL
            km/l
            9 km ----- 1l
            1 km ----- x
            9x = 1
            x = 1/9

        SE V.NUMERO_PNEUS vazio ENTÃO
            NUMERO_PNEUS_VALIDO <- FALSE
        SENÃO
            NUMERO_PNEUS <- NUMERO_PNEUS + V.NUMERO_PNEUS

        SE V.VIDA_UTIL_PNEU vazio ENTÃO
            VIDA_UTIL_PNEU_VALIDO <- FALSE
        SENÃO
            VIDA_UTIL_PNEU <- VIDA_UTIL_PNEU + V.VIDA_UTIL_PNEU
    FIMPARA

    SE IPVA_FROTA_VALIDO == TRUE
        IPVA_FROTA (ADD PARAMS)
    SENÃO 
        IPVA_FROTA É INVÁLIDO 
        (ADD PARAMS)

    SE DPVAT_FROTA_VALIDO == TRUE
        DPVAT_FROTA (ADD PARAMS)
    SENÃO 
        DPVAT_FROTA É INVÁLIDO 
        (ADD PARAMS)        

    SE SRC_FROTA_VALIDO == TRUE
        SRC_FROTA (ADD PARAMS)
    SENÃO 
        SRC_FROTA É INVÁLIDO 
        (ADD PARAMS)

    SE PRECO_MEDIO_VEICULOS_VALIDO == TRUE
        PRECO_MEDIO_VEICULOS <- PRECO_TOTAL_VEICULOS / NUM_VEICULOS
        (ADD PARAMS)
    SENÃO
        PRECO_MEDIO_VEICULOS É INVÁLIDO
        (ADD PARAMS)

    SE CFT_CONSUMO_COMBUSTIVEL_VALIDO == TRUE
        CFT_CONSUMO_MEDIO_COMBUSTIVEL <- CFT_CONSUMO_COMBUSTIVEL_TOTAL / NUM_VEICULOS
        (ADD PARAMS)
    SENÃO
        CFT_CONSUMO_MEDIO_COMBUSTIVEL É INVÁLIDO

    SE NUMERO_PNEUS_VALIDO == TRUE
        NUMERO_PNEUS (ADD PARAMS)
    SENÃO 
        NUMERO_PNEUS É INVÁLIDO 
        (ADD PARAMS)

    SE VIDA_UTIL_PNEU_VALIDO == TRUE
        VIDA_UTIL_PNEU (ADD PARAMS)
    SENÃO 
        VIDA_UTIL_PNEU É INVÁLIDO 
        (ADD PARAMS)
marcosroriz commented 2 years ago

Exemplo:

{
  "NUM_MOTORISTAS": {
    "codigo_parametro": "NUM_MOTORISTAS",
    "modulo": "Rotas",
    "result": true,
    "valor": 2
  },
  "SALARIO_MEDIO_MOTORISTA": {
    "codigo_parametro": "SALARIO_MEDIO_MOTORISTA",
    "modulo": "Motoristas",
    "result": true,
    "valor": 2025
  },
  "NUM_MONITORES": {
    "codigo_parametro": "NUM_MONITORES",
    "modulo": "Monitores",
    "result": true,
    "valor": 1
  },
  "SALARIO_MEDIO_MONITORES": {
    "codigo_parametro": "SALARIO_MEDIO_MONITORES",
    "modulo": "Monitores",
    "result": true,
    "valor": 1957.02
  },
  "NUM_VEICULOS": {
    "codigo_parametro": "NUM_VEICULOS",
    "modulo": "Frota",
    "result": true,
    "valor": 1
  },
  "IPVA_FROTA": {
    "codigo_parametro": "IPVA_FROTA",
    "modulo": "Frota",
    "result": true,
    "valor": 5575
  },
  "DPVAT_FROTA": {
    "codigo_parametro": "DPVAT_FROTA",
    "modulo": "Frota",
    "result": true,
    "valor": 2222.2
  },
  "SRC_FROTA": {
    "codigo_parametro": "SRC_FROTA",
    "modulo": "Frota",
    "result": true,
    "valor": 1999.99
  },
  "CFT_CONSUMO_COMBUSTIVEL": {
    "codigo_parametro": "CFT_CONSUMO_COMBUSTIVEL",
    "modulo": "Frota",
    "result": true,
    "valor": 75
  },
  "NUMERO_PNEUS": {
    "codigo_parametro": "NUMERO_PNEUS",
    "modulo": "Frota",
    "result": true,
    "valor": 4
  },
  "VIDA_UTIL_PNEU": {
    "codigo_parametro": "VIDA_UTIL_PNEU",
    "modulo": "Frota",
    "result": true,
    "valor": 80
  },
  "PRECO_MEDIO_VEICULOS": {
    "codigo_parametro": "PRECO_MEDIO_VEICULOS",
    "modulo": "Frota",
    "result": true,
    "valor": 120000
  },
  "ANO_ATUAL": {
    "codigo_parametro": "ANO_ATUAL",
    "modulo": "Frota",
    "result": false,
    "valor": 2022
  },
  "ANO_VEICULO": {
    "codigo_parametro": "ANO_VEICULO",
    "modulo": "Frota",
    "result": false,
    "valor": 2012
  },
  "IDADE_VEICULO": {
    "codigo_parametro": "IDADE_VEICULO",
    "modulo": "Frota",
    "result": true,
    "valor": 10
  },
  "CFT_CONSUMO_OLEO_LUBRIFICANTE": {
    "codigo_parametro": "CFT_CONSUMO_OLEO_LUBRIFICANTE",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 5
  },
  "CFT_CONSUMO_PECAS": {
    "codigo_parametro": "CFT_CONSUMO_PECAS",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 0.0058
  },
  "NUM_RECAPAGEM": {
    "codigo_parametro": "NUM_RECAPAGEM",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 3
  },
  "PERC_ENCARGO_SOCIAIS": {
    "codigo_parametro": "PERC_ENCARGO_SOCIAIS",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 20
  },
  "PERC_CFT_CUSTO_MANUTENCAO_RODO": {
    "codigo_parametro": "PERC_CFT_CUSTO_MANUTENCAO_RODO",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 13.5
  },
  "PERC_RESIDUAL_RODO": {
    "codigo_parametro": "PERC_RESIDUAL_RODO",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 15
  },
  "PERC_TRC": {
    "codigo_parametro": "PERC_TRC",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 9.25
  },
  "PRECO_MEDIO_COMBUSTIVEIS": {
    "codigo_parametro": "PRECO_MEDIO_COMBUSTIVEIS",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 6.59
  },
  "PRECO_MEDIO_PNEUS": {
    "codigo_parametro": "PRECO_MEDIO_PNEUS",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 450
  },
  "PRECO_MEDIO_RECAPAGEM": {
    "codigo_parametro": "PRECO_MEDIO_RECAPAGEM",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 400
  },
  "VIDA_UTIL_RODO": {
    "codigo_parametro": "VIDA_UTIL_RODO",
    "modulo": "Parâmetros",
    "result": true,
    "valor": 10
  },
  "KM_MENSAL_ROTA": {
    "codigo_parametro": "KM_MENSAL_ROTA",
    "modulo": "Rotas",
    "result": true,
    "valor": 60
  },
  "NUM_ALUNOS": {
    "codigo_parametro": "NUM_ALUNOS",
    "modulo": "Monitores",
    "result": false,
    "valor": 0
  }
}
umarley commented 2 years ago

@marcosroriz adiconado os parâmetros que faltaram.

KM_MENSAL_ROTA
NUM_MONITORES SALARIO_MEDIO_MONITORES IDADE_MEDIA_VEICULOS -> Média das idades dos veiculos

umarley commented 2 years ago

@marcosroriz serviço criado e funcionando corretamente.