"""Geracao das colunas candidatas viaveis. Entradas: Bases preparadas por 03_preparar_dados.py. Saidas: DataFrame em que cada linha representa uma escala possivel: rota acionada, missao local ou sobreaviso, com dupla, aeronave, score, custo e metadados. Papel no pipeline: Materializa o espaco de decisoes do MILP. A compatibilidade de aeronave, indisponibilidade, qualificacao e regra de instrucao ja sao filtradas aqui. """ from __future__ import annotations import importlib preparar = importlib.import_module("03_preparar_dados") io_utils = importlib.import_module("02_io_utils") def gerar_colunas_do_dia(bases: dict): """Gera colunas candidatas para a data e parametros informados nas bases.""" from src.planejador_missao.candidates import gerar_colunas parametros = bases["parametros"] # Cada coluna candidata equivale a uma variavel x_j do MILP. # As regras de dupla, qualificacao, instrucao e indisponibilidade sao # aplicadas antes do solver para reduzir o modelo a alternativas viaveis. return gerar_colunas( parametros["data_planejamento"], bases["rotas"], bases["aeronaves"], bases["cadastro"], bases["indisponibilidades"], bases["progresso"], bases["catalogo"], bases["disponiveis"], parametros["criterio_missao"], parametros["criterio_sbv"], ) def main() -> None: """Executa diagnostico da geracao de colunas.""" logger = io_utils.configurar_logger("gerar_colunas") bases = preparar.carregar_bases() colunas = gerar_colunas_do_dia(bases) logger.info("Colunas candidatas geradas: %s", len(colunas)) if colunas.empty: logger.warning("Nenhuma coluna candidata viavel foi gerada.") if __name__ == "__main__": main()