# Romaneio = UM plano do SimpliRoute importado para virar o "CONTROLE DE ENTREGA" # que o motorista assina ao retirar a carga. # # Chave (planned_date, operacao_tabela): o eixo de busca da API é a data, e a fonte # do enriquecimento (APARELHO/telefones) é exatamente UMA tabela gade_entregas_*. # Duas operações podem dividir a mesma data com veículos distintos, daí a dupla. # # `rotulo_plano` ("EMAD 09.2026") é APRESENTAÇÃO — sai no canto direito do PDF e o # operador reescreve à vontade. Por isso NÃO entra na chave: renomear o rótulo não # pode criar um segundo romaneio do mesmo dia. # # `operacao_tabela` é NOT NULL com default '' de propósito: no Postgres dois NULLs # são distintos entre si, e um índice único sobre coluna anulável deixaria passar # duplicata justamente no caso "romaneio sem operação escolhida". class CreateRomaneios < ActiveRecord::Migration[7.1] def change create_table :romaneios do |t| t.date :planned_date, null: false t.string :operacao_tabela, null: false, default: '' t.string :rotulo_plano, null: false, default: '' # 'api' (rotas do SimpliRoute) | 'espelho' (db_reem_simplerout_2026) | # 'planilha' (upload do .xlsx do plano) t.string :origem, null: false, default: 'api' t.datetime :importado_em t.references :importado_por, foreign_key: { to_table: :users } t.timestamps end add_index :romaneios, %i[planned_date operacao_tabela], unique: true, name: 'idx_romaneios_data_operacao_unico' end end