Rastreador de documentos de control de calidad y cumplimiento
Este es unautomatización que contiene 21 nodos.Utiliza principalmente nodos como If, Code, Slack, EmailSend, GoogleDrive. Automatización de documentos de control de calidad de fabricación y cumplimiento con Jotform y Google Workspace
- •Bot Token de Slack o URL de Webhook
- •Credenciales de API de Google Drive
- •Credenciales de API de Google Sheets
Nodos utilizados (21)
Categoría
{
"id": "MAgkC5xPvs1oSfOG",
"meta": {
"instanceId": "277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8"
},
"name": "Quality Control Documentation & Compliance Tracker",
"tags": [
{
"id": "CWardZYJBmejoyC4",
"name": "under review",
"createdAt": "2025-10-09T18:43:37.031Z",
"updatedAt": "2025-10-09T18:43:37.031Z"
},
{
"id": "DP1soi5mjVldqSt2",
"name": "Manufacturing",
"createdAt": "2025-10-16T07:01:03.515Z",
"updatedAt": "2025-10-16T07:01:03.515Z"
},
{
"id": "YsSinivD5gbLQ0t9",
"name": "Quality Control",
"createdAt": "2025-10-16T07:01:03.524Z",
"updatedAt": "2025-10-16T07:01:03.524Z"
},
{
"id": "fVuzFMBZ0wHzY3en",
"name": "Compliance",
"createdAt": "2025-10-16T07:01:03.521Z",
"updatedAt": "2025-10-16T07:01:03.521Z"
}
],
"nodes": [
{
"id": "8f4dabc5-b0f6-4f4b-8e07-aec5b456c963",
"name": "Verificar Nuevas Inspecciones",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-656,
160
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 15
}
]
}
},
"typeVersion": 1.1
},
{
"id": "09bfd902-b390-418e-8b95-52f1e2b12853",
"name": "Leer Cola de Inspecciones",
"type": "n8n-nodes-base.googleSheets",
"position": [
-448,
160
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4
},
{
"id": "9511a47d-58f0-4755-9f03-c36adfcffbe4",
"name": "Procesar Datos de Inspección",
"type": "n8n-nodes-base.code",
"position": [
-256,
256
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Parse inspection data and determine compliance status\nconst item = $input.item.json;\n\n// Extract inspection details\nconst inspectionData = {\n id: item.inspection_id || new Date().getTime().toString(),\n timestamp: new Date().toISOString(),\n product_name: item.product_name || item.answers?.product_name || '',\n batch_number: item.batch_number || item.answers?.batch_number || '',\n inspector_name: item.inspector_name || item.answers?.inspector_name || '',\n inspection_type: item.inspection_type || item.answers?.inspection_type || 'Standard',\n \n // Measurement data\n measurements: {\n dimension_length: parseFloat(item.dimension_length || item.answers?.dimension_length || 0),\n dimension_width: parseFloat(item.dimension_width || item.answers?.dimension_width || 0),\n dimension_height: parseFloat(item.dimension_height || item.answers?.dimension_height || 0),\n weight: parseFloat(item.weight || item.answers?.weight || 0),\n temperature: parseFloat(item.temperature || item.answers?.temperature || 0)\n },\n \n // Quality checks\n visual_inspection: item.visual_inspection || item.answers?.visual_inspection || 'Pass',\n surface_finish: item.surface_finish || item.answers?.surface_finish || 'Acceptable',\n color_match: item.color_match || item.answers?.color_match || 'Yes',\n defects_found: item.defects_found || item.answers?.defects_found || 'None',\n \n // Compliance calculation\n specifications: {\n length_min: 100,\n length_max: 102,\n width_min: 50,\n width_max: 52,\n height_min: 25,\n height_max: 27,\n weight_min: 450,\n weight_max: 550\n }\n};\n\n// Check compliance\nconst m = inspectionData.measurements;\nconst s = inspectionData.specifications;\n\nconst dimensionsCompliant = \n m.dimension_length >= s.length_min && m.dimension_length <= s.length_max &&\n m.dimension_width >= s.width_min && m.dimension_width <= s.width_max &&\n m.dimension_height >= s.height_min && m.dimension_height <= s.height_max;\n\nconst weightCompliant = m.weight >= s.weight_min && m.weight <= s.weight_max;\n\nconst visualCompliant = \n inspectionData.visual_inspection === 'Pass' &&\n inspectionData.surface_finish === 'Acceptable' &&\n inspectionData.color_match === 'Yes';\n\ninspectionData.compliance_status = \n dimensionsCompliant && weightCompliant && visualCompliant ? 'PASS' : 'FAIL';\n\ninspectionData.non_conformities = [];\nif (!dimensionsCompliant) inspectionData.non_conformities.push('Dimensions out of spec');\nif (!weightCompliant) inspectionData.non_conformities.push('Weight out of spec');\nif (!visualCompliant) inspectionData.non_conformities.push('Visual inspection failed');\n\nreturn inspectionData;"
},
"typeVersion": 2
},
{
"id": "5c1c11fe-848e-4951-9423-e86a0bb8b14b",
"name": "Almacenar en Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
-48,
160
],
"parameters": {
"name": "=QC_Report_{{$json.batch_number}}_{{$json.id}}.json",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "root",
"cachedResultName": "/ (Root folder)"
}
},
"typeVersion": 3
},
{
"id": "32d6c442-d011-4dd4-8755-ed62277041b5",
"name": "Registrar en Hoja de Seguimiento",
"type": "n8n-nodes-base.googleSheets",
"position": [
160,
160
],
"parameters": {
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4
},
{
"id": "8665c487-3083-4f39-b9de-69ad7bd68afd",
"name": "Verificar si Falló",
"type": "n8n-nodes-base.if",
"position": [
-48,
352
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.compliance_status}}",
"value2": "FAIL"
}
]
}
},
"typeVersion": 1
},
{
"id": "ae823af6-bfe5-4c77-8789-b5c27daf5327",
"name": "Alertar al Equipo de Calidad",
"type": "n8n-nodes-base.slack",
"position": [
160,
464
],
"webhookId": "d22990c8-4a80-46f8-8071-c6a7aedd2934",
"parameters": {
"text": "🚨 *Quality Control Alert*\n\nProduct: {{$json.product_name}}\nBatch: {{$json.batch_number}}\nStatus: *{{$json.compliance_status}}*\n\nNon-conformities:\n{{$json.non_conformities.join('\\n• ')}}",
"otherOptions": {}
},
"typeVersion": 2.1
},
{
"id": "e1e70d0c-4d12-4e10-85fc-b42a062451d2",
"name": "Generar Certificado",
"type": "n8n-nodes-base.code",
"position": [
352,
160
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Generate HTML certificate of compliance\nconst data = $input.item.json;\n\nconst html = `\n<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 40px; }\n .header { text-align: center; margin-bottom: 30px; }\n .certificate { border: 2px solid #333; padding: 30px; }\n h1 { color: #2c5aa0; }\n .details { margin: 20px 0; }\n .signature { margin-top: 50px; }\n .footer { text-align: center; margin-top: 30px; font-size: 12px; }\n </style>\n</head>\n<body>\n <div class=\"certificate\">\n <div class=\"header\">\n <h1>CERTIFICATE OF COMPLIANCE</h1>\n <p>ISO 9001:2015 Quality Management System</p>\n </div>\n \n <div class=\"details\">\n <p><strong>Certificate No:</strong> ${data.id}</p>\n <p><strong>Date:</strong> ${new Date(data.timestamp).toLocaleDateString()}</p>\n <p><strong>Product:</strong> ${data.product_name}</p>\n <p><strong>Batch Number:</strong> ${data.batch_number}</p>\n <p><strong>Inspector:</strong> ${data.inspector_name}</p>\n \n <h3>Inspection Results</h3>\n <table border=\"1\" style=\"width: 100%; border-collapse: collapse;\">\n <tr>\n <th>Parameter</th>\n <th>Measured Value</th>\n <th>Specification</th>\n <th>Status</th>\n </tr>\n <tr>\n <td>Length (mm)</td>\n <td>${data.measurements.dimension_length}</td>\n <td>100-102</td>\n <td>${data.measurements.dimension_length >= 100 && data.measurements.dimension_length <= 102 ? '✓' : '✗'}</td>\n </tr>\n <tr>\n <td>Width (mm)</td>\n <td>${data.measurements.dimension_width}</td>\n <td>50-52</td>\n <td>${data.measurements.dimension_width >= 50 && data.measurements.dimension_width <= 52 ? '✓' : '✗'}</td>\n </tr>\n <tr>\n <td>Weight (g)</td>\n <td>${data.measurements.weight}</td>\n <td>450-550</td>\n <td>${data.measurements.weight >= 450 && data.measurements.weight <= 550 ? '✓' : '✗'}</td>\n </tr>\n </table>\n \n <h3>Compliance Status: ${data.compliance_status}</h3>\n </div>\n \n <div class=\"signature\">\n <p>_______________________</p>\n <p>Quality Manager Signature</p>\n </div>\n \n <div class=\"footer\">\n <p>This certificate is electronically generated and valid without signature</p>\n </div>\n </div>\n</body>\n</html>\n`;\n\nreturn {\n html: html,\n filename: `Certificate_${data.batch_number}_${data.id}.html`\n};"
},
"typeVersion": 2
},
{
"id": "622adac3-cd64-44d5-839e-dca015951252",
"name": "Enviar Certificado por Correo",
"type": "n8n-nodes-base.emailSend",
"position": [
560,
160
],
"webhookId": "2f8295a5-2d25-49cb-b690-694a0ca8cd3a",
"parameters": {
"options": {
"attachments": "={{$node['Generate Certificate'].json.html}}"
},
"subject": "Quality Certificate - Batch {{$json.batch_number}}",
"toEmail": "={{$json.customer_email || 'customer@example.com'}}",
"fromEmail": "quality@yourcompany.com"
},
"typeVersion": 2.1
},
{
"id": "8bbe8307-48a8-4875-9e55-27988dc638af",
"name": "Activador de Reporte Diario",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-656,
656
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.1
},
{
"id": "1af14ece-11a2-44a0-a935-8cdbdc0cff3e",
"name": "Obtener Datos Diarios",
"type": "n8n-nodes-base.googleSheets",
"position": [
-448,
656
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "list",
"value": ""
}
},
"typeVersion": 4
},
{
"id": "91204a97-f66a-4d3f-bc34-f9b06b25e21f",
"name": "Generar Resumen",
"type": "n8n-nodes-base.code",
"position": [
-256,
656
],
"parameters": {
"jsCode": "// Generate daily compliance summary\nconst items = $input.all();\nconst today = new Date().toDateString();\n\nconst todaysInspections = items.filter(item => {\n const itemDate = new Date(item.json.timestamp).toDateString();\n return itemDate === today;\n});\n\nconst summary = {\n date: today,\n total_inspections: todaysInspections.length,\n passed: todaysInspections.filter(i => i.json.compliance_status === 'PASS').length,\n failed: todaysInspections.filter(i => i.json.compliance_status === 'FAIL').length,\n pass_rate: 0,\n products_inspected: [...new Set(todaysInspections.map(i => i.json.product_name))],\n inspectors: [...new Set(todaysInspections.map(i => i.json.inspector_name))],\n common_issues: {}\n};\n\nif (summary.total_inspections > 0) {\n summary.pass_rate = ((summary.passed / summary.total_inspections) * 100).toFixed(1);\n}\n\n// Count non-conformities\ntodaysInspections.forEach(inspection => {\n if (inspection.json.non_conformities) {\n inspection.json.non_conformities.forEach(issue => {\n summary.common_issues[issue] = (summary.common_issues[issue] || 0) + 1;\n });\n }\n});\n\nreturn summary;"
},
"typeVersion": 2
},
{
"id": "4947aabe-e0be-4ea2-85f4-fa259b1f4290",
"name": "Enviar Reporte Diario",
"type": "n8n-nodes-base.slack",
"position": [
-48,
656
],
"webhookId": "e8a8d211-7f01-45d0-a16b-64675b98d59f",
"parameters": {
"text": "📊 *Daily Quality Report*\nDate: {{$json.date}}\n\n*Summary:*\n• Total Inspections: {{$json.total_inspections}}\n• Passed: {{$json.passed}} ✅\n• Failed: {{$json.failed}} ❌\n• Pass Rate: {{$json.pass_rate}}%\n\n*Products Inspected:*\n{{$json.products_inspected.join('\\n• ')}}",
"otherOptions": {}
},
"typeVersion": 2.1
},
{
"id": "151db029-c3da-4324-b523-014be9200479",
"name": "Nota",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
112
],
"parameters": {
"width": 250,
"height": 156,
"content": "## 📥 INPUT SOURCES\n\n**Two ways to receive data:**\n- Form submissions\n- Scheduled checks"
},
"typeVersion": 1
},
{
"id": "efd420c8-6496-4775-ae49-e9ddd0439deb",
"name": "Nota 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
384
],
"parameters": {
"width": 200,
"height": 152,
"content": "## 🔄 PROCESSING\n\nCalculates compliance\nbased on specs"
},
"typeVersion": 1
},
{
"id": "97aad2cd-f193-48d2-91c4-271a5c2d3a11",
"name": "Nota 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
0
],
"parameters": {
"width": 372,
"height": 136,
"content": "## 💾 STORAGE\n\nSaves to Drive & tracking sheet"
},
"typeVersion": 1
},
{
"id": "d214ceff-a286-4941-aa49-a2e8ccad92f4",
"name": "Nota 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
176,
624
],
"parameters": {
"width": 180,
"height": 136,
"content": "## 🚨 ALERTS\n\nNotifies team\nfor failures only"
},
"typeVersion": 1
},
{
"id": "76539b89-3dab-4804-b6f8-c2f4b5dac0ec",
"name": "Nota 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
336,
320
],
"parameters": {
"width": 360,
"height": 120,
"content": "## 📋 DOCS\n\nGenerates & emails certificates"
},
"typeVersion": 1
},
{
"id": "11a5eb71-0f1f-4d6e-8f40-11113c6513e0",
"name": "Nota 6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
688
],
"parameters": {
"width": 200,
"height": 168,
"content": "## 📊 DAILY REPORTS\n\nRuns at 8 AM\nSummarizes metrics"
},
"typeVersion": 1
},
{
"id": "7191be65-1d4b-4ee1-8eb5-48dd0343c85a",
"name": "Nota1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
384
],
"parameters": {
"width": 314,
"height": 156,
"content": "## 📥 MANUAL FORM\n\nJotform Trigger\n\nCreate your form for free on [Jotform using this link](https://www.jotform.com/?partner=mediajade)"
},
"typeVersion": 1
},
{
"id": "db6112a6-2bfe-4242-b893-8c4ab757592b",
"name": "Activador de Jotform",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-640,
416
],
"webhookId": "7ea0164b-ac9b-46b6-a7fa-bcd4003fe8cf",
"parameters": {
"form": "252815424602048"
},
"credentials": {
"jotFormApi": {
"id": "cOSh16Q5l4e0EB1A",
"name": "Jotform jitesh@mediajade.com"
}
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "43118887-aa49-452b-81c1-4ad1fc98eabb",
"connections": {
"1af14ece-11a2-44a0-a935-8cdbdc0cff3e": {
"main": [
[
{
"node": "91204a97-f66a-4d3f-bc34-f9b06b25e21f",
"type": "main",
"index": 0
}
]
]
},
"8665c487-3083-4f39-b9de-69ad7bd68afd": {
"main": [
[
{
"node": "ae823af6-bfe5-4c77-8789-b5c27daf5327",
"type": "main",
"index": 0
}
]
]
},
"db6112a6-2bfe-4242-b893-8c4ab757592b": {
"main": [
[
{
"node": "9511a47d-58f0-4755-9f03-c36adfcffbe4",
"type": "main",
"index": 0
}
]
]
},
"91204a97-f66a-4d3f-bc34-f9b06b25e21f": {
"main": [
[
{
"node": "4947aabe-e0be-4ea2-85f4-fa259b1f4290",
"type": "main",
"index": 0
}
]
]
},
"8bbe8307-48a8-4875-9e55-27988dc638af": {
"main": [
[
{
"node": "1af14ece-11a2-44a0-a935-8cdbdc0cff3e",
"type": "main",
"index": 0
}
]
]
},
"e1e70d0c-4d12-4e10-85fc-b42a062451d2": {
"main": [
[
{
"node": "622adac3-cd64-44d5-839e-dca015951252",
"type": "main",
"index": 0
}
]
]
},
"32d6c442-d011-4dd4-8755-ed62277041b5": {
"main": [
[
{
"node": "e1e70d0c-4d12-4e10-85fc-b42a062451d2",
"type": "main",
"index": 0
}
]
]
},
"09bfd902-b390-418e-8b95-52f1e2b12853": {
"main": [
[
{
"node": "9511a47d-58f0-4755-9f03-c36adfcffbe4",
"type": "main",
"index": 0
}
]
]
},
"5c1c11fe-848e-4951-9423-e86a0bb8b14b": {
"main": [
[
{
"node": "32d6c442-d011-4dd4-8755-ed62277041b5",
"type": "main",
"index": 0
}
]
]
},
"9511a47d-58f0-4755-9f03-c36adfcffbe4": {
"main": [
[
{
"node": "5c1c11fe-848e-4951-9423-e86a0bb8b14b",
"type": "main",
"index": 0
},
{
"node": "8665c487-3083-4f39-b9de-69ad7bd68afd",
"type": "main",
"index": 0
}
]
]
},
"8f4dabc5-b0f6-4f4b-8e07-aec5b456c963": {
"main": [
[
{
"node": "09bfd902-b390-418e-8b95-52f1e2b12853",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Jitesh Dugar
@jiteshdugarAI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.
Compartir este flujo de trabajo