diff --git a/src/components/users/matriz/MatrizGrupoAvancadoModal.tsx b/src/components/users/matriz/MatrizGrupoAvancadoModal.tsx index a1bc459..4c6713b 100644 --- a/src/components/users/matriz/MatrizGrupoAvancadoModal.tsx +++ b/src/components/users/matriz/MatrizGrupoAvancadoModal.tsx @@ -27,26 +27,33 @@ import { ArrowUpDown, Layers, AlertTriangle, - Gauge, Download, - DollarSign, Network, UploadCloud, Compass, - Scale, - Percent, - FileSignature, - EyeOff, Barcode, PackageCheck, CheckSquare, - AlertOctagon, Activity, - DownloadCloud, Settings, Crown, Wrench, Calendar, + Trash2, + FileSpreadsheet, + PlusCircle, + PlusSquare, + Edit3, + FileText, + Printer, + FileInput, + ShoppingCart, + CheckCheck, + AlertCircle, + Settings2, + Users, + ShieldCheck, + KeyRound, } from 'lucide-react'; import { useGrupoAvancadoPermissions } from '@/hooks/useGrupoAvancadoPermissions'; @@ -114,40 +121,52 @@ export const MatrizGrupoAvancadoModal: React.FC = return ; case 'Layers': return ; - case 'AlertTriangle': - return ; - case 'Gauge': - return ; - case 'CheckCircle2': - return ; - case 'Download': - return ; - case 'DollarSign': - return ; - case 'Network': - return ; + case 'Trash2': + return ; + case 'FileSpreadsheet': + return ; + case 'PlusCircle': + return ; + case 'PlusSquare': + return ; + case 'Edit3': + return ; case 'UploadCloud': return ; - case 'Scale': - return ; - case 'Percent': - return ; - case 'FileSignature': - return ; - case 'EyeOff': - return ; - case 'RotateCcw': - return ; + case 'Network': + return ; + case 'Download': + return ; + case 'FileText': + return ; case 'PackageCheck': return ; case 'CheckSquare': return ; - case 'AlertOctagon': - return ; + case 'RotateCcw': + return ; + case 'Printer': + return ; + case 'SlidersHorizontal': + return ; + case 'FileInput': + return ; + case 'ShoppingCart': + return ; + case 'CheckCheck': + return ; + case 'AlertCircle': + return ; + case 'Settings2': + return ; + case 'Users': + return ; + case 'ShieldCheck': + return ; + case 'KeyRound': + return ; case 'Activity': return ; - case 'DownloadCloud': - return ; case 'Settings': return ; case 'Crown': @@ -156,6 +175,12 @@ export const MatrizGrupoAvancadoModal: React.FC = return ; case 'Wrench': return ; + case 'Compass': + return ; + case 'Barcode': + return ; + case 'Box': + return ; default: return ; } diff --git a/src/hooks/usePermissions.tsx b/src/hooks/usePermissions.tsx index 2614619..583dda2 100644 --- a/src/hooks/usePermissions.tsx +++ b/src/hooks/usePermissions.tsx @@ -2,6 +2,7 @@ import { useUserPermissions } from '@/hooks/useUserPermissions'; import { useUserRole } from '@/hooks/useUserRole'; import type { ResourceKey, PermissionLevel } from '@/hooks/useUserPermissions/types'; +import { GRUPOS_AVANCADOS_CONFIG } from '@/types/grupoAvancadoTypes'; export function usePermissions() { const { isAdmin } = useUserRole(); @@ -68,10 +69,35 @@ export function usePermissions() { } }; + /** + * Verifica se o colaborador logado tem autorização para executar uma regra avançada específica + * (ex: 'pcp_fechar_diario', 'eng_criar_of', 'exp_despachar_carga', etc.) + */ + const canRegra = (regraKey: string): boolean => { + if (isAdmin) return true; + + // 1. Verificar permissão explícita configurada no banco + const perm = getResourcePermission(regraKey); + if (perm === 'no_access') return false; + if (perm) return true; + + // 2. Fallback: verificar se a regra é ativa por padrão nas configurações + for (const grupo of Object.values(GRUPOS_AVANCADOS_CONFIG)) { + const regra = grupo.regras.find((r) => r.key === regraKey); + if (regra) { + return Boolean(regra.padraoAtivo); + } + } + + return false; + }; + return { + isAdmin, checkResourceAccess, getPermissionForResource, canPerformAction, - userPermissions + canRegra, + userPermissions, }; } diff --git a/src/pages/CadastroOF.tsx b/src/pages/CadastroOF.tsx index 9221efb..251efeb 100644 --- a/src/pages/CadastroOF.tsx +++ b/src/pages/CadastroOF.tsx @@ -15,6 +15,7 @@ import { FichaTecnicaPreview } from '@/components/forms/FichaTecnicaPreview'; import { useThemeConfig } from '@/hooks/useThemeConfig'; import { useFichaTecnica, FichaTecnicaData } from '@/hooks/useFichaTecnica'; import { useUserManagement } from '@/hooks/useUserManagement'; +import { usePermissions } from '@/hooks/usePermissions'; interface InfoCalculoEstrutural { e: boolean; @@ -179,6 +180,7 @@ const CadastroOF = () => { const { themeConfig } = useThemeConfig(); const { buscarFichaTecnica, salvarFichaTecnica, loading: fichaTecnicaLoading } = useFichaTecnica(); const { users } = useUserManagement(); + const { canRegra } = usePermissions(); const [formData, setFormData] = useState(initialFormData); const [isSaving, setIsSaving] = useState(false); @@ -288,6 +290,16 @@ const CadastroOF = () => { return; } + if (!isEditing && !canRegra('eng_criar_of')) { + toast.error('Atenção: Você não possui permissão para cadastrar novas Ordens de Fabricação.'); + return; + } + + if (isEditing && !canRegra('eng_editar_of')) { + toast.error('Atenção: Você não possui permissão para alterar dados desta Ordem de Fabricação.'); + return; + } + setIsSaving(true); try { diff --git a/src/pages/DiarioProducao.tsx b/src/pages/DiarioProducao.tsx index 3f5ee5f..82b0971 100644 --- a/src/pages/DiarioProducao.tsx +++ b/src/pages/DiarioProducao.tsx @@ -13,6 +13,8 @@ import { useState, useEffect } from 'react'; import { useDiarioProducao, type RecursoProducao, type ApontamentoDiarioRecurso, type LoteSoldaDiario } from '@/hooks/useDiarioProducao'; import { useUserProfile } from '@/hooks/useUserProfile'; import { useFichaTecnica } from '@/hooks/useFichaTecnica'; +import { usePermissions } from '@/hooks/usePermissions'; +import { toast } from 'sonner'; interface DiarioData { id?: string; @@ -28,6 +30,7 @@ interface DiarioData { } const DiarioProducao = () => { + const { canRegra } = usePermissions(); const [activeTab, setActiveTab] = useState('diario'); const [selectedOF, setSelectedOF] = useState(''); const [showOFModal, setShowOFModal] = useState(false); @@ -131,6 +134,12 @@ const DiarioProducao = () => { const salvarDiarioCompleto = async () => { try { + const hoje = new Date().toISOString().split('T')[0]; + if (currentDiario.data < hoje && !canRegra('pcp_retroativo_permitido')) { + toast.error('Atenção: Você não possui permissão para apontar produção com data retroativa.'); + return; + } + // 1. Salvar o diário principal const diarioSalvo = await salvarDiario.mutateAsync({ data: currentDiario.data, @@ -608,17 +617,31 @@ const DiarioProducao = () => { - - + {canRegra('pcp_exportar_relatorios') && ( + + )} + {canRegra('pcp_excluir_apontamento') && ( + + )} diff --git a/src/pages/Expedicao.tsx b/src/pages/Expedicao.tsx index 1e4d4a6..501c001 100644 --- a/src/pages/Expedicao.tsx +++ b/src/pages/Expedicao.tsx @@ -29,8 +29,11 @@ import { useOFsAtivas } from '@/hooks/useOFsAtivas'; import { useMobileResponsive } from '@/hooks/useMobileResponsive'; import { RomaneioExpedicao } from '@/hooks/useRomaneios'; import { RelatoriosExpedicao } from '@/components/expedicao/RelatoriosExpedicao'; +import { usePermissions } from '@/hooks/usePermissions'; +import { toast } from 'sonner'; const Expedicao = () => { + const { canRegra } = usePermissions(); const { isMobile } = useMobileResponsive(); const { data: romaneios, isLoading, refetch } = useRomaneios(); const { data: ofsAtivas, isLoading: isLoadingOFs } = useOFsAtivas(); @@ -104,6 +107,11 @@ const Expedicao = () => { }; const confirmDelete = async () => { + if (!canRegra('exp_cancelar_estornar')) { + toast.error('Atenção: Você não possui permissão para cancelar ou estornar romaneios de expedição.'); + return; + } + if (romaneioToDelete) { try { await removerRomaneioMutation.mutateAsync(romaneioToDelete); @@ -321,10 +329,12 @@ const Expedicao = () => { )} - + {canRegra('exp_criar_romaneio') && ( + + )} diff --git a/src/types/grupoAvancadoTypes.ts b/src/types/grupoAvancadoTypes.ts index 50d54d0..f3653e2 100644 --- a/src/types/grupoAvancadoTypes.ts +++ b/src/types/grupoAvancadoTypes.ts @@ -23,243 +23,313 @@ export interface GrupoAvancadoConfig { } export const GRUPOS_AVANCADOS_CONFIG: Record = { + // 1. PRODUÇÃO & PCP producao_pcp: { key: 'producao_pcp', titulo: 'Produção & PCP', cor: 'sky', icone: 'Factory', - descricao: 'Regras avançadas de apontamentos, tolerâncias fabris, fila de produção e homologação de diários.', + descricao: 'Controle de apontamentos de fábrica, fechamento de diários e reordenação de filas.', regras: [ { key: 'pcp_retroativo_permitido', - nome: 'Apontamento Retroativo de Peças', - descricao: 'Permite que o operador ou encarregado aponte produção com datas anteriores ao dia de trabalho atual.', + nome: 'Apontamento Retroativo de Produção', + descricao: 'Permite apontar produção com datas anteriores ao dia de trabalho atual.', icone: 'Calendar', padraoAtivo: false, }, { key: 'pcp_fechar_diario', nome: 'Fechamento & Homologação do Diário', - descricao: 'Autorização para encerrar e consolidar o diário de produção fabril, travando apontamentos do dia.', + descricao: 'Autorização para encerrar e consolidar o diário de produção do dia.', icone: 'Lock', padraoAtivo: false, }, { key: 'pcp_reordenar_prioridades', nome: 'Reordenação da Fila de Fabricação', - descricao: 'Permite alterar a prioridade tática de OFs e bancas, furando filas de corte, montagem ou solda.', + descricao: 'Permite alterar a prioridade de fabricação e a ordem de corte/montagem das OFs.', icone: 'ArrowUpDown', padraoAtivo: false, }, { key: 'pcp_apontamento_massa', nome: 'Apontamento em Lote / Massa', - descricao: 'Libera a ferramenta de avanço conjunto de múltiplas peças de uma vez só.', + descricao: 'Libera o avanço conjunto de múltiplas peças simultaneamente.', icone: 'Layers', padraoAtivo: true, }, { - key: 'pcp_liberar_retrabalho', - nome: 'Autorização de Retrabalho & Refugo', - descricao: 'Permite apontar peças refugadas e liberar ordens de retrabalho com consumo extra de matéria-prima.', - icone: 'AlertTriangle', + key: 'pcp_excluir_apontamento', + nome: 'Exclusão & Estorno de Apontamentos', + descricao: 'Permite cancelar ou excluir apontamentos de produção já registrados.', + icone: 'Trash2', padraoAtivo: false, }, { - key: 'pcp_capacidade_excedente', - nome: 'Alocação de Capacidade Excedente (>100%)', - descricao: 'Força o agendamento de máquinas e postos de trabalho acima da capacidade nominal cadastrada.', - icone: 'Gauge', - padraoAtivo: false, + key: 'pcp_exportar_relatorios', + nome: 'Exportação de Relatórios de Produção', + descricao: 'Download de relatórios em PDF e planilhas de avanço e produtividade fabril.', + icone: 'FileSpreadsheet', + padraoAtivo: true, }, ], templates: [ { id: 'operador_pcp', nome: 'Apontador Fabril Padrão', - descricao: 'Apenas apontamentos normais e avanço de lotes, sem permissão de retroativo ou travamento.', + descricao: 'Apontamento normal em lote de peças, sem autorização para exclusões ou datas retroativas.', icone: 'Wrench', regrasAtivas: ['pcp_apontamento_massa'], }, { id: 'lider_producao', nome: 'Líder / Encarregado de Fábrica', - descricao: 'Liberação de retroativo, reordenação de prioridades e autorização de retrabalho.', + descricao: 'Liberação de apontamentos retroativos, reordenação de filas e exportação de relatórios.', icone: 'Shield', - regrasAtivas: ['pcp_retroativo_permitido', 'pcp_reordenar_prioridades', 'pcp_apontamento_massa', 'pcp_liberar_retrabalho'], + regrasAtivas: ['pcp_retroativo_permitido', 'pcp_reordenar_prioridades', 'pcp_apontamento_massa', 'pcp_exportar_relatorios'], }, { id: 'gestor_pcp_total', nome: 'Planejador PCP Total', - descricao: 'Acesso total com fechamento de diários, capacidade excedente e reordenação.', + descricao: 'Acesso pleno ao módulo: fechamento de diários, estornos, reordenação e relatórios.', icone: 'Crown', - regrasAtivas: ['pcp_retroativo_permitido', 'pcp_fechar_diario', 'pcp_reordenar_prioridades', 'pcp_apontamento_massa', 'pcp_liberar_retrabalho', 'pcp_capacidade_excedente'], + regrasAtivas: [ + 'pcp_retroativo_permitido', + 'pcp_fechar_diario', + 'pcp_reordenar_prioridades', + 'pcp_apontamento_massa', + 'pcp_excluir_apontamento', + 'pcp_exportar_relatorios', + ], }, ], }, + // 2. ENGENHARIA, OFS & BIM engenharia_3d: { key: 'engenharia_3d', titulo: 'Engenharia, OFs & BIM', cor: 'indigo', icone: 'Box', - descricao: 'Controle de revisões técnicas, exportação de modelos IFC/BIM, arquivos CAD e fichas com custos.', + descricao: 'Criação de OFs, importação de dados Tekla/XML/DSTV, cadastro de peças e modelos 3D.', regras: [ { - key: 'eng_aprovar_revisoes', - nome: 'Aprovação & Liberação de Revisões de OF', - descricao: 'Autorização formal para aprovar revisões de projetos e emitir novas listas de corte para a fábrica.', - icone: 'CheckCircle2', + key: 'eng_criar_of', + nome: 'Criação de Nova Ordem de Fabricação (OF)', + descricao: 'Libera o botão de cadastro de novas ordens e definição de cliente e contrato.', + icone: 'PlusCircle', + padraoAtivo: false, + }, + { + key: 'eng_editar_of', + nome: 'Edição de Dados & Metadados da OF', + descricao: 'Permite alterar prazos, peso contratual, cliente e informações gerais da OF.', + icone: 'Edit3', + padraoAtivo: false, + }, + { + key: 'eng_excluir_of', + nome: 'Exclusão ou Cancelamento de OF', + descricao: 'Ação crítica de remoção ou cancelamento permanente de Ordens de Fabricação.', + icone: 'Trash2', + padraoAtivo: false, + }, + { + key: 'eng_importar_dados_tecnicos', + nome: 'Importação de Dados Técnicos (XML / DSTV / Tekla)', + descricao: 'Upload e processamento de arquivos de engenharia e listas de peças.', + icone: 'UploadCloud', + padraoAtivo: true, + }, + { + key: 'eng_gerenciar_pecas', + nome: 'Cadastro, Edição & Exclusão de Peças', + descricao: 'Permite adicionar novas marcas, ajustar perfis, comprimentos e pesos na lista técnica.', + icone: 'Network', padraoAtivo: false, }, { key: 'eng_download_ifc', nome: 'Download de Modelos 3D & Arquivos IFC', - descricao: 'Permite exportar e baixar os modelos tridimensionais brutos e arquivos IFC/BIM do projeto.', + descricao: 'Permite exportar e baixar os modelos tridimensionais brutos e arquivos IFC/BIM.', icone: 'Download', padraoAtivo: true, }, { - key: 'eng_ver_custos', - nome: 'Visualização de Fichas Técnicas & Custos', - descricao: 'Exibe valores monetários, custo unitário por quilo e tabelas financeiras confidenciais de peças.', - icone: 'DollarSign', - padraoAtivo: false, - }, - { - key: 'eng_editar_estruturas', - nome: 'Edição de Estruturas & Subconjuntos', - descricao: 'Permite alterar hierarquias de peças, pesos de projeto e marcas de montagem já cadastradas.', - icone: 'Network', - padraoAtivo: false, - }, - { - key: 'eng_upload_cad', - nome: 'Upload de Arquivos CAD/DWG/DSTV', - descricao: 'Permite importar novos arquivos de engenharia, perfis de corte e desenhos 2D na OF.', - icone: 'UploadCloud', + key: 'eng_exportar_listas', + nome: 'Exportação de Listas de Materiais & Peças', + descricao: 'Emissão de relatórios técnicos, listas de corte e resumo de pesos.', + icone: 'FileText', padraoAtivo: true, }, ], templates: [ { - id: 'desenhista_projetista', - nome: 'Projetista / Detalhista', - descricao: 'Upload de arquivos técnicos e download de IFC para verificação e modelagem.', + id: 'desenhista_detalhista', + nome: 'Detalhista / Projetista', + descricao: 'Focado em importação técnica, download de modelos IFC e geração de listas de corte.', icone: 'Compass', - regrasAtivas: ['eng_download_ifc', 'eng_upload_cad'], + regrasAtivas: ['eng_importar_dados_tecnicos', 'eng_download_ifc', 'eng_exportar_listas'], }, { - id: 'coordenador_engenharia', - nome: 'Coordenador de Engenharia', - descricao: 'Aprovação de revisões, edição de conjuntos e gestão técnica completa.', + id: 'engenheiro_estrutural', + nome: 'Engenheiro de Estruturas', + descricao: 'Criação de OFs, edição técnica de peças, importação de dados e relatórios.', icone: 'Shield', - regrasAtivas: ['eng_aprovar_revisoes', 'eng_download_ifc', 'eng_editar_estruturas', 'eng_upload_cad'], + regrasAtivas: ['eng_criar_of', 'eng_editar_of', 'eng_importar_dados_tecnicos', 'eng_gerenciar_pecas', 'eng_download_ifc', 'eng_exportar_listas'], }, { - id: 'diretoria_tecnica', - nome: 'Diretoria Técnica & Orçamentos', - descricao: 'Controle irrestrito com acesso a custos confidenciais e fichas financeiras.', + id: 'coordenador_engenharia_total', + nome: 'Coordenador de Engenharia Total', + descricao: 'Controle irrestrito de engenharia, incluindo exclusão e cancelamento de OFs.', icone: 'Crown', - regrasAtivas: ['eng_aprovar_revisoes', 'eng_download_ifc', 'eng_ver_custos', 'eng_editar_estruturas', 'eng_upload_cad'], + regrasAtivas: [ + 'eng_criar_of', + 'eng_editar_of', + 'eng_excluir_of', + 'eng_importar_dados_tecnicos', + 'eng_gerenciar_pecas', + 'eng_download_ifc', + 'eng_exportar_listas', + ], }, ], }, + // 3. EXPEDIÇÃO, ESTOQUE & ROMANEIOS expedicao_logistica: { key: 'expedicao_logistica', - titulo: 'Expedição & Romaneios', + titulo: 'Expedição, Estoque & Romaneios', cor: 'amber', icone: 'Truck', - descricao: 'Regras de pesagem rodoviária, autorização de embarque, conferência cega e estorno de cargas.', + descricao: 'Gestão de cargas, romaneios de embarque, controle de estoque e solicitações de compra.', regras: [ { - key: 'exp_sem_pesagem', - nome: 'Liberação de Romaneio sem Pesagem', - descricao: 'Permite despachar carretas sem registrar o ticket físico da balança rodoviária.', - icone: 'Scale', + key: 'exp_criar_romaneio', + nome: 'Criação de Cargas & Romaneios', + descricao: 'Permite abrir uma nova carga de expedição e definir transportadora e motorista.', + icone: 'PlusSquare', padraoAtivo: false, }, { - key: 'exp_tolerancia_alta', - nome: 'Margem Ampliada de Tolerância de Balança', - descricao: 'Aceita diferença de peso acima de ±100kg entre o peso teórico dos romaneios e a balança.', - icone: 'Percent', - padraoAtivo: false, - }, - { - key: 'exp_despacho_sem_assinatura', - nome: 'Despacho sem Assinatura Digital do Motorista', - descricao: 'Autoriza a saída de carretas sem a coleta prévia da assinatura presencial do transportador.', - icone: 'FileSignature', - padraoAtivo: false, - }, - { - key: 'exp_conferencia_cega', - nome: 'Exigência de Conferência Cega no Embarque', - descricao: 'Força o operador a bipar e contar peça a peça sem visualizar a quantidade esperada na tela.', - icone: 'EyeOff', + key: 'exp_adicionar_remover_pecas', + nome: 'Montagem de Romaneio (Adicionar/Remover Peças)', + descricao: 'Autorização para incluir ou retirar peças e conjuntos da carga.', + icone: 'PackageCheck', padraoAtivo: true, }, { - key: 'exp_estorno_romaneio', - nome: 'Estorno & Cancelamento de Romaneios Despachados', - descricao: 'Permite cancelar romaneios já faturados/despachados com retorno automático das peças ao estoque.', + key: 'exp_despachar_carga', + nome: 'Despacho & Finalização de Romaneio', + descricao: 'Permite concluir o romaneio e marcar a carga como despachada/enviada.', + icone: 'CheckSquare', + padraoAtivo: false, + }, + { + key: 'exp_cancelar_estornar', + nome: 'Cancelamento & Estorno de Cargas Despachadas', + descricao: 'Ação crítica de cancelar romaneios enviados, com devolução das peças ao pátio.', icone: 'RotateCcw', padraoAtivo: false, }, + { + key: 'exp_imprimir_documentos', + nome: 'Emissão de Romaneios PDF & Etiquetas', + descricao: 'Permite imprimir o espelho do romaneio e etiquetas de identificação de peças.', + icone: 'Printer', + padraoAtivo: true, + }, + { + key: 'est_ajuste_manual_saldo', + nome: 'Ajuste Manual de Saldo de Estoque', + descricao: 'Permite alterar quantidades físicas de chapas, perfis e consumíveis no inventário.', + icone: 'SlidersHorizontal', + padraoAtivo: false, + }, + { + key: 'est_entrada_material', + nome: 'Entrada de Matérias-Primas & NFs', + descricao: 'Registra novas entradas de aço no estoque de fábrica.', + icone: 'FileInput', + padraoAtivo: false, + }, + { + key: 'est_solicitacao_compras', + nome: 'Criação & Gestão de Solicitações de Compras', + descricao: 'Permite solicitar aquisição de materiais e insumos para suprimento das OFs.', + icone: 'ShoppingCart', + padraoAtivo: false, + }, ], templates: [ { - id: 'conferente_expedicao', - nome: 'Conferente de Pátio', - descricao: 'Focado em conferência cega e bipe de peças no carregamento das carretas.', + id: 'operador_expedicao', + nome: 'Conferente de Pátio / Expedição', + descricao: 'Adição de peças no romaneio e impressão de espelhos e etiquetas.', icone: 'Barcode', - regrasAtivas: ['exp_conferencia_cega'], + regrasAtivas: ['exp_adicionar_remover_pecas', 'exp_imprimir_documentos'], }, { - id: 'lider_logistica', - nome: 'Líder de Expedição / Logística', - descricao: 'Autorização com margem de balança e despacho com assinatura flexível.', - icone: 'Shield', - regrasAtivas: ['exp_tolerancia_alta', 'exp_conferencia_cega', 'exp_sem_pesagem'], + id: 'almoxarife_estoquista', + nome: 'Almoxarife / Estoquista', + descricao: 'Entradas de aço, controle de saldo e solicitações de compras.', + icone: 'Box', + regrasAtivas: ['est_entrada_material', 'est_solicitacao_compras', 'exp_imprimir_documentos'], }, { - id: 'gerente_logistica_total', - nome: 'Gerente de Logística Total', - descricao: 'Acesso total com estorno de cargas despachadas e todas as liberações de saída.', + id: 'lider_logistica_total', + nome: 'Gestor de Logística & Estoque Total', + descricao: 'Controle total de cargas, despacho, estorno, inventário e compras.', icone: 'Crown', - regrasAtivas: ['exp_sem_pesagem', 'exp_tolerancia_alta', 'exp_despacho_sem_assinatura', 'exp_conferencia_cega', 'exp_estorno_romaneio'], + regrasAtivas: [ + 'exp_criar_romaneio', + 'exp_adicionar_remover_pecas', + 'exp_despachar_carga', + 'exp_cancelar_estornar', + 'exp_imprimir_documentos', + 'est_ajuste_manual_saldo', + 'est_entrada_material', + 'est_solicitacao_compras', + ], }, ], }, + // 4. OBRA & MONTAGEM EXTERNA obra_montagem: { key: 'obra_montagem', titulo: 'Obra & Montagem Externa', cor: 'teal', icone: 'HardHat', - descricao: 'Controle de descarga no canteiro, liberação de içamento e registro de não-conformidades de campo.', + descricao: 'Acompanhamento do canteiro, status de montagem de peças e diário de obra.', regras: [ { - key: 'obra_receber_romaneio', - nome: 'Confirmação de Descarga & Recebimento no Canteiro', - descricao: 'Permite registrar o recebimento físico das carretas e atestar o estado das peças entregues.', - icone: 'PackageCheck', + key: 'obra_apontar_montagem', + nome: 'Apontamento de Peças Montadas em Campo', + descricao: 'Permite registrar que conjuntos e peças foram descarregados e montados no canteiro.', + icone: 'CheckCheck', padraoAtivo: true, }, { - key: 'obra_liberar_montagem', - nome: 'Autorização Formal de Içamento & Fixação', - descricao: 'Libera a equipe de montadores para içar conjuntos e soldar/aparafusar na estrutura definitiva.', - icone: 'CheckSquare', + key: 'obra_registrar_ocorrencia', + nome: 'Registro de Ocorrências & Diário de Campo', + descricao: 'Permite anotar paralisações por clima, problemas de montagem e observações de obra.', + icone: 'AlertCircle', + padraoAtivo: true, + }, + { + key: 'obra_configurar_marcos', + nome: 'Configuração de Frentes & Marcos da Obra', + descricao: 'Permite criar e alterar etapas, setores e marcos estruturais do projeto.', + icone: 'Settings2', padraoAtivo: false, }, { - key: 'obra_apontar_nao_conformidade', - nome: 'Registro de Não-Conformidade de Campo (RNC)', - descricao: 'Permite abrir ocorrências de peças com furo desalinhado, empenamentos ou danos de transporte.', - icone: 'AlertOctagon', + key: 'obra_exportar_relatorio', + nome: 'Exportação de Relatórios de Evolução de Obra', + descricao: 'Geração de relatórios gerenciais e evolução percentual da montagem.', + icone: 'FileSpreadsheet', padraoAtivo: true, }, ], @@ -267,63 +337,84 @@ export const GRUPOS_AVANCADOS_CONFIG: Record = { { id: 'montador_campo', nome: 'Montador / Encarregado de Campo', - descricao: 'Recebimento de romaneios e registro de problemas ou RNCs de campo.', + descricao: 'Apontamento de peças no canteiro e registro de ocorrências.', icone: 'Wrench', - regrasAtivas: ['obra_receber_romaneio', 'obra_apontar_nao_conformidade'], + regrasAtivas: ['obra_apontar_montagem', 'obra_registrar_ocorrencia'], }, { id: 'engenheiro_obra_total', nome: 'Engenheiro Residente da Obra', - descricao: 'Controle irrestrito no canteiro com liberação de içamento e homologação estrutural.', + descricao: 'Acesso irrestrito com configuração de marcos e exportação de relatórios.', icone: 'Crown', - regrasAtivas: ['obra_receber_romaneio', 'obra_liberar_montagem', 'obra_apontar_nao_conformidade'], + regrasAtivas: ['obra_apontar_montagem', 'obra_registrar_ocorrencia', 'obra_configurar_marcos', 'obra_exportar_relatorio'], }, ], }, + // 5. ADMINISTRAÇÃO & SISTEMA admin_sistema: { key: 'admin_sistema', titulo: 'Administração & Sistema', cor: 'rose', icone: 'Shield', - descricao: 'Acesso a auditorias de segurança completas, exportações em massa e parâmetros globais do ERP.', + descricao: 'Governança de acessos, usuários, auditoria de dados e configurações da empresa.', regras: [ { - key: 'adm_auditoria_completa', - nome: 'Auditoria Completa & Logs de Segurança', - descricao: 'Permite visualizar todos os acessos por IP, histórico de operações críticas e falhas de login.', + key: 'adm_gerenciar_usuarios', + nome: 'Gestão de Usuários & Aprovações', + descricao: 'Permite criar, editar, aprovar novos cadastros e inativar colaboradores.', + icone: 'Users', + padraoAtivo: false, + }, + { + key: 'adm_gerenciar_matriz', + nome: 'Gestão da Matriz de Acessos & Permissões', + descricao: 'Autorização para conceder ou revogar acessos básicos e regras avançadas.', + icone: 'ShieldCheck', + padraoAtivo: false, + }, + { + key: 'adm_redefinir_senhas', + nome: 'Redefinição de Senhas de Acesso', + descricao: 'Permite gerar links de recuperação e redefinir senhas de colaboradores.', + icone: 'KeyRound', + padraoAtivo: false, + }, + { + key: 'adm_auditoria_inconsistencias', + nome: 'Auditoria & Correção de Inconsistências', + descricao: 'Executa varreduras de integridade no banco de dados e aplica correções automáticas.', icone: 'Activity', padraoAtivo: false, }, { - key: 'adm_exportar_dados', - nome: 'Exportação Massiva de Dados (Excel/CSV/JSON)', - descricao: 'Libera a exportação de tabelas completas de clientes, faturamento, peças e ordens de produção.', - icone: 'DownloadCloud', - padraoAtivo: false, - }, - { - key: 'adm_configuracoes_globais', - nome: 'Alteração de Parâmetros Globais do Sistema', - descricao: 'Autoriza alterar configurações gerais da empresa, logotipos, regras fiscais e integrações.', + key: 'adm_configuracoes_gerais', + nome: 'Alteração de Parâmetros da Empresa', + descricao: 'Autoriza alterar dados cadastrais da empresa, logotipo e parâmetros globais do ERP.', icone: 'Settings', padraoAtivo: false, }, ], templates: [ { - id: 'auditor_sistema', - nome: 'Auditor de Segurança', - descricao: 'Acesso de auditoria e exportação para compliance sem alterar parâmetros globais.', - icone: 'Search', - regrasAtivas: ['adm_auditoria_completa', 'adm_exportar_dados'], + id: 'administrador_rh', + nome: 'Gestor de Equipe & RH', + descricao: 'Criação de usuários, aprovação de pendentes e redefinição de senhas.', + icone: 'Users', + regrasAtivas: ['adm_gerenciar_usuarios', 'adm_redefinir_senhas'], }, { id: 'super_admin_total', nome: 'Super Administrador Total', - descricao: 'Controle total de governança, parâmetros de infraestrutura e exportações.', + descricao: 'Acesso irrestrito a todas as configurações de governança, sistema e banco de dados.', icone: 'Crown', - regrasAtivas: ['adm_auditoria_completa', 'adm_exportar_dados', 'adm_configuracoes_globais'], + regrasAtivas: [ + 'adm_gerenciar_usuarios', + 'adm_gerenciar_matriz', + 'adm_redefinir_senhas', + 'adm_auditoria_inconsistencias', + 'adm_configuracoes_gerais', + ], }, ], },