' === Pratica Obrigatoria 1 (ATIVO) ===
Option Explicit

Sub CalcularFreteExpedicao()
    ' Constantes
    Const TAXA_KG As Currency = 1.85
    Const TAXA_KM As Currency = 4.2
    Const ALIQ_SEGURO As Double = 0.0035
    Const TAXA_PEDAGIO_POR_EIXO As Currency = 9.8
    
    ' Variáveis
    Dim strCargaID As String
    Dim dblPesoKg As Double
    Dim dblDistanciaKm As Double
    Dim curValorMercadoria As Currency
    Dim lngEixos As Long
    
    Dim curCustoPeso As Currency
    Dim curCustoDistancia As Currency
    Dim curValorSeguro As Currency
    Dim curValorPedagio As Currency
    Dim curFreteTotal As Currency
    Dim dtmEmissao As Date
    
    Dim lngQtdPallets As Long
    Dim lngRestoVolumes As Long
    
    ' Entrada de Dados
    strCargaID = Range("A2").Value
    dblPesoKg = CDbl(Range("B2").Value)
    dblDistanciaKm = CDbl(Range("C2").Value)
    curValorMercadoria = CCur(Range("D2").Value)
    lngEixos = IIf(Range("J2").Value = "", 3, CLng(Range("J2").Value))
    dtmEmissao = Date
    
    ' Cálculos
    curCustoPeso = dblPesoKg * TAXA_KG
    curCustoDistancia = dblDistanciaKm * TAXA_KM
    curValorSeguro = curValorMercadoria * ALIQ_SEGURO
    curValorPedagio = (dblDistanciaKm \ 100) * (lngEixos * TAXA_PEDAGIO_POR_EIXO)
    curFreteTotal = curCustoPeso + curCustoDistancia + curValorSeguro + curValorPedagio
    
    ' Saída na Planilha
    Range("E2").Value = curCustoPeso
    Range("F2").Value = curCustoDistancia
    Range("G2").Value = curValorSeguro
    Range("H2").Value = curFreteTotal
    Range("I2").Value = dtmEmissao
    Range("K2").Value = curValorPedagio
    
    ' Formatação
    Range("E2:H2").NumberFormat = "R$ #,##0.00"
    Range("K2").NumberFormat = "R$ #,##0.00"
    Range("I2").NumberFormat = "dd/mm/yyyy"
    
    ' Palletização e Auditoria Imediata
    lngQtdPallets = CLng(dblPesoKg) \ 800
    lngRestoVolumes = CLng(dblPesoKg) Mod 800
    
    Debug.Print "================ RELATÓRIO TÉCNICO FASTLOG ================"
    Debug.Print "ID da Carga: " & strCargaID
    Debug.Print "Pallets Estimados: " & lngQtdPallets & " (Resto: " & lngRestoVolumes & " kg)"
    Debug.Print "Pedágios Calculados: " & FormatCurrency(curValorPedagio)
    Debug.Print "Frete Total Final: " & FormatCurrency(curFreteTotal)
    Debug.Print "==========================================================="
End Sub

