# Copyright 2016 Osvaldo Santana Neto
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


from decimal import Decimal
from typing import Dict, Tuple  # noqa

from ..utils import RangeSet

TRACKING_PREFIX = {
    "AL": "Agentes de leitura",
    "AR": "Avisos de recebimento",
    "AS": "PAC - Ação Social",
    "CA": "Encomenda Internacional - Colis",
    "CB": "Encomenda Internacional - Colis",
    "CC": "Encomenda Internacional - Colis",
    "CD": "Encomenda Internacional - Colis",
    "CE": "Encomenda Internacional - Colis",
    "CF": "Encomenda Internacional - Colis",
    "CG": "Encomenda Internacional - Colis",
    "CH": "Encomenda Internacional - Colis",
    "CI": "Encomenda Internacional - Colis",
    "CJ": "Encomenda Internacional - Colis",
    "CK": "Encomenda Internacional - Colis",
    "CL": "Encomenda Internacional - Colis",
    "CM": "Encomenda Internacional - Colis",
    "CN": "Encomenda Internacional - Colis",
    "CO": "Encomenda Internacional - Colis",
    "CP": "Encomenda Internacional - Colis",
    "CQ": "Encomenda Internacional - Colis",
    "CR": "Carta registrada sem Valor Declarado",
    "CS": "Encomenda Internacional - Colis",
    "CT": "Encomenda Internacional - Colis",
    "CU": "Encomenda internacional - Colis",
    "CV": "Encomenda Internacional - Colis",
    "CW": "Encomenda Internacional - Colis",
    "CX": "Encomenda internacional - Colis ou Selo Lacre para Caixetas",
    "CY": "Encomenda Internacional - Colis",
    "CZ": "Encomenda Internacional - Colis",
    "DA": "SEDEX ou Remessa Expressa com AR Digital",
    "DB": "SEDEX ou Remessa Expressa com AR Digital (Bradesco)",
    "DC": "Remessa Expressa CRLV/CRV/CNH e Notificações",
    "DD": "Devolução de documentos",
    "DE": "Remessa Expressa Talão/Cartão com AR",
    "DF": "e-SEDEX",
    "DG": "SEDEX",
    "DI": "SEDEX ou Remessa Expressa com AR Digital (Itaú)",
    "DJ": "SEDEX",
    "DK": "PAC Extra Grande",
    "DL": "SEDEX",
    "DM": "e-SEDEX",
    "DN": "SEDEX",
    "DO": "SEDEX ou Remessa Expressa com AR Digital (Itaú)",
    "DP": "SEDEX Pagamento na Entrega",
    "DQ": "SEDEX ou Remessa Expressa com AR Digital (Santander)",
    "DR": "Remessa Expressa com AR Digital (Santander)",
    "DS": "SEDEX ou Remessa Expressa com AR Digital (Santander)",
    "DT": "Remessa econômica com AR Digital (DETRAN)",
    "DU": "e-SEDEX",
    "DV": "SEDEX c/ AR digital",
    "DW": "Encomenda SEDEX (Etiqueta Lógica)",
    "DX": "SEDEX 10",
    "EA": "Encomenda Internacional - EMS",
    "EB": "Encomenda Internacional - EMS",
    "EC": "PAC",
    "ED": "Packet Express",
    "EE": "Encomenda Internacional - EMS",
    "EF": "Encomenda Internacional - EMS",
    "EG": "Encomenda Internacional - EMS",
    "EH": "Encomenda Internacional - EMS ou Encomenda com AR Digital",
    "EI": "Encomenda Internacional - EMS",
    "EJ": "Encomenda Internacional - EMS",
    "EK": "Encomenda Internacional - EMS",
    "EL": "Encomenda Internacional - EMS",
    "EM": "Encomenda Internacional - SEDEX Mundi",  # BR Suffix
    # "EM": "Encomenda Internacional - EMS Importação",
    "EN": "Encomenda Internacional - EMS",
    "EO": "Encomenda Internacional - EMS",
    "EP": "Encomenda Internacional - EMS",
    "EQ": "Encomenda de serviço não expressa (ECT)",
    "ER": "Objeto registrado",
    "ES": "e-SEDEX ou EMS",
    "ET": "Encomenda Internacional - EMS",
    "EU": "Encomenda Internacional - EMS",
    "EV": "Encomenda Internacional - EMS",
    "EW": "Encomenda Internacional - EMS",
    "EX": "Encomenda Internacional - EMS",
    "EY": "Encomenda Internacional - EMS",
    "EZ": "Encomenda Internacional - EMS",
    "FA": "FAC registrado",
    "FE": "Encomenda FNDE",
    "FF": "Objeto registrado (DETRAN)",
    "FH": "FAC registrado com AR Digital",
    "FM": "FAC monitorado",
    "FR": "FAC registrado",
    "IA": "Logística Integrada (agendado / avulso)",
    "IC": "Logística Integrada (a cobrar)",
    "ID": "Logística Integrada (devolução de documento)",
    "IE": "Logística Integrada (Especial)",
    "IF": "CPF",
    "II": "Logística Integrada (ECT)",
    "IK": "Logística Integrada com Coleta Simultânea",
    "IM": "Logística Integrada (Medicamentos)",
    "IN": "Correspondência e EMS recebido do Exterior",
    "IP": "Logística Integrada (Programada)",
    "IR": "Impresso Registrado",
    "IS": "Logística integrada standard (medicamentos)",
    "IT": "Remessa Expressa Medicamentos / Logística Integrada Termolábil",
    "IU": "Logística Integrada (urgente)",
    "IX": "EDEI Expresso",
    "JA": "Remessa econômica com AR Digital",
    "JB": "Remessa econômica com AR Digital",
    "JC": "Remessa econômica com AR Digital",
    "JD": "Remessa econômica Talão/Cartão",
    "JE": "Remessa econômica com AR Digital",
    "JF": "Remessa econômica com AR Digital",
    "JG": "Objeto registrado urgente/prioritário",
    "JH": "Objeto registrado urgente / prioritário",
    "JI": "Remessa econômica Talão/Cartão",
    "JJ": "Objeto registrado (Justiça)",
    "JK": "Remessa econômica Talão/Cartão",
    "JL": "Objeto registrado",
    "JM": "Mala Direta Postal Especial",
    "JN": "Objeto registrado econômico",
    "JO": "Objeto registrado urgente",
    "JP": "Receita Federal",
    "JQ": "Remessa econômica com AR Digital",
    "JR": "Objeto registrado urgente / prioritário",
    "JS": "Objeto registrado",
    "JT": "Objeto Registrado Urgente",
    "JV": "Remessa Econômica (c/ AR DIGITAL)",
    "LA": "SEDEX com Logística Reversa Simultânea em Agência",
    "LB": "e-SEDEX com Logística Reversa Simultânea em Agência",
    "LC": "Objeto Internacional (Prime)",
    "LE": "Logística Reversa Econômica",
    "LF": "Objeto Internacional (Prime)",
    "LI": "Objeto Internacional (Prime)",
    "LJ": "Objeto Internacional (Prime)",
    "LK": "Objeto Internacional (Prime)",
    "LM": "Objeto Internacional (Prime)",
    "LN": "Objeto Internacional (Prime)",
    "LP": "PAC com Logística Reversa Simultânea em Agência",
    "LS": "SEDEX Logística Reversa",
    "LV": "Logística Reversa Expressa",
    "LX": "Packet Standard / Econômica",
    "LZ": "Objeto Internacional (Prime)",
    "MA": "Serviços adicionais do Telegrama",
    "MB": "Telegrama (balcão)",
    "MC": "Telegrama (Fonado)",
    "MD": "SEDEX Mundi (Documento interno)",
    "ME": "Telegrama",
    "MF": "Telegrama (Fonado)",
    "MK": "Telegrama (corporativo)",
    "ML": "Fecha Malas (Rabicho)",
    "MM": "Telegrama (Grandes clientes)",
    "MP": "Telegrama (Pré-pago)",
    "MR": "AR digital",
    "MS": "Encomenda Saúde",
    "MT": "Telegrama (Telemail)",
    "MY": "Telegrama internacional (entrante)",
    "MZ": "Telegrama (Correios Online)",
    "NE": "Tele Sena resgatada",
    "NX": "EDEI Econômico (não urgente)",
    "PA": "Passaporte",
    "PB": "PAC",
    "PC": "PAC a Cobrar",
    "PD": "PAC",
    "PE": "PAC",
    "PF": "Passaporte",
    "PG": "PAC",
    "PH": "PAC",
    "PI": "PAC",
    "PJ": "PAC",
    "PK": "PAC Extra Grande",
    "PL": "PAC",
    "PN": "PAC Normal",
    "PR": "Reembolso Postal",
    "QQ": "Objeto de teste (SIGEP Web)",
    "RA": "Objeto registrado / prioritário",
    "RB": "Carta registrada",
    "RC": "Carta registrada com Valor Declarado",
    "RD": "Remessa econômica ou objeto registrado (DETRAN)",
    "RE": "Objeto registrado econômico",
    "RF": "Receita Federal",
    "RG": "Objeto registrado",
    "RH": "Objeto registrado com AR Digital",
    "RI": "Objeto registrado internacional prioritário",
    "RJ": "Objeto registrado",
    "RK": "Objeto registrado",
    "RL": "Objeto registrado",
    "RM": "Objeto registrado urgente",
    "RN": "Objeto registrado (SIGEPWEB ou Agência)",
    "RO": "Objeto registrado",
    "RP": "Reembolso Postal",
    "RQ": "Objeto registrado",
    "RR": "Objeto registrado",
    "RS": "Objeto registrado",
    "RT": "Remessa econômica Talão/Cartão",
    "RU": "Objeto registrado (ECT)",
    "RV": "Remessa econômica CRLV/CRV/CNH e Notificações com AR Digital",
    "RW": "Objeto internacional",
    "RX": "Objeto internacional",
    "RY": "Remessa econômica Talão/Cartão com AR Digital",
    "RZ": "Objeto registrado",
    "SA": "SEDEX",
    "SB": "SEDEX 10",
    "SC": "SEDEX a cobrar",
    "SD": "SEDEX ou Remessa Expressa (DETRAN)",
    "SE": "SEDEX",
    "SF": "SEDEX",
    "SG": "SEDEX",
    "SH": "SEDEX com AR Digital / SEDEX ou AR Digital",
    "SI": "SEDEX",
    "SJ": "SEDEX Hoje",
    "SK": "SEDEX",
    "SL": "SEDEX",
    "SM": "SEDEX 12",
    "SN": "SEDEX",
    "SO": "SEDEX",
    "SP": "SEDEX Pré-franqueado",
    "SQ": "SEDEX",
    "SR": "SEDEX",
    "SS": "SEDEX",
    "ST": "Remessa Expressa Talão/Cartão",
    "SU": "Encomenda de serviço expressa (ECT)",
    "SV": "Remessa Expressa CRLV/CRV/CNH e Notificações com AR Digital",
    "SW": "e-SEDEX",
    "SX": "SEDEX 10",
    "SY": "Remessa Expressa Talão/Cartão com AR Digital",
    "SZ": "SEDEX",
    "TC": "Objeto para treinamento",
    "TE": "Objeto para treinamento",
    "TS": "Objeto para treinamento",
    "VA": "Encomendas com valor declarado",
    "VC": "Encomendas",
    "VD": "Encomendas com valor declarado",
    "VE": "Encomendas",
    "VF": "Encomendas com valor declarado",
    "VV": "Objeto internacional",
    "XA": "Aviso de chegada (internacional)",
    "XM": "SEDEX Mundi",
    "XR": "Encomenda SUR Postal Expresso",
    "XX": "Encomenda SUR Postal 24 horas",
}

