Cleanup: backups antigos removidos + dashboard config + HANDOFF/log
- Remove database-novo/backups/2026-03-27 e 2026-03-29 (deveriam estar no gitignore, mas haviam sido tracked antes) - Atualiza db.config.json + generate-dashboard.cjs + dashboard.html - HANDOFF.md atualizado com estado de 05-05 (sprint blueprint tabular + arquivamento de pacientes) - Obsidian/Brain/log.md: entrada da sessao 05-05 adicionada Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+364
-572
File diff suppressed because it is too large
Load Diff
@@ -13,3 +13,18 @@ Chronological, append-only record of everything that's happened in this wiki.
|
|||||||
**Quick access:** `grep "^## \[" log.md | tail -5` gives you the last 5 entries.
|
**Quick access:** `grep "^## \[" log.md | tail -5` gives you the last 5 entries.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [2026-05-05 23:45] session | Blueprint tabular Melissa + restore pacientes
|
||||||
|
Touched: none (sem mudança de wiki — handoff em HANDOFF.md)
|
||||||
|
Detalhes: criou `blueprints/melissa-table-page-blueprint.md` (~530L, 18 seções);
|
||||||
|
refatorou MelissaCadastrosRecebidos pro padrão (DataTable + frozen action +
|
||||||
|
view toggle list/grade); criou MelissaAgendamentosRecebidos nativa (substituindo
|
||||||
|
embed); MelissaPacientes ganhou subheader, sombras, status pills coloridas,
|
||||||
|
email/phone colunas próprias, mobile pencil+popover, view toggle, fix scroll
|
||||||
|
mobile (`min-height: 0` em `.mp-list`), botão Restaurar pra arquivados.
|
||||||
|
Repository: `restorePatient` novo. PatientsCadastroPage statusOpts: +Arquivado.
|
||||||
|
A66 V2 — user não gostou design, aguarda feedback específico.
|
||||||
|
|
||||||
|
## [2026-05-06 12:00] session | MelissaCompromissos refator blueprint
|
||||||
|
Touched: none (aplicacao direta do blueprint existente - sem mudanca de wiki)
|
||||||
|
Detalhes: refator de MelissaCompromissos pro melissa-table-page-blueprint preservando o design do row (color stripe + name+badges + descricao + meta inline). DataTable com 3 colunas (Compromisso flex / Atividade 220px / Acoes frozen 140px com toggle+pencil+trash). Sidebar com 2 grupos de filtros: Status (Ativos verde / Inativos amber) e Tipo (Nativos blue / Meus accent), cada um com Limpar filtro proprio. Grid view com cards (color stripe 28px + toggle topo + footer com edit/trash). Subheader explicativo. View toggle persistido em mc.viewMode.v1. Removeu Popover de actions (drawer mobile cobre). Stats: Total/Ativos/Inativos/Tempo total. ESLint 0 errors. UI nao testada em browser ainda.
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -132,7 +132,7 @@
|
|||||||
"notification_templates", "notification_channels", "notification_preferences",
|
"notification_templates", "notification_channels", "notification_preferences",
|
||||||
"notification_logs", "notification_schedules", "notification_queue",
|
"notification_logs", "notification_schedules", "notification_queue",
|
||||||
"notifications", "notice_dismissals", "global_notices", "login_carousel_slides",
|
"notifications", "notice_dismissals", "global_notices", "login_carousel_slides",
|
||||||
"twilio_subaccount_usage"
|
"twilio_subaccount_usage", "saas_twilio_config"
|
||||||
],
|
],
|
||||||
"CRM Conversas (WhatsApp)": [
|
"CRM Conversas (WhatsApp)": [
|
||||||
"conversation_messages", "conversation_threads",
|
"conversation_messages", "conversation_threads",
|
||||||
@@ -140,14 +140,30 @@
|
|||||||
"conversation_tags", "conversation_thread_tags",
|
"conversation_tags", "conversation_thread_tags",
|
||||||
"conversation_optouts", "conversation_optout_keywords",
|
"conversation_optouts", "conversation_optout_keywords",
|
||||||
"conversation_autoreply_settings", "conversation_autoreply_log",
|
"conversation_autoreply_settings", "conversation_autoreply_log",
|
||||||
"session_reminder_settings", "session_reminder_logs"
|
"session_reminder_settings", "session_reminder_logs",
|
||||||
|
"conversation_assignments",
|
||||||
|
"conversation_bots", "conversation_bot_sessions",
|
||||||
|
"conversation_sla_rules", "conversation_sla_breaches",
|
||||||
|
"whatsapp_connection_incidents"
|
||||||
],
|
],
|
||||||
"Segurança / Rate limiting": [
|
"Segurança / Auditoria": [
|
||||||
"submission_rate_limits"
|
"submission_rate_limits",
|
||||||
|
"audit_logs",
|
||||||
|
"saas_security_config",
|
||||||
|
"math_challenges",
|
||||||
|
"patient_invite_attempts",
|
||||||
|
"public_submission_attempts"
|
||||||
],
|
],
|
||||||
"Central SaaS (docs/FAQ)": [
|
"Central SaaS (docs/FAQ)": [
|
||||||
"saas_docs", "saas_doc_votos", "saas_faq", "saas_faq_itens"
|
"saas_docs", "saas_doc_votos", "saas_faq", "saas_faq_itens"
|
||||||
],
|
],
|
||||||
|
"Dev / Tracking": [
|
||||||
|
"dev_auditoria_items", "dev_verificacoes_items", "dev_test_items",
|
||||||
|
"dev_roadmap_phases", "dev_roadmap_items",
|
||||||
|
"dev_competitors", "dev_competitor_features",
|
||||||
|
"dev_comparison_matrix", "dev_comparison_competitor_status",
|
||||||
|
"dev_generation_log"
|
||||||
|
],
|
||||||
"Estrutura / Calendário": [
|
"Estrutura / Calendário": [
|
||||||
"feriados"
|
"feriados"
|
||||||
]
|
]
|
||||||
@@ -163,8 +179,9 @@
|
|||||||
"Documentos": "#0ea5e9",
|
"Documentos": "#0ea5e9",
|
||||||
"Comunicação / Notificações": "#fbbf24",
|
"Comunicação / Notificações": "#fbbf24",
|
||||||
"CRM Conversas (WhatsApp)": "#25d366",
|
"CRM Conversas (WhatsApp)": "#25d366",
|
||||||
"Segurança / Rate limiting": "#ef4444",
|
"Segurança / Auditoria": "#ef4444",
|
||||||
"Central SaaS (docs/FAQ)": "#c084fc",
|
"Central SaaS (docs/FAQ)": "#c084fc",
|
||||||
|
"Dev / Tracking": "#94a3b8",
|
||||||
"Estrutura / Calendário": "#fb923c"
|
"Estrutura / Calendário": "#fb923c"
|
||||||
},
|
},
|
||||||
"infrastructure": {
|
"infrastructure": {
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ function buildSB(){
|
|||||||
</div>
|
</div>
|
||||||
<div class="sb-h" style="margin-top:8px">Domínios</div>\`;
|
<div class="sb-h" style="margin-top:8px">Domínios</div>\`;
|
||||||
for(const[d,ts]of Object.entries(D.domains)){
|
for(const[d,ts]of Object.entries(D.domains)){
|
||||||
h+=\`<div class="sb-i \${dom===d?'active':''}" onclick="scrollToDomain(\`+JSON.stringify(d)+\`)">
|
h+=\`<div class="sb-i \${dom===d?'active':''}" onclick="scrollToDomain('\${D.slugs[d]}')">
|
||||||
<div class="sb-dot" style="background:\${gc(d)}"></div>\${escapeHtml(d)}
|
<div class="sb-dot" style="background:\${gc(d)}"></div>\${escapeHtml(d)}
|
||||||
<span class="sb-c">\${ts.length}</span>
|
<span class="sb-c">\${ts.length}</span>
|
||||||
</div>\`;
|
</div>\`;
|
||||||
@@ -349,7 +349,7 @@ function buildMN(){
|
|||||||
<div class="dgrid">\`;
|
<div class="dgrid">\`;
|
||||||
for(const[d,ts]of Object.entries(D.domains)){
|
for(const[d,ts]of Object.entries(D.domains)){
|
||||||
const fks=ts.reduce((a,t)=>a+(D.tables[t]?.fks?.length||0),0);
|
const fks=ts.reduce((a,t)=>a+(D.tables[t]?.fks?.length||0),0);
|
||||||
h+=\`<div class="dc" style="--c:\${gc(d)}" onclick="scrollToDomain(\`+JSON.stringify(d)+\`)">
|
h+=\`<div class="dc" style="--c:\${gc(d)}" onclick="scrollToDomain('\${D.slugs[d]}')">
|
||||||
<div class="dc-n">\${escapeHtml(d)}</div>
|
<div class="dc-n">\${escapeHtml(d)}</div>
|
||||||
<div class="dc-m"><span style="color:\${gc(d)}">\${ts.length}</span> tabelas · \${fks} FKs</div>
|
<div class="dc-m"><span style="color:\${gc(d)}">\${ts.length}</span> tabelas · \${fks} FKs</div>
|
||||||
</div>\`;
|
</div>\`;
|
||||||
@@ -420,7 +420,7 @@ function sel(d){
|
|||||||
dom=d;view='overview';q='';document.getElementById('si').value='';
|
dom=d;view='overview';q='';document.getElementById('si').value='';
|
||||||
buildSB();buildMN();document.getElementById('mn').scrollTop=0;
|
buildSB();buildMN();document.getElementById('mn').scrollTop=0;
|
||||||
}
|
}
|
||||||
function scrollToDomain(d){
|
function scrollToDomain(slug){
|
||||||
// Sempre ir pra overview (com todos os domínios visíveis) antes de scrollar
|
// Sempre ir pra overview (com todos os domínios visíveis) antes de scrollar
|
||||||
const needRebuild=view!=='overview'||dom!==null||q;
|
const needRebuild=view!=='overview'||dom!==null||q;
|
||||||
if(needRebuild){
|
if(needRebuild){
|
||||||
@@ -429,7 +429,7 @@ function scrollToDomain(d){
|
|||||||
buildSB();buildMN();
|
buildSB();buildMN();
|
||||||
}
|
}
|
||||||
setTimeout(()=>{
|
setTimeout(()=>{
|
||||||
const el=document.getElementById('dom-'+(D.slugs[d]||''));
|
const el=document.getElementById('dom-'+slug);
|
||||||
if(el) el.scrollIntoView({behavior:'smooth',block:'start'});
|
if(el) el.scrollIntoView({behavior:'smooth',block:'start'});
|
||||||
}, needRebuild?80:0);
|
}, needRebuild?80:0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user