🚀 Auto-deploy: TrackSteel APP atualizado em 25/09/2026 16:49:48
This commit is contained in:
@@ -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" />;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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
@@ -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',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user