EXTRA_SERVICES = {
    1: {"code": "AR", "name": "Aviso de Recebimento", "display_on_label": True},
    2: {"code": "MP", "name": "Mão Própria Nacional", "display_on_label": True},
    19: {"code": "VD", "name": "Valor Declarado (Encomendas)", "display_on_label": True},  # Sedex
    25: {"code": "RR", "name": "Registro Nacional", "display_on_label": False},
    64: {"code": "VD", "name": "Valor Declarado (Encomendas)", "display_on_label": True},  # PAC
    65: {"code": "VD", "name": "Valor Declarado (Encomendas)", "display_on_label": True},  # PAC MINI
}

EXTRA_SERVICE_AR = 1
EXTRA_SERVICE_MP = 2
EXTRA_SERVICE_VD_SEDEX = 19
EXTRA_SERVICE_RR = 25
EXTRA_SERVICE_VD_PAC = 64
EXTRA_SERVICE_VD_PAC_MINI = 65
EXTRA_SERVICE_VD = EXTRA_SERVICE_VD_SEDEX  # For backward compatibility


SERVICES = {
    "40215": {
        "id": 104707,
        "description": "SEDEX 10",
        "category": "SERVICO_COM_RESTRICAO",
        "max_weight": 10000,
        "display_name": "SEDEX 10",
        "symbol": "premium",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "81019": {
        "id": 104672,
        "description": "E-SEDEX STANDARD",
        "category": "SERVICO_COM_RESTRICAO",
        "max_weight": 15000,
        "display_name": "E-SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "41068": {
        "id": 109819,
        "description": "PAC CONTRATO AGENCIA",
        "category": "PAC",
        "display_name": "PAC",
        "max_weight": 30000,
        "symbol": "standard",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("3000.00"),
    },
    "04669": {
        "id": 124884,
        "description": "PAC",
        "category": "PAC",
        "display_name": "PAC",
        "max_weight": 30000,
        "symbol": "standard",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("3000.00"),
    },
    "40444": {
        "id": 109811,
        "description": "SEDEX - CONTRATO",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40436": {
        "id": 109810,
        "description": "SEDEX - CONTRATO",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40096": {
        "id": 104625,
        "description": "SEDEX (CONTRATO)",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "04162": {
        "id": 124849,
        "description": "SEDEX CONTRATO AGENCIA",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40380": {
        "id": 109806,
        "description": "SEDEX REVERSO 40096",
        "category": "REVERSO",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40010": {
        "id": 104295,
        "description": "SEDEX A VISTA",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "41211": {
        "id": 113546,
        "description": "PAC - CONTRATO",
        "category": "PAC",
        "display_name": "PAC",
        "max_weight": 30000,
        "symbol": "standard",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("3000.00"),
    },
    "40630": {
        "id": 114976,
        "description": "SEDEX PAGAMENTO NA ENTREGA -",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "04316": {
        "id": 124900,
        "description": "SEDEX CONTRATO - UO",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40916": {
        "id": 118568,
        "description": "SEDEX AGRUPADO II",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40908": {
        "id": 118567,
        "description": "SEDEX AGRUPADO I",
        "category": "SEDEX",
        "max_weight": 30000,
        "display_name": "SEDEX",
        "symbol": "express",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "41300": {
        "id": 120366,
        "description": "PAC GRANDES FORMATOS",
        "category": "SERVICO_COM_RESTRICAO",
        "max_weight": 50000,
        "display_name": "PAC",
        "symbol": "standard",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("3000.00"),
    },
    "04812": {
        "id": 124899,
        "description": "PAC CONTRATO - UO",
        "category": "PAC",
        "display_name": "PAC",
        "max_weight": 30000,
        "symbol": "standard",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("3000.00"),
    },
    "40169": {
        "id": 115218,
        "description": "SEDEX 12",
        "category": "SERVICO_COM_RESTRICAO",
        "max_weight": 10000,
        "display_name": "SEDEX 12",
        "symbol": "premium",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "40290": {
        "id": 108934,
        "description": "SEDEX HOJE",
        "category": "SERVICO_COM_RESTRICAO",
        "max_weight": 10000,
        "display_name": "SEDEX Hoje",
        "symbol": "premium",
        "default_extra_services": [EXTRA_SERVICE_RR],
        "min_declared_value": Decimal("20.50"),
        "max_declared_value": Decimal("10000.00"),
    },
    "10154": {
        "id": 118424,
        "description": "CARTA COMERCIAL  REGISTRADA",
        "category": "CARTA_REGISTRADA",
        "display_name": "Carta Registrada",
    },
    "41246": {
        "id": 115487,
        "description": "REM. CAMPANHA PAPAI NOEL DOS",
        "category": "SEM_CATEGORIA",
        "display_name": "Papai Noel dos Correios",
    },
    "40150": {
        "id": 115136,
        "description": "SERVICO DE PROTOCOLO POSTAL -",
        "category": "SEDEX",
        "display_name": "Protocolo",
    },
    "10065": {
        "id": 109480,
        "description": "CARTA COMERCIAL A FATURAR",
        "category": "CARTA_REGISTRADA",
        "display_name": "Carta Comercial",
    },
}  # type: Dict[str, dict]

SERVICE_PAC = "04669"
SERVICE_PAC_INDUSTRIAL = "04812"
SERVICE_SEDEX = "04162"
SERVICE_SEDEX_INDUSTRIAL = "04316"
SERVICE_SEDEX10 = "40215"
SERVICE_SEDEX12 = "40169"
SERVICE_E_SEDEX = "81019"

INSURANCE_VALUE_THRESHOLD_PAC = Decimal("20.50")  # R$
INSURANCE_VALUE_THRESHOLD_SEDEX = Decimal("20.50")  # R$
INSURANCE_PERCENTUAL_COST = Decimal("0.01")  # 1%

REGIONAL_DIRECTIONS = {
    1: {"code": "AC", "name": "AC - ADMINISTRAÇAO CENTRAL"},
    3: {"code": "ACR", "name": "DR - ACRE"},
    4: {"code": "AL", "name": "DR - ALAGOAS"},
    6: {"code": "AM", "name": "DR - AMAZONAS"},
    5: {"code": "AP", "name": "DR - AMAPÁ"},
    8: {"code": "BA", "name": "DR - BAHIA"},
    10: {"code": "BSB", "name": "DR - BRASÍLIA"},
    12: {"code": "CE", "name": "DR - CEARÁ"},
    14: {"code": "ES", "name": "DR - ESPIRITO SANTO"},
    16: {"code": "GO", "name": "DR - GOIÁS"},
    18: {"code": "MA", "name": "DR - MARANHÃO"},
    20: {"code": "MG", "name": "DR - MINAS GERAIS"},
    22: {"code": "MS", "name": "DR - MATO GROSSO DO SUL"},
    24: {"code": "MT", "name": "DR - MATO GROSSO"},
    28: {"code": "PA", "name": "DR - PARÁ"},
    30: {"code": "PB", "name": "DR - PARAÍBA"},
    32: {"code": "PE", "name": "DR - PERNAMBUCO"},
    34: {"code": "PI", "name": "DR - PIAUÍ"},
    36: {"code": "PR", "name": "DR - PARANÁ"},
    50: {"code": "RJ", "name": "DR - RIO DE JANEIRO"},
    60: {"code": "RN", "name": "DR - RIO GRANDE DO NORTE"},
    26: {"code": "RO", "name": "DR - RONDONIA"},
    65: {"code": "RR", "name": "DR - RORAIMA"},
    64: {"code": "RS", "name": "DR - RIO GRANDE DO SUL"},
    68: {"code": "SC", "name": "DR - SANTA CATARINA"},
    70: {"code": "SE", "name": "DR - SERGIPE"},
    74: {"code": "SPI", "name": "DR - SÃO PAULO INTERIOR"},
    72: {"code": "SPM", "name": "DR - SÃO PAULO"},
    75: {"code": "TO", "name": "DR - TOCANTINS"},
}

TRACKING_EVENT_TYPES = {
    "ERROR": "Evento de erro",  # custom event type for "Not Found" error
    "BDE": "Baixa de distribuição externa",
    "BDI": "Baixa de distribuição interna",
    "BDR": "Baixa corretiva",
    "BLQ": "Bloqueio de objetos",
    "CAR": "Conferência de lista de registro",
    "CD": "Conferência de nota de despacho",
    "CMT": "Chegada de um meio de transporte",
    "CO": "Coleta de objetos",
    "CUN": "Conferência de lista de registro",
    "DO": "Expedição de nota de despacho",
    "EST": "Estorno",
    "FC": "Função complementar",
    "IDC": "Indenização de objetos",
    "LDI": "Lista de distribuição interna",
    "LDE": "Lista de distribuição externa",
    "OEC": "Lista de Objetos Entregues ao Carteiro",
    "PAR": "Conferência Unidade Internacional",
    "PMT": "Partida Meio de Transporte",
    "PO": "Postagem (exceção)",
    "RO": "Expedição de Lista de Registro",
    "TRI": "Triagem",
    "CMR": "Conferência de lista de registro",
}

TRACKING_STATUS = {
    ("ERROR", 0): ("error", "Objeto não encontrado", "", ""),  # custom status for "Not Found" error
    ("BLQ", 1): (
        "shipped",
        "Entrega de objeto bloqueada a pedido do remetente",
        "Objeto em análise de destinação",
        "Acompanhar",
    ),
    ("BLQ", 2): ("shipped", "Tentativa de suspensão da entrega", "Objeto em análise de destinação", "Acompanhar"),
    ("BLQ", 11): (
        "shipped",
        "Solicitação de suspensão de entrega recebida",
        "Solicitação realizada pelo contratante/remetente",
        "Acompanhar",
    ),
    ("BLQ", 21): ("shipped", "Solicitação de suspensão de entrega recebida", "", "Acompanhar"),
    ("BDE", 0): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDI", 0): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDR", 0): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("CAR", 1): ("shipped", "Conferido", "Recebido na unidade de destino", "Acompanhar"),
    ("CD", 0): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("CMT", 0): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("CUN", 0): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("DO", 0): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("LDE", 0): ("shipped", "Objeto saiu para entrega ao remetente", "", "Acompanhar"),
    ("LDI", 0): (
        "waiting_retrieval",
        "Objeto aguardando retirada no endereço indicado",
        "Endereço:",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("OEC", 0): (
        "shipped",
        "Objeto saiu para entrega ao destinatário",
        "",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("PO", 0): ("shipped", "Objeto postado", "", "Acompanhar"),
    ("RO", 0): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("TRI", 0): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("BDE", 1): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDE", 70): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDI", 1): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDR", 1): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("CD", 1): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("CO", 1): ("shipped", "Objeto coletado", "", "Acompanhar"),
    ("CUN", 1): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("DO", 1): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("EST", 1): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("FC", 1): (
        "shipped",
        "Objeto será devolvido por solicitação do remetente",
        "",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("FC", 10): (
        "shipped",
        "Objeto recebido na unidade de distribuição",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("FC", 47): (
        "shipped",
        "Objeto será devolvido por solicitação do contratante/remetente",
        "Em tratamento, aguarde.",
        "Acompanhar",
    ),
    ("FC", 29): ("shipped", "Objeto encaminhado para apreensão", "Em tratamento, aguarde.", "Acompanhar",),
    ("IDC", 1): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("LDI", 1): (
        "waiting_retrieval",
        "Objeto aguardando retirada no endereço indicado",
        "Endereço:",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("OEC", 1): ("shipped", "Objeto saiu para entrega ao destinatário", "", "Acompanhar"),
    ("PMT", 1): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("PO", 1): ("shipped", "Objeto postado", "", "Acompanhar"),
    ("RO", 1): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("BDE", 2): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Aguarde: Objeto estará disponível para retirada na unidade a ser informada.",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("BDI", 2): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Aguarde: Objeto estará disponível para retirada na unidade a ser informada.",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("BDR", 2): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Aguarde: Objeto estará disponível para retirada na unidade a ser informada.",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("CD", 2): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("DO", 2): ("shipped", "Objeto encaminhado para", "<nome da cidade>", "Acompanhar"),
    ("EST", 2): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("FC", 2): ("shipped", "Objeto com data de entrega agendada", "", "Acompanhar"),
    ("IDC", 2): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("LDI", 2): (
        "waiting_retrieval",
        "Objeto disponível para retirada em Caixa Postal",
        "",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("BDE", 3): (
        "waiting_retrieval",
        "Remetente não retirou objeto na Unidade dos Correios",
        "Objeto em análise de destinação",
        "Acompanhar. O interessado não buscou o objeto na unidade dos Correios durante o período de guarda.",
    ),
    ("BDI", 3): (
        "waiting_retrieval",
        "Remetente não retirou objeto na Unidade dos Correios",
        "Objeto em análise de destinação",
        "Acompanhar. O interessado não buscou o objeto na unidade dos Correios durante o período de guarda.",
    ),
    ("BDR", 3): (
        "waiting_retrieval",
        "Remetente não retirou objeto na Unidade dos Correios",
        "Objeto em análise de destinação",
        "Acompanhar. O interessado não buscou o objeto na unidade dos Correios durante o período de guarda.",
    ),
    ("CD", 3): ("shipped", "Objeto recebido na Unidade dos Correios", "", "Acompanhar"),
    ("EST", 3): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("FC", 3): ("shipped", "Objeto mal encaminhado", "Encaminhamento a ser corrigido.", "Acompanhar"),
    ("IDC", 3): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("LDI", 3): (
        "waiting_retrieval",
        "Objeto aguardando retirada no endereço indicado",
        "Endereço:",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("BDE", 4): (
        "delivery_rejected",
        "A entrega não pode ser efetuada - Cliente recusou-se a receber",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 4): (
        "delivery_rejected",
        "A entrega não pode ser efetuada - Cliente recusou-se a receber",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 4): (
        "delivery_rejected",
        "A entrega não pode ser efetuada - Cliente recusou-se a receber",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("EST", 4): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("FC", 4): (
        "shipped",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("IDC", 4): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("BDE", 5): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 5): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 5): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("EST", 5): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("FC", 5): ("shipped", "Objeto devolvido aos Correios", "", "Acompanhar"),
    ("IDC", 5): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("BDE", 6): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Cliente desconhecido no local",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 6): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Cliente desconhecido no local",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 6): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Cliente desconhecido no local",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("EST", 6): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("IDC", 6): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("BDE", 7): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("BDI", 7): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("BDR", 7): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("FC", 7): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Empresa sem expediente",
        "A entrega deverá ocorrer no próximo dia útil",
        "Acompanhar",
    ),
    ("IDC", 7): ("lost", "Objeto não localizado", "Houve indenização dos valores correspondentes", "Acompanhar"),
    ("BDE", 8): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 8): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 8): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("FC", 8): (
        "shipped",
        "Área com distribuição sujeita a prazo diferenciado",
        "Restrição de entrega domiciliar temporária",
        "Acompanhar",
    ),
    ("BDE", 9): (
        "lost",
        "Objeto não localizado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 9): (
        "lost",
        "Objeto não localizado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 9): (
        "lost",
        "Objeto não localizado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("EST", 9): ("ignore_last_entry", "Favor desconsiderar a informação anterior", "", "Acompanhar"),
    ("FC", 9): ("delivery_unsuccessful", "Remetente não retirou objeto na Unidade dos Correios", "", "Acompanhar"),
    ("LDE", 9): ("shipped", "Objeto saiu para entrega ao remetente", "", "Acompanhar"),
    ("OEC", 9): ("shipped", "Objeto saiu para entrega ao remetente", "", "Acompanhar"),
    ("PO", 9): (
        "shipped",
        "Objeto postado após o horário limite da agência",
        "Objeto sujeito a encaminhamento no próximo dia útil",
        "Acompanhar",
    ),
    ("BDE", 10): (
        "shipped_wrong_address",
        "A entrega não pode ser efetuada - Cliente mudou-se",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 10): (
        "shipped_wrong_address",
        "A entrega não pode ser efetuada - Cliente mudou-se",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 10): (
        "shipped_wrong_address",
        "A entrega não pode ser efetuada - Cliente mudou-se",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 12): (
        "waiting_retrieval",
        "Remetente não retirou objeto na Unidade dos Correios",
        "Objeto em análise de destinação",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 12): (
        "waiting_retrieval",
        "Remetente não retirou objeto na Unidade dos Correios",
        "Objeto em análise de destinação",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 12): (
        "waiting_retrieval",
        "Remetente não retirou objeto na Unidade dos Correios",
        "Objeto em análise de destinação",
        "Acionar atendimento dos Correios.",
    ),
    ("LDI", 4): (
        "waiting_retrieval",
        "Objeto aguardando retirada no endereço indicado",
        "Endereço:",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("LDI", 11): (
        "waiting_retrieval",
        "Objeto encaminhado para retirada no endereço indicado",
        "Para retirá-lo, é preciso informar o código do objeto.",
        "Acompanhar",
    ),
    ("LDI", 14): (
        "waiting_retrieval",
        "Objeto aguardando retirada no endereço indicado",
        "Endereço:",
        "Acompanhar. O interessado deverá buscar o objeto em uma Unidade dos Correios.",
    ),
    ("BDI", 14): ("shipped", "Desistência de postagem pelo remetente", "", "Acompanhar"),
    ("BDR", 14): ("shipped", "Desistência de postagem pelo remetente", "", "Acompanhar"),
    ("BDR", 15): (
        "shipped",
        "Recebido na unidade de distribuição",
        "Por determinação judicial o objeto será entregue em até 7 dias",
        "Acompanhar",
    ),
    ("PAR", 15): ("delivered", "Objeto recebido em <destino>", "", "Acompanhar"),
    ("PAR", 16): (
        "customs_control",
        "Objeto recebido no Brasil",
        "Objeto sujeito à fiscalização e atraso na entrega",
        "Acompanhar",
    ),
    ("PAR", 17): ("customs_control", "Objeto liberado pela alfândega", "", "Acompanhar"),
    ("PAR", 18): ("shipped", "Objeto recebido na unidade de exportação", "", "Acompanhar"),
    ("BDE", 18): (
        "shipped",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Será realizada nova tentativa de entrega no sábado",
        "Acompanhar",
    ),
    ("BDR", 18): (
        "shipped",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Será realizada nova tentativa de entrega no sábado",
        "Acompanhar",
    ),
    ("BDE", 19): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 19): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 19): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Endereço incorreto",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 20): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Será realizada nova tentativa de entrega",
        "Acompanhar",
    ),
    ("BDI", 20): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Será realizada nova tentativa de entrega",
        "Acompanhar",
    ),
    ("BDR", 20): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Será realizada nova tentativa de entrega",
        "Acompanhar",
    ),
    ("BDE", 21): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 21): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 21): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Carteiro não atendido",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 22): ("shipped", "Objeto devolvido aos Correios", "", "Acompanhar"),
    ("BDI", 22): ("shipped", "Objeto devolvido aos Correios", "", "Acompanhar"),
    ("BDR", 22): ("shipped", "Objeto devolvido aos Correios", "", "Acompanhar"),
    ("BDE", 23): ("returned", "Objeto devolvido ao remetente", "Recebido por:", "Acompanhar"),
    ("BDI", 23): ("returned", "Objeto devolvido ao remetente", "Recebido por:", "Acompanhar"),
    ("BDR", 23): ("returned", "Objeto devolvido ao remetente", "Recebido por:", "Acompanhar"),
    ("BDE", 24): ("waiting_retrieval", "Objeto disponível para retirada em Caixa Postal", "", "Acompanhar"),
    ("BDI", 24): ("waiting_retrieval", "Objeto disponível para retirada em Caixa Postal", "", "Acompanhar"),
    ("BDR", 24): ("waiting_retrieval", "Objeto disponível para retirada em Caixa Postal", "", "Acompanhar"),
    ("BDE", 25): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Empresa sem expediente",
        "A entrega deverá ocorrer no próximo dia útil",
        "Acompanhar",
    ),
    ("BDI", 25): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Empresa sem expediente",
        "A entrega deverá ocorrer no próximo dia útil",
        "Acompanhar",
    ),
    ("BDR", 25): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Empresa sem expediente",
        "A entrega deverá ocorrer no próximo dia útil",
        "Acompanhar",
    ),
    ("BDE", 26): (
        "waiting_retrieval",
        "Destinatário não retirou objeto na Unidade dos Correios",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 26): (
        "waiting_retrieval",
        "Destinatário não retirou objeto na Unidade dos Correios",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 26): (
        "waiting_retrieval",
        "Destinatário não retirou objeto na Unidade dos Correios",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 28): (
        "damaged",
        "Objeto e/ou conteúdo avariado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 28): (
        "damaged",
        "Objeto e/ou conteúdo avariado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 28): (
        "damaged",
        "Objeto e/ou conteúdo avariado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 30): ("delivery_unsuccessful", "Saída não efetuada", "Em tratamento, aguarde.", "Acompanhar"),
    ("BDI", 30): ("delivery_unsuccessful", "Saída não efetuada", "Em tratamento, aguarde.", "Acompanhar"),
    ("BDR", 30): ("delivery_unsuccessful", "Saída não efetuada", "Em tratamento, aguarde.", "Acompanhar"),
    ("BDE", 32): ("shipped", "Objeto com data de entrega agendada", "", "Acompanhar"),
    ("BDI", 32): ("shipped", "Objeto com data de entrega agendada", "", "Acompanhar"),
    ("BDR", 32): ("shipped", "Objeto com data de entrega agendada", "", "Acompanhar"),
    ("BDE", 33): (
        "delivery_rejected",
        "A entrega não pode ser efetuada - Destinatário não apresentou documento exigido",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 33): (
        "delivery_rejected",
        "A entrega não pode ser efetuada - Destinatário não apresentou documento exigido",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 33): (
        "delivery_rejected",
        "A entrega não pode ser efetuada - Destinatário não apresentou documento exigido",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 34): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Logradouro com numeração irregular",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("BDI", 34): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Logradouro com numeração irregular",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("BDR", 34): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada - Logradouro com numeração irregular",
        "Objeto sujeito a atraso na entrega ou a devolução ao remetente",
        "Acompanhar",
    ),
    ("BDE", 35): (
        "delivery_unsuccessful",
        "Coleta ou entrega de objeto não efetuada",
        "Será realizada nova tentativa de coleta ou entrega",
        "Acompanhar",
    ),
    ("BDI", 35): (
        "delivery_unsuccessful",
        "Coleta ou entrega de objeto não efetuada",
        "Será realizada nova tentativa de coleta ou entrega",
        "Acompanhar",
    ),
    ("BDR", 35): (
        "delivery_unsuccessful",
        "Coleta ou entrega de objeto não efetuada",
        "Será realizada nova tentativa de coleta ou entrega",
        "Acompanhar",
    ),
    ("BDE", 36): (
        "delivery_unsuccessful",
        "Coleta ou entrega de objeto não efetuada",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 36): (
        "delivery_unsuccessful",
        "Coleta ou entrega de objeto não efetuada",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 36): (
        "delivery_unsuccessful",
        "Coleta ou entrega de objeto não efetuada",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 37): (
        "damaged",
        "Objeto e/ou conteúdo avariado por acidente com veículo",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 37): (
        "damaged",
        "Objeto e/ou conteúdo avariado por acidente com veículo",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 37): (
        "damaged",
        "Objeto e/ou conteúdo avariado por acidente com veículo",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 38): (
        "delivery_unsuccessful",
        "Objeto endereçado à empresa falida",
        "Objeto será encaminhado para entrega ao administrador judicial",
        "Acompanhar",
    ),
    ("BDI", 38): (
        "delivery_unsuccessful",
        "Objeto endereçado à empresa falida",
        "Objeto será encaminhado para entrega ao administrador judicial",
        "Acompanhar",
    ),
    ("BDR", 38): (
        "delivery_unsuccessful",
        "Objeto endereçado à empresa falida",
        "Objeto será encaminhado para entrega ao administrador judicial",
        "Acompanhar",
    ),
    ("BDI", 39): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada",
        "Objeto em análise de destinação",
        "Acompanhar",
    ),
    ("BDR", 39): (
        "delivery_unsuccessful",
        "A entrega não pode ser efetuada",
        "Objeto em análise de destinação",
        "Acompanhar",
    ),
    ("BDE", 40): (
        "customs_control",
        "A importação do objeto/conteúdo não foi autorizada pelos órgãos fiscalizadores",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 40): (
        "customs_control",
        "A importação do objeto/conteúdo não foi autorizada pelos órgãos fiscalizadores",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 40): (
        "customs_control",
        "A importação do objeto/conteúdo não foi autorizada pelos órgãos fiscalizadores",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 41): ("unknown", "A entrega do objeto está condicionada à composição do lote", "", "Acompanhar"),
    ("BDI", 41): ("unknown", "A entrega do objeto está condicionada à composição do lote", "", "Acompanhar"),
    ("BDR", 41): ("unknown", "A entrega do objeto está condicionada à composição do lote", "", "Acompanhar"),
    ("BDE", 42): (
        "unknown",
        "Lote de objetos incompleto",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 42): (
        "unknown",
        "Lote de objetos incompleto",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 42): (
        "unknown",
        "Lote de objetos incompleto",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 43): (
        "customs_control",
        "Objeto apreendido por órgão de fiscalização ou outro órgão anuente",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 43): (
        "customs_control",
        "Objeto apreendido por órgão de fiscalização ou outro órgão anuente",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 43): (
        "customs_control",
        "Objeto apreendido por órgão de fiscalização ou outro órgão anuente",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 45): (
        "shipped",
        "Objeto recebido na unidade de distribuição",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("BDI", 45): (
        "shipped",
        "Objeto recebido na unidade de distribuição",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("BDR", 45): (
        "shipped",
        "Objeto recebido na unidade de distribuição",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("BDE", 46): (
        "delivery_unsuccessful",
        "Tentativa de entrega não efetuada",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("BDI", 46): (
        "delivery_unsuccessful",
        "Tentativa de entrega não efetuada",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("BDR", 46): (
        "delivery_unsuccessful",
        "Tentativa de entrega não efetuada",
        "Entrega prevista para o próximo dia útil",
        "Acompanhar",
    ),
    ("BDE", 47): (
        "delivery_unsuccessful",
        "Saída para entrega cancelada",
        "Será efetuado novo lançamento para entrega",
        "Acompanhar",
    ),
    ("BDI", 47): (
        "delivery_unsuccessful",
        "Saída para entrega cancelada",
        "Será efetuado novo lançamento para entrega",
        "Acompanhar",
    ),
    ("BDR", 47): (
        "delivery_unsuccessful",
        "Saída para entrega cancelada",
        "Será efetuado novo lançamento para entrega",
        "Acompanhar",
    ),
    ("BDE", 48): (
        "delivery_rejected",
        "Retirada em Unidade dos Correios não autorizada pelo remetente",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 48): (
        "delivery_rejected",
        "Retirada em Unidade dos Correios não autorizada pelo remetente",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 48): (
        "delivery_rejected",
        "Retirada em Unidade dos Correios não autorizada pelo remetente",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 49): (
        "delivery_unsuccessful",
        "As dimensões do objeto impossibilitam o tratamento e a entrega",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 49): (
        "delivery_unsuccessful",
        "As dimensões do objeto impossibilitam o tratamento e a entrega",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 49): (
        "delivery_unsuccessful",
        "As dimensões do objeto impossibilitam o tratamento e a entrega",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 50): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 50): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 50): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 51): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 51): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 51): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 52): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDI", 52): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 52): (
        "lost",
        "Objeto roubado",
        "Favor entrar em contato com os Correios.",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 53): (
        "shipped",
        "Objeto reimpresso e reenviado",
        "",
        "Acompanhar. O objeto impresso pelos Correios precisou ser refeito e reenviado.",
    ),
    ("BDI", 53): (
        "shipped",
        "Objeto reimpresso e reenviado",
        "",
        "Acompanhar. O objeto impresso pelos Correios precisou ser refeito e reenviado.",
    ),
    ("BDR", 53): (
        "shipped",
        "Objeto reimpresso e reenviado",
        "",
        "Acompanhar. O objeto impresso pelos Correios precisou ser refeito e reenviado.",
    ),
    ("BDE", 54): (
        "customs_control",
        "Para recebimento do objeto, é necessário o pagamento do ICMS Importação",
        "",
        "Acompanhar. O interessado deverá pagar o imposto devido para retirar o objeto em uma Unidade dos Correios.",
    ),
    ("BDI", 54): (
        "customs_control",
        "Para recebimento do objeto, é necessário o pagamento do ICMS Importação",
        "",
        "Acompanhar. O interessado deverá pagar o imposto devido para retirar o objeto em uma Unidade dos Correios.",
    ),
    ("BDR", 54): (
        "customs_control",
        "Para recebimento do objeto, é necessário o pagamento do ICMS Importação",
        "",
        "Acompanhar. O interessado deverá pagar o imposto devido para retirar o objeto em uma Unidade dos Correios.",
    ),
    ("BDE", 55): ("customs_control", "Solicitada revisão do tributo estabelecido", "", "Acompanhar"),
    ("BDI", 55): ("customs_control", "Solicitada revisão do tributo estabelecido", "", "Acompanhar"),
    ("BDR", 55): ("customs_control", "Solicitada revisão do tributo estabelecido", "", "Acompanhar"),
    ("BDE", 56): (
        "customs_control",
        "Declaração aduaneira ausente ou incorreta",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDI", 56): (
        "customs_control",
        "Declaração aduaneira ausente ou incorreta",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDR", 56): (
        "customs_control",
        "Declaração aduaneira ausente ou incorreta",
        "Objeto será devolvido ao remetente",
        "Acompanhar o retorno do objeto ao remetente.",
    ),
    ("BDE", 57): ("customs_control", "Revisão de tributo concluída - Objeto liberado", "", "Acompanhar"),
    ("BDI", 57): ("customs_control", "Revisão de tributo concluída - Objeto liberado", "", "Acompanhar"),
    ("BDR", 57): ("customs_control", "Revisão de tributo concluída - Objeto liberado", "", "Acompanhar"),
    ("BDE", 58): (
        "customs_control",
        "Revisão de tributo concluída - Tributo alterado",
        "O valor do tributo pode ter aumentado ou diminuído",
        "Acompanhar",
    ),
    ("BDI", 58): (
        "customs_control",
        "Revisão de tributo concluída - Tributo alterado",
        "O valor do tributo pode ter aumentado ou diminuído",
        "Acompanhar",
    ),
    ("BDR", 58): (
        "customs_control",
        "Revisão de tributo concluída - Tributo alterado",
        "O valor do tributo pode ter aumentado ou diminuído",
        "Acompanhar",
    ),
    ("BDE", 59): (
        "customs_control",
        "Revisão de tributo concluída - Tributo mantido",
        "Poderá haver incidência de juros e multa.",
        "Acompanhar",
    ),
    ("BDI", 59): (
        "customs_control",
        "Revisão de tributo concluída - Tributo mantido",
        "Poderá haver incidência de juros e multa.",
        "Acompanhar",
    ),
    ("BDR", 59): (
        "customs_control",
        "Revisão de tributo concluída - Tributo mantido",
        "Poderá haver incidência de juros e multa.",
        "Acompanhar",
    ),
    ("BDR", 60): ("shipped", "O objeto encontra-se aguardando prazo para refugo", "", "Acompanhar"),
    ("BDI", 60): ("shipped", "O objeto encontra-se aguardando prazo para refugo", "", "Acompanhar"),
    ("BDE", 66): (
        "shipped_delayed",
        "Área com distribuição sujeita a prazo diferenciado",
        "Restrição de entrega domiciliar temporária",
        "Acompanhar",
    ),
    ("BDI", 66): (
        "shipped_delayed",
        "Área com distribuição sujeita a prazo diferenciado",
        "Restrição de entrega domiciliar temporária",
        "Acompanhar",
    ),
    ("BDR", 66): (
        "shipped_delayed",
        "Área com distribuição sujeita a prazo diferenciado",
        "Restrição de entrega domiciliar temporária",
        "Acompanhar",
    ),
    ("BDE", 68): (
        "waiting_retrieval",
        "Objeto entregue na Caixa de Correios Inteligente",
        "Estará disponível por até 3 dias, a partir de hoje",
        "Acompanhar",
    ),
    ("BDI", 68): (
        "waiting_retrieval",
        "Objeto entregue na Caixa de Correios Inteligente",
        "Estará disponível por até 3 dias, a partir de hoje",
        "Acompanhar",
    ),
    ("BDR", 68): (
        "waiting_retrieval",
        "Objeto entregue na Caixa de Correios Inteligente",
        "Estará disponível por até 3 dias, a partir de hoje",
        "Acompanhar",
    ),
    ("BDE", 69): ("shipped_delayed", "Objeto com atraso na entrega", "", "Acompanhar"),
    ("BDI", 69): ("shipped_delayed", "Objeto com atraso na entrega", "", "Acompanhar"),
    ("BDR", 69): ("shipped_delayed", "Objeto com atraso na entrega", "", "Acompanhar"),
    ("BDE", 70): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDR", 70): (
        "delivered",
        "Objeto entregue ao destinatário",
        "Recebido por:",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDE", 71): (
        "customs_control",
        "Objeto apreendido por: ANVISA/VIGILANCIA SANITARIA",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 71): (
        "customs_control",
        "Objeto apreendido por: ANVISA/VIGILANCIA SANITARIA",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 72): (
        "customs_control",
        "Objeto apreendido por: BOMBEIROS",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 72): (
        "customs_control",
        "Objeto apreendido por: BOMBEIROS",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 73): (
        "customs_control",
        "Objeto apreendido por: EXERCITO",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 73): (
        "customs_control",
        "Objeto apreendido por: EXERCITO",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 74): (
        "customs_control",
        "Objeto apreendido por: IBAMA",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 74): (
        "customs_control",
        "Objeto apreendido por: IBAMA",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 75): (
        "customs_control",
        "Objeto apreendido por: POLICIA FEDERAL",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 75): (
        "customs_control",
        "Objeto apreendido por: POLICIA FEDERAL",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 76): (
        "customs_control",
        "Objeto apreendido por: POLICIA CIVIL/MILITAR",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDR", 76): (
        "customs_control",
        "Objeto apreendido por: POLICIA CIVIL/MILITAR",
        "O objeto está em poder da autoridade competente",
        "Acionar atendimento dos Correios.",
    ),
    ("BDE", 79): (
        "delivered",
        "Objeto entregue ao contratante",
        "Contingência COVID-19",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDI", 79): (
        "delivered",
        "Objeto entregue ao contratante",
        "Contingência COVID-19",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDR", 79): (
        "delivered",
        "Objeto entregue ao contratante",
        "Contingência COVID-19",
        "Finalizar a entrega. Não é mais necessário prosseguir com o acompanhamento.",
    ),
    ("BDE", 80): ("lost", "Objeto extraviado", "", "Acionar a CAC dos Correios"),
    ("BDI", 80): ("lost", "Objeto extraviado", "", "Acionar a CAC dos Correios"),
    ("BDR", 80): ("lost", "Objeto extraviado", "", "Acionar a CAC dos Correios"),
    ("BDE", 89): ("lost", "Localidade desconhecida no Brasil", "Objeto será devolvido ao remetente", "Acompanhar"),
    ("BDI", 89): ("lost", "Localidade desconhecida no Brasil", "Objeto será devolvido ao remetente", "Acompanhar"),
    ("BDR", 89): ("lost", "Localidade desconhecida no Brasil", "Objeto será devolvido ao remetente", "Acompanhar"),
    ("CMR", 1): ("shipped", "Conferido", "", "Acompanhar"),
}

