🚀 Auto-deploy: TrackSteel APP atualizado em 25/09/2026 16:49:48

This commit is contained in:
2026-09-25 16:49:48 -03:00
parent 8e64ad6042
commit 36d5902836
6 changed files with 371 additions and 184 deletions
@@ -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<MatrizGrupoAvancadoModalProps> =
return <ArrowUpDown className="h-4 w-4 text-amber-400" />;
case 'Layers':
return <Layers className="h-4 w-4 text-indigo-400" />;
case 'AlertTriangle':
return <AlertTriangle className="h-4 w-4 text-orange-400" />;
case 'Gauge':
return <Gauge className="h-4 w-4 text-purple-400" />;
case 'CheckCircle2':
return <CheckCircle2 className="h-4 w-4 text-emerald-400" />;
case 'Download':
return <Download className="h-4 w-4 text-sky-400" />;
case 'DollarSign':
return <DollarSign className="h-4 w-4 text-emerald-500" />;
case 'Network':
return <Network className="h-4 w-4 text-indigo-400" />;
case 'Trash2':
return <Trash2 className="h-4 w-4 text-rose-400" />;
case 'FileSpreadsheet':
return <FileSpreadsheet className="h-4 w-4 text-emerald-400" />;
case 'PlusCircle':
return <PlusCircle className="h-4 w-4 text-emerald-400" />;
case 'PlusSquare':
return <PlusSquare className="h-4 w-4 text-amber-400" />;
case 'Edit3':
return <Edit3 className="h-4 w-4 text-sky-400" />;
case 'UploadCloud':
return <UploadCloud className="h-4 w-4 text-teal-400" />;
case 'Scale':
return <Scale className="h-4 w-4 text-amber-400" />;
case 'Percent':
return <Percent className="h-4 w-4 text-cyan-400" />;
case 'FileSignature':
return <FileSignature className="h-4 w-4 text-orange-400" />;
case 'EyeOff':
return <EyeOff className="h-4 w-4 text-rose-400" />;
case 'RotateCcw':
return <RotateCcw className="h-4 w-4 text-amber-400" />;
case 'Network':
return <Network className="h-4 w-4 text-indigo-400" />;
case 'Download':
return <Download className="h-4 w-4 text-sky-400" />;
case 'FileText':
return <FileText className="h-4 w-4 text-slate-300" />;
case 'PackageCheck':
return <PackageCheck className="h-4 w-4 text-teal-400" />;
case 'CheckSquare':
return <CheckSquare className="h-4 w-4 text-emerald-400" />;
case 'AlertOctagon':
return <AlertOctagon className="h-4 w-4 text-rose-400" />;
case 'RotateCcw':
return <RotateCcw className="h-4 w-4 text-amber-400" />;
case 'Printer':
return <Printer className="h-4 w-4 text-indigo-400" />;
case 'SlidersHorizontal':
return <SlidersHorizontal className="h-4 w-4 text-cyan-400" />;
case 'FileInput':
return <FileInput className="h-4 w-4 text-emerald-400" />;
case 'ShoppingCart':
return <ShoppingCart className="h-4 w-4 text-orange-400" />;
case 'CheckCheck':
return <CheckCheck className="h-4 w-4 text-teal-400" />;
case 'AlertCircle':
return <AlertCircle className="h-4 w-4 text-amber-400" />;
case 'Settings2':
return <Settings2 className="h-4 w-4 text-indigo-400" />;
case 'Users':
return <Users className="h-4 w-4 text-sky-400" />;
case 'ShieldCheck':
return <ShieldCheck className="h-4 w-4 text-emerald-400" />;
case 'KeyRound':
return <KeyRound className="h-4 w-4 text-amber-400" />;
case 'Activity':
return <Activity className="h-4 w-4 text-rose-400" />;
case 'DownloadCloud':
return <DownloadCloud className="h-4 w-4 text-sky-400" />;
case 'Settings':
return <Settings className="h-4 w-4 text-slate-400" />;
case 'Crown':
@@ -156,6 +175,12 @@ export const MatrizGrupoAvancadoModal: React.FC<MatrizGrupoAvancadoModalProps> =
return <Shield className="h-3.5 w-3.5 text-sky-400" />;
case 'Wrench':
return <Wrench className="h-3.5 w-3.5 text-emerald-400" />;
case 'Compass':
return <Compass className="h-3.5 w-3.5 text-cyan-400" />;
case 'Barcode':
return <Barcode className="h-3.5 w-3.5 text-amber-400" />;
case 'Box':
return <Box className="h-3.5 w-3.5 text-indigo-400" />;
default:
return <Sparkles className="h-4 w-4 text-amber-400" />;
}
+27 -1
View File
@@ -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,
};
}
+12
View File
@@ -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<FormData>(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 {
+34 -11
View File
@@ -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 = () => {
<Button variant="ghost" size="sm">
<Edit className="h-4 w-4" />
</Button>
<Button variant="ghost" size="sm">
<Printer className="h-4 w-4" />
</Button>
<Button
variant="ghost"
size="sm"
onClick={() => diario.id && deletarDiario.mutate(diario.id)}
disabled={deletarDiario.isPending}
>
<Trash2 className="h-4 w-4 text-destructive" />
</Button>
{canRegra('pcp_exportar_relatorios') && (
<Button
variant="ghost"
size="sm"
title="Exportar/Imprimir Diário"
onClick={() => window.print()}
>
<Printer className="h-4 w-4" />
</Button>
)}
{canRegra('pcp_excluir_apontamento') && (
<Button
variant="ghost"
size="sm"
title="Excluir Diário"
onClick={() => {
if (confirm('Tem certeza que deseja excluir este diário de produção?')) {
diario.id && deletarDiario.mutate(diario.id);
}
}}
disabled={deletarDiario.isPending}
>
<Trash2 className="h-4 w-4 text-destructive" />
</Button>
)}
</div>
</td>
</tr>
+14 -4
View File
@@ -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 = () => {
</Sheet>
)}
<Button size={isMobile ? "sm" : "default"} onClick={() => setShowRomaneioForm(true)}>
<Plus className="w-4 h-4 mr-2" />
Novo Romaneio
</Button>
{canRegra('exp_criar_romaneio') && (
<Button size={isMobile ? "sm" : "default"} onClick={() => setShowRomaneioForm(true)}>
<Plus className="w-4 h-4 mr-2" />
Novo Romaneio
</Button>
)}
</div>
</div>
+225 -134
View File
@@ -23,243 +23,313 @@ export interface GrupoAvancadoConfig {
}
export const GRUPOS_AVANCADOS_CONFIG: Record<string, GrupoAvancadoConfig> = {
// 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<string, GrupoAvancadoConfig> = {
{
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',
],
},
],
},