import React,{useEffect,useState,lazy,Suspense} from 'react'; import {stockSections,visibleStockSections,stockOperations,availableStockReports} from './stock-menu.js'; import StockReadWorkspace from './StockReadWorkspace.jsx'; import StockPeriodReportWorkspace from './StockPeriodReportWorkspace.jsx'; const StockInactiveReportWorkspace=lazy(()=>import('./StockInactiveReportWorkspace.jsx')); export default function StockMenuWorkspace({section,context,can,navigate,api,openReceiptOrigin}) { const [reportId,setReportId]=useState('balances'); useEffect(()=>{setReportId('balances');},[context.token]); if(!can('company.view'))return

Stock

Seleccione uma empresa autorizada.

; const active=stockSections.find(s=>s.id===section); if(!active)return null; const operation=stockOperations[section]; const canRead=Boolean(api&&context.unit&&can('stock.view',context.unit.id)); const commands=Boolean(context.stock?.operations===true&&context.unit&&can('stock.view',context.unit.id)&&(can('stock.operations.prepare',context.unit.id)||can('stock.operations.confirm',context.unit.id))); const commandSection=commands&&['stock_issues','stock_transfers','stock_balances'].includes(section); const periodAvailable=canRead&&context.stock?.period_report===true&&reportId==='movements'; const reports=availableStockReports({history:context.stock?.inactive_report===true,...(context.stock?.final?{transit:true,lots:true,inventory:true,returns:context.stock?.completion===true}:{})},false),report=reports.find(r=>r.id===reportId)??reports[0]; const tabs=; return

STOCK

{active.label}

{context.company.name}{context.unit?` / ${context.unit.name}`:''}

{tabs} {canRead?
Consulta condicionada à fonte sintética autorizada.

As operações disponíveis dependem do perfil e do percurso indicado abaixo. A consulta não altera os saldos de Compras.

:
Menu em preparação — fonte de stock ainda não ligada ao SGF.

Os saldos e movimentos de Compras permanecem na sua aplicação. Aqui não são apresentados como zero, importados ou alterados. Os apontamentos da oficina não são existências de armazém.

} {context.stock?.catalogue===true&&canRead&&['stock_panel','stock_balances'].includes(section)&&

Artigos e revisão do catálogo

Consultar artigos existentes ou preparar um novo código, designação e unidade para revisão distinta. Aprovar disponibiliza o artigo sem saldo inicial; não cria movimentos ou custos.

Abrir cadastro de artigos
} {section==='stock_panel'&&<>

Situação actual

{canRead?<>

Consulte o mesmo livro físico de Compras, os movimentos por período e as operações autorizadas pelo seu perfil.

{context.stock?.final===true&&Abrir trânsito, lotes e inventário}:

Seleccione um perfil com acesso à fonte física para consultar as existências.

}

Escolher percurso

{stockSections.filter(s=>s.id!=='stock_panel').map(s=>)}
} {section==='stock_balances'&&canRead&&} {context.stock?.completion===true&&canRead&&['stock_panel','stock_balances','stock_returns','stock_reports'].includes(section)&&can('stock.planning.view',context.unit.id)&&

Políticas e devoluções ao fornecedor

Definir mínimos com revisão distinta e preparar a devolução física pela recepção exacta. Aprovação, saída e valorização são passos individuais; não há compra ou crédito financeiro automático.

Abrir políticas e devoluções ao fornecedor
} {section==='stock_balances'&&!canRead&&<>

Consulta de existências indisponível

Falta a fonte autorizada de produtos, armazéns e saldos desta empresa. Não há uma lista vazia de existências nem um saldo editável.

Físico
Quantidade efectivamente registada no armazém, incluindo reservado e bloqueado.
Reservado
Quantidade comprometida com documentos próprios, quando o controlo estiver activo.
Bloqueado
Quantidade indisponível por condição ou qualidade, sem sobreposição com reservas.
Disponível
Físico menos reservado e bloqueado. Mercadoria em trânsito não está disponível no destino.

Se uma dessas parcelas não estiver sustentada, o disponível fica indeterminado; não se usa zero como substituto.

Pesquisa e rastreabilidade previstas

Produto por código, designação ou código de barras; armazém, categoria e situação de stock. Localização, lote, série e validade só serão apresentados se configurados.

A ficha dará acesso ao movimento e ao documento original. Diferenças físicas serão tratadas por contagem e ajuste autorizado em Inventário, nunca por edição directa do saldo.

} {commandSection&&

Registar operação física

Conferir o saldo actual, preparar o impacto e confirmar uma saída ou transferência pelos controlos originais de armazém. A transferência é imediata e atómica entre os dois armazéns; não representa mercadoria em trânsito.

Abrir operações de Stock
} {context.stock?.final===true&&canRead&&['stock_transfers','stock_inventory','stock_balances'].includes(section)&&

Trânsito e controlo por lotes

Expedição e recepção distintas, identificação, retenção, libertação, contagem e ajuste conferido. Cada decisão exige autoridade própria e nova conferência do estado.

Abrir o percurso de Stock
} {context.single_installation&&canRead&§ion==='stock_receipts'&&

Entradas pela recepção de Compras

A ordem e a recepção aceite alimentam este mesmo livro físico. A factura não cria outra entrada.

{can('purchasing_receipts.view',context.unit.id)?:Escolher uma função de recepção de Compras}
} {context.single_installation&&canRead&§ion==='stock_returns'&&

Material não usado da oficina

A declaração mantém a entrega de origem, a quantidade elegível e o comprovativo. Outra função recebe fisicamente a devolução no mesmo armazém, sem apagar a saída ou repetir o consumo.

{can('workshop_stock.view',context.unit.id)?:Escolher a função autorizada de Oficina}

Devoluções comerciais de clientes ou a fornecedores exigem os seus documentos próprios; não são inferidas deste retorno de material.

} {operation&&!commandSection&&!(context.single_installation&&canRead&&['stock_receipts','stock_returns'].includes(section))&&!(context.stock?.final===true&§ion==='stock_inventory')&&<>

{operation.title}

{operation.purpose}

Operação indisponível no SGF. Não há confirmação ou gravação neste ecrã.

Campos do percurso previsto

    {operation.fields.map(f=>
  • {f}
  • )}

Localizações, lotes, séries, validade e câmbio só entram quando o produto e a configuração os exigirem. Não são assumidos por omissão.

Etapas previstas

    {operation.flow.map(step=>
  1. {step}
  2. )}

O que já existe e o que falta

{operation.existing}

{operation.missing}

Prevenção de duplicações: {operation.control}

} {section==='stock_reports'&&<>

Relatórios essenciais

{report.label}

Base temporal: {report.basis}.

Informação prevista: {report.fields}

{context.stock?.final===true&&['transit','expiry','inventory'].includes(reportId)?<>

Consulta actual no percurso integrado, com trânsito por receber e quantidades por lote. Os movimentos por período têm filtro próprio.

Consultar trânsito, lotes e inventário:context.stock?.completion===true&&can('stock.planning.view',context.unit?.id)&&['minimum','returns'].includes(reportId)?<>

Consulta dos mínimos revistos, saldo físico e devoluções da origem QA autorizada. A falta de política nos restantes artigos continua indeterminada.

Consultar políticas, mínimos e devoluções:canRead&&reportId==='balances'?:canRead&&context.stock?.inactive_report===true&&reportId==='inactive'?A abrir relatório…

}>
:periodAvailable?:<>

Consulta indisponível. {report.missing}

Não é possível gerar, imprimir ou exportar um relatório sem a sua fonte. A falta de informação não é apresentada como ausência de movimentos.

}

Disponibilidade dos restantes relatórios

Valorização exige custos, método configurado e permissão própria. Dados de custos não são carregados por este menu. As consultas disponíveis estão no selector acima e nos percursos de trânsito, lotes, inventário e políticas autorizados. As restantes definições não substituem uma fonte implementada.

A consulta e a exportação terão de preservar os mesmos filtros, autorizações, abertura e fecho. Reservas e bloqueios históricos não serão substituídos por valores actuais.

}

Regras comuns do percurso

Um rascunho não altera stock. A confirmação revalida permissões e quantidades, tem um único efeito e conserva actor, data, motivo e origem. Movimentos confirmados não são editados ou apagados; correcções exigem operação própria ligada ao original.

Acesso a este mapa não concede consulta de armazéns, custos ou movimentos. A integração operacional terá autorizações específicas e contexto explícito, preservando as diferenças entre empresa, unidade e armazém.

; }