ZIP_CODE_MAP = {
    "SP": (RangeSet((1000, 20000)), RangeSet((1000, 6000), (8000, 8500))),  # all  # capital
    "RJ": (RangeSet((20000, 29000)), RangeSet((20000, 23800))),
    "ES": (RangeSet((29000, 30000)), RangeSet((29000, 29100))),
    "MG": (RangeSet((30000, 40000)), RangeSet((30000, 32000))),
    "BA": (RangeSet((40000, 49000)), RangeSet((40000, 42600))),
    "SE": (RangeSet((49000, 50000)), RangeSet((49000, 49100))),
    "PE": (RangeSet((50000, 57000)), RangeSet((50000, 53000))),
    "AL": (RangeSet((57000, 58000)), RangeSet((57000, 57100))),
    "PB": (RangeSet((58000, 59000)), RangeSet((58000, 58100))),
    "RN": (RangeSet((59000, 60000)), RangeSet((59000, 59140))),
    "CE": (RangeSet((60000, 64000)), RangeSet((60000, 61600))),
    "PI": (RangeSet((64000, 65000)), RangeSet((64000, 64100))),
    "MA": (RangeSet((65000, 66000)), RangeSet((65000, 65110))),
    "PA": (RangeSet((66000, 68900)), RangeSet((66000, 67000))),
    "AP": (RangeSet((68900, 69000)), RangeSet((68900, 68915))),
    "AM": (RangeSet((69000, 69300), (69400, 69900)), RangeSet((69000, 69100), (69000, 69100))),
    "RR": (RangeSet((69300, 69400)), RangeSet((69300, 69340))),
    "AC": (RangeSet((69900, 70000)), RangeSet((69900, 69925))),
    "DF": (RangeSet((70000, 72800), (73000, 73700)), RangeSet((70000, 72800), (73000, 73700))),
    "GO": (RangeSet((72800, 73000), (73700, 76800)), RangeSet((74000, 74900))),
    "TO": (RangeSet((77000, 78000)), RangeSet((77000, 77300))),
    "MT": (RangeSet((78000, 78900)), RangeSet((78000, 78110))),
    "RO": (RangeSet((76800, 77000), (78900, 79000)), RangeSet((76800, 76850), (78900, 78925))),
    "MS": (RangeSet((79000, 80000)), RangeSet((79000, 79130))),
    "PR": (RangeSet((80000, 88000)), RangeSet((80000, 83000))),
    "SC": (RangeSet((88000, 90000)), RangeSet((88000, 88100))),
    "RS": (RangeSet((90000, 100000)), RangeSet((90000, 92000))),
}  # type: Dict[str, Tuple[RangeSet, RangeSet]]

