# Uma PARADA do romaneio — vira uma linha da tabela do PDF. # # ⚠️ "linhas" e não "itens": "RomaneioItem".tableize dá `romaneio_items`, e o # inflector pt-BR do projeto (config/initializers/inflections.rb) não conhece # item/itens — ensiná-lo renomearia todo `item`/`items` do app. `RomaneioLinha` # pluraliza sozinho, e `linhas` já é a palavra que os serviços usam # (PlanilhaEntregas#linhas, PlanilhaCarga#linhas). Travado em # spec/models/table_names_spec.rb, que existe porque ConsolidacaoMotorista já # quebrou em produção por causa do inflector. # # `chave_origem` é a identidade ESTÁVEL entre reimportações: a NF quando existe, # senão "T:". Sem esse fallback, duas linhas cujo "Título" não # casa o padrão "NF n - NOME" colidiriam no índice único e a importação inteira # estouraria. Veículo e ordem NÃO entram na chave: eles mudam quando o plano é # reotimizado, e a linha continua sendo a mesma entrega. # # `origem` = snapshot do que o PLANO trouxe na última importação (para o # diff e para o botão "restaurar do plano"). # `campos_editados` = nomes dos campos que o operador sobrescreveu. É ISTO que # sobrevive à reimportação — dirty tracking POR CAMPO, não por # linha: "corrigi o telefone" não pode significar "também # respondo pelo endereço" e congelar um endereço velho. # `removido_em` = a linha saiu do plano mas tinha edição humana. Soft, porque # apagar levaria junto o trabalho sem deixar rastro na tela. class CreateRomaneioLinhas < ActiveRecord::Migration[7.1] def change create_table :romaneio_linhas do |t| t.references :romaneio, null: false, foreign_key: true t.string :veiculo, null: false t.integer :ordem, null: false, default: 0 t.string :chave_origem, null: false t.string :nota_fiscal, null: false, default: '' t.string :nome, null: false, default: '' t.text :endereco, null: false, default: '' t.string :aparelho, null: false, default: '' # 'SIM' ou '' t.string :telefones, null: false, default: '' t.jsonb :origem, null: false, default: {} t.jsonb :campos_editados, null: false, default: [] t.datetime :removido_em t.timestamps end add_index :romaneio_linhas, %i[romaneio_id chave_origem], unique: true, name: 'idx_romaneio_linha_chave_unico' add_index :romaneio_linhas, %i[romaneio_id veiculo ordem], name: 'idx_romaneio_linha_ordem' end end