{"context":{"domain":"granado-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":"6a62e4640613f70fa449ff5d","name":"app","domain":"granado-app","visibility":"public","settings":{"defaultAccessPolicy":"public"},"updatedAt":"2026-07-27T14:19:36.810Z","createdAt":"2026-07-24T04:04:52.993Z"}]}},{"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":"6a8752db2d977dd049f3321e","component":"data2-core-types@Component","system":"6a62e4640613f70fa449ff5d","params":{"extends":"data2-core-primitives@Block","component":"granado-wa-monitor","package":"granado-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{display:block;position:relative;width:100%;height:100%}\n*{box-sizing:border-box;margin:0;padding:0}\n.emap{position:absolute;inset:0;display:grid;grid-template-rows:auto auto auto 1fr;background:#0a0e0c;color:#d7e6dc;font-family:'Segoe UI',system-ui,-apple-system,sans-serif;overflow:hidden}\nheader{padding:14px 20px 10px;background:#0d1411;border-bottom:1px solid #1c2a22}\nheader h1{font-size:16px;font-weight:800;color:#eaf5ee;display:flex;align-items:center;gap:10px}\nheader h1 button{background:#152019;border:1px solid #27392e;color:#cfe8d8;border-radius:8px;padding:4px 10px;font-size:13px;cursor:pointer}\nheader .sub{font-size:11px;color:#8fa89a;margin-top:4px}\n.stats{display:flex;gap:22px;padding:9px 20px;background:#0c1210;border-bottom:1px solid #1c2a22;align-items:center}\n.stat b{display:block;font-size:18px;font-family:ui-monospace,Menlo,monospace;color:#eaf5ee;line-height:1.1}\n.stat span{font-size:9px;letter-spacing:.5px;text-transform:uppercase;color:#6f8a7c}\n.mono{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:#8fa89a}\n.tabs{display:flex;gap:6px;padding:9px 20px;background:#0b100e;border-bottom:1px solid #1c2a22}\n.tab{background:#121a15;border:1px solid #223227;color:#8fa89a;border-radius:99px;padding:6px 16px;font-size:12px;font-weight:700;cursor:pointer}\n.tab.hot{background:#1d5c3c;border-color:#2e8f5b;color:#eafff2}\n.body{display:grid;grid-template-columns:1fr 360px;min-height:0}\n.gridcol{overflow-y:auto;padding:14px}\n.egrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}\n.ecard{background:#121a15;border:1px solid #1c2a22;border-radius:12px;padding:12px 13px;cursor:pointer}\n.ecard:hover{border-color:#2c4636}\n.ecard.sel{border-color:#3ddc84;background:#132018}\n.ehead{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}\n.etipo{font-size:8.5px;letter-spacing:.5px;text-transform:uppercase;color:#7d968a;font-weight:700}\n.etime{font-size:9px;color:#5d7568;font-family:ui-monospace,Menlo,monospace}\n.ename{font-size:13px;font-weight:800;color:#eaf5ee;margin-bottom:6px;line-height:1.3}\n.ename.mono{font-family:ui-monospace,Menlo,monospace;color:#ffd166}\n.erow{font-size:10.5px;color:#9fb7a9;margin-bottom:6px}\n.erow b{color:#e4f1e8}\n.ebadges{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:5px}\n.epill{font-size:8.5px;border-radius:99px;padding:2px 8px;font-weight:700;background:#1a2a20;color:#9fc4ad}\n.epill.crit{background:#33150f;color:#ff9a8c}\n.epill.warn{background:#332508;color:#ffc46e}\n.epill.info{background:#101b2a;color:#8ec2ff}\n.echips{display:flex;flex-wrap:wrap;gap:4px}\n.echip{font-family:ui-monospace,Menlo,monospace;font-size:9px;background:#182018;color:#ffd166;border-radius:6px;padding:1.5px 6px}\n.detail{overflow-y:auto;padding:16px;border-left:1px solid #1c2a22;background:#0b100e}\n.detail h3{font-size:10px;letter-spacing:.6px;text-transform:uppercase;color:#6f8a7c;margin:14px 0 8px}\n.dhead{font-size:15px;font-weight:800;color:#eef7f0;margin-bottom:3px}\n.dsub{font-size:11px;color:#8fa89a;margin-bottom:10px}\n.evrow{background:#111a14;border:1px solid #1c2a22;border-radius:8px;padding:8px 10px;margin-bottom:6px}\n.evtop{display:flex;justify-content:space-between;font-size:9.5px;color:#7d968a;margin-bottom:3px;font-family:ui-monospace,Menlo,monospace}\n.evtext{font-size:11.5px;color:#cfe8d8;line-height:1.5}\n.na{color:#5d7568;font-size:11px;font-style:italic;padding:10px 0}\n.b-back{background:#152019;border:1px solid #27392e;color:#cfe8d8;border-radius:8px;padding:5px 12px;font-size:11px;font-weight:700;cursor:pointer;margin-bottom:10px}\n.b-back:hover{background:#1e2c22}\n.b-conv{background:none;border:none;color:#5fb98a;font-size:9.5px;font-weight:700;cursor:pointer;padding:0;text-decoration:underline}\n.b-convtop{background:#152019;border:1px solid #27392e;color:#cfe8d8;border-radius:8px;padding:6px 12px;font-size:11px;font-weight:700;cursor:pointer;margin:6px 0 4px;width:100%;text-align:left}\n.b-convtop:hover{background:#1e2c22}\n.crow2{border-radius:9px;padding:7px 10px;margin-bottom:6px;max-width:88%;background:#111a14;border:1px solid #1c2a22}\n.crow2.me{margin-left:auto;background:#122019;border-color:#24382c}\n.crow2.hl{border-color:#ffd166;box-shadow:0 0 0 1px #ffd166 inset}\n.crow2top{display:flex;justify-content:space-between;gap:10px;font-size:9px;color:#7d968a;margin-bottom:3px;font-family:ui-monospace,Menlo,monospace}\n.crow2text{font-size:11.5px;color:#cfe8d8;line-height:1.5}\n.gate{position:absolute;inset:0;background:#0a0e0c;display:flex;align-items:center;justify-content:center;z-index:20}\n.gate.hidden{display:none}\n.gatebox{background:#121a15;border:1px solid #223227;border-radius:16px;padding:30px 34px;text-align:center;width:280px}\n.gatelock{font-size:26px;margin-bottom:8px}\n.gatetitle{font-size:14px;font-weight:800;color:#eaf5ee;margin-bottom:4px}\n.gatesub{font-size:10.5px;color:#7d968a;margin-bottom:16px}\n.gate-input{width:100%;background:#0c1210;border:1px solid #223227;border-radius:8px;color:#eaf5ee;padding:9px 11px;font-size:13px;margin-bottom:10px;text-align:center}\n.gate-input:focus{outline:none;border-color:#3d6a4d}\n.gate-btn{width:100%;background:#1d5c3c;border:none;color:#eafff2;border-radius:8px;padding:9px;font-size:13px;font-weight:800;cursor:pointer}\n.gate-btn:hover{background:#237049}\n.gate-err{color:#ff8a7a;font-size:10.5px;margin-top:8px;min-height:14px}\n`,\n  render(d2){\n    return `<div class=\"emap\">\n      <header>\n        <h1>🗺️ Mapa de Entidades — Operação via WhatsApp <button class=\"b-refresh\">🔄</button></h1>\n        <div class=\"sub\">Lojas, pedidos e pessoas extraídos e cruzados a partir das mensagens — as mensagens em si são evidência de apoio, não o produto.</div>\n      </header>\n      <div class=\"stats\" data-d2-static>\n        <div class=\"stat\"><b class=\"s-msg\">0</b><span>mensagens</span></div>\n        <div class=\"stat\"><b class=\"s-loja\">0</b><span>lojas/contatos</span></div>\n        <div class=\"stat\"><b class=\"s-ped\">0</b><span>pedidos</span></div>\n        <div class=\"stat\"><b class=\"s-pes\">0</b><span>pessoas</span></div>\n        <div class=\"stat\"><span class=\"s-sync mono\">—</span></div>\n      </div>\n      <div class=\"tabs\" data-d2-static>\n        <button class=\"tab hot\" data-tab=\"lojas\">🏬 Lojas &amp; contatos</button>\n        <button class=\"tab\" data-tab=\"pedidos\">🧾 Pedidos</button>\n        <button class=\"tab\" data-tab=\"pessoas\">👤 Pessoas</button>\n      </div>\n      <div class=\"body\">\n        <div class=\"gridcol\"><div class=\"egrid\" data-d2-static></div></div>\n        <div class=\"detail\" data-d2-static><div class=\"na\">Clique num card pra ver os detalhes e as mensagens que originaram essa entidade.</div></div>\n      </div>\n      <div class=\"gate\" data-d2-static>\n        <div class=\"gatebox\">\n          <div class=\"gatelock\">🔒</div>\n          <div class=\"gatetitle\">Acesso restrito</div>\n          <div class=\"gatesub\">Dados operacionais internos da Granado</div>\n          <input type=\"password\" class=\"gate-input\" placeholder=\"Senha\" />\n          <button class=\"gate-btn\">Entrar</button>\n          <div class=\"gate-err\"></div>\n        </div>\n      </div>\n    </div>`\n  },\n  mounted(d2){\n    const gridEl=d2.$('.egrid'), detailEl=d2.$('.detail')\n    if(!gridEl||!detailEl)return\n    const RULES=[\n      {key:'pedido_travado',label:'Pedido travado',icon:'🧾',cls:'crit',re:/preso\\s*(em|no)?\\s*erp|travad[oa]\\s*no\\s*sap|pedido\\s*preso/i},\n      {key:'acesso_oms',label:'Acesso OMS',icon:'🔑',cls:'warn',re:/senha.*oms|liberar\\s*o\\s*oms|acessar\\s*o\\s*oms|oms.*senha/i},\n      {key:'checkout_sem_estoque',label:'Checkout sem estoque',icon:'📦',cls:'crit',re:/sem\\s*termos?\\s*o\\s*produto|aceito\\s*sem.*produto|indevidamente/i},\n      {key:'entrega_status',label:'EuEntrego inconsistente',icon:'🛵',cls:'warn',re:/eu\\s*entrego|euentrego/i,re2:/errone|errad|entregue|retirad[oa]|extravi/i},\n      {key:'estorno',label:'Estorno/cancelamento',icon:'💳',cls:'info',re:/estorno|reembolso|cancelad[oa]/i},\n      {key:'loja_duplicada',label:'Loja duplicada',icon:'🏬',cls:'warn',re:/duas\\s*lojas|excluir\\s*uma\\s*loja|selecionar\\s*a\\s*loja/i}\n    ]\n    function classify(t){ if(!t)return null; for(const r of RULES){ if(r.re2){ if(r.re.test(t)&&r.re2.test(t)) return r } else if(r.re.test(t)) return r } return null }\n    function extractOrders(t){ if(!t)return []; const m=t.match(/\\b\\d{8,}\\b/g); return m?[...new Set(m)]:[] }\n    function esc(s){return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')}\n    function fmtRel(d){ try{return d2.fmt.relative(new Date(d))}catch(e){return ''} }\n    function inferTipoLoja(chatName,isGroup){\n      if(isGroup) return 'grupo'\n      if(/^Granado |Dark Store/i.test(chatName)) return 'loja'\n      return 'contato'\n    }\n    function inferTipoPessoa(senderName,chatName,fromMe){\n      if(fromMe||senderName==='Granado Oms') return 'time interno'\n      if(/rappi|ifood|mercado livre|pluggto/i.test(chatName)) return 'parceiro (marketplace)'\n      return 'loja/contato'\n    }\n    const S={items:[],lojas:{},pedidos:{},pessoas:{},tab:'lojas',sel:null,conv:null,lastSync:null}\n    const ds=d2.data()\n    function setText(sel,v){const el=d2.$(sel);if(el)el.textContent=v}\n    function build(){\n      const lojas={},pedidos={},pessoas={}\n      for(const i of S.items){\n        const lk=i.chatName\n        const l=lojas[lk]=lojas[lk]||{key:lk,name:lk,tipo:inferTipoLoja(lk,i.isGroup),msgs:0,sinais:0,cat:{},peds:new Set(),pessoas:new Set(),last:i.createdAt,items:[]}\n        l.msgs++; l.items.push(i); if(new Date(i.createdAt)>new Date(l.last))l.last=i.createdAt\n        if(i.rule){ l.sinais++; l.cat[i.rule.key]=(l.cat[i.rule.key]||0)+1 }\n        if(i.senderName && i.senderName!==lk) l.pessoas.add(i.senderName)\n        for(const o of i.orders){\n          l.peds.add(o)\n          const p=pedidos[o]=pedidos[o]||{key:o,order:o,loja:lk,rule:i.rule,first:i.createdAt,last:i.createdAt,count:0,items:[]}\n          p.count++; p.items.push(i)\n          if(new Date(i.createdAt)>new Date(p.last))p.last=i.createdAt\n          if(new Date(i.createdAt)<new Date(p.first))p.first=i.createdAt\n          if(!p.rule && i.rule) p.rule=i.rule\n        }\n        const sk=i.senderName||lk\n        const ps=pessoas[sk]=pessoas[sk]||{key:sk,name:sk,tipo:inferTipoPessoa(sk,lk,i.fromMe),msgs:0,sinais:0,lojas:new Set(),last:i.createdAt,items:[]}\n        ps.msgs++; ps.items.push(i); ps.lojas.add(lk)\n        if(new Date(i.createdAt)>new Date(ps.last))ps.last=i.createdAt\n        if(i.rule) ps.sinais++\n      }\n      S.lojas=lojas; S.pedidos=pedidos; S.pessoas=pessoas\n    }\n    function catPills(cat){\n      return Object.keys(cat).map(k=>{ const r=RULES.find(x=>x.key===k); if(!r)return ''; return '<span class=\"epill '+r.cls+'\">'+r.icon+' '+cat[k]+'</span>' }).join('')\n    }\n    function renderStats(){\n      setText('.s-msg',S.items.length)\n      setText('.s-loja',Object.keys(S.lojas).length)\n      setText('.s-ped',Object.keys(S.pedidos).length)\n      setText('.s-pes',Object.keys(S.pessoas).length)\n      setText('.s-sync', S.lastSync? ('sync '+fmtRel(S.lastSync)) : '—')\n    }\n    function renderGrid(){\n      let html=''\n      if(S.tab==='lojas'){\n        const arr=Object.values(S.lojas).sort((a,b)=> b.sinais-a.sinais || new Date(b.last)-new Date(a.last))\n        html=arr.map(l=>'<div class=\"ecard'+(S.sel&&S.sel.kind==='loja'&&S.sel.key===l.key?' sel':'')+'\" data-kind=\"loja\" data-key=\"'+esc(l.key)+'\">'\n          +'<div class=\"ehead\"><span class=\"etipo\">'+(l.tipo==='loja'?'🏬 loja':l.tipo==='grupo'?'👥 grupo':'💬 contato')+'</span><span class=\"etime\">'+fmtRel(l.last)+'</span></div>'\n          +'<div class=\"ename\">'+esc(l.name)+'</div>'\n          +'<div class=\"erow\"><b>'+l.msgs+'</b> msgs · <b>'+l.sinais+'</b> sinais'+(l.pessoas.size?' · <b>'+l.pessoas.size+'</b> pessoas':'')+'</div>'\n          +'<div class=\"ebadges\">'+catPills(l.cat)+'</div>'\n          +(l.peds.size?'<div class=\"echips\">'+[...l.peds].map(o=>'<span class=\"echip\">#'+o+'</span>').join('')+'</div>':'')\n          +'</div>').join('')\n      }else if(S.tab==='pedidos'){\n        const arr=Object.values(S.pedidos).sort((a,b)=> new Date(b.last)-new Date(a.last))\n        html=arr.map(p=>'<div class=\"ecard'+(S.sel&&S.sel.kind==='pedido'&&S.sel.key===p.key?' sel':'')+'\" data-kind=\"pedido\" data-key=\"'+esc(p.key)+'\">'\n          +'<div class=\"ehead\"><span class=\"etipo\">🧾 pedido</span><span class=\"etime\">'+fmtRel(p.last)+'</span></div>'\n          +'<div class=\"ename mono\">#'+p.order+'</div>'\n          +'<div class=\"erow\">loja/contexto: <b>'+esc(p.loja)+'</b></div>'\n          +'<div class=\"erow\">mencionado <b>'+p.count+'</b>x</div>'\n          +(p.rule?'<div class=\"ebadges\"><span class=\"epill '+p.rule.cls+'\">'+p.rule.icon+' '+p.rule.label+'</span></div>':'')\n          +'</div>').join('')\n      }else{\n        const arr=Object.values(S.pessoas).sort((a,b)=> b.sinais-a.sinais || new Date(b.last)-new Date(a.last))\n        html=arr.map(ps=>'<div class=\"ecard'+(S.sel&&S.sel.kind==='pessoa'&&S.sel.key===ps.key?' sel':'')+'\" data-kind=\"pessoa\" data-key=\"'+esc(ps.key)+'\">'\n          +'<div class=\"ehead\"><span class=\"etipo\">👤 '+esc(ps.tipo)+'</span><span class=\"etime\">'+fmtRel(ps.last)+'</span></div>'\n          +'<div class=\"ename\">'+esc(ps.name)+'</div>'\n          +'<div class=\"erow\"><b>'+ps.msgs+'</b> msgs em <b>'+ps.lojas.size+'</b> conversa(s)'+(ps.sinais?' · <b>'+ps.sinais+'</b> sinais':'')+'</div>'\n          +'</div>').join('')\n      }\n      gridEl.innerHTML = html || '<div class=\"na\">Nada aqui ainda.</div>'\n    }\n    function fmtDT(d){ try{return d2.fmt.date(new Date(d))+' '+d2.fmt.time(new Date(d))}catch(e){return fmtRel(d)} }\n    function renderConversation(){\n      const chat=S.conv.chat\n      const msgs=S.items.filter(i=>i.chatName===chat).sort((a,b)=> new Date(a.createdAt)-new Date(b.createdAt))\n      let html='<button class=\"b-back\">← Voltar</button>'\n        +'<div class=\"dhead\">'+esc(chat)+'</div><div class=\"dsub\">conversa completa · '+msgs.length+' mensagens</div>'\n        +'<h3>Conversa (ordem cronológica)</h3>'\n        +msgs.map(m=>'<div class=\"crow2'+(m.fromMe?' me':'')+(m.id===S.conv.highlight?' hl':'')+'\"'+(m.id===S.conv.highlight?' data-hl=\"1\"':'')+'>'\n          +'<div class=\"crow2top\"><span>'+(m.fromMe?'time interno':esc(m.senderName||chat))+'</span><span>'+fmtDT(m.createdAt)+'</span></div>'\n          +'<div class=\"crow2text\">'+(esc(m.text)||'<i>(mídia/reação sem texto)</i>')+'</div>'\n        +'</div>').join('')\n      detailEl.innerHTML=html\n      const hl=detailEl.querySelector('[data-hl=\"1\"]')\n      if(hl && hl.scrollIntoView) hl.scrollIntoView({block:'center'})\n    }\n    function renderDetail(){\n      if(S.conv){ renderConversation(); return }\n      if(!S.sel){ detailEl.innerHTML='<div class=\"na\">Clique num card pra ver os detalhes e as mensagens que originaram essa entidade.</div>'; return }\n      let src, title, sub\n      if(S.sel.kind==='loja'){ src=S.lojas[S.sel.key]; title=src.name; sub=src.tipo+' · '+src.msgs+' mensagens · '+src.sinais+' sinais' }\n      else if(S.sel.kind==='pedido'){ src=S.pedidos[S.sel.key]; title='Pedido #'+src.order; sub='origem: '+src.loja+' · mencionado '+src.count+'x' }\n      else { src=S.pessoas[S.sel.key]; title=src.name; sub=src.tipo+' · '+src.msgs+' mensagens' }\n      const items=[...src.items].sort((a,b)=> new Date(b.createdAt)-new Date(a.createdAt))\n      let html='<div class=\"dhead\">'+esc(title)+'</div><div class=\"dsub\">'+esc(sub)+'</div>'\n      if(S.sel.kind==='loja') html+='<button class=\"b-convtop\" data-chat=\"'+esc(title)+'\" data-id=\"\">↗ Ver conversa completa</button>'\n      html+='<h3>Evidências (mensagens)</h3>'\n        +items.map(i=>'<div class=\"evrow\"><div class=\"evtop\"><span>'+esc(i.chatName)+(i.senderName&&i.senderName!==i.chatName?' · '+esc(i.senderName):'')+'</span><span>'+fmtRel(i.createdAt)+'</span></div><div class=\"evtext\">'+(esc(i.text)||'<i>(mídia/reação sem texto)</i>')+'</div>'\n          +'<button class=\"b-conv\" data-chat=\"'+esc(i.chatName)+'\" data-id=\"'+esc(i.id)+'\">↗ ver conversa</button>'\n          +'</div>').join('')\n      detailEl.innerHTML=html\n    }\n    function renderAll(){ renderStats(); renderGrid(); renderDetail() }\n    async function load(){\n      try{\n        await ds.refresh(); await ds.loadAll()\n        const recs=ds.records()\n        S.items=recs.map(r=>{\n          const p=r.payload||{}\n          const text=(p.text&&p.text.message)||''\n          return {id:r._id,chatName:p.chatName||'(sem nome)',senderName:p.senderName||'',fromMe:!!p.fromMe,isGroup:!!p.isGroup,text,rule:classify(text),orders:extractOrders(text),createdAt:r.createdAt}\n        })\n        build(); S.lastSync=new Date(); renderAll()\n      }catch(e){ d2.log('emap load error', e) }\n    }\n    d2.on('.tab','click',e=>{\n      const b=e.target.closest('.tab'); if(!b)return\n      S.tab=b.getAttribute('data-tab'); S.sel=null; S.conv=null\n      d2.$$('.tab').forEach(x=>x.classList.toggle('hot',x===b))\n      renderGrid(); renderDetail()\n    })\n    d2.on('.ecard','click',e=>{\n      const c=e.target.closest('.ecard'); if(!c)return\n      S.conv=null\n      S.sel={kind:c.getAttribute('data-kind'),key:c.getAttribute('data-key')}\n      renderGrid(); renderDetail()\n    })\n    d2.on('.b-conv','click',e=>{\n      const b=e.target.closest('.b-conv'); if(!b)return\n      S.conv={chat:b.getAttribute('data-chat'),highlight:b.getAttribute('data-id')}\n      renderDetail()\n    })\n    d2.on('.b-convtop','click',e=>{\n      const b=e.target.closest('.b-convtop'); if(!b)return\n      S.conv={chat:b.getAttribute('data-chat'),highlight:null}\n      renderDetail()\n    })\n    d2.on('.b-back','click',()=>{ S.conv=null; renderDetail() })\n    d2.on('.b-refresh','click',()=>{load()})\n    const GATE_KEY='wamon_gate_ok_v1'\n    const gateEl=d2.$('.gate')\n    function start(){\n      load()\n      let acc=0,prev=null\n      d2.raf(t=>{ if(prev==null)prev=t; const dt=(t-prev)/1000; prev=t; acc+=dt; if(acc>20){acc=0;load()} })\n    }\n    function tryUnlock(pw){\n      if(pw==='Granado@2026@data2'){\n        try{localStorage.setItem(GATE_KEY,'1')}catch(e){}\n        if(gateEl) gateEl.classList.add('hidden')\n        start()\n        return true\n      }\n      return false\n    }\n    let unlocked=false\n    try{ unlocked = localStorage.getItem(GATE_KEY)==='1' }catch(e){}\n    if(unlocked){ if(gateEl) gateEl.classList.add('hidden'); start() }\n    d2.on('.gate-btn','click',()=>{\n      const inp=d2.$('.gate-input')\n      if(!tryUnlock(inp?inp.value:'')){\n        const err=d2.$('.gate-err'); if(err) err.textContent='Senha incorreta'\n      }\n    })\n    d2.on('.gate-input','keydown',e=>{ if(e.key==='Enter'){ const b=d2.$('.gate-btn'); if(b) b.click() } })\n  }\n}"}},"dataset":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"dataset"}}}}}}}},"__d2PrevCode":{"code":"export default {\n  css: `\n:host{display:block;position:relative;width:100%;height:100%}\n*{box-sizing:border-box;margin:0;padding:0}\n.emap{position:absolute;inset:0;display:grid;grid-template-rows:auto auto auto 1fr;background:#0a0e0c;color:#d7e6dc;font-family:'Segoe UI',system-ui,-apple-system,sans-serif;overflow:hidden}\nheader{padding:14px 20px 10px;background:#0d1411;border-bottom:1px solid #1c2a22}\nheader h1{font-size:16px;font-weight:800;color:#eaf5ee;display:flex;align-items:center;gap:10px}\nheader h1 button{background:#152019;border:1px solid #27392e;color:#cfe8d8;border-radius:8px;padding:4px 10px;font-size:13px;cursor:pointer}\nheader .sub{font-size:11px;color:#8fa89a;margin-top:4px}\n.stats{display:flex;gap:22px;padding:9px 20px;background:#0c1210;border-bottom:1px solid #1c2a22;align-items:center}\n.stat b{display:block;font-size:18px;font-family:ui-monospace,Menlo,monospace;color:#eaf5ee;line-height:1.1}\n.stat span{font-size:9px;letter-spacing:.5px;text-transform:uppercase;color:#6f8a7c}\n.mono{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:#8fa89a}\n.tabs{display:flex;gap:6px;padding:9px 20px;background:#0b100e;border-bottom:1px solid #1c2a22}\n.tab{background:#121a15;border:1px solid #223227;color:#8fa89a;border-radius:99px;padding:6px 16px;font-size:12px;font-weight:700;cursor:pointer}\n.tab.hot{background:#1d5c3c;border-color:#2e8f5b;color:#eafff2}\n.body{display:grid;grid-template-columns:1fr 360px;min-height:0}\n.gridcol{overflow-y:auto;padding:14px}\n.egrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}\n.ecard{background:#121a15;border:1px solid #1c2a22;border-radius:12px;padding:12px 13px;cursor:pointer}\n.ecard:hover{border-color:#2c4636}\n.ecard.sel{border-color:#3ddc84;background:#132018}\n.ehead{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}\n.etipo{font-size:8.5px;letter-spacing:.5px;text-transform:uppercase;color:#7d968a;font-weight:700}\n.etime{font-size:9px;color:#5d7568;font-family:ui-monospace,Menlo,monospace}\n.ename{font-size:13px;font-weight:800;color:#eaf5ee;margin-bottom:6px;line-height:1.3}\n.ename.mono{font-family:ui-monospace,Menlo,monospace;color:#ffd166}\n.erow{font-size:10.5px;color:#9fb7a9;margin-bottom:6px}\n.erow b{color:#e4f1e8}\n.ebadges{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:5px}\n.epill{font-size:8.5px;border-radius:99px;padding:2px 8px;font-weight:700;background:#1a2a20;color:#9fc4ad}\n.epill.crit{background:#33150f;color:#ff9a8c}\n.epill.warn{background:#332508;color:#ffc46e}\n.epill.info{background:#101b2a;color:#8ec2ff}\n.echips{display:flex;flex-wrap:wrap;gap:4px}\n.echip{font-family:ui-monospace,Menlo,monospace;font-size:9px;background:#182018;color:#ffd166;border-radius:6px;padding:1.5px 6px}\n.detail{overflow-y:auto;padding:16px;border-left:1px solid #1c2a22;background:#0b100e}\n.detail h3{font-size:10px;letter-spacing:.6px;text-transform:uppercase;color:#6f8a7c;margin:14px 0 8px}\n.dhead{font-size:15px;font-weight:800;color:#eef7f0;margin-bottom:3px}\n.dsub{font-size:11px;color:#8fa89a;margin-bottom:10px}\n.evrow{background:#111a14;border:1px solid #1c2a22;border-radius:8px;padding:8px 10px;margin-bottom:6px}\n.evtop{display:flex;justify-content:space-between;font-size:9.5px;color:#7d968a;margin-bottom:3px;font-family:ui-monospace,Menlo,monospace}\n.evtext{font-size:11.5px;color:#cfe8d8;line-height:1.5}\n.na{color:#5d7568;font-size:11px;font-style:italic;padding:10px 0}\n.b-back{background:#152019;border:1px solid #27392e;color:#cfe8d8;border-radius:8px;padding:5px 12px;font-size:11px;font-weight:700;cursor:pointer;margin-bottom:10px}\n.b-back:hover{background:#1e2c22}\n.b-conv{background:none;border:none;color:#5fb98a;font-size:9.5px;font-weight:700;cursor:pointer;padding:0;text-decoration:underline}\n.b-convtop{background:#152019;border:1px solid #27392e;color:#cfe8d8;border-radius:8px;padding:6px 12px;font-size:11px;font-weight:700;cursor:pointer;margin:6px 0 4px;width:100%;text-align:left}\n.b-convtop:hover{background:#1e2c22}\n.crow2{border-radius:9px;padding:7px 10px;margin-bottom:6px;max-width:88%;background:#111a14;border:1px solid #1c2a22}\n.crow2.me{margin-left:auto;background:#122019;border-color:#24382c}\n.crow2.hl{border-color:#ffd166;box-shadow:0 0 0 1px #ffd166 inset}\n.crow2top{display:flex;justify-content:space-between;gap:10px;font-size:9px;color:#7d968a;margin-bottom:3px;font-family:ui-monospace,Menlo,monospace}\n.crow2text{font-size:11.5px;color:#cfe8d8;line-height:1.5}\n.gate{position:absolute;inset:0;background:#0a0e0c;display:flex;align-items:center;justify-content:center;z-index:20}\n.gate.hidden{display:none}\n.gatebox{background:#121a15;border:1px solid #223227;border-radius:16px;padding:30px 34px;text-align:center;width:280px}\n.gatelock{font-size:26px;margin-bottom:8px}\n.gatetitle{font-size:14px;font-weight:800;color:#eaf5ee;margin-bottom:4px}\n.gatesub{font-size:10.5px;color:#7d968a;margin-bottom:16px}\n.gate-input{width:100%;background:#0c1210;border:1px solid #223227;border-radius:8px;color:#eaf5ee;padding:9px 11px;font-size:13px;margin-bottom:10px;text-align:center}\n.gate-input:focus{outline:none;border-color:#3d6a4d}\n.gate-btn{width:100%;background:#1d5c3c;border:none;color:#eafff2;border-radius:8px;padding:9px;font-size:13px;font-weight:800;cursor:pointer}\n.gate-btn:hover{background:#237049}\n.gate-err{color:#ff8a7a;font-size:10.5px;margin-top:8px;min-height:14px}\n`,\n  render(d2){\n    return `<div class=\"emap\">\n      <header>\n        <h1>🗺️ Mapa de Entidades — Operação via WhatsApp <button class=\"b-refresh\">🔄</button></h1>\n        <div class=\"sub\">Lojas, pedidos e pessoas extraídos e cruzados a partir das mensagens — as mensagens em si são evidência de apoio, não o produto.</div>\n      </header>\n      <div class=\"stats\" data-d2-static>\n        <div class=\"stat\"><b class=\"s-msg\">0</b><span>mensagens</span></div>\n        <div class=\"stat\"><b class=\"s-loja\">0</b><span>lojas/contatos</span></div>\n        <div class=\"stat\"><b class=\"s-ped\">0</b><span>pedidos</span></div>\n        <div class=\"stat\"><b class=\"s-pes\">0</b><span>pessoas</span></div>\n        <div class=\"stat\"><span class=\"s-sync mono\">—</span></div>\n      </div>\n      <div class=\"tabs\" data-d2-static>\n        <button class=\"tab hot\" data-tab=\"lojas\">🏬 Lojas &amp; contatos</button>\n        <button class=\"tab\" data-tab=\"pedidos\">🧾 Pedidos</button>\n        <button class=\"tab\" data-tab=\"pessoas\">👤 Pessoas</button>\n      </div>\n      <div class=\"body\">\n        <div class=\"gridcol\"><div class=\"egrid\" data-d2-static></div></div>\n        <div class=\"detail\" data-d2-static><div class=\"na\">Clique num card pra ver os detalhes e as mensagens que originaram essa entidade.</div></div>\n      </div>\n      <div class=\"gate\" data-d2-static>\n        <div class=\"gatebox\">\n          <div class=\"gatelock\">🔒</div>\n          <div class=\"gatetitle\">Acesso restrito</div>\n          <div class=\"gatesub\">Dados operacionais internos da Granado</div>\n          <input type=\"password\" class=\"gate-input\" placeholder=\"Senha\" />\n          <button class=\"gate-btn\">Entrar</button>\n          <div class=\"gate-err\"></div>\n        </div>\n      </div>\n    </div>`\n  },\n  mounted(d2){\n    const gridEl=d2.$('.egrid'), detailEl=d2.$('.detail')\n    if(!gridEl||!detailEl)return\n    const RULES=[\n      {key:'pedido_travado',label:'Pedido travado',icon:'🧾',cls:'crit',re:/preso\\s*(em|no)?\\s*erp|travad[oa]\\s*no\\s*sap|pedido\\s*preso/i},\n      {key:'acesso_oms',label:'Acesso OMS',icon:'🔑',cls:'warn',re:/senha.*oms|liberar\\s*o\\s*oms|acessar\\s*o\\s*oms|oms.*senha/i},\n      {key:'checkout_sem_estoque',label:'Checkout sem estoque',icon:'📦',cls:'crit',re:/sem\\s*termos?\\s*o\\s*produto|aceito\\s*sem.*produto|indevidamente/i},\n      {key:'entrega_status',label:'EuEntrego inconsistente',icon:'🛵',cls:'warn',re:/eu\\s*entrego|euentrego/i,re2:/errone|errad|entregue|retirad[oa]|extravi/i},\n      {key:'estorno',label:'Estorno/cancelamento',icon:'💳',cls:'info',re:/estorno|reembolso|cancelad[oa]/i},\n      {key:'loja_duplicada',label:'Loja duplicada',icon:'🏬',cls:'warn',re:/duas\\s*lojas|excluir\\s*uma\\s*loja|selecionar\\s*a\\s*loja/i}\n    ]\n    function classify(t){ if(!t)return null; for(const r of RULES){ if(r.re2){ if(r.re.test(t)&&r.re2.test(t)) return r } else if(r.re.test(t)) return r } return null }\n    function extractOrders(t){ if(!t)return []; const m=t.match(/\\b\\d{8,}\\b/g); return m?[...new Set(m)]:[] }\n    function esc(s){return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')}\n    function fmtRel(d){ try{return d2.fmt.relative(new Date(d))}catch(e){return ''} }\n    function inferTipoLoja(chatName,isGroup){\n      if(isGroup) return 'grupo'\n      if(/^Granado |Dark Store/i.test(chatName)) return 'loja'\n      return 'contato'\n    }\n    function inferTipoPessoa(senderName,chatName,fromMe){\n      if(fromMe||senderName==='Granado Oms') return 'time interno'\n      if(/rappi|ifood|mercado livre|pluggto/i.test(chatName)) return 'parceiro (marketplace)'\n      return 'loja/contato'\n    }\n    const S={items:[],lojas:{},pedidos:{},pessoas:{},tab:'lojas',sel:null,lastSync:null}\n    const ds=d2.data()\n    function setText(sel,v){const el=d2.$(sel);if(el)el.textContent=v}\n    function build(){\n      const lojas={},pedidos={},pessoas={}\n      for(const i of S.items){\n        const lk=i.chatName\n        const l=lojas[lk]=lojas[lk]||{key:lk,name:lk,tipo:inferTipoLoja(lk,i.isGroup),msgs:0,sinais:0,cat:{},peds:new Set(),pessoas:new Set(),last:i.createdAt,items:[]}\n        l.msgs++; l.items.push(i); if(new Date(i.createdAt)>new Date(l.last))l.last=i.createdAt\n        if(i.rule){ l.sinais++; l.cat[i.rule.key]=(l.cat[i.rule.key]||0)+1 }\n        if(i.senderName && i.senderName!==lk) l.pessoas.add(i.senderName)\n        for(const o of i.orders){\n          l.peds.add(o)\n          const p=pedidos[o]=pedidos[o]||{key:o,order:o,loja:lk,rule:i.rule,first:i.createdAt,last:i.createdAt,count:0,items:[]}\n          p.count++; p.items.push(i)\n          if(new Date(i.createdAt)>new Date(p.last))p.last=i.createdAt\n          if(new Date(i.createdAt)<new Date(p.first))p.first=i.createdAt\n          if(!p.rule && i.rule) p.rule=i.rule\n        }\n        const sk=i.senderName||lk\n        const ps=pessoas[sk]=pessoas[sk]||{key:sk,name:sk,tipo:inferTipoPessoa(sk,lk,i.fromMe),msgs:0,sinais:0,lojas:new Set(),last:i.createdAt,items:[]}\n        ps.msgs++; ps.items.push(i); ps.lojas.add(lk)\n        if(new Date(i.createdAt)>new Date(ps.last))ps.last=i.createdAt\n        if(i.rule) ps.sinais++\n      }\n      S.lojas=lojas; S.pedidos=pedidos; S.pessoas=pessoas\n    }\n    function catPills(cat){\n      return Object.keys(cat).map(k=>{ const r=RULES.find(x=>x.key===k); if(!r)return ''; return '<span class=\"epill '+r.cls+'\">'+r.icon+' '+cat[k]+'</span>' }).join('')\n    }\n    function renderStats(){\n      setText('.s-msg',S.items.length)\n      setText('.s-loja',Object.keys(S.lojas).length)\n      setText('.s-ped',Object.keys(S.pedidos).length)\n      setText('.s-pes',Object.keys(S.pessoas).length)\n      setText('.s-sync', S.lastSync? ('sync '+fmtRel(S.lastSync)) : '—')\n    }\n    function renderGrid(){\n      let html=''\n      if(S.tab==='lojas'){\n        const arr=Object.values(S.lojas).sort((a,b)=> b.sinais-a.sinais || new Date(b.last)-new Date(a.last))\n        html=arr.map(l=>'<div class=\"ecard'+(S.sel&&S.sel.kind==='loja'&&S.sel.key===l.key?' sel':'')+'\" data-kind=\"loja\" data-key=\"'+esc(l.key)+'\">'\n          +'<div class=\"ehead\"><span class=\"etipo\">'+(l.tipo==='loja'?'🏬 loja':l.tipo==='grupo'?'👥 grupo':'💬 contato')+'</span><span class=\"etime\">'+fmtRel(l.last)+'</span></div>'\n          +'<div class=\"ename\">'+esc(l.name)+'</div>'\n          +'<div class=\"erow\"><b>'+l.msgs+'</b> msgs · <b>'+l.sinais+'</b> sinais'+(l.pessoas.size?' · <b>'+l.pessoas.size+'</b> pessoas':'')+'</div>'\n          +'<div class=\"ebadges\">'+catPills(l.cat)+'</div>'\n          +(l.peds.size?'<div class=\"echips\">'+[...l.peds].map(o=>'<span class=\"echip\">#'+o+'</span>').join('')+'</div>':'')\n          +'</div>').join('')\n      }else if(S.tab==='pedidos'){\n        const arr=Object.values(S.pedidos).sort((a,b)=> new Date(b.last)-new Date(a.last))\n        html=arr.map(p=>'<div class=\"ecard'+(S.sel&&S.sel.kind==='pedido'&&S.sel.key===p.key?' sel':'')+'\" data-kind=\"pedido\" data-key=\"'+esc(p.key)+'\">'\n          +'<div class=\"ehead\"><span class=\"etipo\">🧾 pedido</span><span class=\"etime\">'+fmtRel(p.last)+'</span></div>'\n          +'<div class=\"ename mono\">#'+p.order+'</div>'\n          +'<div class=\"erow\">loja/contexto: <b>'+esc(p.loja)+'</b></div>'\n          +'<div class=\"erow\">mencionado <b>'+p.count+'</b>x</div>'\n          +(p.rule?'<div class=\"ebadges\"><span class=\"epill '+p.rule.cls+'\">'+p.rule.icon+' '+p.rule.label+'</span></div>':'')\n          +'</div>').join('')\n      }else{\n        const arr=Object.values(S.pessoas).sort((a,b)=> b.sinais-a.sinais || new Date(b.last)-new Date(a.last))\n        html=arr.map(ps=>'<div class=\"ecard'+(S.sel&&S.sel.kind==='pessoa'&&S.sel.key===ps.key?' sel':'')+'\" data-kind=\"pessoa\" data-key=\"'+esc(ps.key)+'\">'\n          +'<div class=\"ehead\"><span class=\"etipo\">👤 '+esc(ps.tipo)+'</span><span class=\"etime\">'+fmtRel(ps.last)+'</span></div>'\n          +'<div class=\"ename\">'+esc(ps.name)+'</div>'\n          +'<div class=\"erow\"><b>'+ps.msgs+'</b> msgs em <b>'+ps.lojas.size+'</b> conversa(s)'+(ps.sinais?' · <b>'+ps.sinais+'</b> sinais':'')+'</div>'\n          +'</div>').join('')\n      }\n      gridEl.innerHTML = html || '<div class=\"na\">Nada aqui ainda.</div>'\n    }\n    function fmtDT(d){ try{return d2.fmt.date(new Date(d))+' '+d2.fmt.time(new Date(d))}catch(e){return fmtRel(d)} }\n    function renderConversation(){\n      const chat=S.conv.chat\n      const msgs=S.items.filter(i=>i.chatName===chat).sort((a,b)=> new Date(a.createdAt)-new Date(b.createdAt))\n      let html='<button class=\"b-back\">← Voltar</button>'\n        +'<div class=\"dhead\">'+esc(chat)+'</div><div class=\"dsub\">conversa completa · '+msgs.length+' mensagens</div>'\n        +'<h3>Conversa (ordem cronológica)</h3>'\n        +msgs.map(m=>'<div class=\"crow2'+(m.fromMe?' me':'')+(m.id===S.conv.highlight?' hl':'')+'\"'+(m.id===S.conv.highlight?' data-hl=\"1\"':'')+'>'\n          +'<div class=\"crow2top\"><span>'+(m.fromMe?'time interno':esc(m.senderName||chat))+'</span><span>'+fmtDT(m.createdAt)+'</span></div>'\n          +'<div class=\"crow2text\">'+(esc(m.text)||'<i>(mídia/reação sem texto)</i>')+'</div>'\n        +'</div>').join('')\n      detailEl.innerHTML=html\n      const hl=detailEl.querySelector('[data-hl=\"1\"]')\n      if(hl && hl.scrollIntoView) hl.scrollIntoView({block:'center'})\n    }\n    function renderDetail(){\n      if(S.conv){ renderConversation(); return }\n      if(!S.sel){ detailEl.innerHTML='<div class=\"na\">Clique num card pra ver os detalhes e as mensagens que originaram essa entidade.</div>'; return }\n      let src, title, sub\n      if(S.sel.kind==='loja'){ src=S.lojas[S.sel.key]; title=src.name; sub=src.tipo+' · '+src.msgs+' mensagens · '+src.sinais+' sinais' }\n      else if(S.sel.kind==='pedido'){ src=S.pedidos[S.sel.key]; title='Pedido #'+src.order; sub='origem: '+src.loja+' · mencionado '+src.count+'x' }\n      else { src=S.pessoas[S.sel.key]; title=src.name; sub=src.tipo+' · '+src.msgs+' mensagens' }\n      const items=[...src.items].sort((a,b)=> new Date(b.createdAt)-new Date(a.createdAt))\n      let html='<div class=\"dhead\">'+esc(title)+'</div><div class=\"dsub\">'+esc(sub)+'</div>'\n      if(S.sel.kind==='loja') html+='<button class=\"b-convtop\" data-chat=\"'+esc(title)+'\" data-id=\"\">↗ Ver conversa completa</button>'\n      html+='<h3>Evidências (mensagens)</h3>'\n        +items.map(i=>'<div class=\"evrow\"><div class=\"evtop\"><span>'+esc(i.chatName)+(i.senderName&&i.senderName!==i.chatName?' · '+esc(i.senderName):'')+'</span><span>'+fmtRel(i.createdAt)+'</span></div><div class=\"evtext\">'+(esc(i.text)||'<i>(mídia/reação sem texto)</i>')+'</div>'\n          +'<button class=\"b-conv\" data-chat=\"'+esc(i.chatName)+'\" data-id=\"'+esc(i.id)+'\">↗ ver conversa</button>'\n          +'</div>').join('')\n      detailEl.innerHTML=html\n    }\n    function renderAll(){ renderStats(); renderGrid(); renderDetail() }\n    async function load(){\n      try{\n        await ds.refresh(); await ds.loadAll()\n        const recs=ds.records()\n        S.items=recs.map(r=>{\n          const p=r.payload||{}\n          const text=(p.text&&p.text.message)||''\n          return {id:r._id,chatName:p.chatName||'(sem nome)',senderName:p.senderName||'',fromMe:!!p.fromMe,isGroup:!!p.isGroup,text,rule:classify(text),orders:extractOrders(text),createdAt:r.createdAt}\n        })\n        build(); S.lastSync=new Date(); renderAll()\n      }catch(e){ d2.log('emap load error', e) }\n    }\n    d2.on('.tab','click',e=>{\n      const b=e.target.closest('.tab'); if(!b)return\n      S.tab=b.getAttribute('data-tab'); S.sel=null\n      d2.$$('.tab').forEach(x=>x.classList.toggle('hot',x===b))\n      renderGrid(); renderDetail()\n    })\n    d2.on('.ecard','click',e=>{\n      const c=e.target.closest('.ecard'); if(!c)return\n      S.conv=null\n      S.sel={kind:c.getAttribute('data-kind'),key:c.getAttribute('data-key')}\n      renderGrid(); renderDetail()\n    })\n    d2.on('.b-conv','click',e=>{\n      const b=e.target.closest('.b-conv'); if(!b)return\n      S.conv={chat:b.getAttribute('data-chat'),highlight:b.getAttribute('data-id')}\n      renderDetail()\n    })\n    d2.on('.b-convtop','click',e=>{\n      const b=e.target.closest('.b-convtop'); if(!b)return\n      S.conv={chat:b.getAttribute('data-chat'),highlight:null}\n      renderDetail()\n    })\n    d2.on('.b-back','click',()=>{ S.conv=null; renderDetail() })\n    d2.on('.b-refresh','click',()=>{load()})\n    const GATE_KEY='wamon_gate_ok_v1'\n    const gateEl=d2.$('.gate')\n    function start(){\n      load()\n      let acc=0,prev=null\n      d2.raf(t=>{ if(prev==null)prev=t; const dt=(t-prev)/1000; prev=t; acc+=dt; if(acc>20){acc=0;load()} })\n    }\n    function tryUnlock(pw){\n      if(pw==='Granado@2026@data2'){\n        try{localStorage.setItem(GATE_KEY,'1')}catch(e){}\n        if(gateEl) gateEl.classList.add('hidden')\n        start()\n        return true\n      }\n      return false\n    }\n    let unlocked=false\n    try{ unlocked = localStorage.getItem(GATE_KEY)==='1' }catch(e){}\n    if(unlocked){ if(gateEl) gateEl.classList.add('hidden'); start() }\n    d2.on('.gate-btn','click',()=>{\n      const inp=d2.$('.gate-input')\n      if(!tryUnlock(inp?inp.value:'')){\n        const err=d2.$('.gate-err'); if(err) err.textContent='Senha incorreta'\n      }\n    })\n    d2.on('.gate-input','keydown',e=>{ if(e.key==='Enter'){ const b=d2.$('.gate-btn'); if(b) b.click() } })\n  }\n}","at":"2026-08-20T19:52:25.047Z"}}},{"_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":[]}},{"reference":"ComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a8752e1d246e1e5023eb4fb","component":"data2-core-primitives@Artboard","system":"6a62e4640613f70fa449ff5d","displayName":"Monitoramento WhatsApp — Operação","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Monitoramento WhatsApp — Operação"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"position":{"component":"data2-core-types@Position","params":{"x":0,"y":0}}},"reference":"9dxUjzCL_iZ90xsIaVfBU","deleteMetadata":{}},{"_id":"ca5b5550ca029528b35c2bfa","parent":"6a8752e1d246e1e5023eb4fb","component":"granado-app@granado-wa-monitor","system":"6a62e4640613f70fa449ff5d","displayName":"WaMonitor","params":{"dataset":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"Z3YyCepyaX9AHUp4-gAfm"}},"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}}}},"reference":"39vGw5BvqN7zdrLcaB8Ye","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":"6a8752f20fc788b826b97b40","displayName":"Monitoramento WhatsApp — Granado","reference":"jp0lEkdoAnHCSQ434ln2N","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"wa-monitor"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"9dxUjzCL_iZ90xsIaVfBU"}}},"system":"6a62e4640613f70fa449ff5d","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a860b013cbcb6516341c8e6","component":"data2-core@DataSet","system":"6a62e4640613f70fa449ff5d","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"EXorpJVn2h6_29s0gY-tx"}},"autoSelect":{"component":"data2-core-primitives@Boolean","params":{"content":true}},"pagination":{"size":20}},"reference":"Z3YyCepyaX9AHUp4-gAfm","deleteMetadata":{}},{"_id":"6a860af73cbcb6516341c8e5","component":"data2-core@Data2TableDataSource","system":"6a62e4640613f70fa449ff5d","params":{"table":"EXorpJVn2h6_29s0gY-tx","multi":["create"],"schema":[{"component":"data2-core-types@Field","params":{"title":"payload","key":"payload","component":"data2-core-primitives@Object"}}]},"reference":"EXorpJVn2h6_29s0gY-tx","deleteMetadata":{}}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}