{"nodes":[{"id":"fc128eed-1666-46b8-8feb-e6ddf05e85d1","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[380,240],"parameters":{"rule":{"interval":[{"field":"hours","hoursInterval":2}]}},"typeVersion":1.2,"notes":"This scheduleTrigger node performs automated tasks as part of the workflow."},{"id":"830708eb-197b-4bf7-95da-893d78329ab2","name":"Strava","type":"n8n-nodes-base.strava","position":[380,480],"parameters":{"limit":10,"operation":"getAll"},"typeVersion":1.1,"notes":"This strava node performs automated tasks as part of the workflow."},{"id":"de776ebf-3ad5-4c4c-b0c8-7bc74cba5446","name":"Code","type":"n8n-nodes-base.code","position":[380,740],"parameters":{"jsCode":"// Obtén los items del nodo \"Strava\"\nconst stravaItems = $('strava_last').all();\n\n// Obtén los items del nodo \"ultimas_id\"\nconst ultimasGuardadasItems = $('saved_last').all();\n\n// Extrae las referencias guardadas en un Set, asegurando el formato como cadena\nconst referenciasGuardadas = new Set(\n    ultimasGuardadasItems.map(item => String(item.json.id))\n);\n\n// Filtra los items de \"Strava\" cuyos IDs no estén en las referencias guardadas\nconst filteredItems = stravaItems.filter(item => {\n    // Convertir el ID actual de Strava a cadena para comparar correctamente\n    return !referenciasGuardadas.has(String(item.json.id));\n});\n\n// Depuración: imprime las referencias y los resultados\nconsole.log('Referencias guardadas:', [...referenciasGuardadas]);\nconsole.log('Items filtrados:', filteredItems);\n\n// Devuelve los items filtrados\nreturn filteredItems;\n\n\n"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."},{"id":"c8a93e6e-67fc-4f6d-bcde-83d3a885c622","name":"Google Sheets","type":"n8n-nodes-base.googleSheets","position":[900,740],"parameters":{"columns":{"value":{"Kms":"={{ $json.distancia }}","Ref":"={{ $json.id }}","Fecha":"={{ $json.fecha }}","Track":"={{ $env.WEBHOOK_URL }}{{ $json.id }}","Tiempo":"={{ $json.tiempo }}","Desnivel":"={{ $json.elevacion }}"},"schema":[{"id":"Fecha","type":"string","display":true,"required":false,"displayName":"Fecha","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Kms","type":"string","display":true,"required":false,"displayName":"Kms","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Tiempo","type":"string","display":true,"required":false,"displayName":"Tiempo","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Ref","type":"string","display":true,"removed":false,"required":false,"displayName":"Ref","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Track","type":"string","display":true,"required":false,"displayName":"Track","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Bicicleta","type":"string","display":true,"required":false,"displayName":"Bicicleta","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Terreno","type":"string","display":true,"required":false,"displayName":"Terreno","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Desnivel","type":"string","display":true,"required":false,"displayName":"Desnivel","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[]},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":419561402,"cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"n8n"},"documentId":{"__rl":true,"mode":"list","value":"159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs","cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Sherlo_Bike"}},"credentials":{"googleSheetsOAuth2Api":{"id":"tyg7FJlIITkSazyi","name":"Nik's Google"}},"typeVersion":4.5,"notes":"This googleSheets node performs automated tasks as part of the workflow."},{"id":"0ce07d54-97af-4e88-9d27-452191a0b3ba","name":"strava_last","type":"n8n-nodes-base.set","position":[1420,480],"parameters":{"options":{},"assignments":{"assignments":[{"id":"423ae4b8-287c-4dc1-b32b-d1b6f1f45efa","name":"id","type":"number","value":"={{ $json.id }}"},{"id":"595802d2-17d0-40be-9e43-d655ffbf4ce0","name":"fecha","type":"string","value":"={{ DateTime.fromISO($json.start_date_local).toFormat('d/M/yyyy') }}"},{"id":"4b39d783-19f2-4a7e-b0e6-dbe2b98f1ae0","name":"distancia","type":"number","value":"={{ Math.round($json.distance / 100) / 10 }}"},{"id":"2f321dc0-435f-4b4d-866c-091ff9eaf9df","name":"elevacion","type":"number","value":"={{ Math.round($json.total_elevation_gain) }}"},{"id":"ba1bb089-5ae7-4e42-ac65-07323c4e1842","name":"tiempo","type":"string","value":"={{ `${Math.floor($json.moving_time / 3600)}:${Math.floor(($json.moving_time % 3600) / 60).toString().padStart(2, '0')}:${($json.moving_time % 60).toString().padStart(2, '0')}` }}\n"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"490f7be9-73c9-4431-8b83-fcdbbcc283eb","name":"Remove Duplicates","type":"n8n-nodes-base.removeDuplicates","position":[900,480],"parameters":{"compare":"selectedFields","options":{},"fieldsToCompare":"id"},"typeVersion":2,"notes":"This removeDuplicates node performs automated tasks as part of the workflow."},{"id":"2d1c4dc5-2baa-4c89-a312-4b40381d4e5d","name":"activities","type":"n8n-nodes-base.googleSheets","position":[660,240],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":419561402,"cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"n8n"},"documentId":{"__rl":true,"mode":"list","value":"159k8cDL8hZooz-dsHE6ueWf68mBkHhxVCKnWm-lYLqs","cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Sherlo_Bike"}},"credentials":{"googleSheetsOAuth2Api":{"id":"tyg7FJlIITkSazyi","name":"Nik's Google"}},"typeVersion":4.5,"notes":"This googleSheets node performs automated tasks as part of the workflow."},{"id":"2c7b7939-4ca1-4868-92bf-5fd7384a1103","name":"sort_saved","type":"n8n-nodes-base.sort","position":[900,240],"parameters":{"options":{},"sortFieldsUi":{"sortField":[{"fieldName":"Ref"}]}},"typeVersion":1,"notes":"This sort node performs automated tasks as part of the workflow."},{"id":"4e1d9064-6dda-4a01-af48-f278792f8b6b","name":"last_saved","type":"n8n-nodes-base.limit","position":[1160,240],"parameters":{"keep":"lastItems","maxItems":10},"typeVersion":1,"notes":"This limit node performs automated tasks as part of the workflow."},{"id":"6eb2053a-1101-477b-86e9-113813be2d92","name":"saved_last","type":"n8n-nodes-base.set","position":[1420,240],"parameters":{"options":{},"assignments":{"assignments":[{"id":"50097932-ab91-4af7-9412-925fab1982f0","name":"id","type":"string","value":"={{ $json.Ref }}"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"afd986f1-0c49-4a69-b948-aefcbff1010f","name":"sort_strava","type":"n8n-nodes-base.sort","position":[660,480],"parameters":{"options":{},"sortFieldsUi":{"sortField":[{"fieldName":"id"}]}},"typeVersion":1,"notes":"This sort node performs automated tasks as part of the workflow."},{"id":"16094d29-f35b-492c-9d93-3145dab30cd3","name":"last_strava","type":"n8n-nodes-base.limit","position":[1160,480],"parameters":{"keep":"lastItems","maxItems":10},"typeVersion":1,"notes":"This limit node performs automated tasks as part of the workflow."},{"id":"9986360b-fcd3-42f4-ad13-aea69f6d1a80","name":"sort_results","type":"n8n-nodes-base.sort","position":[660,740],"parameters":{"options":{},"sortFieldsUi":{"sortField":[{"fieldName":"id"}]}},"typeVersion":1,"notes":"This sort node performs automated tasks as part of the workflow."},{"id":"error-86636632","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{"Google Sheets":{"main":[[]]},"activities":{"main":[[]]}},"name":"Scheduletrigger Workflow","description":"Automated workflow: Scheduletrigger Workflow. This workflow processes data and performs automated tasks.","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"meta":{"instanceId":"workflow-17ecfdee","versionId":"1.0.0","createdAt":"2025-09-29T07:07:47.427026","updatedAt":"2025-09-29T07:07:47.427041","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Scheduletrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}