Template N8N - Framework MIA (Mapear - Isolar - Automatizar)
- Gustavo Caetano
- 17 de set.
- 10 min de leitura

Vou criar um template completo do N8N baseado no framework MIA para automação de processos. Este template servirá como base para implementar qualquer processo seguindo a metodologia MIA.
Visão Geral do Template
O template está estruturado em três fases principais, cada uma com seus respectivos nós e configurações:
FASE 1: MAPEAR
Objetivo: Identificar e documentar o processo atual
Componentes: Coleta de dados, análise de fluxo, identificação de gargalos
FASE 2: ISOLAR
Objetivo: Separar e priorizar componentes para automação
Componentes: Filtros, condicionais, separação de fluxos
FASE 3: AUTOMATIZAR
Objetivo: Implementar a automação dos processos isolados
Componentes: Execução, monitoramento, feedback
Estrutura do Workflow N8N
Configuração Inicial
{
"name": "Template MIA Framework",
"nodes": [
{
"parameters": {},
"name": "🚀 INÍCIO - Framework MIA",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [240, 300]
}
]
}
FASE 1: MAPEAR
1.1 Coleta de Dados Iniciais
{
"parameters": {
"functionCode": "// MAPEAMENTO - Coleta de dados do processo\nconst processData = {\n processName: $json.processName || 'Processo não identificado',\n startTime: new Date().toISOString(),\n inputData: $json,\n processSteps: [],\n stakeholders: [],\n currentBottlenecks: [],\n estimatedTime: null,\n priority: 'medium'\n};\n\n// Log inicial do mapeamento\nconsole.log('🗺️ MAPEAR - Iniciando análise do processo:', processData.processName);\n\nreturn {\n json: {\n phase: 'MAPEAR',\n step: 'data_collection',\n processData: processData,\n timestamp: new Date().toISOString()\n }\n};"
},
"name": "📊 Coleta de Dados",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [440, 200]
}
1.2 Análise de Fluxo Atual
{
"parameters": {
"functionCode": "// MAPEAMENTO - Análise detalhada do fluxo\nconst inputData = $json.processData;\n\n// Identificar etapas do processo\nconst processSteps = [\n {\n stepId: 1,\n name: 'Recebimento de Input',\n type: 'manual',\n estimatedTime: '5min',\n complexity: 'low',\n automationPotential: 'high'\n },\n {\n stepId: 2,\n name: 'Validação de Dados',\n type: 'manual',\n estimatedTime: '10min',\n complexity: 'medium',\n automationPotential: 'high'\n },\n {\n stepId: 3,\n name: 'Processamento',\n type: 'mixed',\n estimatedTime: '30min',\n complexity: 'high',\n automationPotential: 'medium'\n },\n {\n stepId: 4,\n name: 'Entrega de Output',\n type: 'manual',\n estimatedTime: '5min',\n complexity: 'low',\n automationPotential: 'high'\n }\n];\n\n// Calcular métricas do processo\nconst totalEstimatedTime = processSteps.reduce((total, step) => {\n const time = parseInt(step.estimatedTime);\n return total + time;\n}, 0);\n\nconst automationScore = processSteps.reduce((score, step) => {\n const potential = step.automationPotential === 'high' ? 3 : \n step.automationPotential === 'medium' ? 2 : 1;\n return score + potential;\n}, 0) / processSteps.length;\n\nconsole.log('📈 MAPEAR - Análise concluída. Score de automação:', automationScore);\n\nreturn {\n json: {\n ...inputData,\n processSteps: processSteps,\n metrics: {\n totalSteps: processSteps.length,\n totalEstimatedTime: totalEstimatedTime,\n automationScore: automationScore,\n manualSteps: processSteps.filter(s => s.type === 'manual').length\n },\n step: 'flow_analysis'\n }\n};"
},
"name": "🔍 Análise de Fluxo",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [640, 200]
}
1.3 Identificação de Gargalos
{
"parameters": {
"functionCode": "// MAPEAMENTO - Identificação de gargalos e oportunidades\nconst processData = $json;\n\n// Identificar gargalos baseado na análise\nconst bottlenecks = processData.processSteps\n .filter(step => step.complexity === 'high' || step.estimatedTime > '15min')\n .map(step => ({\n stepId: step.stepId,\n name: step.name,\n issue: step.complexity === 'high' ? 'Alta complexidade' : 'Tempo excessivo',\n impact: 'high',\n automationRecommendation: step.automationPotential\n }));\n\n// Priorizar oportunidades de automação\nconst automationOpportunities = processData.processSteps\n .filter(step => step.automationPotential === 'high')\n .sort((a, b) => {\n const complexityScore = { low: 1, medium: 2, high: 3 };\n return complexityScore[a.complexity] - complexityScore[b.complexity];\n });\n\n// Gerar relatório de mapeamento\nconst mappingReport = {\n processName: processData.processData?.processName || 'Processo Mapeado',\n totalSteps: processData.processSteps.length,\n bottlenecksFound: bottlenecks.length,\n automationOpportunities: automationOpportunities.length,\n recommendedPriority: automationOpportunities.length > 2 ? 'high' : 'medium',\n readyForIsolation: bottlenecks.length > 0 || automationOpportunities.length > 0\n};\n\nconsole.log('🎯 MAPEAR - Gargalos identificados:', bottlenecks.length);\nconsole.log('✅ MAPEAR - Fase concluída. Pronto para ISOLAR.');\n\nreturn {\n json: {\n phase: 'MAPEAR_COMPLETE',\n mappingReport: mappingReport,\n bottlenecks: bottlenecks,\n automationOpportunities: automationOpportunities,\n processData: processData,\n nextPhase: 'ISOLAR',\n timestamp: new Date().toISOString()\n }\n};"
},
"name": "🚨 Identificar Gargalos",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [840, 200]
}
FASE 2: ISOLAR
2.1 Filtro de Priorização
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.mappingReport.readyForIsolation}}",
"operation": "equal",
"value2": "true"
}
]
}
},
"name": "✅ Verificar Elegibilidade",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [1040, 200]
}
2.2 Separação por Complexidade
{
"parameters": {
"functionCode": "// ISOLAMENTO - Separar processos por complexidade e prioridade\nconst inputData = $json;\n\n// Separar oportunidades por critérios\nconst isolationCriteria = {\n quickWins: [], // Baixa complexidade, alto impacto\n mediumTasks: [], // Média complexidade\n complexTasks: [], // Alta complexidade, requer análise detalhada\n notRecommended: [] // Não recomendado para automação\n};\n\ninputData.automationOpportunities.forEach(opportunity => {\n const complexity = opportunity.complexity;\n const automationPotential = opportunity.automationPotential;\n \n if (complexity === 'low' && automationPotential === 'high') {\n isolationCriteria.quickWins.push({\n ...opportunity,\n priority: 1,\n estimatedROI: 'high',\n implementationTime: 'short'\n });\n } else if (complexity === 'medium' && automationPotential === 'high') {\n isolationCriteria.mediumTasks.push({\n ...opportunity,\n priority: 2,\n estimatedROI: 'medium',\n implementationTime: 'medium'\n });\n } else if (complexity === 'high') {\n isolationCriteria.complexTasks.push({\n ...opportunity,\n priority: 3,\n estimatedROI: 'variable',\n implementationTime: 'long'\n });\n } else {\n isolationCriteria.notRecommended.push({\n ...opportunity,\n priority: 4,\n reason: 'Baixo potencial de automação'\n });\n }\n});\n\n// Definir sequência de implementação\nconst implementationSequence = [\n ...isolationCriteria.quickWins,\n ...isolationCriteria.mediumTasks,\n ...isolationCriteria.complexTasks\n].sort((a, b) => a.priority - b.priority);\n\nconsole.log('🎯 ISOLAR - Tarefas categorizadas:');\nconsole.log('- Quick Wins:', isolationCriteria.quickWins.length);\nconsole.log('- Tarefas Médias:', isolationCriteria.mediumTasks.length);\nconsole.log('- Tarefas Complexas:', isolationCriteria.complexTasks.length);\n\nreturn {\n json: {\n phase: 'ISOLAR',\n step: 'categorization',\n isolationCriteria: isolationCriteria,\n implementationSequence: implementationSequence,\n recommendedStart: implementationSequence[0] || null,\n totalIsolatedTasks: implementationSequence.length,\n originalData: inputData\n }\n};"
},
"name": "📋 Categorizar Tarefas",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [1240, 120]
}
2.3 Seleção para Automação
{
"parameters": {
"functionCode": "// ISOLAMENTO - Selecionar primeira tarefa para automação\nconst isolationData = $json;\n\n// Selecionar a tarefa de maior prioridade\nconst selectedTask = isolationData.recommendedStart;\n\nif (!selectedTask) {\n console.log('❌ ISOLAR - Nenhuma tarefa elegível para automação');\n return {\n json: {\n phase: 'ISOLAR_FAILED',\n reason: 'Nenhuma tarefa elegível encontrada',\n recommendation: 'Revisar processo de mapeamento'\n }\n };\n}\n\n// Preparar dados para automação\nconst automationPlan = {\n taskId: selectedTask.stepId,\n taskName: selectedTask.name,\n priority: selectedTask.priority,\n estimatedTime: selectedTask.estimatedTime,\n complexity: selectedTask.complexity,\n automationType: determineAutomationType(selectedTask),\n requiredTools: determineRequiredTools(selectedTask),\n successCriteria: defineSuccessCriteria(selectedTask),\n rollbackPlan: defineRollbackPlan(selectedTask)\n};\n\nfunction determineAutomationType(task) {\n if (task.name.includes('Validação')) return 'validation';\n if (task.name.includes('Processamento')) return 'processing';\n if (task.name.includes('Entrega')) return 'delivery';\n return 'generic';\n}\n\nfunction determineRequiredTools(task) {\n const tools = ['HTTP Request'];\n if (task.complexity !== 'low') tools.push('Function');\n if (task.name.includes('Dados')) tools.push('Set');\n return tools;\n}\n\nfunction defineSuccessCriteria(task) {\n return {\n executionTime: `< ${task.estimatedTime}`,\n errorRate: '< 5%',\n dataIntegrity: '100%',\n userSatisfaction: '> 80%'\n };\n}\n\nfunction defineRollbackPlan(task) {\n return {\n triggerConditions: ['Error rate > 10%', 'Execution time > 2x expected'],\n rollbackSteps: ['Stop automation', 'Notify stakeholders', 'Revert to manual process'],\n recoveryTime: '< 30min'\n };\n}\n\nconsole.log('🎯 ISOLAR - Tarefa selecionada para automação:', selectedTask.name);\nconsole.log('✅ ISOLAR - Fase concluída. Pronto para AUTOMATIZAR.');\n\nreturn {\n json: {\n phase: 'ISOLAR_COMPLETE',\n selectedTask: selectedTask,\n automationPlan: automationPlan,\n remainingTasks: isolationData.implementationSequence.slice(1),\n nextPhase: 'AUTOMATIZAR',\n isolationData: isolationData\n }\n};"
},
"name": "🎯 Selecionar para Automação",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [1440, 120]
}
FASE 3: AUTOMATIZAR
3.1 Configuração da Automação
{
"parameters": {
"functionCode": "// AUTOMATIZAÇÃO - Configurar ambiente de execução\nconst planData = $json;\nconst automationPlan = planData.automationPlan;\n\n// Configurar parâmetros de execução\nconst executionConfig = {\n taskId: automationPlan.taskId,\n taskName: automationPlan.taskName,\n startTime: new Date().toISOString(),\n maxRetries: 3,\n timeoutMinutes: parseInt(automationPlan.estimatedTime) * 2,\n monitoringEnabled: true,\n loggingLevel: 'detailed',\n notificationChannels: ['email', 'webhook']\n};\n\n// Preparar dados de entrada para o processo automatizado\nconst processInput = {\n originalData: planData.isolationData.originalData,\n taskSpecificData: {\n stepId: automationPlan.taskId,\n expectedOutput: determineExpectedOutput(automationPlan.automationType),\n validationRules: defineValidationRules(automationPlan.automationType)\n },\n executionContext: {\n environment: 'production',\n version: '1.0.0',\n executedBy: 'n8n-automation',\n correlationId: generateCorrelationId()\n }\n};\n\nfunction determineExpectedOutput(type) {\n switch(type) {\n case 'validation': return { status: 'validated', errors: [] };\n case 'processing': return { status: 'processed', result: {} };\n case 'delivery': return { status: 'delivered', confirmation: true };\n default: return { status: 'completed' };\n }\n}\n\nfunction defineValidationRules(type) {\n const baseRules = ['required_fields_present', 'data_format_valid'];\n switch(type) {\n case 'validation': return [...baseRules, 'business_rules_applied'];\n case 'processing': return [...baseRules, 'processing_logic_valid'];\n case 'delivery': return [...baseRules, 'delivery_format_correct'];\n default: return baseRules;\n }\n}\n\nfunction generateCorrelationId() {\n return 'auto_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n}\n\nconsole.log('⚡ AUTOMATIZAR - Configuração preparada para:', automationPlan.taskName);\nconsole.log('🔧 AUTOMATIZAR - Correlation ID:', processInput.executionContext.correlationId);\n\nreturn {\n json: {\n phase: 'AUTOMATIZAR',\n step: 'configuration',\n executionConfig: executionConfig,\n processInput: processInput,\n automationPlan: automationPlan,\n status: 'ready_for_execution'\n }\n};"
},
"name": "⚙️ Configurar Automação",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [1640, 120]
}
3.2 Execução da Automação
{
"parameters": {
"functionCode": "// AUTOMATIZAÇÃO - Executar processo automatizado\nconst configData = $json;\nconst processInput = configData.processInput;\nconst executionConfig = configData.executionConfig;\n\n// Simular execução do processo automatizado\nconst executionStart = new Date();\nconst correlationId = processInput.executionContext.correlationId;\n\ntry {\n console.log('🚀 AUTOMATIZAR - Iniciando execução:', correlationId);\n \n // Simular processamento baseado no tipo de automação\n const automationType = configData.automationPlan.automationType;\n let executionResult;\n \n switch(automationType) {\n case 'validation':\n executionResult = executeValidation(processInput);\n break;\n case 'processing':\n executionResult = executeProcessing(processInput);\n break;\n case 'delivery':\n executionResult = executeDelivery(processInput);\n break;\n default:\n executionResult = executeGeneric(processInput);\n }\n \n const executionEnd = new Date();\n const executionTime = executionEnd - executionStart;\n \n // Validar critérios de sucesso\n const successValidation = validateSuccess(\n executionResult, \n executionTime, \n configData.automationPlan.successCriteria\n );\n \n console.log('✅ AUTOMATIZAR - Execução concluída em:', executionTime + 'ms');\n console.log('📊 AUTOMATIZAR - Status:', successValidation.status);\n \n return {\n json: {\n phase: 'AUTOMATIZAR',\n step: 'execution_complete',\n correlationId: correlationId,\n executionResult: executionResult,\n executionMetrics: {\n startTime: executionStart.toISOString(),\n endTime: executionEnd.toISOString(),\n duration: executionTime,\n status: successValidation.status,\n successCriteriaMet: successValidation.criteriaMet\n },\n originalConfig: configData\n }\n };\n \n} catch (error) {\n console.error('❌ AUTOMATIZAR - Erro na execução:', error.message);\n \n return {\n json: {\n phase: 'AUTOMATIZAR_ERROR',\n correlationId: correlationId,\n error: {\n message: error.message,\n timestamp: new Date().toISOString(),\n requiresRollback: true\n },\n originalConfig: configData\n }\n };\n}\n\nfunction executeValidation(input) {\n // Simular validação de dados\n return {\n status: 'validated',\n validatedFields: ['field1', 'field2', 'field3'],\n errors: [],\n warnings: [],\n confidence: 0.95\n };\n}\n\nfunction executeProcessing(input) {\n // Simular processamento de dados\n return {\n status: 'processed',\n inputRecords: 100,\n processedRecords: 98,\n failedRecords: 2,\n result: {\n summary: 'Processamento concluído com sucesso',\n details: 'Dados processados conforme regras de negócio'\n }\n };\n}\n\nfunction executeDelivery(input) {\n // Simular entrega de resultados\n return {\n status: 'delivered',\n deliveryMethod: 'api',\n deliveryTime: new Date().toISOString(),\n confirmation: true,\n recipients: ['system_a', 'system_b']\n };\n}\n\nfunction executeGeneric(input) {\n // Execução genérica\n return {\n status: 'completed',\n message: 'Processo executado com sucesso',\n data: input.taskSpecificData\n };\n}\n\nfunction validateSuccess(result, executionTime, criteria) {\n const criteriaMet = {\n executionTime: executionTime < (parseInt(criteria.executionTime) * 60000),\n errorRate: (result.failedRecords || 0) / (result.inputRecords || 1) < 0.05,\n dataIntegrity: result.status !== 'failed',\n overallSuccess: result.status === 'validated' || result.status === 'processed' || result.status === 'delivered' || result.status === 'completed'\n };\n \n const allCriteriaMet = Object.values(criteriaMet).every(met => met === true);\n \n return {\n status: allCriteriaMet ? 'success' : 'partial_success',\n criteriaMet: criteriaMet\n };\n}"
},
"name": "🚀 Executar Processo",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [1840, 120]
}
3.3 Monitoramento e Feedback
{
"parameters": {
"functionCode": "// AUTOMATIZAÇÃO - Monitoramento e geração de relatório final\nconst executionData = $json;\n\n// Gerar relatório completo do Framework MIA\nconst miaReport = {\n frameworkVersion: '1.0.0',\n executionId: executionData.correlationId,\n timestamp: new Date().toISOString(),\n \n // Resumo das fases\n phasesSummary: {\n mapear: {\n status: 'completed',\n tasksIdentified: executionData.originalConfig?.automationPlan ? 1 : 0,\n bottlenecksFound: 'N/A', // Seria obtido dos dados anteriores\n duration: 'N/A'\n },\n isolar: {\n status: 'completed',\n tasksIsolated: 1,\n priorityLevel: executionData.originalConfig?.automationPlan?.priority || 'unknown',\n selectedForAutomation: executionData.originalConfig?.automationPlan?.taskName || 'unknown'\n },\n automatizar: {\n status: executionData.executionMetrics?.status || 'unknown',\n executionTime: executionData.executionMetrics?.duration || 0,\n successRate: calculateSuccessRate(executionData.executionResult),\n criteriaMet: executionData.executionMetrics?.successCriteriaMet || {}\n }\n },\n \n // Métricas de performance\n performanceMetrics: {\n totalExecutionTime: executionData.executionMetrics?.duration || 0,\n automationEfficiency: calculateEfficiency(executionData),\n errorRate: calculateErrorRate(executionData.executionResult),\n roi: calculateROI(executionData),\n timesSaved: calculateTimeSaved(executionData)\n },\n \n // Recomendações para próximas iterações\n recommendations: generateRecommendations(executionData),\n \n // Status final\n overallStatus: determineOverallStatus(executionData),\n nextSteps: generateNextSteps(executionData)\n};\n\nfunction calculateSuccessRate(result) {\n if (!result) return 0;\n if (result.status === 'validated' || result.status === 'processed' || \n result.status === 'delivered' || result.status === 'completed') {\n return result.failedRecords ? \n ((result.processedRecords || 1) / (result.inputRecords || 1)) * 100 : 100;\n }\n return 0;\n}\n\nfunction calculateEfficiency(data) {\n const executionTime = data.executionMetrics?.duration || 0;\n const expectedTime = 300000; // 5 minutos em ms (estimativa)\n return Math.max(0, ((expectedTime - executionTime) / expectedTime) * 100);\n}\n\nfunction calculateErrorRate(result) {\n if (!result || !result.inputRecords) return 0;\n return ((result.failedRecords || 0) / result.inputRecords) * 100;\n}\n\nfunction calculateROI(data) {\n // ROI simplificado baseado em tempo economizado\n const timeSaved = calculateTimeSaved(data);\n const implementationCost = 100; // Custo estimado em horas\n return timeSaved > implementationCost ? ((timeSaved - implementationCost) / implementationCost) * 100 : -50;\n}\n\nfunction calculateTimeSaved(data) {\n // Tempo economizado em horas por execução\n const manualTime = 50; // 50 minutos manual\n const automatedTime = (data.executionMetrics?.duration || 0) / 60000; // converter para minutos\n return Math.max(0, manualTime - automatedTime);\n}\n\nfunction generateRecommendations(data) {\n const recommendations = [];\n \n if (data.executionMetrics?.status === 'success') {\n recommendations.push('Considerar automatizar próxima tarefa da lista');\n recommendations.push('Implementar monitoramento contínuo');\n } else {\n recommendations.push('Revisar critérios de sucesso');\n recommendations.push('Analisar causas de falha');\n }\n \n if ((data.executionMetrics?.duration || 0) > 60000) {\n recommendations.push('Otimizar performance da automação');\n }\n \n return recommendations;\n}\n\nfunction determineOverallStatus(data) {\n if (data.phase === 'AUTOMATIZAR_ERROR') return 'FAILED';\n if (data.executionMetrics?.status === 'success') return 'SUCCESS';\n if (data.executionMetrics?.status === 'partial_success') return 'PARTIAL_SUCCESS';\n return 'UNKNOWN';\n}\n\nfunction generateNextSteps(data) {\n const steps = [];\n \n if (miaReport.overallStatus === 'SUCCESS') {\n steps.push('Monitorar automação em produção');\n steps.push('Documentar lições aprendidas');\n steps.push('Iniciar próximo ciclo MIA para próxima tarefa');\n } else {\n steps.push('Analisar pontos de falha');\n steps.push('Ajustar configurações');\n steps.push('Re-executar fase de isolamento se necessário');\n }\n \n return steps;\n}\n\n// Log final\nconsole.log('📊 AUTOMATIZAR - Relatório MIA gerado');\nconsole.log('🎯 Status Final:', miaReport.overallStatus);\nconsole.log('⏱️ Tempo de Execução:', miaReport.performanceMetrics.totalExecutionTime + 'ms');\nconsole.log('📈 Taxa de Sucesso:', miaReport.performanceMetrics.automationEfficiency + '%');\n\nreturn {\n json: {\n phase: 'MIA_COMPLETE',\n miaReport: miaReport,\n executionData: executionData,\n summary: {\n framework: 'MIA (Mapear-Isolar-Automatizar)',\n status: miaReport.overallStatus,\n efficiency: miaReport.performanceMetrics.automationEfficiency,\n recommendations: miaReport.recommendations.length\n }\n }\n};"
},
"name": "📊 Relatório Final",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [2040, 120]
}
Nós de Tratamento de Erro
Tratamento de Erro Geral
{
"parameters": {
"functionCode": "// Tratamento de erros do Framework MIA\nconst errorData = $json;\n\nconst errorReport = {\n timestamp: new Date().toISOString(),\n phase: errorData.phase || 'UNKNOWN',\n errorType: errorData.error?.message || 'Erro não especificado',\n correlationId: errorData.correlationId || 'N/A',\n rollbackRequired: errorData.error?.requiresRollback || false,\n \n // Ações de recuperação\n recoveryActions: [\n 'Notificar equipe responsável',\n 'Registrar erro no sistema de monitoramento',\n 'Reverter para processo manual se necessário',\n 'Analisar causa raiz',\n 'Ajustar configurações para próxima execução'\n ],\n \n // Dados para análise\n debugInfo: {\n originalData: errorData.originalConfig || null,\n executionContext: errorData.executionContext || null,\n lastSuccessfulStep: determineLastSuccessfulStep(errorData.phase)\n }\n};\n\nfunction determineLastSuccessfulStep(phase) {\n switch(phase) {\n case 'MAPEAR': return 'Início do processo';\n case 'ISOLAR': return 'Mapeamento concluído';\n case 'AUTOMATIZAR': return 'Isolamento concluído';\n case 'AUTOMATIZAR_ERROR': return 'Configuração da automação';\n default: return 'Desconhecido';\n }\n}\n\nconsole.error('❌ ERRO MIA - Fase:', errorData.phase);\nconsole.error('�� ERRO MIA - Detalhes:', errorData.error?.message);\nconsole.log('🔄 ERRO MIA - Rollback necessário:', errorReport.rollbackRequired);\n\nreturn {\n json: {\n phase: 'ERROR_HANDLING',\n errorReport: errorReport,\n status: 'FAILED',\n requiresManualIntervention: true\n }\n};"
},
"name": "❌ Tratamento de Erro",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [1240, 400]
}
Nó de Notificação
{
"parameters": {
"functionCode": "// Notificação final do Framework MIA\nconst finalData = $json;\n\n// Preparar notificação baseada no resultado\nlet notificationData;\n\nif (finalData.phase === 'MIA_COMPLETE') {\n // Sucesso\n notificationData = {\n type: 'success',\n title: '✅ Framework MIA - Execução Concluída',\n message: `Automação implementada com sucesso!`,\n details: {\n status: finalData.miaReport.overallStatus,\n efficiency: `${finalData.miaReport.performanceMetrics.automationEfficiency.toFixed(1)}%`,\n executionTime: `${finalData.miaReport.performanceMetrics.totalExecutionTime}ms`,\n roi: `${finalData.miaReport.performanceMetrics.roi.toFixed(1)}%`\n },\n nextSteps: finalData.miaReport.nextSteps\n };\n} else if (finalData.phase === 'ERROR_HANDLING') {\n // Erro\n notificationData = {\n type: 'error',\n title: '❌ Framework MIA - Erro na Execução',\n message: `Falha durante a execução: ${finalData.errorReport.errorType}`,\n details: {\n phase: finalData.errorReport.phase,\n correlationId: finalData.errorReport.correlationId,\n rollbackRequired: finalData.errorReport.rollbackRequired\n },\n recoveryActions: finalData.errorReport.recoveryActions\n };\n} else {\n // Status desconhecido\n notificationData = {\n type: 'warning',\n title: '⚠️ Framework MIA - Status Indefinido',\n message: 'Execução finalizada com status indefinido',\n details: finalData\n };\n}\n\n// Log da notificação\nconsole.log('📢 NOTIFICAÇÃO:', notificationData.title);\nconsole.log('📝 MENSAGEM:', notificationData.message);\n\nreturn {\n json: {\n notification: notificationData,\n timestamp: new Date().toISOString(),\n finalResult: finalData\n }\n};"
},
"name": "📢 Notificação Final",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [2240, 200]
}
Configuração das Conexões
Fluxo Principal:
🚀 INÍCIO → 📊 Coleta de Dados
📊 Coleta de Dados → 🔍 Análise de Fluxo
🔍 Análise de Fluxo → 🚨 Identificar Gargalos
🚨 Identificar Gargalos → ✅ Verificar Elegibilidade
✅ Verificar Elegibilidade (TRUE) → 📋 Categorizar Tarefas
📋 Categorizar Tarefas → 🎯 Selecionar para Automação
🎯 Selecionar para Automação → ⚙️ Configurar Automação
⚙️ Configurar Automação → 🚀 Executar Processo
🚀 Executar Processo → 📊 Relatório Final
�� Relatório Final → 📢 Notificação Final
Fluxo de Erro:
✅ Verificar Elegibilidade (FALSE) → ❌ Tratamento de Erro
🚀 Executar Processo (ERROR) → ❌ Tratamento de Erro
❌ Tratamento de Erro → 📢 Notificação Final
Como Usar o Template
1. Importação
# Copie todo o JSON do workflow e importe no N8N
# Ou salve como arquivo .json e importe via interface
2. Configuração Inicial
{
"processName": "Nome do Processo",
"priority": "high|medium|low",
"stakeholders": ["user1", "user2"],
"expectedOutcome": "Descrição do resultado esperado"
}
3. Personalização
Modifique as funções de acordo com seu processo específico
Ajuste os critérios de sucesso e métricas
Configure notificações para seus canais preferidos
Adapte as validações às suas regras de negócio
4. Monitoramento
Acompanhe os logs em cada fase
Monitore as métricas de performance
Analise os relatórios gerados
Implemente melhorias baseadas no feedback
Métricas e KPIs
Métricas de Mapeamento
Número de etapas identificadas
Score de automação
Gargalos encontrados
Tempo total do processo
Métricas de Isolamento
Tarefas categorizadas
Quick wins identificados
Prioridades definidas
ROI estimado
Métricas de Automação
Tempo de execução
Taxa de sucesso
Eficiência alcançada
Economia de tempo
Customizações Avançadas
Integração com APIs Externas
{
"parameters": {
"url": "={{$json.apiEndpoint}}",
"method": "POST",
"body": {
"processData": "={{$json.processInput}}"
}
},
"name": "🔗 API Integration",
"type": "n8n-nodes-base.httpRequest"
}
Armazenamento de Dados
{
"parameters": {
"operation": "create",
"table": "mia_executions",
"columns": "execution_id, phase, status, metrics, timestamp"
},
"name": "💾 Save to Database",
"type": "n8n-nodes-base.postgres"
}
Notificações Avançadas
{
"parameters": {
"channel": "#automation",
"text": "Framework MIA - {{$json.notification.title}}\n{{$json.notification.message}}"
},
"name": "📱 Slack Notification",
"type": "n8n-nodes-base.slack"
}
Este template fornece uma base sólida para implementar o Framework MIA em qualquer processo que você deseje automatizar. Cada fase é claramente definida e pode ser adaptada às suas necessidades específicas!
Caso queira ajuda para implementar automações de IA no seu negócio, chame o time de especialistas da Sambatech.
.png)



Comentários