ZIP_CODES = RangeSet(*(p[0] for p in ZIP_CODE_MAP.values()))

FREIGHT_ERROR_RESPONSES = {
    0: "Processamento com sucesso",
    -1: "Código de serviço inválido",
    -2: "CEP de origem inválido",
    -3: "CEP de destino inválido",
    -4: "Peso excedido",
    -5: "O Valor Declarado não deve exceder R$ 10.000,00",
    -6: "Serviço indisponível para o trecho informado",
    -7: "O Valor Declarado é obrigatório para este serviço",
    -8: "Este serviço não aceita Mão Própria",
    -9: "Este serviço não aceita Aviso de Recebimento",
    -10: "Precificação indisponível para o trecho informado",
    -11: "Para definição do preço deverão ser informados, também, o comprimento, "
    "a largura e altura do objeto em centímetros (cm).",
    -12: "Comprimento inválido.",
    -13: "Largura inválida.",
    -14: "Altura inválida.",
    -15: "O comprimento não pode ser maior que 100 cm.",
    -16: "A largura não pode ser maior que 100 cm.",
    -17: "A altura não pode ser maior que 100 cm.",
    -18: "A altura não pode ser inferior a 1 cm.",
    -20: "A largura não pode ser inferior a 10 cm.",
    -22: "O comprimento não pode ser inferior a 15 cm.",
    -23: "A soma resultante do comprimento + largura + altura não deve superar a 200 cm.",
    -24: "Comprimento inválido.",
    -25: "Diâmetro inválido",
    -26: "Informe o comprimento.",
    -27: "Informe o diâmetro.",
    -28: "O comprimento não pode ser maior que 100 cm.",
    -29: "O diâmetro não pode ser maior que 91 cm.",
    -30: "O comprimento não pode ser inferior a 18 cm.",
    -31: "O diâmetro não pode ser inferior a 5 cm.",
    -32: "A soma resultante do comprimento + o dobro do diâmetro não deve superar a 200 cm.",
    -33: "Sistema temporariamente fora do ar. Favor tentar mais tarde.",
    -34: "Código Administrativo ou Senha inválidos.",
    -35: "Senha incorreta.",
    -36: "Cliente não possui contrato vigente com os Correios.",
    -37: "Cliente não possui serviço ativo em seu contrato.",
    -38: "Serviço indisponível para este código administrativo.",
    -39: "Peso excedido para o formato envelope",
    -40: (
        "Para definicao do preco deverao ser informados, tambem, o comprimento e a "
        "largura e altura do objeto em centimetros (cm)."
    ),
    -41: "O comprimento nao pode ser maior que 60 cm.",
    -42: "O comprimento nao pode ser inferior a 15 cm.",
    -43: "A soma resultante do comprimento + largura nao deve superar a 120 cm.",
    -44: "A largura nao pode ser inferior a 10 cm.",
    -45: "A largura nao pode ser maior que 60 cm.",
    -888: "Erro ao calcular a tarifa",
    6: "Localidade de origem não abrange o serviço informado",
    # 7: 'Localidade de destino não abrange o serviço informado',
    7: "Serviço indisponível, tente mais tarde",  #
    8: "Serviço indisponível para o trecho informado",
    9: "CEP inicial pertencente a Área de Risco.",
    10: "Área com entrega temporariamente sujeita a prazo diferenciado.",
    11: "CEP inicial e final pertencentes a Área de Risco",
    99: "Outros erros diversos do .Net",
}

FREIGHT_ERROR_INITIAL_ZIPCODE_RESTRICTED = 9
FREIGHT_ERROR_FINAL_ZIPCODE_RESTRICTED = 10
FREIGHT_ERROR_INITIAL_AND_FINAL_ZIPCODE_RESTRICTED = 11
