{"context":{"domain":"bluma"},"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":"67f03a3ff198cfb1104dca5c","name":"bluma","domain":"bluma","visibility":"public","settings":{"defaultAccessPolicy":"private"},"updatedAt":"2026-08-17T14:31:32.192Z","createdAt":"2025-04-04T19:59:59.059Z"}]}},{"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":"6a2bfcb05623aa7b750c6919","component":"data2-core-types@Component","system":"67f03a3ff198cfb1104dca5c","params":{"component":"pqqVxpqksbJ3DK7Niw8QE","package":"bluma","definition":{"params":{"expression":{"params":{"string":{"params":{"string":{"params":{"reference":"font"},"component":"data2-core-types@Reference"}},"component":"data2-core-functions@toLowerCase"}},"component":"data2-core-functions@StringTrim"},"cases":[{"component":"data2-core-flow@Case","params":{"expression":{"component":"data2-core-primitives@String","params":{"content":"helvetica now text"}},"value":{"params":{"family":{"component":"data2-core-primitives@String","params":{"content":"helvetica now text"}},"faces":[{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"LSPtULRxM-AL9VzDiL6rm"}},"style":"normal","weight":"100","display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"100 - thin - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"N1qt2FqsRn3VfLL86AwFk"}},"style":{"component":"data2-core-primitives@String","params":{"content":"italic"}},"weight":"100","display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"100 - thin - italic"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"DbGaNP_P5Lz2vDCarFVoL"}},"style":{"component":"data2-core-primitives@String","params":{"content":"normal"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"200"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"200 - extra light - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"iKbhQ1Wg8nKBG9ewbKIxu"}},"style":{"component":"data2-core-primitives@String","params":{"content":"normal"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"300"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"300 - light - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"bCNaNA8xg7cWC7ST0qaF1"}},"style":{"component":"data2-core-primitives@String","params":{"content":"italic"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"300"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"300 - light - italic"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"LXGb4M4N3UslZ0bqvTKxn"}},"style":{"component":"data2-core-primitives@String","params":{"content":"normal"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"400"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"400 - regular - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"hN1gO59JRE0i8ElfAd5M9"}},"style":{"component":"data2-core-primitives@String","params":{"content":"normal"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"500"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"500 - medium - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"8z0f2igW22oIfF8r5BS0M"}},"style":{"component":"data2-core-primitives@String","params":{"content":"italic"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"500"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"500 - medium - italic"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"GrwBbKRM3fM_94VXLTWUK"}},"style":{"component":"data2-core-primitives@String","params":{"content":"normal"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"700"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"700 - bold - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"5cPbUnCEk5q7JHr6Veoh6"}},"style":{"component":"data2-core-primitives@String","params":{"content":"italic"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"700"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"700 - bold - italic"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"wKibyogz_GxcUmUzZwj4F"}},"style":{"component":"data2-core-primitives@String","params":{"content":"normal"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"900"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"900 - black - normal"},{"params":{"fields":{"format":"opentype","src":{"component":"data2-core-types@FileComponentUrlReference","params":{"reference":"RWFAtqv7EXqkgKhUikyJf"}},"style":{"component":"data2-core-primitives@String","params":{"content":"italic"}},"weight":{"component":"data2-core-primitives@String","params":{"content":"900"}},"display":"swap"}},"component":"data2-core-types@FieldSet","displayName":"900 - black - italic"}]},"component":"data2-core-web@Font","displayName":""}}}]},"component":"data2-core-flow@Switch"}}},{"_id":"6a45222cacf501ac7e7c2d23","component":"data2-core-types@Component","system":"67f03a3ff198cfb1104dca5c","params":{"extends":"data2-core-primitives@Block","component":"claude-report-view","package":"bluma","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  .wrap{height:100%;overflow:auto;box-sizing:border-box;padding:28px 32px;font-family:'Helvetica Now Text',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#202021;background:#fffaf3}\n  .hd{margin-bottom:16px}\n  .ttl{font-size:24px;font-weight:800;letter-spacing:-0.02em;color:#01373d}\n  .sub{font-size:13px;color:#8f8d91;margin-top:3px}\n  .muted{color:#8f8d91}\n  .tabs{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}\n  .ptab{padding:7px 14px;border-radius:999px;border:1px solid #efe6d9;background:#fff;font-size:12.5px;font-weight:600;color:#8f8d91;cursor:pointer;transition:all .12s}\n  .ptab:hover{border-color:#9fd0cd}\n  .ptab.active{background:#01373d;color:#fff;border-color:#01373d}\n  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px}\n  .kpi{background:#fff;border:1px solid #efe6d9;border-radius:14px;padding:16px 18px;box-shadow:0 1px 2px rgba(1,55,61,.04)}\n  .kpi-v{font-size:26px;font-weight:800;letter-spacing:-0.02em;color:#01373d}\n  .kpi-l{font-size:11.5px;color:#8f8d91;margin-top:4px;text-transform:uppercase;letter-spacing:.04em}\n  .sec{background:#fff;border:1px solid #efe6d9;border-radius:16px;padding:20px 22px;margin-bottom:20px;box-shadow:0 1px 2px rgba(1,55,61,.04)}\n  .sec-t{font-size:15px;font-weight:700;margin-bottom:6px;color:#01373d}\n  .sec-h{font-size:12px;color:#8f8d91;margin-bottom:16px}\n  .rcards{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}\n  .rcard{border:1px solid #efe6d9;border-radius:12px;padding:16px}\n  .rcard-head{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px}\n  .dot{width:10px;height:10px;border-radius:50%;display:inline-block}\n  .rrate{font-size:32px;font-weight:800;margin:6px 0 10px}\n  .rbar{height:10px;background:#eee7db;border-radius:6px;overflow:hidden}\n  .rbar-fill{height:100%;border-radius:6px}\n  .rnums{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;margin-top:10px}\n  .rusers{font-size:12px;margin-top:8px;border-top:1px dashed #ece2d3;padding-top:8px}\n  .mgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}\n  .mcol-head{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px}\n  .mbase{font-size:12px;margin:2px 0 12px}\n  .mrow{display:grid;grid-template-columns:160px 1fr 92px;align-items:center;gap:10px;margin-bottom:8px;padding:3px 6px;margin-left:-6px;margin-right:-6px;border-radius:7px;transition:background .12s,box-shadow .12s;cursor:default}\n  .mlabel{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n  .mtrack{height:16px;background:#eee7db;border-radius:5px;overflow:hidden}\n  .mfill{height:100%;border-radius:5px;min-width:2px}\n  .mval{font-size:12px;font-weight:700;text-align:right}\n  .mval small{font-weight:500;color:#8f8d91}\n  .mextra{margin-top:12px;border-top:1px dashed #ece2d3;padding-top:10px;display:flex;flex-direction:column;gap:4px}\n  .xrow{display:flex;justify-content:space-between;align-items:center;font-size:12px;padding:4px 6px;margin-left:-6px;margin-right:-6px;border-radius:7px;transition:background .12s,box-shadow .12s;cursor:default}\n  .xrow .xv{font-weight:700}\n  .xrow .xv small{font-weight:500;color:#8f8d91}\n  [data-motivo].hl{background:#d4e8e6;box-shadow:0 0 0 1px #9fd0cd inset}\n  [data-motivo].hl .mlabel{font-weight:700;color:#01373d}\n  .tip{position:fixed;z-index:9999;background:#202021;color:#fff;font-size:12px;line-height:1.3;padding:6px 9px;border-radius:6px;pointer-events:none;box-shadow:0 6px 16px rgba(32,32,33,.22);display:none;max-width:300px}\n  .how{margin:0;padding-left:18px;font-size:13px;line-height:1.7}\n  .how b{color:#202021}\n  .src{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:4px}\n  .srcbox{border:1px solid #efe6d9;border-radius:12px;padding:14px 16px;font-size:12.5px;line-height:1.6;background:#fffdf9}\n  .srcbox .h{font-weight:700;margin-bottom:4px;color:#01373d}\n  .ft{font-size:11.5px;line-height:1.6;margin-top:4px}\n  code{background:#f0e7d9;padding:1px 5px;border-radius:4px;font-size:11px}\n  @media(max-width:820px){.kpis{grid-template-columns:repeat(2,1fr)}.mgrid,.rcards,.src{grid-template-columns:1fr}.mrow{grid-template-columns:130px 1fr 84px}}\n  `,\n  render(d2){\n    const R = d2.data('retention');\n    const M = d2.data('motivos');\n    if(!R || !M) return `<div class=\"wrap\"><p class=\"muted\">Datasets não vinculados.</p></div>`;\n    if(R.loading || M.loading) return `<div class=\"wrap\"><p class=\"muted\">Carregando…</p></div>`;\n    const fmt = (n)=> (Number(n)||0).toLocaleString('pt-BR');\n    const pct = (n)=> (Number(n)||0).toFixed(1).replace('.',',')+'%';\n    const roleColor = (role)=> role==='CLIENTE' ? '#01373d' : '#ed7522';\n    const MES = ['jan','fev','mar','abr','mai','jun','jul','ago','set','out','nov','dez'];\n    const monthLabel = (p)=>{ if(p==='global') return 'Geral'; const a=String(p).split('-'); const y=a[0], m=parseInt(a[1],10); return (MES[m-1]||a[1])+'/'+y; };\n    const allRet = R.records();\n    const allMot = M.records();\n    const months = [...new Set(allRet.map(r=>r.period).filter(p=>p && p!=='global'))].sort().reverse();\n    const ordered = ['global', ...months];\n    const curMonth = months.length ? months[0] : null;\n    let sel = d2.state.period;\n    if(!sel || ordered.indexOf(sel)<0) sel = 'global';\n    const ret = allRet.filter(r=>r.period===sel).slice().sort((a,b)=>(Number(a.ordem)||0)-(Number(b.ordem)||0));\n    const mot = allMot.filter(m=>m.period===sel);\n    const genRaw = (allRet.find(r=>r.generated_at)||{}).generated_at || null;\n    const genDateTxt = genRaw ? new Date(genRaw).toLocaleDateString('pt-BR') : '—';\n    const genTxt = genRaw ? new Date(genRaw).toLocaleString('pt-BR',{day:'2-digit',month:'2-digit',year:'numeric',hour:'2-digit',minute:'2-digit'}) : '—';\n    const perStart = (allRet.find(r=>r.period_start)||{}).period_start || null;\n    const perStartTxt = perStart ? new Date(perStart).toLocaleDateString('pt-BR') : null;\n    const totTotal = ret.reduce((s,r)=>s+(Number(r.total)||0),0);\n    const totRet = ret.reduce((s,r)=>s+(Number(r.retained)||0),0);\n    const totTr = ret.reduce((s,r)=>s+(Number(r.transferred)||0),0);\n    const overall = totTotal ? (totRet/totTotal*100) : 0;\n    const tabs = ordered.map(p=>{\n      const isCur = p===curMonth;\n      return `<div class=\"ptab ${p===sel?'active':''}\" data-period=\"${p}\">${monthLabel(p)}${isCur?' · parcial':''}</div>`;\n    }).join('');\n    let scopeTxt;\n    if(sel==='global'){ scopeTxt = perStartTxt ? `base analisada: ${perStartTxt} até ${genDateTxt}` : 'toda a base'; }\n    else { scopeTxt = `período: ${monthLabel(sel)}${sel===curMonth?' (mês em curso, parcial)':''}`; }\n    const retCards = ret.map(r=>{\n      const rate = Number(r.retention_rate)||0;\n      const c = roleColor(r.role);\n      const ut = Number(r.users_total)||0, ur = Number(r.users_retained)||0;\n      const urate = ut ? (ur/ut*100) : 0;\n      return `<div class=\"rcard\">\n        <div class=\"rcard-head\"><span class=\"dot\" style=\"background:${c}\"></span><span>${r.role}</span></div>\n        <div class=\"rrate\" style=\"color:${c}\">${pct(rate)}</div>\n        <div class=\"rbar\"><div class=\"rbar-fill\" style=\"width:${Math.max(0,Math.min(100,rate))}%;background:${c}\"></div></div>\n        <div class=\"rnums\"><span><b>${fmt(r.retained)}</b> retidos</span><span><b>${fmt(r.transferred)}</b> transferidos</span><span class=\"muted\">de ${fmt(r.total)} atendimentos</span></div>\n        <div class=\"rusers muted\">Pessoas distintas: <b>${fmt(ur)}</b> retidas de ${fmt(ut)} (${pct(urate)})</div>\n      </div>`;\n    }).join('');\n    const roles = ['CLIENTE','ESPECIALISTA'];\n    const motCols = roles.map(role=>{\n      const all = mot.filter(m=>m.role===role);\n      const rows = all.filter(m=>m.kind==='motivo').slice().sort((a,b)=>(Number(b.sessions)||0)-(Number(a.sessions)||0));\n      const saud = all.find(m=>m.kind==='saudacao');\n      const sem = all.find(m=>m.kind==='sem_assunto');\n      const base = all.reduce((s,m)=>s+(Number(m.sessions)||0),0) || 1;\n      const max = rows.reduce((mx,r)=>Math.max(mx,Number(r.sessions)||0),0)||1;\n      const c = roleColor(role);\n      const pb = (n)=> pct(base ? (Number(n)/base*100) : 0);\n      const bars = rows.map(r=>{\n        const s = Number(r.sessions)||0;\n        const w = Math.max(2, s/max*100);\n        const lbl = String(r.motivo_label||'').replace(/\"/g,'&quot;');\n        return `<div class=\"mrow\" data-motivo=\"${r.motivo_key}\" data-label=\"${lbl}\">\n          <div class=\"mlabel\">${r.motivo_label}</div>\n          <div class=\"mtrack\"><div class=\"mfill\" style=\"width:${w}%;background:${c}\"></div></div>\n          <div class=\"mval\">${fmt(s)} <small>${pb(s)}</small></div>\n        </div>`;\n      }).join('');\n      const extra = (kind,label,rec)=>{\n        const s = Number((rec||{}).sessions)||0;\n        return `<div class=\"xrow\" data-motivo=\"${kind}\" data-label=\"${label}\"><span>${label}</span><span class=\"xv\">${fmt(s)} <small>${pb(s)}</small></span></div>`;\n      };\n      return `<div class=\"mcol\">\n        <div class=\"mcol-head\"><span class=\"dot\" style=\"background:${c}\"></span>${role}</div>\n        <div class=\"mbase muted\">Base: <b>${fmt(base)}</b> atendimentos retidos</div>\n        <div class=\"mrows\">${bars || '<p class=\"muted\">Sem motivos identificados.</p>'}</div>\n        <div class=\"mextra\">\n          ${extra('boas_vindas','Somente saudação', saud)}\n          ${extra('sem_assunto','Sem assunto identificado (consulta livre / FAQ)', sem)}\n        </div>\n      </div>`;\n    }).join('');\n    return `<div class=\"wrap\">\n      <header class=\"hd\">\n        <div class=\"ttl\">Retenção de Atendimentos pelo Bot</div>\n        <div class=\"sub\">Bluma · assistente Bella · atualizado em ${genTxt} · ${scopeTxt}</div>\n      </header>\n      <div class=\"tabs\">${tabs}</div>\n      <div class=\"kpis\">\n        <div class=\"kpi\"><div class=\"kpi-v\">${pct(overall)}</div><div class=\"kpi-l\">Retenção global</div></div>\n        <div class=\"kpi\"><div class=\"kpi-v\">${fmt(totTotal)}</div><div class=\"kpi-l\">Atendimentos</div></div>\n        <div class=\"kpi\"><div class=\"kpi-v\">${fmt(totRet)}</div><div class=\"kpi-l\">Retidos pelo bot</div></div>\n        <div class=\"kpi\"><div class=\"kpi-v\">${fmt(totTr)}</div><div class=\"kpi-l\">Transferidos</div></div>\n      </div>\n      <section class=\"sec\">\n        <div class=\"sec-t\">Taxa de retenção por perfil</div>\n        <div class=\"sec-h\">Contada por <b>atendimento</b> (cada conversa registrada). Abaixo de cada card, o mesmo olhar por <b>pessoas distintas</b>.</div>\n        <div class=\"rcards\">${retCards}</div>\n      </section>\n      <section class=\"sec\">\n        <div class=\"sec-t\">Motivo do contato — por atendimento retido</div>\n        <div class=\"sec-h\">Mesma unidade da retenção (<b>atendimento</b>), com <b>1 assunto principal por atendimento</b>. Motivos + \"somente saudação\" + \"sem assunto\" somam os <b>atendimentos retidos</b> do período.</div>\n        <div class=\"mgrid\">${motCols}</div>\n      </section>\n      <section class=\"sec\">\n        <div class=\"sec-t\">Como estes números foram obtidos</div>\n        <div class=\"src\">\n          <div class=\"srcbox\"><div class=\"h\">1 · Retenção</div>Fonte: tabela de <b>sessões</b> (1 registro por atendimento). Um atendimento é <b>retido</b> quando o bot resolveu sem transbordar (campo <code>transfer</code>). Taxa = <i>retidos ÷ total</i>, por perfil.</div>\n          <div class=\"srcbox\"><div class=\"h\">2 · Motivo</div>Fonte: tabela de <b>mensagens</b> da conversa (coluna <code>resource</code>, o assunto que a Bella tratou em cada resposta), cruzada com a tabela de sessões pelo <b>id da sessão</b> — a mesma sessão define se o atendimento foi retido (<code>transfer</code>). Para cada atendimento retido atribuímos <b>um assunto principal</b>: o <b>último assunto</b> acionado na conversa (ignorando saudação e mensagens de transferência). O seletor de período no topo recorta tudo por mês (últimos 3 + mês em curso) ou geral.</div>\n        </div>\n        <ol class=\"how\" style=\"margin-top:14px\">\n          <li>Tudo por <b>agregação direta na base</b> (server-side), sobre toda a população — não é amostragem.</li>\n          <li>Retenção e motivo são cruzados pelo <b>id da sessão</b>, então falam sempre da <b>mesma conversa</b>: o assunto vem das mensagens, mas quem decide se foi retido é sempre a tabela de sessões (<code>transfer</code>).</li>\n          <li>\"Somente saudação\" e \"sem assunto identificado\" (retidos sem acionar um assunto específico — ex.: FAQ/consulta livre, ou conversas sem mensagem rastreável) fecham a base de retidos.</li>\n          <li>O <b>mês em curso é parcial</b> (ainda não fechou) — números tendem a crescer até o fim do mês.</li>\n        </ol>\n      </section>\n      <footer class=\"ft muted\">\n        <b>Leitura:</b> boa parte dos atendimentos retidos é resolvida <b>sem acionar um assunto específico</b> — por isso \"sem assunto identificado\" costuma ser grande. <b>Escopo global:</b> ${perStartTxt?`base de ${perStartTxt} até ${genDateTxt}`:'todo o histórico'}; os recortes mensais cobrem os últimos 3 meses e o mês em curso.\n      </footer>\n    </div>`;\n  },\n  mounted(d2){\n    let tip=null, cur=null;\n    const ensureTip=()=>{ if(!tip){ tip=document.createElement('div'); tip.className='tip'; d2.root.appendChild(tip); } return tip; };\n    const setHl=(key,on)=>{ if(!key) return; d2.$$('[data-motivo]').forEach((x)=>{ if(x.getAttribute('data-motivo')===key) x.classList.toggle('hl',on); }); };\n    const place=(e)=>{ if(!tip) return; tip.style.left=(e.clientX+14)+'px'; tip.style.top=(e.clientY+14)+'px'; };\n    d2.on('.ptab','click',(e,el)=>{ d2.setState({period: el.getAttribute('data-period')}); });\n    d2.on('[data-motivo]','mouseover',(e,el)=>{\n      const key=el.getAttribute('data-motivo');\n      if(key!==cur){ setHl(cur,false); setHl(key,true); cur=key; }\n      const t=ensureTip(); t.textContent=el.getAttribute('data-label')||''; t.style.display='block'; place(e);\n    });\n    d2.on('[data-motivo]','mousemove',(e)=>{ if(tip && tip.style.display==='block') place(e); });\n    d2.on('[data-motivo]','mouseout',(e)=>{\n      const to=e.relatedTarget;\n      if(to && to.closest && to.closest('[data-motivo]')) return;\n      setHl(cur,false); cur=null;\n      if(tip) tip.style.display='none';\n    });\n  }\n}"}},"retention":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"retention"}}}},"motivos":{"component":"data2-core-types@Reference","params":{"reference":{"component":"data2-core-primitives@String","params":{"content":"motivos"}}}}}}}},"__d2PrevCode":{"code":"export default {\n  css: `\n  .wrap{height:100%;overflow:auto;box-sizing:border-box;padding:28px 32px;font-family:'Helvetica Now Text',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#202021;background:#fffaf3}\n  .hd{margin-bottom:16px}\n  .ttl{font-size:24px;font-weight:800;letter-spacing:-0.02em;color:#01373d}\n  .sub{font-size:13px;color:#8f8d91;margin-top:3px}\n  .muted{color:#8f8d91}\n  .tabs{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}\n  .ptab{padding:7px 14px;border-radius:999px;border:1px solid #efe6d9;background:#fff;font-size:12.5px;font-weight:600;color:#8f8d91;cursor:pointer;transition:all .12s}\n  .ptab:hover{border-color:#9fd0cd}\n  .ptab.active{background:#01373d;color:#fff;border-color:#01373d}\n  .kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px}\n  .kpi{background:#fff;border:1px solid #efe6d9;border-radius:14px;padding:16px 18px;box-shadow:0 1px 2px rgba(1,55,61,.04)}\n  .kpi-v{font-size:26px;font-weight:800;letter-spacing:-0.02em;color:#01373d}\n  .kpi-l{font-size:11.5px;color:#8f8d91;margin-top:4px;text-transform:uppercase;letter-spacing:.04em}\n  .sec{background:#fff;border:1px solid #efe6d9;border-radius:16px;padding:20px 22px;margin-bottom:20px;box-shadow:0 1px 2px rgba(1,55,61,.04)}\n  .sec-t{font-size:15px;font-weight:700;margin-bottom:6px;color:#01373d}\n  .sec-h{font-size:12px;color:#8f8d91;margin-bottom:16px}\n  .rcards{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}\n  .rcard{border:1px solid #efe6d9;border-radius:12px;padding:16px}\n  .rcard-head{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px}\n  .dot{width:10px;height:10px;border-radius:50%;display:inline-block}\n  .rrate{font-size:32px;font-weight:800;margin:6px 0 10px}\n  .rbar{height:10px;background:#eee7db;border-radius:6px;overflow:hidden}\n  .rbar-fill{height:100%;border-radius:6px}\n  .rnums{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;margin-top:10px}\n  .rusers{font-size:12px;margin-top:8px;border-top:1px dashed #ece2d3;padding-top:8px}\n  .mgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}\n  .mcol-head{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px}\n  .mbase{font-size:12px;margin:2px 0 12px}\n  .mrow{display:grid;grid-template-columns:160px 1fr 92px;align-items:center;gap:10px;margin-bottom:8px;padding:3px 6px;margin-left:-6px;margin-right:-6px;border-radius:7px;transition:background .12s,box-shadow .12s;cursor:default}\n  .mlabel{font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n  .mtrack{height:16px;background:#eee7db;border-radius:5px;overflow:hidden}\n  .mfill{height:100%;border-radius:5px;min-width:2px}\n  .mval{font-size:12px;font-weight:700;text-align:right}\n  .mval small{font-weight:500;color:#8f8d91}\n  .mextra{margin-top:12px;border-top:1px dashed #ece2d3;padding-top:10px;display:flex;flex-direction:column;gap:4px}\n  .xrow{display:flex;justify-content:space-between;align-items:center;font-size:12px;padding:4px 6px;margin-left:-6px;margin-right:-6px;border-radius:7px;transition:background .12s,box-shadow .12s;cursor:default}\n  .xrow .xv{font-weight:700}\n  .xrow .xv small{font-weight:500;color:#8f8d91}\n  [data-motivo].hl{background:#d4e8e6;box-shadow:0 0 0 1px #9fd0cd inset}\n  [data-motivo].hl .mlabel{font-weight:700;color:#01373d}\n  .tip{position:fixed;z-index:9999;background:#202021;color:#fff;font-size:12px;line-height:1.3;padding:6px 9px;border-radius:6px;pointer-events:none;box-shadow:0 6px 16px rgba(32,32,33,.22);display:none;max-width:300px}\n  .how{margin:0;padding-left:18px;font-size:13px;line-height:1.7}\n  .how b{color:#202021}\n  .src{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:4px}\n  .srcbox{border:1px solid #efe6d9;border-radius:12px;padding:14px 16px;font-size:12.5px;line-height:1.6;background:#fffdf9}\n  .srcbox .h{font-weight:700;margin-bottom:4px;color:#01373d}\n  .ft{font-size:11.5px;line-height:1.6;margin-top:4px}\n  code{background:#f0e7d9;padding:1px 5px;border-radius:4px;font-size:11px}\n  @media(max-width:820px){.kpis{grid-template-columns:repeat(2,1fr)}.mgrid,.rcards,.src{grid-template-columns:1fr}.mrow{grid-template-columns:130px 1fr 84px}}\n  `,\n  render(d2){\n    const R = d2.data('retention');\n    const M = d2.data('motivos');\n    if(!R || !M) return `<div class=\"wrap\"><p class=\"muted\">Datasets não vinculados.</p></div>`;\n    if(R.loading || M.loading) return `<div class=\"wrap\"><p class=\"muted\">Carregando…</p></div>`;\n    const fmt = (n)=> (Number(n)||0).toLocaleString('pt-BR');\n    const pct = (n)=> (Number(n)||0).toFixed(1).replace('.',',')+'%';\n    const roleColor = (role)=> role==='CLIENTE' ? '#01373d' : '#ed7522';\n    const MES = ['jan','fev','mar','abr','mai','jun','jul','ago','set','out','nov','dez'];\n    const monthLabel = (p)=>{ if(p==='global') return 'Geral'; const a=String(p).split('-'); const y=a[0], m=parseInt(a[1],10); return (MES[m-1]||a[1])+'/'+y; };\n    const allRet = R.records();\n    const allMot = M.records();\n    const months = [...new Set(allRet.map(r=>r.period).filter(p=>p && p!=='global'))].sort().reverse();\n    const ordered = ['global', ...months];\n    const curMonth = months.length ? months[0] : null;\n    let sel = d2.state.period;\n    if(!sel || ordered.indexOf(sel)<0) sel = 'global';\n    const ret = allRet.filter(r=>r.period===sel).slice().sort((a,b)=>(Number(a.ordem)||0)-(Number(b.ordem)||0));\n    const mot = allMot.filter(m=>m.period===sel);\n    const genRaw = (allRet.find(r=>r.generated_at)||{}).generated_at || null;\n    const genDateTxt = genRaw ? new Date(genRaw).toLocaleDateString('pt-BR') : '—';\n    const genTxt = genRaw ? new Date(genRaw).toLocaleString('pt-BR',{day:'2-digit',month:'2-digit',year:'numeric',hour:'2-digit',minute:'2-digit'}) : '—';\n    const perStart = (allRet.find(r=>r.period_start)||{}).period_start || null;\n    const perStartTxt = perStart ? new Date(perStart).toLocaleDateString('pt-BR') : null;\n    const totTotal = ret.reduce((s,r)=>s+(Number(r.total)||0),0);\n    const totRet = ret.reduce((s,r)=>s+(Number(r.retained)||0),0);\n    const totTr = ret.reduce((s,r)=>s+(Number(r.transferred)||0),0);\n    const overall = totTotal ? (totRet/totTotal*100) : 0;\n    const tabs = ordered.map(p=>{\n      const isCur = p===curMonth;\n      return `<div class=\"ptab ${p===sel?'active':''}\" data-period=\"${p}\">${monthLabel(p)}${isCur?' · parcial':''}</div>`;\n    }).join('');\n    let scopeTxt;\n    if(sel==='global'){ scopeTxt = perStartTxt ? `base analisada: ${perStartTxt} até ${genDateTxt}` : 'toda a base'; }\n    else { scopeTxt = `período: ${monthLabel(sel)}${sel===curMonth?' (mês em curso, parcial)':''}`; }\n    const retCards = ret.map(r=>{\n      const rate = Number(r.retention_rate)||0;\n      const c = roleColor(r.role);\n      const ut = Number(r.users_total)||0, ur = Number(r.users_retained)||0;\n      const urate = ut ? (ur/ut*100) : 0;\n      return `<div class=\"rcard\">\n        <div class=\"rcard-head\"><span class=\"dot\" style=\"background:${c}\"></span><span>${r.role}</span></div>\n        <div class=\"rrate\" style=\"color:${c}\">${pct(rate)}</div>\n        <div class=\"rbar\"><div class=\"rbar-fill\" style=\"width:${Math.max(0,Math.min(100,rate))}%;background:${c}\"></div></div>\n        <div class=\"rnums\"><span><b>${fmt(r.retained)}</b> retidos</span><span><b>${fmt(r.transferred)}</b> transferidos</span><span class=\"muted\">de ${fmt(r.total)} atendimentos</span></div>\n        <div class=\"rusers muted\">Pessoas distintas: <b>${fmt(ur)}</b> retidas de ${fmt(ut)} (${pct(urate)})</div>\n      </div>`;\n    }).join('');\n    const roles = ['CLIENTE','ESPECIALISTA'];\n    const motCols = roles.map(role=>{\n      const all = mot.filter(m=>m.role===role);\n      const rows = all.filter(m=>m.kind==='motivo').slice().sort((a,b)=>(Number(b.sessions)||0)-(Number(a.sessions)||0));\n      const saud = all.find(m=>m.kind==='saudacao');\n      const sem = all.find(m=>m.kind==='sem_assunto');\n      const base = all.reduce((s,m)=>s+(Number(m.sessions)||0),0) || 1;\n      const max = rows.reduce((mx,r)=>Math.max(mx,Number(r.sessions)||0),0)||1;\n      const c = roleColor(role);\n      const pb = (n)=> pct(base ? (Number(n)/base*100) : 0);\n      const bars = rows.map(r=>{\n        const s = Number(r.sessions)||0;\n        const w = Math.max(2, s/max*100);\n        const lbl = String(r.motivo_label||'').replace(/\"/g,'&quot;');\n        return `<div class=\"mrow\" data-motivo=\"${r.motivo_key}\" data-label=\"${lbl}\">\n          <div class=\"mlabel\">${r.motivo_label}</div>\n          <div class=\"mtrack\"><div class=\"mfill\" style=\"width:${w}%;background:${c}\"></div></div>\n          <div class=\"mval\">${fmt(s)} <small>${pb(s)}</small></div>\n        </div>`;\n      }).join('');\n      const extra = (kind,label,rec)=>{\n        const s = Number((rec||{}).sessions)||0;\n        return `<div class=\"xrow\" data-motivo=\"${kind}\" data-label=\"${label}\"><span>${label}</span><span class=\"xv\">${fmt(s)} <small>${pb(s)}</small></span></div>`;\n      };\n      return `<div class=\"mcol\">\n        <div class=\"mcol-head\"><span class=\"dot\" style=\"background:${c}\"></span>${role}</div>\n        <div class=\"mbase muted\">Base: <b>${fmt(base)}</b> atendimentos retidos</div>\n        <div class=\"mrows\">${bars || '<p class=\"muted\">Sem motivos identificados.</p>'}</div>\n        <div class=\"mextra\">\n          ${extra('boas_vindas','Somente saudação', saud)}\n          ${extra('sem_assunto','Sem assunto identificado (consulta livre / FAQ)', sem)}\n        </div>\n      </div>`;\n    }).join('');\n    return `<div class=\"wrap\">\n      <header class=\"hd\">\n        <div class=\"ttl\">Retenção de Atendimentos pelo Bot</div>\n        <div class=\"sub\">Bluma · assistente Bella · atualizado em ${genTxt} · ${scopeTxt}</div>\n      </header>\n      <div class=\"tabs\">${tabs}</div>\n      <div class=\"kpis\">\n        <div class=\"kpi\"><div class=\"kpi-v\">${pct(overall)}</div><div class=\"kpi-l\">Retenção global</div></div>\n        <div class=\"kpi\"><div class=\"kpi-v\">${fmt(totTotal)}</div><div class=\"kpi-l\">Atendimentos</div></div>\n        <div class=\"kpi\"><div class=\"kpi-v\">${fmt(totRet)}</div><div class=\"kpi-l\">Retidos pelo bot</div></div>\n        <div class=\"kpi\"><div class=\"kpi-v\">${fmt(totTr)}</div><div class=\"kpi-l\">Transferidos</div></div>\n      </div>\n      <section class=\"sec\">\n        <div class=\"sec-t\">Taxa de retenção por perfil</div>\n        <div class=\"sec-h\">Contada por <b>atendimento</b> (cada conversa registrada). Abaixo de cada card, o mesmo olhar por <b>pessoas distintas</b>.</div>\n        <div class=\"rcards\">${retCards}</div>\n      </section>\n      <section class=\"sec\">\n        <div class=\"sec-t\">Motivo do contato — por atendimento retido</div>\n        <div class=\"sec-h\">Mesma unidade da retenção (<b>atendimento</b>), com <b>1 assunto principal por atendimento</b>. Motivos + \"somente saudação\" + \"sem assunto\" somam os <b>atendimentos retidos</b> do período.</div>\n        <div class=\"mgrid\">${motCols}</div>\n      </section>\n      <section class=\"sec\">\n        <div class=\"sec-t\">Como estes números foram obtidos</div>\n        <div class=\"src\">\n          <div class=\"srcbox\"><div class=\"h\">1 · Retenção</div>Fonte: tabela de <b>sessões</b> (1 registro por atendimento). Um atendimento é <b>retido</b> quando o bot resolveu sem transbordar (campo <code>transfer</code>). Taxa = <i>retidos ÷ total</i>, por perfil.</div>\n          <div class=\"srcbox\"><div class=\"h\">2 · Motivo</div>Fonte: <b>logs do bot</b>, agrupados pelo <b>id da sessão</b>. Para cada atendimento retido atribuímos <b>um assunto principal</b> (o use-case tratado). O seletor de período no topo recorta tudo por mês (últimos 3 + mês em curso) ou geral.</div>\n        </div>\n        <ol class=\"how\" style=\"margin-top:14px\">\n          <li>Tudo por <b>agregação direta na base</b> (server-side), sobre toda a população — não é amostragem.</li>\n          <li>\"Somente saudação\" e \"sem assunto identificado\" (resolvidos sem acionar um assunto específico — ex.: FAQ/consulta livre) fecham a base de retidos.</li>\n          <li>O <b>mês em curso é parcial</b> (ainda não fechou) — números tendem a crescer até o fim do mês.</li>\n        </ol>\n      </section>\n      <footer class=\"ft muted\">\n        <b>Leitura:</b> boa parte dos atendimentos retidos é resolvida <b>sem acionar um assunto específico</b> — por isso \"sem assunto identificado\" costuma ser grande. <b>Escopo global:</b> ${perStartTxt?`base de ${perStartTxt} até ${genDateTxt}`:'todo o histórico'}; os recortes mensais cobrem os últimos 3 meses e o mês em curso.\n      </footer>\n    </div>`;\n  },\n  mounted(d2){\n    let tip=null, cur=null;\n    const ensureTip=()=>{ if(!tip){ tip=document.createElement('div'); tip.className='tip'; d2.root.appendChild(tip); } return tip; };\n    const setHl=(key,on)=>{ if(!key) return; d2.$$('[data-motivo]').forEach((x)=>{ if(x.getAttribute('data-motivo')===key) x.classList.toggle('hl',on); }); };\n    const place=(e)=>{ if(!tip) return; tip.style.left=(e.clientX+14)+'px'; tip.style.top=(e.clientY+14)+'px'; };\n    d2.on('.ptab','click',(e,el)=>{ d2.setState({period: el.getAttribute('data-period')}); });\n    d2.on('[data-motivo]','mouseover',(e,el)=>{\n      const key=el.getAttribute('data-motivo');\n      if(key!==cur){ setHl(cur,false); setHl(key,true); cur=key; }\n      const t=ensureTip(); t.textContent=el.getAttribute('data-label')||''; t.style.display='block'; place(e);\n    });\n    d2.on('[data-motivo]','mousemove',(e)=>{ if(tip && tip.style.display==='block') place(e); });\n    d2.on('[data-motivo]','mouseout',(e)=>{\n      const to=e.relatedTarget;\n      if(to && to.closest && to.closest('[data-motivo]')) return;\n      setHl(cur,false); cur=null;\n      if(tip) tip.style.display='none';\n    });\n  }\n}","at":"2026-07-08T19:52:53.974Z"}}},{"_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":"6a45222d2154b98175a596fd","component":"data2-core-primitives@Artboard","system":"67f03a3ff198cfb1104dca5c","displayName":"Relatório Retenção Bluma","params":{"title":{"component":"data2-core-primitives@String","params":{"content":"Relatório Retenção Bluma"}},"dimensions":{"component":"data2-core-types@Dimensions","params":{"width":1440,"height":900}},"importFont":{"params":{"font":"helvetica now text"},"component":"bluma@pqqVxpqksbJ3DK7Niw8QE"}},"reference":"gwd5s0n0p9l5HV2wdyQoP"},{"_id":"00165374306660577702e650","parent":"6a45222d2154b98175a596fd","component":"bluma@claude-report-view","system":"67f03a3ff198cfb1104dca5c","displayName":"claude-report-view","params":{"retention":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"claude-report-retentionDataSet"}},"motivos":{"component":"data2-core-types@InteractiveModuleReference","params":{"reference":"claude-report-motivosDataSet"}},"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":"Kj6zwB6b4-l3d_g7H9100"}]}},{"_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":"6a4526144f97cde72fe53fd7","displayName":"APP - Relatório de Retenção","reference":"wbyhKoKU11rwQMlXvpSlQ","params":{"domain":{"component":"data2-core-primitives@String","params":{"content":"relatorio-retencao"}},"entryPoint":{"component":"data2-core-types@ComponentInstanceReference","params":{"component":"data2-core-primitives@Artboard","reference":"gwd5s0n0p9l5HV2wdyQoP"}}},"system":"67f03a3ff198cfb1104dca5c","component":"data2-core-primitives@Application"}]}},{"reference":"DataComponentInstancesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[{"_id":"6a45218015647ab9dfff8fcd","component":"data2-core@DataSet","system":"67f03a3ff198cfb1104dca5c","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"claude-report-motivos"}}},"reference":"claude-report-motivosDataSet"},{"_id":"6a45217a2e19654bbcdfc437","component":"data2-core@DataSet","system":"67f03a3ff198cfb1104dca5c","params":{"datasource":{"component":"data2-core-types@DataSourceReference","params":{"reference":"claude-report-retention"}}},"reference":"claude-report-retentionDataSet"},{"_id":"6a45217fb5865956b5057392","component":"data2-core@Data2TableDataSource","system":"67f03a3ff198cfb1104dca5c","params":{"table":"claude-report-motivos","schema":[{"component":"data2-core-types@Field","params":{"key":"role","title":"Role","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"motivo_label","title":"Motivo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"motivo_key","title":"Chave","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"sessions","title":"Sessoes retidas","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"kind","title":"Tipo","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"generated_at","title":"Gerado em","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"period","title":"Periodo","component":"data2-core-primitives@String"}}]},"reference":"claude-report-motivos"},{"_id":"6a45217987ba41c3f8f7d99c","component":"data2-core@Data2TableDataSource","system":"67f03a3ff198cfb1104dca5c","params":{"table":"claude-report-retention","schema":[{"component":"data2-core-types@Field","params":{"key":"role","title":"Role","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"total","title":"Total atendimentos","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"retained","title":"Retidos pelo bot","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"transferred","title":"Transferidos p/ humano","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"retention_rate","title":"Taxa de retencao (%)","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"ordem","title":"Ordem","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"generated_at","title":"Gerado em","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"users_total","title":"Usuarios distintos","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"users_retained","title":"Usuarios retidos","component":"data2-core-primitives@Number"}},{"component":"data2-core-types@Field","params":{"key":"period_start","title":"Primeira sessao","component":"data2-core-primitives@String"}},{"component":"data2-core-types@Field","params":{"key":"period","title":"Periodo","component":"data2-core-primitives@String"}}]},"reference":"claude-report-retention"}]}},{"reference":"BundlesTableDataSource","component":"data2-core@MemoryDataSource","params":{"initialData":[]}}],"processesParams":{}}}}