"""Preparacao das bases operacionais do Planejador Missao. Entradas: Planilhas e CSVs em dados/: cadastro, catalogo de OIs, indisponibilidades, progresso, historico, aeronaves, tripulantes disponiveis e rotas acionadas. Saidas: Dicionario com DataFrames normalizados para geracao de colunas candidatas. Papel no pipeline: Concentra a leitura e a preparacao antes do MILP, mantendo rastreavel quais arquivos alimentam cada execucao. """ from __future__ import annotations import importlib from pathlib import Path config = importlib.import_module("01_config") io_utils = importlib.import_module("02_io_utils") def carregar_bases(base_dir: Path = config.PROJECT_ROOT) -> dict: """Le e normaliza todas as bases necessarias ao planejamento diario.""" io_utils.configurar_ambiente() io_utils.exigir_arquivos(config.ARQUIVOS_ENTRADA_OBRIGATORIOS) from src.planejador_missao.data_io import ( carregar_aeronaves, carregar_cadastro, carregar_catalogo_ois, carregar_historico, carregar_indisponibilidades, carregar_parametros, carregar_progresso_ois, carregar_rotas, carregar_tripulantes_disponiveis, ) from src.planejador_missao.rules import combinar_progresso_com_historico parametros = carregar_parametros(base_dir) historico = carregar_historico(base_dir) cadastro = carregar_cadastro(base_dir, historico) catalogo = carregar_catalogo_ois(base_dir) indisponibilidades = carregar_indisponibilidades(base_dir) progresso = combinar_progresso_com_historico(carregar_progresso_ois(base_dir), historico, catalogo) return { "parametros": parametros, "historico": historico, "cadastro": cadastro, "catalogo": catalogo, "indisponibilidades": indisponibilidades, "progresso": progresso, "aeronaves": carregar_aeronaves(base_dir), "disponiveis": carregar_tripulantes_disponiveis(base_dir), "rotas": carregar_rotas(base_dir), } def main() -> None: """Executa uma leitura de diagnostico das bases.""" logger = io_utils.configurar_logger("preparar_dados") bases = carregar_bases() logger.info("Tripulantes no cadastro: %s", len(bases["cadastro"])) logger.info("Tripulantes disponiveis: %s", len(bases["disponiveis"])) logger.info("Aeronaves informadas: %s", len(bases["aeronaves"])) logger.info("Rotas acionadas: %s", len(bases["rotas"])) if __name__ == "__main__": main()