Skip to content

Conversation

@puppe1990
Copy link
Member

Resumo da Mudança

  • Adicionado suporte a itens agrupados como “kits” (lotes/combos) usando uma composição de itens.
  • Um kit é um Item que possui componentes e suas quantidades através de ItemComponent.
  • Saída de estoque de um kit desconta automaticamente o estoque de cada componente proporcionalmente.
  • Estoque “atual” de um kit passa a ser derivado como o mínimo entre (estoque de cada componente / quantidade exigida).
  • Formulário de Item atualizado para permitir gerenciar componentes quando o item_type for “kit”.

Detalhes Técnicos

  • Novo modelo ItemComponent:
    • Associações: belongs_to :team, belongs_to :kit_item, class_name: 'Item', belongs_to :component_item, class_name: 'Item'.
    • Validações: quantidade > 0; kit e componente no mesmo time; não pode referenciar o mesmo item.
  • Migração db/migrate/20250915090000_create_item_components.rb:
    • Cria tabela item_components com team_id, kit_item_id, component_item_id, quantity:decimal(10,2), índices e FKs.
  • Item:
    • Associações de kit: has_many :kit_components, has_many :components, through: :kit_components, além de reverse_kit_components e used_in_kits.
    • accepts_nested_attributes_for :kit_components, allow_destroy: true.
    • current_stock agora retorna “estoque derivado” para kits, calculado por kit_available_stock.
    • kit? indica kit se houver componentes.
  • ItemsController:
    • new e edit constroem linhas iniciais para componentes (3 linhas).
    • Strong params permite kit_components_attributes: [:id, :component_item_id, :quantity, :_destroy].
  • StockTransactionsController:
    • Em stock_out (POST) e no create com transaction_type == "stock_out":
    • Se o item é kit, valida disponibilidade de todos os componentes e cria transações de saída negativas para cada componente em vez do kit.
    • Notas incluem referência ao kit para rastreabilidade.
    • Continua suportando item simples sem alterações no fluxo.
  • app/views/items/_form.html.erb:
    • Se item_type é “kit” (ou se já possui componentes), exibe seção para gerenciar componentes com select de item e quantidade, além de checkbox de remoção.

Como usar (Fluxo)

  • Cadastre/edite um Item com item_type = "kit".
  • Na seção “Kit Components” selecione itens componentes e quantidades.
  • Ao realizar saída de estoque e selecionar o kit, o sistema desconta os componentes conforme as quantidades configuradas.
  • A disponibilidade exibida de um kit passa a refletir o mínimo combinável dos componentes.

Limitações e Próximos Passos

  • O fluxo de “entrada” e “ajuste” não realiza “montagem” de kits (não converte componentes em kits automaticamente). Se desejar, posso implementar um fluxo de montagem/desmontagem de kits.
  • Movimentação entre locais (“move”) de kits não expande para componentes; atualmente, recomendo mover componentes diretamente. Posso implementar expansão também para “move” se necessário.
  • UI de busca/listagem ainda mostra “Stock” do kit via current_stock derivado; isso deve ser suficiente, mas posso adicionar rótulos visuais “Kit” e exibir a composição na tela do item.
  • Não há validação de circularidade (kit dentro de kit recursivo). Podemos adicionar se for requisito.

Checks antes do commit

  • bin/rubocop: falhou por gems ausentes no ambiente local (“Could not find ... in locally installed gems”).
  • bin/brakeman --no-pager: não executado devido à mesma limitação de dependências.
  • bin/importmap audit: não executado pela limitação.
  • bin/rails db:test:prepare e bin/rails test: não executados por dependências/DB não configurados no sandbox.

Se quiser, executo essas verificações localmente quando as dependências estiverem instaladas (bundle install, DB up). Posso também ajustar o fluxo para “move” e “stock_in” com kits (montagem) conforme sua preferência.

Commits

  • Mensagem sugerida: “Add item kits via ItemComponent and expand stock_out to components”

Arquivos alterados

  • Added: app/models/item_component.rb
  • Added: db/migrate/20250915090000_create_item_components.rb
  • Updated: app/models/item.rb (associações, cálculo de estoque de kit)
  • Updated: app/controllers/items_controller.rb (nested attrs e preparação de form)
  • Updated: app/controllers/stock_transactions_controller.rb (expansão de kits no stock_out)
  • Updated: app/views/items/_form.html.erb (seção de componentes para kits)

Quer que eu também:

  • Adicione a expansão de kits no “move”?
  • Implemente montagem/desmontagem (stock_in de kit consome componentes)?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants