{"context":{"domain":"webcontinental-app"},"layers":{"ApplicationLayer":{"reference":"ApplicationLayer","availableInstances":[{"reference":"ComponentsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"SystemsDataSet","params":{"filter":{"domain":"data2"},"pagination":{"size":1},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSource"}}}},{"reference":"ExternalComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"SystemsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5e3b796d6228227ca637d0f4","name":"data2","domain":"data2","organization":"62292184611f480b3191c37c","visibility":"public","updatedAt":"2026-07-27T14:19:36.810Z"}]}},{"reference":"OrganizationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"DataComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@DataSet","reference":"OneFileComponentInstancesDataSet","params":{"pagination":{"size":1},"master":{"dataset":{"component":"data2-core-types@ProcessReference","params":{"reference":"SystemsDataSet"}},"localField":"system","masterField":"_id"},"datasource":{"component":"data2-core-types@ProcessReference","params":{"reference":"FileComponentInstancesDataSource"}}}},{"reference":"ApplicationsDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"reference":"ServiceComponentInstancesDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@Data2TableDataSource","reference":"FileComponentInstancesDataSource","params":{"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}}]}},{"component":"data2-core@MemoryDataSource","reference":"EmptyDataSource","params":{"initialData":[]}},{"reference":"ComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"UserComponentsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"DataComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ServiceComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ExternalComponentInstancesDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}},{"reference":"ApplicationsDataSet","component":"data2-core@DataSet","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EmptyDataSource"}}}}],"processesParams":{}},"HostApplicationLayer":{"reference":"HostApplicationLayer","availableInstances":[{"_id":"5f15ff190528b92601890f71","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"SystemsTableDataSource"}},"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"domain"}}},"pk":"_id","fields":[{"component":"data2-core-types@FieldReference","params":{"key":"_id"}},{"component":"data2-core-types@FieldReference","params":{"key":"name"}},{"component":"data2-core-types@FieldReference","params":{"key":"domain"}},{"component":"data2-core-types@FieldReference","params":{"key":"visibility"}},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization._id"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.name"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.billingStatus"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"organization.publicTrial.active"}}},"break":true},{"component":"data2-core-types@FieldReference","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"settings.defaultAccessPolicy"}}},"break":true}],"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"staticPagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}},"policies":[{"component":"data2-core-auth@Policy","params":{"allow":{"params":{"actions":[{"params":{"components":[{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"_id"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"domain"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"},{"params":{"query":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$params.query"}}}},"field":{"component":"data2-core-primitives@String","params":{"content":"customDomains"}},"fieldType":"string"},"component":"data2@7KkQq0vK4a7D2gg6IVJT7"}]},"component":"data2-core-logical-operators@Or"}]},"component":"data2-core-flow@Series"}}}]},"reference":"SystemsDataSet","updatedAt":"2026-08-07T21:51:24.037Z","createdAt":"2020-07-20T20:31:21.838Z"},{"_id":"5f1601ce0528b92601890f7c","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":1000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"sort":{"params.package":1,"params.component":1},"pk":"_id","autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"staticFilter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}},"filter":{"system":{"exists":{"params":{"content":false},"component":"data2-core-primitives@Boolean"}}}},"reference":"ComponentsDataSet","updatedAt":"2025-11-05T19:37:01.935Z","createdAt":"2020-07-20T20:42:54.898Z"},{"_id":"5f9041dbc8da12be8b94aea4","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":2000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentsTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"UserComponentsDataSet","updatedAt":"2025-11-06T21:06:58.095Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"65d8c4fabc9dbb8f94de8d53","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ExternalComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ExternalComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:23.742Z","createdAt":"2024-02-23T16:17:01.816Z"},{"reference":"SystemsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6aa3f490872838a8b6ddea2e","name":"app","domain":"webcontinental-app","visibility":"public","updatedAt":"2026-09-11T12:31:12.378Z","createdAt":"2026-09-11T12:31:12.378Z"}]}},{"reference":"ComponentsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"5f52a278a575399a45d239b4","component":"data2-core-types@Component","params":{"package":"data2-core-primitives","component":"Router","interactions":{"component":"data2-core-types@FieldSet","params":{"fields":{"goBack":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.goBack","args":[]}}}},"icon":{"component":"data2-core-primitives@String","params":{"content":"arrow-left"}},"visibility":"public"}},"goTo":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.push","args":[{"component":"data2-core-types@Reference","params":{"reference":"url"}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"preserveQuery"}}}}]}},"parameters":[{"component":"data2-core-primitives@String","params":{"content":"url"}},{"component":"data2-core-primitives@String","params":{"content":"preserveQuery"}}]},"break":true},"icon":{"component":"data2-core-primitives@String","params":{"content":"share"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Path to route"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Path to redirect user"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Boolean"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Preserve Query"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Preserve query string parameters  preserve query parameters on navigating."}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"}]}},"open":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"component":"data2-core-types@This","params":{}},"prop":"history.push","args":[{"pathname":{"component":"data2-core-types@Reference","params":{"reference":"value"}}}]}},"parameters":["value"]}},"icon":{"component":"data2-core-primitives@String","params":{"content":"share"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Link to open"}},"description":{"component":"data2-core-primitives@String","params":{"content":""}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Target"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Where to open the link"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"oneOf":[{"params":{"content":"_blank"},"component":"data2-core-primitives@String"},{"params":{"content":"_self"},"component":"data2-core-primitives@String"},{"params":{"content":"_parent"},"component":"data2-core-primitives@String"},{"params":{"content":"_top"},"component":"data2-core-primitives@String"}]},"component":"data2-core-types@ComponentParameter"}]}},"close":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-types@Function"}},"definition":{"component":"data2-core-functions@Function","params":{"body":{"preventEvaluation":true,"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":"close"}},"parameters":["value"]}},"icon":{"component":"data2-core-primitives@String","params":{"content":"times"}},"visibility":"public","arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Link to open"}},"description":{"component":"data2-core-primitives@String","params":{"content":""}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2-core-types@ComponentParameter"},{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Target"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Where to open the link"}},"visibility":"public","required":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"oneOf":[{"params":{"content":"_blank"},"component":"data2-core-primitives@String"},{"params":{"content":"_self"},"component":"data2-core-primitives@String"},{"params":{"content":"_parent"},"component":"data2-core-primitives@String"},{"params":{"content":"_top"},"component":"data2-core-primitives@String"}]},"component":"data2-core-types@ComponentParameter"}],"description":{"component":"data2-core-primitives@String","params":{"content":"Closes a window that was opened via router.open."}}}}}}}}},{"_id":"620d28658271aa4129919d89","component":"data2-core-types@Component","params":{"package":"data2-interface-services","component":"DeviceController","interactions":{"params":{"fields":{"postMessage":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@String","title":{"component":"data2-core-primitives@String","params":{"content":"data"}}}}]},"component":"data2-core-types@ComponentParameter"},"print":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"parameters":{"zoom":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Number"}},"title":{"component":"data2-core-primitives@String","params":{"content":"zoom"}},"visibility":"public"}}},"visibility":"public"},"component":"data2-core-types@ComponentParameter"}],"visibility":"public"},"component":"data2-core-types@ComponentParameter"},"share":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}}},"component":"data2-core-types@ComponentParameter"},"clipboard.copy":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}}}}]},"component":"data2-core-types@ComponentParameter"},"clipboard.paste":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}}}}]},"component":"data2-core-types@ComponentParameter"},"download":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Content"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Options"}},"parameters":{"params":{"fields":{"type":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Mimetype"}}}}}},"component":"data2-core-types@FieldSet"}}}]},"component":"data2-core-types@ComponentParameter"},"downloadUrl":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Url"}}}}]},"component":"data2-core-types@ComponentParameter"},"promptFiles":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@Object","flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"parameters":{"params":{"fields":{"multiple":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Multiple"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Whether or not to allow selecting multiple files"}},"component":"data2-core-primitives@Boolean"}},"acceptedFormats":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Accepted Formats"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Accepted file formats"}},"component":"data2-core-primitives@String","list":{"component":"data2-core-primitives@Boolean","params":{"content":true}}}},"timeout":{"component":"data2-core-types@ComponentParameter","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Timeout"}},"description":{"component":"data2-core-primitives@String","params":{"content":"Max milliseconds to wait for file upload"}},"component":"data2-core-primitives@Number"}}}},"component":"data2-core-types@FieldSet"}}}],"visibility":"public"},"component":"data2-core-types@ComponentParameter"},"meetingRecord":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","definition":{"params":{"actions":[{"params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"meeting"}},"script":{"component":"data2-core-primitives@String","params":{"content":"(function() {\n  let mediaRecorder;\n  let audioChunks = [];\n  let combinedStream;\n  let audioContext;\n  \n  window.meetingCapture = async function() {\n    try {\n      // Solicitar acesso ao áudio da guia (e vídeo, que será ignorado depois)\n      const tabStream = await navigator.mediaDevices.getDisplayMedia({ \n        video: true, // Necessário para alguns navegadores\n        audio: true\n      });\n      \n      // Remover a trilha de vídeo\n      const tabAudioTrack = tabStream.getAudioTracks()[0];\n      \n      // Solicitar acesso ao microfone\n      const micStream = await navigator.mediaDevices.getUserMedia({ audio: true });\n      const micAudioTrack = micStream.getAudioTracks()[0];\n      \n      // Criar um novo MediaStream com ambas as trilhas de áudio\n      combinedStream = new MediaStream([tabAudioTrack, micAudioTrack]);\n      \n      // Criar um contexto de áudio para misturar os streams\n      audioContext = new AudioContext();\n      const destination = audioContext.createMediaStreamDestination();\n      \n      // Conectar a trilha de áudio da guia\n      const tabSource = audioContext.createMediaStreamSource(new MediaStream([tabAudioTrack]));\n      tabSource.connect(destination);\n      \n      // Conectar a trilha de áudio do microfone\n      const micSource = audioContext.createMediaStreamSource(new MediaStream([micAudioTrack]));\n      micSource.connect(destination);\n      \n      // Iniciar gravação com o stream misturado\n      mediaRecorder = new MediaRecorder(destination.stream);\n      audioChunks = [];\n      mediaRecorder.ondataavailable = (e) => audioChunks.push(e.data);\n      mediaRecorder.start();\n      \n      console.log('Gravação iniciada. Chame meetingCaptureStop() para finalizar.');\n    } catch (error) {\n      console.error('Erro ao iniciar a captura:', error);\n    }\n  };\n  \n  window.meetingCaptureStop = function() {\n    return new Promise((resolve, reject) => {\n      if (!mediaRecorder) {\n        reject('Nenhuma gravação em andamento.');\n        return;\n      }\n      \n      mediaRecorder.onstop = () => {\n        const audioBlob = new Blob(audioChunks, { type: 'audio/webm' });\n        combinedStream.getTracks().forEach(track => track.stop());\n        audioContext.close();\n        \n        resolve(audioBlob);\n        console.log('Gravação finalizada. O arquivo de áudio está pronto para upload.');\n      };\n      \n      mediaRecorder.stop();\n    });\n  };\n})();"}}},"component":"data2-core-web@Script"},{"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":{"component":"data2-core-primitives@String","params":{"content":"meetingCapture"}}}}]},"component":"data2-core-flow@Series"}},"component":"data2-core-types@ComponentParameter"},"meetingRecordStop":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"public","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Filename"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Content"}}}},{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Object"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Options"}},"parameters":{"params":{"fields":{"type":{"component":"data2-core-types@ComponentParameter","params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@String"}},"title":{"component":"data2-core-primitives@String","params":{"content":"Mimetype"}}}}}},"component":"data2-core-types@FieldSet"}}}],"definition":{"params":{"actions":[{"component":"data2-core-types@Getter","params":{"module":{"params":{},"component":"data2-core-web@Window"},"prop":{"component":"data2-core-primitives@String","params":{"content":"meetingCaptureStop"}}}}]},"component":"data2-core-flow@Series"}},"component":"data2-core-types@ComponentParameter"},"notify":{"params":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core-primitives@Function"}},"visibility":"private","arguments":[{"component":"data2-core-types@ComponentParameter","params":{"component":"data2-core-primitives@Object","parameters":{"title":{"params":{"component":"data2-core-primitives@String","index":{"component":"data2-core-primitives@Number","params":{"content":0}},"title":{"component":"data2-core-primitives@String","params":{"content":"title"}}},"component":"data2-core-types@ComponentParameter"},"sound":{"params":{"component":"data2-core-types@FileComponentUrlReference","index":{"component":"data2-core-primitives@Number","params":{"content":1}},"title":{"component":"data2-core-primitives@String","params":{"content":"sound"}}},"component":"data2-core-types@ComponentParameter"}},"flat":{"component":"data2-core-primitives@Boolean","params":{"content":true}}}}]},"component":"data2-core-types@ComponentParameter"}}},"component":"data2-core-types@FieldSet"}}},{"_id":"6aa3fb943360d21933137154","component":"data2-core-types@Component","system":"6aa3f490872838a8b6ddea2e","params":{"extends":"data2-core-primitives@Block","component":"wc-shell","package":"webcontinental-app","definition":{"preventEvaluation":true,"component":"data2-core-types@Definition","params":{"def":{"component":"data2-code-components@CodeHost","params":{"code":{"component":"data2-core-primitives@String","params":{"content":"export default {\n  css: `\n    :host, .wc { all: initial; }\n    .wc { display:flex; flex-direction:column; height:100%; width:100%; font-family: -apple-system, \"Segoe UI\", Roboto, sans-serif; color:#1a1f2b; background:#f6f7f9; box-sizing:border-box; }\n    .wc * { box-sizing: border-box; }\n    .topbar { display:flex; align-items:center; justify-content:space-between; padding:0 28px; height:64px; background:#ffffff; border-bottom:1px solid #e6e8ec; flex-shrink:0; }\n    .brand { display:flex; align-items:center; gap:10px; font-weight:800; font-size:16px; letter-spacing:-0.01em; }\n    .brand .dot { width:10px; height:10px; border-radius:3px; background:#0A2540; }\n    .brand small { font-weight:500; color:#8a92a3; font-size:12px; margin-left:4px; }\n    .tabs { display:flex; gap:4px; }\n    .tab { padding:9px 16px; border-radius:8px; font-size:13.5px; font-weight:600; color:#5b6472; cursor:pointer; transition:.15s; border:1px solid transparent; }\n    .tab:hover { background:#f1f2f5; }\n    .tab[data-active] { background:#0A2540; color:#fff; }\n    .body { flex:1; overflow:auto; padding:32px 36px 60px; }\n    .section-title { font-size:22px; font-weight:800; margin:0 0 6px 0; letter-spacing:-0.01em; }\n    .section-sub { font-size:13.5px; color:#7a8494; margin:0 0 28px 0; }\n\n    .kpi-row { display:grid; grid-template-columns:repeat(auto-fit, minmax(240px,1fr)); gap:18px; margin-bottom:32px; }\n    .kpi { background:#fff; border:1px solid #e6e8ec; border-radius:16px; padding:22px 24px; }\n    .kpi .l { font-size:11.5px; font-weight:700; color:#8a92a3; text-transform:uppercase; letter-spacing:.05em; margin-bottom:10px; }\n    .kpi .v { font-size:28px; font-weight:800; letter-spacing:-0.02em; }\n    .kpi .v.warn { color:#c2410c; }\n    .kpi .d { font-size:12px; color:#8a92a3; margin-top:6px; }\n\n    .ch-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(300px,1fr)); gap:20px; }\n    .ch-card { background:#fff; border:1px solid #e6e8ec; border-radius:18px; padding:24px; display:flex; flex-direction:column; gap:16px; cursor:pointer; transition:.15s; }\n    .ch-card:hover { border-color:#0A2540; box-shadow:0 4px 16px rgba(10,37,64,.08); }\n    .ch-card[data-drilled] { border-color:#0A2540; box-shadow:0 4px 20px rgba(10,37,64,.12); }\n    .ch-head { display:flex; align-items:center; gap:14px; }\n    .ch-logo { width:48px; height:48px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-weight:800; font-size:10.5px; text-align:center; line-height:1.1; padding:4px; overflow:hidden; flex-shrink:0; box-shadow:inset 0 0 0 1px rgba(0,0,0,.06); }\n    .ch-name { font-weight:800; font-size:16px; }\n    .ch-stats { display:grid; grid-template-columns:1fr 1fr; gap:12px; }\n    .ch-stat .l { font-size:10.5px; color:#8a92a3; font-weight:700; text-transform:uppercase; letter-spacing:.04em; }\n    .ch-stat .v { font-size:17px; font-weight:800; margin-top:3px; }\n    .badge { align-self:flex-start; font-size:11px; font-weight:700; padding:5px 11px; border-radius:999px; }\n    .badge.ok { background:#dcfce7; color:#15803d; }\n    .badge.warn { background:#ffedd5; color:#c2410c; }\n    .sparkwrap { margin-top:2px; }\n\n    .chart-card { background:#fafbfc; border:1px solid #eef0f3; border-radius:14px; padding:18px; }\n    .chart-title { font-size:12.5px; font-weight:700; color:#5b6472; margin-bottom:12px; text-transform:uppercase; letter-spacing:.04em; }\n    .freight-list { display:flex; flex-direction:column; gap:8px; max-height:220px; overflow:auto; }\n    .freight-row { display:flex; justify-content:space-between; font-size:12.5px; padding:8px 10px; background:#fff; border:1px solid #eef0f3; border-radius:8px; }\n\n    .detail-back { margin-bottom:18px; }\n    .detail-header { display:flex; align-items:center; gap:20px; margin-bottom:28px; }\n    .detail-grid { display:grid; grid-template-columns:1.4fr 1fr; gap:24px; margin-top:24px; }\n    .orders-list { display:flex; flex-direction:column; gap:8px; max-height:420px; overflow:auto; }\n    .order-row { display:flex; align-items:center; gap:12px; background:#fff; border:1px solid #eef0f3; border-radius:10px; padding:12px 14px; font-size:12.5px; }\n    .order-main { flex:1; }\n    .order-meta { color:#8a92a3; white-space:nowrap; }\n    .status-pill { font-size:10.5px; font-weight:800; padding:4px 10px; border-radius:999px; text-transform:uppercase; letter-spacing:.03em; white-space:nowrap; }\n    .status-breakdown { display:flex; flex-direction:column; gap:16px; }\n    .status-bar-row { display:flex; align-items:center; gap:12px; }\n    .status-bar-label { width:100px; font-size:12px; font-weight:600; color:#5b6472; flex-shrink:0; }\n    .status-bar-track { flex:1; height:10px; background:#eef0f3; border-radius:999px; overflow:hidden; }\n    .status-bar-fill { height:100%; border-radius:999px; }\n    .status-bar-count { width:28px; text-align:right; font-weight:800; font-size:13px; flex-shrink:0; }\n\n    .rec-summary { display:grid; grid-template-columns:repeat(4, 1fr); gap:16px; margin-bottom:32px; }\n    .rec-sum-card { background:#fff; border:1px solid #e6e8ec; border-radius:14px; padding:18px 20px; display:flex; flex-direction:column; justify-content:center; align-items:flex-start; gap:4px; }\n    .rec-sum-card .v { font-size:26px; font-weight:800; }\n    .rec-sum-card .l { font-size:11.5px; color:#8a92a3; font-weight:600; }\n    .rec-group { margin-bottom:28px; }\n    .rec-group-title { font-size:14.5px; font-weight:800; margin-bottom:14px; display:flex; align-items:center; gap:8px; }\n    .rec-cards { display:grid; grid-template-columns:repeat(auto-fit, minmax(320px,1fr)); gap:14px; }\n    .rec-card { background:#fff; border:1px solid #e6e8ec; border-radius:14px; padding:18px 20px; }\n    .rec-card-top { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; font-size:13.5px; }\n    .rec-card-numbers { display:flex; align-items:center; gap:10px; font-size:16px; margin-bottom:10px; }\n    .rec-card-numbers .arrow { color:#c7cbd3; }\n    .rec-card-note { font-size:12.5px; color:#5b6472; line-height:1.5; }\n\n    .style-chips { display:flex; gap:8px; flex-wrap:wrap; margin-bottom:16px; }\n    .style-chip { border:1px solid #e6e8ec; background:#fff; border-radius:999px; padding:8px 16px; font-size:12px; font-weight:700; cursor:pointer; color:#5b6472; }\n    .style-chip[data-active] { background:#0A2540; color:#fff; border-color:#0A2540; }\n    .vision-note { font-size:11.5px; color:#8a92a3; font-style:italic; margin-top:10px; }\n\n    .int-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(340px,1fr)); gap:20px; }\n    .int-card { background:#fff; border:1px solid #e6e8ec; border-radius:18px; padding:24px; display:flex; flex-direction:column; gap:16px; }\n    .int-top { display:flex; align-items:center; justify-content:space-between; }\n    .int-row { display:flex; justify-content:space-between; font-size:12.5px; padding:8px 0; border-top:1px solid #f0f1f3; }\n    .int-row .k { color:#8a92a3; }\n    .int-row .v { font-weight:700; font-family: ui-monospace, monospace; }\n    .btn { background:#0A2540; color:#fff; border:0; border-radius:10px; padding:11px 16px; font-size:12.5px; font-weight:700; cursor:pointer; }\n    .btn:disabled { opacity:.55; cursor:default; }\n    .btn.secondary { background:#eef0f3; color:#1a1f2b; }\n    .btn.block { width:100%; }\n    .test-result { font-size:11.5px; padding:9px 11px; border-radius:8px; background:#f6f7f9; color:#4b5563; }\n    .test-result.success { background:#dcfce7; color:#15803d; }\n    .test-result.error { background:#fee2e2; color:#b91c1c; }\n\n    .rec-toolbar { display:flex; align-items:center; justify-content:space-between; margin-bottom:20px; }\n    .findings-empty { background:#fff; border:1px dashed #d7dae0; border-radius:16px; padding:48px; text-align:center; color:#8a92a3; font-size:13px; }\n    table.rec { width:100%; border-collapse:collapse; background:#fff; border-radius:16px; overflow:hidden; border:1px solid #e6e8ec; }\n    table.rec th { text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:#8a92a3; padding:12px 16px; background:#fafbfc; border-bottom:1px solid #e6e8ec; }\n    table.rec td { padding:14px 16px; font-size:13px; border-bottom:1px solid #f0f1f3; vertical-align:top; }\n    table.rec tr:last-child td { border-bottom:none; }\n    .type-pill { font-size:10.5px; font-weight:800; padding:4px 10px; border-radius:999px; text-transform:uppercase; letter-spacing:.03em; white-space:nowrap; }\n    .type-pill.fee { background:#fef3c7; color:#92400e; }\n    .type-pill.freight { background:#dbeafe; color:#1d4ed8; }\n    .type-pill.promo-margin { background:#fee2e2; color:#b91c1c; }\n    .type-pill.pending-settlement { background:#ede9fe; color:#6d28d9; }\n    .type-pill.estorno-pendente { background:#fee2e2; color:#991b1b; }\n    .contract-table { width:100%; border-collapse:collapse; background:#fff; border-radius:14px; overflow:hidden; border:1px solid #e6e8ec; margin-bottom:32px; }\n    .contract-table th { text-align:left; font-size:10.5px; text-transform:uppercase; letter-spacing:.04em; color:#8a92a3; padding:10px 14px; background:#fafbfc; border-bottom:1px solid #e6e8ec; }\n    .contract-table td { padding:10px 14px; font-size:12.5px; border-bottom:1px solid #f0f1f3; }\n    .contract-table tr:last-child td { border-bottom:none; }\n    .note { color:#5b6472; max-width:440px; }\n    .mono { font-family: ui-monospace, monospace; font-weight:700; }\n\n    .log-list { display:flex; flex-direction:column; gap:10px; }\n    .log-row { display:grid; grid-template-columns:130px 100px 1fr 90px 90px; align-items:center; gap:12px; background:#fff; border:1px solid #e6e8ec; border-radius:12px; padding:12px 16px; font-size:12.5px; }\n    .log-ch { font-weight:700; }\n    .status-dot { width:8px; height:8px; border-radius:50%; display:inline-block; margin-right:6px; }\n    .status-dot.success { background:#22c55e; }\n    .status-dot.error { background:#ef4444; }\n    .log-msg { color:#7a8494; }\n    .log-ts { color:#8a92a3; }\n\n    .live-toolbar { display:flex; align-items:center; justify-content:space-between; margin:36px 0 16px; }\n    .live-toolbar h3 { font-size:15px; font-weight:800; margin:0; }\n    .live-list { display:flex; flex-direction:column; gap:10px; }\n    .live-row { display:flex; align-items:center; gap:14px; background:#fff; border:1px solid #e6e8ec; border-radius:12px; padding:12px 16px; font-size:12.5px; }\n    .live-badge { font-size:10px; font-weight:800; padding:4px 9px; border-radius:999px; text-transform:uppercase; flex-shrink:0; }\n    .live-badge.pending { background:#ede9fe; color:#6d28d9; }\n    .live-badge.settled { background:#dcfce7; color:#15803d; }\n    .live-narrative { flex:1; color:#3b4353; }\n    .live-meta { color:#8a92a3; white-space:nowrap; }\n\n    .ads-layout { display:grid; grid-template-columns:340px 1fr; gap:28px; align-items:start; }\n    .prod-list { display:flex; flex-direction:column; gap:10px; max-height:640px; overflow:auto; }\n    .prod-item { background:#fff; border:1px solid #e6e8ec; border-radius:12px; padding:14px 16px; cursor:pointer; transition:.15s; }\n    .prod-item:hover { border-color:#0A2540; }\n    .prod-item[data-active] { border-color:#0A2540; background:#f6f8fb; box-shadow:inset 0 0 0 1px #0A2540; }\n    .prod-name { font-weight:700; font-size:13.5px; }\n    .prod-meta { font-size:11.5px; color:#8a92a3; margin-top:4px; }\n    .ads-panel { background:#fff; border:1px solid #e6e8ec; border-radius:18px; padding:28px; display:flex; flex-direction:column; gap:24px; }\n    .ads-empty { color:#8a92a3; font-size:13.5px; text-align:center; padding:60px 20px; }\n    .ads-row { display:grid; grid-template-columns:1fr 1fr; gap:24px; }\n    .ai-card { background:#fafbfc; border:1px solid #eef0f3; border-radius:14px; padding:18px; }\n    .ai-card .lbl { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:#8a92a3; margin-bottom:10px; }\n    .ai-title { font-size:15px; font-weight:800; margin-bottom:8px; }\n    .ai-tags { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:10px; }\n    .ai-tag { background:#eef0f3; border-radius:999px; padding:4px 10px; font-size:11px; font-weight:600; color:#4b5563; }\n    .ai-desc { font-size:12.5px; color:#5b6472; line-height:1.5; }\n    .ai-img { width:100%; aspect-ratio:1; border-radius:12px; object-fit:cover; background:#eef0f3; }\n    .calc-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:14px; }\n    .field { display:flex; flex-direction:column; gap:6px; }\n    .field label { font-size:11px; font-weight:700; color:#8a92a3; text-transform:uppercase; letter-spacing:.03em; }\n    .field input { border:1px solid #e6e8ec; border-radius:8px; padding:9px 10px; font-size:13px; font-family:inherit; }\n    .price-result { background:#0A2540; color:#fff; border-radius:14px; padding:20px 24px; display:flex; align-items:center; justify-content:space-between; }\n    .price-result .v { font-size:26px; font-weight:800; }\n    .price-result .l { font-size:11.5px; opacity:.75; text-transform:uppercase; letter-spacing:.04em; }\n    .spinner { display:inline-block; width:13px; height:13px; border-radius:50%; border:2px solid rgba(255,255,255,.4); border-top-color:#fff; animation:spin .7s linear infinite; margin-right:6px; }\n    @keyframes spin { to { transform:rotate(360deg); } }\n  `,\n\n  render(d2) {\n    const unlocked = d2.state.unlocked || (typeof localStorage !== 'undefined' && localStorage.getItem('wc_unlocked') === '1')\n    if (!unlocked) {\n      const gateError = d2.state.gateError\n      return `<div class=\"wc\" style=\"align-items:center;justify-content:center;\">\n        <div style=\"max-width:340px;width:100%;background:#fff;border:1px solid #e6e8ec;border-radius:16px;padding:36px 32px;text-align:center;box-shadow:0 4px 24px rgba(10,37,64,.08);\">\n          <div style=\"width:36px;height:36px;border-radius:10px;background:#0A2540;margin:0 auto 18px;\"></div>\n          <div style=\"font-weight:800;font-size:16px;margin-bottom:4px;\">Webcontinental <span style=\"font-weight:500;color:#8a92a3;\">Marketplace Hub</span></div>\n          <div style=\"font-size:12.5px;color:#8a92a3;margin-bottom:22px;\">Acesso restrito · demo</div>\n          <input type=\"password\" id=\"gate-pass\" placeholder=\"Senha\" style=\"width:100%;border:1px solid #e6e8ec;border-radius:8px;padding:11px 12px;font-size:14px;font-family:inherit;margin-bottom:12px;text-align:center;\"/>\n          <button class=\"btn block\" id=\"gate-submit\">Entrar</button>\n          ${gateError ? `<div style=\"color:#b91c1c;font-size:12.5px;margin-top:12px;\">Senha incorreta.</div>` : ''}\n        </div>\n      </div>`\n    }\n\n    const tab = d2.state.tab || 'consolidado'\n    const tabs = [\n      { id: 'consolidado', label: 'Consolidado' },\n      { id: 'integracoes', label: 'Integrações' },\n      { id: 'conciliacao', label: 'Conciliação' },\n      { id: 'ads', label: 'Estúdio de Anúncios' },\n      { id: 'logs', label: 'Logs / Orquestração' },\n    ]\n\n    const channelsDs = d2.data('channels')\n    const salesDs = d2.data('sales')\n    const payoutsDs = d2.data('payouts')\n    const freightDs = d2.data('freight')\n    const synclogDs = d2.data('synclog')\n    const productsDs = d2.data('products')\n    const liveDs = d2.data('liveOrders')\n    const sellersDs = d2.data('sellers')\n    const sellerContractsDs = d2.data('sellerContracts')\n\n    if (channelsDs.loading || salesDs.loading || payoutsDs.loading) {\n      return `<div class=\"wc\"><div class=\"body\">Carregando…</div></div>`\n    }\n\n    const channels = channelsDs.records() || []\n    const sales = (salesDs.records() || []).slice().sort((a, b) => new Date(a.date) - new Date(b.date))\n    const payouts = payoutsDs.records() || []\n    const freight = freightDs.records() || []\n    const synclog = (synclogDs.records() || []).slice().sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp))\n    const products = productsDs.records() || []\n    const liveOrders = (liveDs.records() || []).slice().sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp))\n    const sellersList = (sellersDs.records() || [])\n    const sellerContracts = (sellerContractsDs.records() || [])\n    const selectedSeller = d2.state.seller || null\n    const salesScoped = selectedSeller ? sales.filter((s) => s.sellerId === selectedSeller) : sales\n    const payoutsScoped = selectedSeller ? payouts.filter((p) => p.sellerId === selectedSeller) : payouts\n    const freightScoped = selectedSeller ? freight.filter((f) => f.sellerId === selectedSeller) : freight\n\n    const esc = (v) => String(v == null ? '' : v).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n\n    const timeAgo = (iso) => {\n      const mins = Math.max(0, Math.round((Date.now() - new Date(iso).getTime()) / 60000))\n      if (mins < 1) return 'agora mesmo'\n      if (mins < 60) return mins + ' min atrás'\n      return Math.round(mins / 60) + 'h atrás'\n    }\n\n    const logoHtml = (c, size) => {\n      size = size || 44\n      if (c.logoUrl) {\n        return '<div class=\"ch-logo\" style=\"background:' + c.logoBg + ';width:' + size + 'px;height:' + size + 'px;padding:' + Math.round(size * 0.18) + 'px;\"><img src=\"' + c.logoUrl + '\" alt=\"' + esc(c.name) + '\" style=\"width:100%;height:100%;object-fit:contain;display:block;\"/></div>'\n      }\n      return '<div class=\"ch-logo\" style=\"background:' + c.logoBg + ';color:' + c.logoTextColor + ';width:' + size + 'px;height:' + size + 'px;\">' + esc(c.logoText) + '</div>'\n    }\n\n    const barChart = (points, opts) => {\n      opts = opts || {}\n      const w = opts.w || 560, h = opts.h || 160, pad = 8\n      const max = Math.max(1, ...points.map((p) => p.v))\n      const bw = (w - pad * 2) / points.length\n      const bars = points.map((p, i) => {\n        const bh = Math.max(2, ((p.v / max) * (h - 24)))\n        const x = pad + i * bw\n        const y = h - bh - 16\n        return '<rect x=\"' + (x + bw * 0.15) + '\" y=\"' + y + '\" width=\"' + (bw * 0.7) + '\" height=\"' + bh + '\" rx=\"2\" fill=\"' + (opts.color || '#0A2540') + '\" opacity=\"' + (opts.opacity || 0.85) + '\"><title>' + esc(p.label) + ': ' + esc(p.v) + '</title></rect>'\n      }).join('')\n      return '<svg viewBox=\"0 0 ' + w + ' ' + h + '\" style=\"width:100%;height:' + h + 'px;display:block;\">' + bars + '<line x1=\"' + pad + '\" y1=\"' + (h - 16) + '\" x2=\"' + (w - pad) + '\" y2=\"' + (h - 16) + '\" stroke=\"#e6e8ec\" stroke-width=\"1\"/></svg>'\n    }\n\n    const sparkline = (values, opts) => {\n      opts = opts || {}\n      const w = opts.w || 160, h = opts.h || 36, pad = 2\n      const max = Math.max(1, ...values), min = Math.min(0, ...values)\n      const range = Math.max(1, max - min)\n      const step = (w - pad * 2) / Math.max(1, values.length - 1)\n      const pts = values.map((v, i) => (pad + i * step) + ',' + (h - pad - ((v - min) / range) * (h - pad * 2))).join(' ')\n      return '<svg viewBox=\"0 0 ' + w + ' ' + h + '\" style=\"width:100%;height:' + h + 'px;display:block;\"><polyline points=\"' + pts + '\" fill=\"none\" stroke=\"' + (opts.color || '#0A2540') + '\" stroke-width=\"2\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/></svg>'\n    }\n\n    const perChannel = channels.map((ch) => {\n      const chSales = salesScoped.filter((s) => s.channel === ch.slug)\n      const chPayouts = payoutsScoped.filter((p) => p.channel === ch.slug)\n      const gmv = chSales.reduce((a, r) => a + (r.gmv || 0), 0)\n      const orders = chSales.reduce((a, r) => a + (r.orders || 0), 0)\n      const netPayout = chPayouts.reduce((a, r) => a + (r.netPayout || 0), 0)\n      const avgApplied = chPayouts.length ? chPayouts.reduce((a, r) => a + r.feeApplied, 0) / chPayouts.length : 0\n      const avgExpected = chPayouts.length ? chPayouts.reduce((a, r) => a + r.feeExpected, 0) / chPayouts.length : 0\n      const feeDiff = avgApplied - avgExpected\n      const healthy = Math.abs(feeDiff) <= 1\n      return { ...ch, gmv, orders, netPayout, avgApplied, avgExpected, feeDiff, healthy, dailyGmv: chSales.map((s) => s.gmv || 0) }\n    })\n\n    const totalGmv = perChannel.reduce((a, c) => a + c.gmv, 0)\n    const totalNet = perChannel.reduce((a, c) => a + c.netPayout, 0)\n    const totalDivergenceR$ = perChannel.reduce((a, c) => a + (c.gmv * (c.feeDiff / 100)), 0)\n\n    const sellerChipsHtml = `<div class=\"style-chips\" style=\"margin-bottom:20px;\">\n      <div class=\"style-chip\" data-seller=\"\" ${!selectedSeller ? 'data-active' : ''}>Todos os lojistas (agregado)</div>\n      ${sellersList.map((s) => `<div class=\"style-chip\" data-seller=\"${s._id}\" ${selectedSeller === s._id ? 'data-active' : ''}>${esc(s.name)}</div>`).join('')}\n    </div>`\n\n    const msDay = 86400000\n    const payoutDatesSorted = payoutsScoped.slice().sort((a, b) => new Date(a.date) - new Date(b.date))\n    const firstD = payoutDatesSorted.length ? new Date(payoutDatesSorted[0].date) : new Date()\n    const lastD = payoutDatesSorted.length ? new Date(payoutDatesSorted[payoutDatesSorted.length - 1].date) : new Date()\n    const cycle1End = new Date(firstD.getTime() + 13 * msDay)\n    const cycle1 = payoutsScoped.filter((p) => new Date(p.date) <= cycle1End)\n    const cycle2 = payoutsScoped.filter((p) => new Date(p.date) > cycle1End)\n    const cycle1Net = cycle1.reduce((a, r) => a + (r.netPayout || 0), 0)\n    const cycle2Net = cycle2.reduce((a, r) => a + (r.netPayout || 0), 0)\n    const nextPayoutDate = new Date(lastD.getTime() + 3 * msDay)\n    const fmtDate = (d) => d.toLocaleDateString('pt-BR', { day: '2-digit', month: '2-digit' })\n    const payoutCalendarHtml = `\n      <div class=\"chart-card\" style=\"margin-bottom:24px;\">\n        <div class=\"chart-title\">Calendário de repasse quinzenal</div>\n        <div style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:14px;\">\n          <div style=\"background:#fff;border:1px solid #eef0f3;border-radius:10px;padding:16px;\">\n            <div style=\"font-size:10.5px;color:#8a92a3;font-weight:700;text-transform:uppercase;\">Ciclo ${fmtDate(firstD)}–${fmtDate(cycle1End)}</div>\n            <div style=\"font-size:20px;font-weight:800;margin-top:6px;\">${d2.fmt.currency(cycle1Net, 'BRL')}</div>\n            <div style=\"font-size:11.5px;color:#15803d;margin-top:4px;font-weight:700;\">✓ repassado</div>\n          </div>\n          <div style=\"background:#fff;border:1px solid #eef0f3;border-radius:10px;padding:16px;\">\n            <div style=\"font-size:10.5px;color:#8a92a3;font-weight:700;text-transform:uppercase;\">Ciclo ${fmtDate(new Date(cycle1End.getTime() + msDay))}–${fmtDate(lastD)} (em aberto)</div>\n            <div style=\"font-size:20px;font-weight:800;margin-top:6px;\">${d2.fmt.currency(cycle2Net, 'BRL')}</div>\n            <div style=\"font-size:11.5px;color:#c2410c;margin-top:4px;font-weight:700;\">⏳ fecha em breve</div>\n          </div>\n          <div style=\"background:#0A2540;color:#fff;border-radius:10px;padding:16px;\">\n            <div style=\"font-size:10.5px;opacity:.75;font-weight:700;text-transform:uppercase;\">Próximo repasse</div>\n            <div style=\"font-size:20px;font-weight:800;margin-top:6px;\">${fmtDate(nextPayoutDate)}</div>\n            <div style=\"font-size:11.5px;opacity:.85;margin-top:4px;\">previsto ${d2.fmt.currency(cycle2Net, 'BRL')}</div>\n          </div>\n        </div>\n      </div>`\n\n    const findings = d2.state.findings || null\n    const reconciling = !!d2.state.reconciling\n    const testResults = d2.state.testResults || {}\n    const testingChannel = d2.state.testingChannel || null\n    const drill = d2.state.drill || null\n    const simulating = !!d2.state.simulating\n\n    const header = `\n      <div class=\"topbar\">\n        <div class=\"brand\"><span class=\"dot\"></span>Webcontinental <small>Marketplace Hub</small></div>\n        <div class=\"tabs\">\n          ${tabs.map((t) => `<div class=\"tab\" data-tab=\"${t.id}\" ${t.id === tab ? 'data-active' : ''}>${t.label}</div>`).join('')}\n        </div>\n      </div>`\n\n    let body = ''\n\n    if (tab === 'consolidado') {\n      const drilledChannel = drill ? perChannel.find((c) => c.slug === drill) : null\n\n      if (drilledChannel) {\n        const statusLabel = { entregue: 'Entregue', em_transporte: 'Em trânsito', cancelado: 'Cancelado', devolvido: 'Devolvido' }\n        const statusColor = { entregue: '#15803d', em_transporte: '#1d4ed8', cancelado: '#b91c1c', devolvido: '#c2410c' }\n        const chOrders = freightScoped.filter((f) => f.channel === drilledChannel.slug).slice().sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt))\n        const statusCounts = chOrders.reduce((acc, o) => { var k = o.status || 'entregue'; acc[k] = (acc[k] || 0) + 1; return acc }, {})\n        const totalOrders = chOrders.length || 1\n        body = `\n          <div class=\"detail-back\"><button class=\"btn secondary\" id=\"back-to-grid\">← Voltar ao consolidado</button></div>\n          ${sellerChipsHtml}\n          <div class=\"detail-header\">\n            ${logoHtml(drilledChannel, 64)}\n            <div>\n              <h2 class=\"section-title\" style=\"margin-bottom:4px;\">${esc(drilledChannel.name)}</h2>\n              <div class=\"badge ${drilledChannel.healthy ? 'ok' : 'warn'}\">${drilledChannel.healthy ? 'Reconciliação saudável' : 'Divergência de taxa'}</div>\n            </div>\n          </div>\n          <div class=\"kpi-row\">\n            <div class=\"kpi\"><div class=\"l\">GMV (25 dias)</div><div class=\"v\">${d2.fmt.currency(drilledChannel.gmv, 'BRL')}</div><div class=\"d\">${drilledChannel.orders} pedidos</div></div>\n            <div class=\"kpi\"><div class=\"l\">Repasse líquido</div><div class=\"v\">${d2.fmt.currency(drilledChannel.netPayout, 'BRL')}</div></div>\n            <div class=\"kpi\"><div class=\"l\">Taxa aplicada</div><div class=\"v ${!drilledChannel.healthy ? 'warn' : ''}\">${drilledChannel.avgApplied.toFixed(1)}%</div><div class=\"d\">esperado ${drilledChannel.avgExpected.toFixed(1)}%</div></div>\n            <div class=\"kpi\"><div class=\"l\">Cancelamentos</div><div class=\"v ${statusCounts.cancelado ? 'warn' : ''}\">${statusCounts.cancelado || 0}</div><div class=\"d\">${(((statusCounts.cancelado || 0) / totalOrders) * 100).toFixed(0)}% dos pedidos</div></div>\n          </div>\n          <div class=\"chart-card\" style=\"margin-bottom:24px;\">\n            <div class=\"chart-title\">GMV diário (25 dias)</div>\n            ${barChart(drilledChannel.dailyGmv.map((v, i) => ({ label: 'dia ' + (i + 1), v })), { color: '#0A2540', h: 220, w: 1080 })}\n          </div>\n          <div class=\"detail-grid\">\n            <div class=\"chart-card\">\n              <div class=\"chart-title\">Últimas vendas</div>\n              <div class=\"orders-list\">\n                ${chOrders.slice(0, 14).map((o) => `\n                  <div class=\"order-row\">\n                    <div class=\"order-main\"><b>${esc(o.orderId)}</b> · ${esc(o.product)}</div>\n                    <div class=\"order-meta\">R$ ${o.price} · frete R$ ${o.freight_cost}</div>\n                    <span class=\"status-pill\" style=\"background:${statusColor[o.status || 'entregue']}22;color:${statusColor[o.status || 'entregue']};\">${statusLabel[o.status || 'entregue']}</span>\n                  </div>\n                `).join('')}\n              </div>\n            </div>\n            <div class=\"chart-card\">\n              <div class=\"chart-title\">Status dos pedidos</div>\n              <div class=\"status-breakdown\">\n                ${Object.keys(statusLabel).map((k) => `\n                  <div class=\"status-bar-row\">\n                    <span class=\"status-bar-label\">${statusLabel[k]}</span>\n                    <div class=\"status-bar-track\"><div class=\"status-bar-fill\" style=\"width:${((statusCounts[k] || 0) / totalOrders) * 100}%;background:${statusColor[k]};\"></div></div>\n                    <span class=\"status-bar-count\">${statusCounts[k] || 0}</span>\n                  </div>\n                `).join('')}\n              </div>\n            </div>\n          </div>`\n      } else {\n        body = `\n          <h2 class=\"section-title\">Visão consolidada</h2>\n          <p class=\"section-sub\">Últimos 25 dias · pedidos, faturamento e repasses dos 4 canais em um só painel · clique num canal para o detalhe</p>\n          ${sellerChipsHtml}\n          <div class=\"kpi-row\">\n            <div class=\"kpi\"><div class=\"l\">GMV total</div><div class=\"v\">${d2.fmt.currency(totalGmv, 'BRL')}</div><div class=\"d\">${perChannel.reduce((a, c) => a + c.orders, 0)} pedidos</div></div>\n            <div class=\"kpi\"><div class=\"l\">Repasse líquido total</div><div class=\"v\">${d2.fmt.currency(totalNet, 'BRL')}</div><div class=\"d\">após taxas e comissões</div></div>\n            <div class=\"kpi\"><div class=\"l\">Divergência de taxa estimada</div><div class=\"v ${totalDivergenceR$ > 0 ? 'warn' : ''}\">${d2.fmt.currency(Math.abs(totalDivergenceR$), 'BRL')}</div><div class=\"d\">${totalDivergenceR$ > 0 ? 'cobrado acima do contrato' : 'dentro do esperado'}</div></div>\n            <div class=\"kpi\"><div class=\"l\">Pedidos ao vivo pendentes</div><div class=\"v ${liveOrders.filter((o) => !o.settled).length ? 'warn' : ''}\">${liveOrders.filter((o) => !o.settled).length}</div><div class=\"d\">aguardando repasse</div></div>\n          </div>\n          ${payoutCalendarHtml}\n          <div class=\"ch-grid\">\n            ${perChannel.map((c) => `\n              <div class=\"ch-card\" data-drill=\"${c.slug}\">\n                <div class=\"ch-head\">\n                  ${logoHtml(c, 48)}\n                  <div><div class=\"ch-name\">${esc(c.name)}</div><div class=\"badge ${c.healthy ? 'ok' : 'warn'}\">${c.healthy ? 'Reconciliação saudável' : 'Divergência de taxa'}</div></div>\n                </div>\n                <div class=\"ch-stats\">\n                  <div class=\"ch-stat\"><div class=\"l\">GMV</div><div class=\"v\">${d2.fmt.compact(c.gmv)}</div></div>\n                  <div class=\"ch-stat\"><div class=\"l\">Pedidos</div><div class=\"v\">${c.orders}</div></div>\n                  <div class=\"ch-stat\"><div class=\"l\">Repasse líq.</div><div class=\"v\">${d2.fmt.compact(c.netPayout)}</div></div>\n                  <div class=\"ch-stat\"><div class=\"l\">Taxa aplicada</div><div class=\"v\">${c.avgApplied.toFixed(1)}%</div></div>\n                </div>\n                <div class=\"sparkwrap\">${sparkline(c.dailyGmv, { color: c.healthy ? '#0A2540' : '#c2410c' })}</div>\n              </div>\n            `).join('')}\n          </div>`\n      }\n    }\n\n    if (tab === 'integracoes') {\n      body = `\n        <h2 class=\"section-title\">Integrações</h2>\n        <p class=\"section-sub\">Configuração por canal — credenciais mascaradas, conexão via HttpClient + Rush</p>\n        <div class=\"int-grid\">\n          ${channels.map((ch) => {\n            const res = testResults[ch.slug]\n            const isTesting = testingChannel === ch.slug\n            return `\n            <div class=\"int-card\">\n              <div class=\"int-top\">\n                <div class=\"ch-head\">\n                  ${logoHtml(ch, 36)}\n                  <div class=\"ch-name\">${esc(ch.name)}</div>\n                </div>\n                <div class=\"badge ok\">Conectado</div>\n              </div>\n              <div>\n                <div class=\"int-row\"><span class=\"k\">Client ID</span><span class=\"v\">wc_${ch.slug}_****${ch.slug.length}9a2</span></div>\n                <div class=\"int-row\"><span class=\"k\">Secret</span><span class=\"v\">••••••••••••${ch.slug.slice(0,2)}f3</span></div>\n                <div class=\"int-row\"><span class=\"k\">Endpoint</span><span class=\"v\" style=\"font-weight:600\">/orders/search</span></div>\n              </div>\n              <button class=\"btn test-btn\" data-channel=\"${ch.slug}\" ${isTesting ? 'disabled' : ''}>${isTesting ? 'Testando…' : 'Testar conexão'}</button>\n              ${res ? `<div class=\"test-result ${res.status}\">${res.status === 'success' ? `OK · ${res.durationMs}ms · ${res.itemsProcessed} itens sincronizados` : `Falha · ${res.message}`}</div>` : ''}\n            </div>`\n          }).join('')}\n        </div>`\n    }\n\n    if (tab === 'conciliacao') {\n      const typeMeta = {\n        fee: { title: 'Taxas cobradas acima do contrato', glyph: '💰' },\n        freight: { title: 'Frete real vs. esperado (cubagem)', glyph: '📦' },\n        'promo-margin': { title: 'Margem promocional no limite', glyph: '🔻' },\n        'estorno-pendente': { title: 'Cancelamentos/devoluções sem estorno creditado', glyph: '↩️' },\n        'pending-settlement': { title: 'Repasses pendentes agora (atividade ao vivo)', glyph: '⏳' },\n      }\n      const byType = {}\n      ;(findings || []).forEach((f) => { (byType[f.type] = byType[f.type] || []).push(f) })\n      const pendingCount = (byType['pending-settlement'] || []).length\n      const feeChannels = (byType.fee || []).length\n\n      body = `\n        <h2 class=\"section-title\">Conciliação</h2>\n        <p class=\"section-sub\">Cruza vendas, repasses, frete real e atividade ao vivo — aponta exatamente onde o dinheiro diverge do esperado, sem esperar o fechamento do mês</p>\n        <div class=\"chart-title\">Fonte do \"esperado\": tabela de comissão contratada por lojista × canal</div>\n        <table class=\"contract-table\">\n          <thead><tr><th>Lojista</th><th>Canal</th><th>Taxa contratada</th></tr></thead>\n          <tbody>\n            ${sellerContracts.map((c) => `<tr><td>${esc(c.sellerName)}</td><td>${esc((channels.find((ch) => ch.slug === c.channel) || {}).name || c.channel)}</td><td class=\"mono\">${c.feeContracted}%</td></tr>`).join('')}\n          </tbody>\n        </table>\n        ${!findings ? `<div class=\"findings-empty\">${reconciling ? 'Rodando reconciliação…' : 'Carregando achados…'}</div>` : `\n        <div class=\"rec-summary\">\n          <div class=\"rec-sum-card\"><div class=\"v\">${findings.length}</div><div class=\"l\">achados no total</div></div>\n          <div class=\"rec-sum-card\"><div class=\"v\">${feeChannels}</div><div class=\"l\">canais com taxa divergente</div></div>\n          <div class=\"rec-sum-card\"><div class=\"v ${pendingCount ? 'warn' : ''}\">${pendingCount}</div><div class=\"l\">pedidos aguardando repasse agora</div></div>\n          <div class=\"rec-sum-card\"><button class=\"btn secondary\" id=\"run-reconcile\" ${reconciling ? 'disabled' : ''}>${reconciling ? 'Rodando…' : 'Atualizar achados'}</button></div>\n        </div>\n        ${Object.keys(typeMeta).map((t) => {\n          const items = byType[t] || []\n          if (!items.length) return ''\n          const meta = typeMeta[t]\n          return `\n          <div class=\"rec-group\">\n            <div class=\"rec-group-title\"><span>${meta.glyph}</span> ${meta.title}</div>\n            <div class=\"rec-cards\">\n              ${items.map((f) => `\n                <div class=\"rec-card\">\n                  <div class=\"rec-card-top\"><b>${esc(f.channelName)}</b><span class=\"type-pill ${f.type}\">${esc(f.period)}</span></div>\n                  <div class=\"rec-card-numbers\"><span class=\"mono\">${esc(f.expected)}</span><span class=\"arrow\">→</span><span class=\"mono\">${esc(f.actual)}</span></div>\n                  <div class=\"rec-card-note\">${esc(f.note)}</div>\n                </div>\n              `).join('')}\n            </div>\n          </div>`\n        }).join('')}\n        `}`\n    }\n\n    if (tab === 'logs') {\n      body = `\n        <h2 class=\"section-title\">Logs de sincronização</h2>\n        <p class=\"section-sub\">${synclog.length} execuções recentes · ${synclog.filter(l => l.status === 'error').length} com erro</p>\n        <div class=\"log-list\">\n          ${synclog.slice(0, 40).map((l) => `\n            <div class=\"log-row\">\n              <div class=\"log-ch\">${esc(l.channelName)}</div>\n              <div><span class=\"status-dot ${l.status}\"></span>${l.status === 'success' ? 'Sucesso' : 'Erro'}</div>\n              <div class=\"log-msg\">${esc(l.message)}</div>\n              <div>${l.durationMs}ms</div>\n              <div>${l.itemsProcessed} itens</div>\n            </div>\n          `).join('')}\n        </div>\n        <div class=\"live-toolbar\">\n          <h3>Atividade ao vivo — pedidos gerados por IA</h3>\n          <button class=\"btn\" id=\"simulate-sale\" ${simulating ? 'disabled' : ''}>${simulating ? 'Gerando…' : 'Simular novo pedido'}</button>\n        </div>\n        <p class=\"section-sub\" style=\"margin-bottom:14px;\">Cada clique chama um Assistant (LLM) que narra um pedido novo e grava direto nas tabelas — sem repasse ainda, por isso ele aparece como pendente na Conciliação até \"assentar\".</p>\n        <div class=\"live-list\">\n          ${liveOrders.length === 0 ? `<div class=\"findings-empty\">Nenhum pedido simulado ainda. Clique em \"Simular novo pedido\".</div>` : liveOrders.slice(0, 15).map((o) => `\n            <div class=\"live-row\">\n              <span class=\"live-badge ${o.settled ? 'settled' : 'pending'}\">${o.settled ? 'Repassado' : 'Pendente'}</span>\n              <span class=\"live-narrative\">${esc(o.narrative)}</span>\n              <span class=\"live-meta\">${esc(o.channelName)} · R$ ${o.gmv} · ${timeAgo(o.timestamp)}</span>\n            </div>\n          `).join('')}\n        </div>`\n    }\n\n    if (tab === 'ads') {\n      const adProductId = d2.state.adProduct || (products[0] && products[0]._id)\n      const mockProduct = products.find((p) => p._id === adProductId) || products[0]\n      const realSel = d2.state.realProduct || null\n      const product = realSel ? { name: realSel.name, category: realSel.brand, cost: mockProduct ? mockProduct.cost : 800, packaging: mockProduct ? mockProduct.packaging : 20, weight: mockProduct ? mockProduct.weight : 20, length: mockProduct ? mockProduct.length : 50, width: mockProduct ? mockProduct.width : 40, height: mockProduct ? mockProduct.height : 40, listPrice: realSel.price, imageUrl: realSel.imageUrl } : mockProduct\n      const adResult = d2.state.adResult || null\n      const adGenerating = !!d2.state.adGenerating\n      const catalogResults = d2.state.catalogResults || []\n      const catalogSearching = !!d2.state.catalogSearching\n      let adJson = adResult ? adResult.copy : null\n\n      const targetMargin = d2.state.targetMargin != null ? d2.state.targetMargin : 22\n      const taxPct = d2.state.taxPct != null ? d2.state.taxPct : 4\n      const feePct = d2.state.feePct != null ? d2.state.feePct : 15\n      let priceCalc = null\n      if (product) {\n        const cubicWeight = (product.length * product.width * product.height) / 6000\n        const billableWeight = Math.max(product.weight, cubicWeight)\n        const freightCost = 18 + billableWeight * 4.2\n        const denom = 1 - (taxPct / 100) - (feePct / 100) - (targetMargin / 100)\n        const price = denom > 0 ? (product.cost + product.packaging + freightCost) / denom : null\n        priceCalc = { cubicWeight, billableWeight, freightCost, price }\n      }\n\n      body = `\n        <h2 class=\"section-title\">Estúdio de Anúncios</h2>\n        <p class=\"section-sub\">Busque produtos reais do catálogo Webcontinental (ou use um mock) · gere título, tags, descrição e imagem com IA (imagem hospedada no Drive) · calcule frete por cubagem e preço-alvo</p>\n        <div class=\"ads-layout\">\n          <div class=\"prod-list\">\n            <div style=\"display:flex;gap:8px;margin-bottom:4px;\">\n              <input type=\"text\" id=\"catalog-query\" placeholder=\"Buscar no catálogo real (ex: geladeira)\" style=\"flex:1;border:1px solid #e6e8ec;border-radius:8px;padding:9px 10px;font-size:12.5px;font-family:inherit;\"/>\n              <button class=\"btn secondary\" id=\"catalog-search\" ${catalogSearching ? 'disabled' : ''}>${catalogSearching ? '…' : 'Buscar'}</button>\n            </div>\n            ${catalogResults.length ? `<div style=\"font-size:10.5px;font-weight:700;color:#8a92a3;text-transform:uppercase;letter-spacing:.04em;margin:4px 0 2px;\">Catálogo real (webcontinental.com.br)</div>` : ''}\n            ${catalogResults.map((p) => `\n              <div class=\"prod-item\" data-real=\"${esc(p.productId)}\" ${realSel && realSel.productId === p.productId ? 'data-active' : ''} style=\"display:flex;gap:10px;align-items:center;\">\n                <img src=\"${esc(p.imageUrl)}\" style=\"width:36px;height:36px;border-radius:6px;object-fit:cover;flex-shrink:0;background:#eef0f3;\"/>\n                <div><div class=\"prod-name\">${esc(p.name)}</div><div class=\"prod-meta\">${esc(p.brand)} · R$ ${p.price}</div></div>\n              </div>\n            `).join('')}\n            <div style=\"font-size:10.5px;font-weight:700;color:#8a92a3;text-transform:uppercase;letter-spacing:.04em;margin:12px 0 2px;\">Catálogo mock (demo)</div>\n            ${products.map((p) => `\n              <div class=\"prod-item\" data-product=\"${p._id}\" ${!realSel && product && p._id === product._id ? 'data-active' : ''}>\n                <div class=\"prod-name\">${esc(p.name)}</div>\n                <div class=\"prod-meta\">${esc(p.category)} · custo R$ ${p.cost} · ${p.weight}kg</div>\n              </div>\n            `).join('')}\n          </div>\n          <div class=\"ads-panel\">\n            ${!product ? `<div class=\"ads-empty\">Nenhum produto cadastrado.</div>` : `\n            <div class=\"ads-row\">\n              <div class=\"ai-card\">\n                <div class=\"lbl\">Copy gerada por IA (título / tags / descrição)</div>\n                ${adGenerating ? `<div style=\"color:#8a92a3;font-size:13px;\"><span class=\"spinner\" style=\"border-color:rgba(10,37,64,.25);border-top-color:#0A2540;\"></span>Gerando com IA…</div>` : adJson ? `\n                  <div class=\"ai-title\">${esc(adJson.title)}</div>\n                  <div class=\"ai-tags\">${(adJson.tags || '').split(',').map((t) => `<span class=\"ai-tag\">${esc(t.trim())}</span>`).join('')}</div>\n                  <div class=\"ai-desc\">${esc(adJson.description)}</div>\n                ` : `<div style=\"color:#8a92a3;font-size:13px;\">Clique em \"Gerar com IA\" para criar o anúncio de ${esc(product.name)}.</div>`}\n              </div>\n              <div class=\"ai-card\">\n                <div class=\"lbl\">Foto de produto gerada por IA ${product.imageUrl ? '<span style=\"font-weight:400;text-transform:none;color:#8a92a3;\">(com referência visual real)</span>' : ''}</div>\n                ${adGenerating ? `<div style=\"display:flex;align-items:center;justify-content:center;aspect-ratio:1;background:#eef0f3;border-radius:12px;color:#8a92a3;font-size:12.5px;\"><span class=\"spinner\" style=\"border-color:rgba(10,37,64,.25);border-top-color:#0A2540;\"></span>Analisando referência e gerando imagem…</div>` : (adResult && adResult.imageUrl) ? `<img class=\"ai-img\" src=\"${esc(adResult.imageUrl)}\" alt=\"${esc(product.name)}\"/>` : `<div style=\"display:flex;align-items:center;justify-content:center;aspect-ratio:1;background:#eef0f3;border-radius:12px;color:#8a92a3;font-size:12.5px;\">Sem imagem ainda</div>`}\n                ${adResult && adResult.visionDesc ? `<div class=\"vision-note\">👁 IA viu na referência: \"${esc(adResult.visionDesc)}\"</div>` : ''}\n              </div>\n            </div>\n            <div class=\"lbl\" style=\"margin-top:4px;\">Estilo da imagem</div>\n            <div class=\"style-chips\">\n              ${[['catalogo','Catálogo (fundo branco)'],['lifestyle','Lifestyle / ambiente'],['still_life','Still life editorial'],['social','Redes sociais']].map((s) => `\n                <div class=\"style-chip\" data-style=\"${s[0]}\" ${(d2.state.imgStyle || 'catalogo') === s[0] ? 'data-active' : ''}>${s[1]}</div>\n              `).join('')}\n            </div>\n            <button class=\"btn block\" id=\"gen-ad\" ${adGenerating ? 'disabled' : ''}>${adGenerating ? 'Gerando…' : 'Gerar com IA'}</button>\n\n            <div class=\"ai-card\">\n              <div class=\"lbl\">Calculadora de frete (cubagem) e preço-alvo</div>\n              <div class=\"calc-grid\" style=\"margin-bottom:16px;\">\n                <div class=\"field\"><label>Margem alvo %</label><input type=\"number\" id=\"calc-margin\" value=\"${targetMargin}\"/></div>\n                <div class=\"field\"><label>Imposto %</label><input type=\"number\" id=\"calc-tax\" value=\"${taxPct}\"/></div>\n                <div class=\"field\"><label>Taxa do canal %</label><input type=\"number\" id=\"calc-fee\" value=\"${feePct}\"/></div>\n              </div>\n              <div class=\"calc-grid\" style=\"margin-bottom:16px;\">\n                <div class=\"field\"><label>Peso real</label><div class=\"mono\">${product.weight}kg</div></div>\n                <div class=\"field\"><label>Peso cubado</label><div class=\"mono\">${priceCalc.cubicWeight.toFixed(1)}kg</div></div>\n                <div class=\"field\"><label>Frete estimado</label><div class=\"mono\">R$ ${priceCalc.freightCost.toFixed(2)}</div></div>\n              </div>\n              <div class=\"price-result\">\n                <div><div class=\"l\">Preço sugerido</div><div class=\"v\">${priceCalc.price ? d2.fmt.currency(priceCalc.price, 'BRL') : '—'}</div></div>\n                <div style=\"text-align:right;font-size:11.5px;opacity:.8;\">(custo + embalagem + frete)<br/>÷ (1 − imposto − taxa − margem)</div>\n              </div>\n            </div>\n            `}\n          </div>\n        </div>`\n    }\n\n    return `<div class=\"wc\">${header}<div class=\"body\">${body}</div></div>`\n  },\n\n  mounted(d2) {\n    var RUSH_BASE = 'https://webcontinental-app.data2apis.com/rush'\n\n    function tryUnlock() {\n      var input = d2.$('#gate-pass')\n      var val = input ? input.value : ''\n      if (val === 'webcontinental2026') {\n        try { localStorage.setItem('wc_unlocked', '1') } catch (e) {}\n        d2.state.gateError = false\n        d2.state.unlocked = true\n      } else {\n        d2.state.gateError = true\n      }\n    }\n    d2.on('#gate-submit', 'click', tryUnlock)\n    d2.on('#gate-pass', 'keydown', function(e) { if (e.key === 'Enter') tryUnlock() })\n\n    d2.on('.tab', 'click', function(e, el) {\n      var t = el.dataset.tab\n      d2.state.tab = t\n      if (t === 'conciliacao' && !d2.state.findings && !d2.state.reconciling) {\n        runReconcile()\n      }\n    })\n    d2.on('.ch-card', 'click', function(e, el) {\n      d2.state.drill = el.dataset.drill\n    })\n    d2.on('#back-to-grid', 'click', function() { d2.state.drill = null })\n    d2.on('.style-chip', 'click', function(e, el) {\n      if (el.dataset.seller !== undefined) {\n        d2.state.seller = el.dataset.seller || null\n      } else {\n        d2.state.imgStyle = el.dataset.style\n      }\n    })\n    d2.on('.prod-item', 'click', function(e, el) {\n      if (el.dataset.real) {\n        var results = d2.state.catalogResults || []\n        var found = results.find(function(r) { return String(r.productId) === el.dataset.real })\n        d2.state.realProduct = found || null\n        d2.state.adResult = null\n      } else {\n        d2.state.adProduct = el.dataset.product\n        d2.state.realProduct = null\n        d2.state.adResult = null\n      }\n    })\n\n    d2.on('#catalog-search', 'click', function() {\n      var q = (d2.$('#catalog-query') || {}).value\n      if (!q) return\n      d2.state.catalogSearching = true\n      fetch(RUSH_BASE + '/wc-catalog-search', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ query: q }),\n      }).then(function(res) { return res.json() }).then(function(json) {\n        var r = (json && json.data) ? json.data : json\n        d2.state.catalogResults = r.products || []\n      }).catch(function() {\n        d2.state.catalogResults = []\n      }).finally(function() {\n        d2.state.catalogSearching = false\n      })\n    })\n\n    d2.on('.test-btn', 'click', function(e, el) {\n      var channel = el.dataset.channel\n      d2.state.testingChannel = channel\n      fetch(RUSH_BASE + '/wc-sync', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ channel: channel }),\n      }).then(function(res) { return res.json() }).then(function(json) {\n        var r = (json && json.data) ? json.data : json\n        var tr = Object.assign({}, d2.state.testResults || {})\n        tr[channel] = r\n        d2.state.testResults = tr\n      }).catch(function() {\n        var tr = Object.assign({}, d2.state.testResults || {})\n        tr[channel] = { status: 'error', message: 'Falha de rede' }\n        d2.state.testResults = tr\n      }).finally(function() {\n        d2.state.testingChannel = null\n      })\n    })\n\n    function runReconcile() {\n      d2.state.reconciling = true\n      fetch(RUSH_BASE + '/wc-reconcile', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({}),\n      }).then(function(res) { return res.json() }).then(function(json) {\n        var r = (json && json.data) ? json.data : json\n        d2.state.findings = r.findings || []\n      }).catch(function() {\n        d2.state.findings = []\n      }).finally(function() {\n        d2.state.reconciling = false\n      })\n    }\n    d2.on('#run-reconcile', 'click', runReconcile)\n\n    d2.on('#simulate-sale', 'click', function() {\n      d2.state.simulating = true\n      fetch(RUSH_BASE + '/wc-simulate-sale', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({}),\n      }).then(function(res) { return res.json() }).then(function() {\n        var ds = d2.data('liveOrders')\n        if (ds && ds.refresh) ds.refresh()\n      }).catch(function() {}).finally(function() {\n        d2.state.simulating = false\n      })\n    })\n\n    d2.on('#gen-ad', 'click', function() {\n      var realSel = d2.state.realProduct\n      var productId = d2.state.adProduct\n      var products = (d2.data('products').records() || [])\n      var mockProduct = products.find(function(p) { return p._id === productId }) || products[0]\n      var style = d2.state.imgStyle || 'catalogo'\n      var payload\n      if (realSel) {\n        payload = { productName: realSel.name, category: realSel.brand, price: realSel.price, referenceImageUrl: realSel.imageUrl, style: style }\n      } else {\n        if (!mockProduct) return\n        payload = { productName: mockProduct.name, category: mockProduct.category, price: mockProduct.listPrice, referenceImageUrl: null, style: style }\n      }\n      d2.state.adGenerating = true\n      fetch(RUSH_BASE + '/wc-generate-ad', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(payload),\n      }).then(function(res) { return res.json() }).then(function(json) {\n        var r = (json && json.data) ? json.data : json\n        d2.state.adResult = r\n      }).catch(function() {\n        d2.state.adResult = null\n      }).finally(function() {\n        d2.state.adGenerating = false\n      })\n    })\n\n    d2.on('#calc-margin', 'input', function(e, el) { d2.state.targetMargin = Number(el.value) || 0 })\n    d2.on('#calc-tax', 'input', function(e, el) { d2.state.taxPct = Number(el.value) || 0 })\n    d2.on('#calc-fee', 'input', function(e, el) { d2.state.feePct = Number(el.value) || 0 })\n  },\n}\n"}},"channels":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"channels"}}}},"sales":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sales"}}}},"payouts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"payouts"}}}},"freight":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"freight"}}}},"synclog":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"synclog"}}}},"products":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"products"}}}},"liveOrders":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"liveOrders"}}}},"sellers":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sellers"}}}},"sellerContracts":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"sellerContracts"}}}},"syncApi":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"syncApi"}}}},"reconcileApi":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"reconcileApi"}}}},"adWriter":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"adWriter"}}}},"adPainter":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"adPainter"}}}}}}}}}},{"_id":"5ed9bed7b9e0891ce913e884","component":"data2-core-types@Component","params":{"package":"data2-core","component":"DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}},{"_id":"5f472ae463c680de4ff296e9","component":"data2-core-types@Component","params":{"package":"data2-core","component":"Data2TableDataSource","extends":"data2-core@DataSource","renderable":{"dimensions":{"disabled":false,"component":"data2-core-types@Dimensions","params":{"width":1366,"exactWidth":false,"exactHeight":false,"height":768}}}}}]}},{"reference":"ExternalComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"_id":"5f060d9b1ca96def42f3c40a","displayName":"Builder AuthStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"credentials":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"verifier":{"component":"data2-core-types@DataSetReference","params":{"reference":"UsersDataSet"}},"sessionShared":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},"email":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"nR6Q9d7qdaPtZhJ28Q8Dy"},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true,"reference":"yPCJBTKo8q1Mw0B_3Kpwl"},"component":"data2-core-types@ArtboardReference"}}},"session":[{"component":"data2-core-types@DataSetColumnReference","params":{"column":"name"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"email"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"password"}},{"component":"data2-core-types@DataSetColumnReference","params":{"column":"status"}}],"sessionMetadata":{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},{"params":{"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"active"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.status"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is active user"}]},"component":"data2-core-logical-operators@And","displayName":"is active and has _id"}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $user"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-primitives@String","params":{"content":"@data2.app"}},"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user.email"}}}}},"component":"data2-core-functions@Includes","displayName":"isData2User"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}},"component":"data2-core-flow@Step"},{"params":{"action":{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.d2_app"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"management"}}]},"component":"data2-core-functions@Includes","displayName":"isData2App Exception"},"resultName":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}},"component":"data2-core-flow@Step"},{"params":{"resultName":{"component":"data2-core-primitives@String","params":{"content":"has_access"}},"action":{"params":{"compare":{"params":{"components":[{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_user"}}}},{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"is_data2_app_exception"}}}}]},"component":"data2-core-logical-operators@Or"},"else":{"params":{"actions":[{"params":{"actions":[{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"component":"data2-core-logical-operators@Not"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check $metadata.system"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":"filter","args":[{"_id":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"compare":{"params":{"subject":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records.length"}}}}},"component":"data2-core-logical-operators@Not","displayName":"systems not found"},"then":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"}},"component":"data2-core-flow@If","displayName":"check system found"},{"params":{"actions":[{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"organization":{"component":"data2-core-types@Getter","params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"cursor.current.organization._id"}}}}}]},"component":"data2-core-types@Interaction"},{"params":{"module":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":"filter","args":[{"user":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$user._id"}}}},"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}}]},"component":"data2-core-types@Interaction"}]},"component":"data2-core-flow@Parallel"}]},"component":"data2-core-flow@Series","displayName":"common setup"},{"params":{"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"},"else":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"compare":{"params":{"components":{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"WuUa-VKHhW9uYU0E3-mJ8"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"mapper":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"system"}}],"body":{"params":{"expression":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.visibility"}}}},"defaultCase":{"params":{"content":false},"component":"data2-core-primitives@Boolean"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"public"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"billing-owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}},{"component":"data2-core-primitives@String","params":{"content":"member"}}]},"component":"data2-core-functions@Includes","displayName":"has role with access"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"comparisonSubject":{"component":"data2-core-primitives@String","params":{"content":"collaborator"}}},"component":"data2-core-comparison-operators@Equal","displayName":"is collaborator"}]},"component":"data2-core-logical-operators@And","displayName":"is org member and collaborator"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is collaborator"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is collaborator and has system access"}]},"component":"data2-core-logical-operators@Or"}}},{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"private"}},"value":{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"components":[{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal","displayName":"is org member"},{"params":{"pattern":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.role"}}}},"subject":[{"component":"data2-core-primitives@String","params":{"content":"owner"}},{"component":"data2-core-primitives@String","params":{"content":"admin"}}]},"component":"data2-core-functions@Includes","displayName":"is owner/admin"}]},"component":"data2-core-logical-operators@And","displayName":"has org member role with access"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is owner/admin"},{"params":{"components":[{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Ok6Tsu5XkS7r8PyW_7TyW"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"member"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"member.organization._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system.organization._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"is org member"},{"params":{"array":{"params":{"module":{"disabled":false,"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"NqKAY34n2ffFL64zamp7t"}},"prop":{"component":"data2-core-primitives@String","params":{"content":"data.records"}}},"component":"data2-core-types@Getter"},"filter":{"disabled":false,"component":"data2-core-functions@Function","params":{"parameters":[{"component":"data2-core-primitives@String","params":{"content":"access"}}],"body":{"params":{"subject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"access.system._id"}}}},"comparisonSubject":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"system._id"}}}}},"component":"data2-core-comparison-operators@Equal"}}}},"component":"data2-core-functions@ArrayFind","displayName":"has system access"}]},"component":"data2-core-logical-operators@And","displayName":"is member and has system access"}]},"component":"data2-core-logical-operators@Or","displayName":"is owner/admin or has system access"}}}]},"component":"data2-core-flow@Switch"}}}},"component":"data2-core-functions@ArrayMap"}},"component":"data2-core-logical-operators@And","displayName":"has org member for all systems in request"}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"then":{"params":{"content":true},"component":"data2-core-primitives@Boolean"}},"component":"data2-core-flow@If"}},"component":"data2-core-flow@Step"},{"params":{"then":{"system":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"$metadata.system"}}}}},"else":{"params":{"message":{"component":"data2-core-primitives@String","params":{"content":"Invalid Credentials"}},"code":{"component":"data2-core-primitives@String","params":{"content":"401"}}},"component":"data2-core-types@Error"},"compare":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"has_access"}}}}},"component":"data2-core-flow@If"}]},"component":"data2-core-flow@Series"},"sessionExpiresIn":{"component":"data2-core-primitives@Number","params":{"content":604800}},"sessionRenewal":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"identityProviders":[{"provider":{"component":"data2-core-primitives@String","params":{"content":"GOOGLE"}},"clientId":{"component":"data2-core-primitives@String","params":{"content":"55470861603-22pvfc1t49lp8cjnbfk71s5ct9hp1q1v.apps.googleusercontent.com"}}}]},"reference":"Data2BuilderAuthentication","updatedAt":"2026-08-06T19:31:23.557Z"},{"_id":"5f060ee51ca96def42f3fbd1","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"UsersTableDataSource"}},"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":1}}}},"reference":"UsersDataSet","updatedAt":"2026-03-04T21:16:40.291Z"},{"_id":"68f938cf5fb002e33752a43d","displayName":"InternalApplicationsAuthenticationStrategy","component":"data2-core@AuthenticationStrategy","system":"5e3b796d6228227ca637d0f4","params":{"resetPassword":{"resetEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}},"resetSuccessEmail":{"artboard":{"params":{"preventEvaluation":true},"component":"data2-core-types@ArtboardReference"}}},"verifier":{"disabled":false,"component":"data2-core-types@DataSetReference","params":{"reference":"InternalApplicationsVerifierDataSet"}},"password":{"disabled":false,"component":"data2-core-types@DataSetColumnReference","params":{"column":"secret"}},"credentials":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}],"session":[{"component":"data2-core-types@FieldReference","params":{"key":"application"}},{"component":"data2-core-types@FieldReference","params":{"key":"secret"}},{"component":"data2-core-types@FieldReference","params":{"key":"status"}}]},"reference":"InternalApplicationsAuthenticationStrategy","updatedAt":"2025-10-22T20:08:54.442Z","createdAt":"2025-10-22T20:04:31.198Z"},{"component":"data2-core@DataSet","reference":"SessionsDataSet","params":{"requiresConfirmation":false,"pk":"key","datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"data2sessionsdatasource"}}}},{"reference":"UsersTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}},{"component":"data2-core@ServerSessionsDataSource","reference":"data2sessionsdatasource","params":{}},{"_id":"5f1600b70528b92601890f75","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ServiceComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ServiceComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:20.208Z","createdAt":"2020-07-20T20:38:15.436Z"},{"_id":"5f1602190528b92601890f7d","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":40000},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ComponentInstancesTableDataSource"}},"sort":{"_id":1},"pk":"_id","autoEdit":true,"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"ComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:07.089Z","createdAt":"2020-07-20T20:44:09.350Z"},{"_id":"5f16017f0528b92601890f7a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"FileComponentInstancesDataSet","updatedAt":"2023-08-03T16:08:18.193Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"5f1601990528b92601890f7b","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"ApplicationsTableDataSource"}},"pk":"_id","autoEdit":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"master":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"params":{"column":"_id"},"component":"data2-core-types@DataSetColumnReference"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"ApplicationsDataSet","updatedAt":"2022-12-13T21:51:13.995Z","createdAt":"2020-07-20T20:42:01.657Z"},{"_id":"5f16172a0528b92601890f85","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"pagination":{"size":{"component":"data2-core-primitives@Number","params":{"content":10000}}},"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"DataComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}},"policies":{"params":{"allowGet":{"component":"data2-core-primitives@Boolean","params":{"content":true}}},"component":"data2@hkXy-UhMjhyfptdE6_fpW"}},"reference":"DataComponentInstancesDataSet","updatedAt":"2025-11-06T21:07:12.831Z","createdAt":"2020-07-20T22:14:02.097Z"},{"_id":"60ddc1bbda3861ca65407c5a","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"domain":{"component":"data2-core-types@Reference","params":{"reference":"clientApplicationDomain"}}},"pagination":{"size":1},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"}},"reference":"OneFileComponentInstancesDataSet","updatedAt":"2022-02-09T19:44:38.036Z","createdAt":"2020-07-20T20:41:35.797Z"},{"_id":"63ee3d38b8c9838c62fb05fb","displayName":"DriveFileComponentInstancesDataSet","component":"data2-core@DataSet","system":"5e3b796d6228227ca637d0f4","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"FileComponentInstancesTableDataSource"}},"pk":"_id","autoEdit":true,"filter":{"component":{"component":"data2-core-primitives@String","params":{"content":"data2-core@Drive"}}},"master":{"params":{"dataset":{"component":"data2-core-types@DataSetReference","params":{"reference":"SystemsDataSet"}},"localField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"system"}},"masterField":{"component":"data2-core-types@DataSetColumnReference","params":{"column":"_id"}}},"component":"data2-core-types@DataSetMaster"},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":false}}},"reference":"DriveFileComponentInstancesDataSet","updatedAt":"2025-12-04T21:58:32.367Z","createdAt":"2023-02-16T14:27:07.797Z"},{"reference":"ServiceComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6aa3fe888d01362441b39b6b","component":"data2-core-ai@Assistant","reference":"wc-ad-painter","system":"6aa3f490872838a8b6ddea2e","params":{"model":"cerebras"},"deleteMetadata":{}},{"_id":"6aa3fe837aa25eaf932ab105","component":"data2-core-ai@Assistant","reference":"wc-ad-writer","system":"6aa3f490872838a8b6ddea2e","params":{"model":"cerebras","behaviour":"Dado um produto (nome, categoria, preço), gere um título otimizado (até 60 caracteres, sem emojis, palavras-chave primeiro), 5 tags de busca separadas por vírgula, e uma descrição curta (2-3 frases, tom comercial). Responda ESTRITAMENTE em JSON, sem markdown, formato: {\"title\":\"...\",\"tags\":\"...\",\"description\":\"...\"}","json":true},"deleteMetadata":{}},{"_id":"6aa3fad53a4725633eaaf3b5","component":"data2-rush@HTTPListener","reference":"wc-reconcile","system":"6aa3f490872838a8b6ddea2e","params":{},"deleteMetadata":{}},{"_id":"6aa3fa996294c8db85e684b6","component":"data2-rush@HTTPListener","reference":"wc-sync","system":"6aa3f490872838a8b6ddea2e","params":{},"deleteMetadata":{}}]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6aa3fb267aa25eaf932aaadc","component":"data2-core-primitives@Artboard","system":"6aa3f490872838a8b6ddea2e","displayName":"Webcontinental Marketplace Hub","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Webcontinental Marketplace Hub"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"tcBTyGpi9dP96CyxeNEyv","deleteMetadata":{}},{"_id":"2826c45b99d9860aa7bda09d","parent":"6aa3fb267aa25eaf932aaadc","component":"webcontinental-app@wc-shell","system":"6aa3f490872838a8b6ddea2e","displayName":"Shell","params":{"super":{"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0,"freeTransform":true,"left":true,"right":true,"top":true,"bottom":true}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}}},"channels":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-channelsDataSet"}},"sales":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-channel-salesDataSet"}},"payouts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-channel-payoutsDataSet"}},"freight":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-channel-freightDataSet"}},"synclog":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-sync-logDataSet"}},"products":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-productsDataSet"}},"syncApi":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-sync"}},"reconcileApi":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-reconcile"}},"liveOrders":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-live-ordersDataSet"}},"adWriter":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-ad-writer"}},"adPainter":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-ad-painter"}},"sellers":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-sellersDataSet"}},"sellerContracts":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"wc-seller-contractsDataSet"}}},"index":0,"reference":"Heea0crNd5_qEHSlWAWsZ","deleteMetadata":{}}]}},{"_id":"5fc4faeec8da12be8bf3d08a","component":"data2-core@Data2TableDataSource","system":"5e3b796d6228227ca637d0f4","params":{"paginate":{"default":1000},"super":{},"table":"fileComponentInstances","schema":[{"component":"data2-core-types@Field","params":{"key":"component","title":"Component","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"system","title":"System","component":"data2-core-primitives@ObjectId"}},{"component":"data2-core-types@Field","params":{"key":"displayName","title":"Display Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"params","title":"Params","component":"data2-core-primitives@Object"}},{"component":"data2-core-types@Field","params":{"key":"reference","title":"Reference","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":{"component":"data2-core-primitives@String","params":{"content":"fileId"}},"title":"File ID","component":"data2-core-primitives@ObjectId"},"break":true}],"hooks":{"before":{"all":[{"hook":"softDelete"}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"timestamp","options":{"fields":["createdAt","updatedAt"]}}],"update":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}],"patch":[{"hook":"timestamp","options":{"fields":["updatedAt"]}}]},"after":{"all":[{"hook":"fileUrl","options":{"downloadField":"params.fileUrl","uploadField":"params.uploadFileUrl","enhanceSchema":false}}],"find":[{"hook":"useCache","options":{"additionalGroupKeys":["$and.0.system","$and.1.system"],"skipCache":true}}],"create":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"update":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"patch":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}],"remove":[{"hook":"invalidateCache","options":{"additionalGroupKeys":["system"],"secondaryUniqueKeys":["reference"]}},{"hook":"invalidateEnvCache"}]}},"multi":["create"],"useEstimatedDocumentCount":true},"reference":"FileComponentInstancesTableDataSource","updatedAt":"2022-12-19T20:42:51.837Z","createdAt":"2020-11-30T13:59:52.294Z"},{"reference":"ApplicationsTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6aa3fbbf3a4725633eaaf5e6","displayName":"Webcontinental Marketplace Hub","reference":"ZsW2OeauDJM_FBa_HPAc1","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"demo"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"tcBTyGpi9dP96CyxeNEyv"}}},"system":"6aa3f490872838a8b6ddea2e","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6aa40980ea63ad5d443b1a1c","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-seller-contracts"}}},"reference":"wc-seller-contractsDataSet","deleteMetadata":{}},{"_id":"6aa40968ea63ad5d443b19e6","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-sellers"}}},"reference":"wc-sellersDataSet","deleteMetadata":{}},{"_id":"6aa3ff09e792791f9e3e139a","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-live-orders"}}},"reference":"wc-live-ordersDataSet","deleteMetadata":{}},{"_id":"6aa3f9b18d01362441b391a4","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-products"}}},"reference":"wc-productsDataSet","deleteMetadata":{}},{"_id":"6aa3fa71a281b56db533a69c","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-sync-log"}}},"reference":"wc-sync-logDataSet","deleteMetadata":{}},{"_id":"6aa3fa2b3360d21933136e31","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-channel-freight"}}},"reference":"wc-channel-freightDataSet","deleteMetadata":{}},{"_id":"6aa3fa03fb74d96d50353769","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-channel-payouts"}}},"reference":"wc-channel-payoutsDataSet","deleteMetadata":{}},{"_id":"6aa3f9dba281b56db533a599","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-channel-sales"}}},"reference":"wc-channel-salesDataSet","deleteMetadata":{}},{"_id":"6aa3f9ab3a4725633eaaf181","component":"data2-core@DataSet","system":"6aa3f490872838a8b6ddea2e","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"wc-channels"}}},"reference":"wc-channelsDataSet","deleteMetadata":{}},{"_id":"6aa409808d01362441b3b78e","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-seller-contracts","schema":[{"component":"data2-core-types@Field","params":{"key":"sellerId","title":"Seller Id","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sellerName","title":"Lojista","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channel","title":"Canal","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"feeContracted","title":"Taxa Contratada %","component":"data2-core-primitives@Number"}}]},"reference":"wc-seller-contracts","deleteMetadata":{}},{"_id":"6aa409683a4725633eab16de","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-sellers","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Nome","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cnpj","title":"CNPJ","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"category","title":"Categoria","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"joinedAt","title":"Cliente desde","component":"data2-core-primitives@String"}}]},"reference":"wc-sellers","deleteMetadata":{}},{"_id":"6aa3ff095cc010f97586c5a7","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-live-orders","schema":[{"component":"data2-core-types@Field","params":{"key":"channel","title":"Channel","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channelName","title":"Channel Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"productId","title":"Product Id","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"productName","title":"Product Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"qty","title":"Qty","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"unitPrice","title":"Unit Price","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"gmv","title":"GMV","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"billableWeight","title":"Billable Weight","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"freightCost","title":"Freight Cost","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"timestamp","title":"Timestamp","component":"data2-core-primitives@Date"}},{"component":"data2-core-types@Field","params":{"key":"settled","title":"Settled","component":"data2-core-primitives@Boolean"}},{"component":"data2-core-types@Field","params":{"key":"narrative","title":"Narrative","component":"data2-core-primitives@String"}}]},"reference":"wc-live-orders","deleteMetadata":{}},{"_id":"6aa3f9b13a4725633eaaf190","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-products","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"category","title":"Category","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"cost","title":"Cost","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"packaging","title":"Packaging","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"weight","title":"Weight","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"length","title":"Length","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"width","title":"Width","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"height","title":"Height","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"listPrice","title":"List Price","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"promoPrice","title":"Promo Price","component":"data2-core-primitives@Number"}}]},"reference":"wc-products","deleteMetadata":{}},{"_id":"6aa3fa6f5e4031b0aaa29bac","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-sync-log","schema":[{"component":"data2-core-types@Field","params":{"key":"channel","title":"Channel","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channelName","title":"Channel Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"timestamp","title":"Timestamp","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"durationMs","title":"Duration Ms","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"itemsProcessed","title":"Items Processed","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"message","title":"Message","component":"data2-core-primitives@String"}}]},"reference":"wc-sync-log","deleteMetadata":{}},{"_id":"6aa3fa2be792791f9e3e0a8b","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-channel-freight","schema":[{"component":"data2-core-types@Field","params":{"key":"orderId","title":"Order Id","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channel","title":"Channel","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channelName","title":"Channel Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"product","title":"Product","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"price","title":"Price","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"real_weight_kg","title":"Real Weight Kg","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"length_cm","title":"Length cm","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"width_cm","title":"Width cm","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"height_cm","title":"Height cm","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"cubic_weight","title":"Cubic Weight","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"billable_weight","title":"Billable Weight","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"freight_cost","title":"Freight Cost","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"sellerId","title":"Seller Id","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sellerName","title":"Lojista","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"refundCredited","title":"Refund Credited","component":"data2-core-primitives@Boolean"}}]},"reference":"wc-channel-freight","deleteMetadata":{}},{"_id":"6aa3fa035e4031b0aaa29a97","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-channel-payouts","schema":[{"component":"data2-core-types@Field","params":{"key":"date","title":"Date","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channel","title":"Channel","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channelName","title":"Channel Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"netPayout","title":"Net Payout","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"feeApplied","title":"Fee Applied %","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"feeExpected","title":"Fee Expected %","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"sellerId","title":"Seller Id","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sellerName","title":"Lojista","component":"data2-core-primitives@String"}}]},"reference":"wc-channel-payouts","deleteMetadata":{}},{"_id":"6aa3f9db79b3b494bf8232ba","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-channel-sales","schema":[{"component":"data2-core-types@Field","params":{"key":"date","title":"Date","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channel","title":"Channel","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"channelName","title":"Channel Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"orders","title":"Orders","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"gmv","title":"GMV","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"sellerId","title":"Seller Id","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sellerName","title":"Lojista","component":"data2-core-primitives@String"}}]},"reference":"wc-channel-sales","deleteMetadata":{}},{"_id":"6aa3f9abe792791f9e3e09ac","component":"data2-core@Data2TableDataSource","system":"6aa3f490872838a8b6ddea2e","params":{"table":"wc-channels","schema":[{"component":"data2-core-types@Field","params":{"key":"name","title":"Name","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"slug","title":"Slug","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"status","title":"Status","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"logoBg","title":"Logo BG","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"logoText","title":"Logo Text","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"logoTextColor","title":"Logo Text Color","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"logoAccent","title":"Logo Accent","component":"data2-core-primitives@String"}}]},"reference":"wc-channels","deleteMetadata":{}}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}