Files
scoreodonto.com/frontend/views/plugins/pluginRegistry.ts
T
VPS 4 Builder 3e64514b08 feat(financeiro+salas): motor financeiro V1/V2, glosas, GTO→financeiro, contratos de convênio e redesenho de Salas
Financeiro V1 (Épicos 1–4):
- FKs de origem no lançamento (paciente/profissional/procedimento/agendamento/contrato/realizado), soft delete e cron "Atrasado"
- prontuário de procedimentos realizados (fotos antes/depois) + regra sem-comissão (garantia/reabertura do mesmo profissional)
- normalizeFinanceiro: corrige CHECK capitalizado vs enforceUppercase (lançamentos não salvavam pela UI)
- baixa de pagamento (pago_em), despesas (fornecedor/centro de custo/recorrente), competência por data de conclusão
- relatório financeiro (período, paciente, profissional, forma, convênio, glosa)
- orçamento Assinado -> contas a receber; contrato vigente -> cobrança recorrente; renovação automática de contrato

Financeiro V2 (Comissão/Repasse):
- regras de % (padrão/procedimento/override por profissional) + custo de laboratório
- base selecionável (recebido/produção), fechamento persistido, pagar (gera despesa) + comprovante + estorno

Glosas de convênio: por item de GTO, recurso/protocolo/prazo, recuperar/estornar, impacto no relatório

GTO -> Financeiro: finalizar gera RECEITA (convênio a receber); LancarGTO passa a persistir; convênios reais (planos)

Contratos: modelo "Atendimento a Convênios / Repasse (Dentista Credenciado)" + variáveis de convênio

Salas (redesenho): perfil "Dono de Sala"; locação sempre ativa; menus MINHAS/ALUGAR SALAS;
sala como workspace isolado (seletor agrupado Clínicas x Salas, tenantGuard por dono); financeiro de
locação (reserva confirmada -> recebível); Painel da Sala (KPIs, agenda visual, recebíveis, relatório por sala)

Docs: BACKLOG-FINANCEIRO-V1, AUDITORIA-FUNCIONAL-SCOREODONTO, CHECKLIST-DEPLOY-PRODUCAO

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 00:28:07 +02:00

41 lines
1.6 KiB
TypeScript

export const ACTIVE_PLUGINS_KEY = 'SCOREODONTO_ACTIVE_PLUGINS';
export const PLUGIN_CONFIG_KEY = 'SCOREODONTO_PLUGIN_CONFIG';
// "Visualizar como" (superadmin) ativa todos os plugins para teste, sem depender
// do cache em localStorage (que é reconciliado/limpo em outros fluxos).
const PREVIEW_PLUGINS = ['rx-scoreodonto', 'locacao-salas', 'profissionais-marketplace'];
export const getActivePlugins = (): string[] => {
try {
if (localStorage.getItem('SCOREODONTO_PREVIEW_ROLE')) return [...PREVIEW_PLUGINS];
return JSON.parse(localStorage.getItem(ACTIVE_PLUGINS_KEY) || '[]');
} catch { return []; }
};
// Plugins sempre ligados (capability de plataforma, sem opção de desativar).
export const ALWAYS_ON_PLUGINS = ['locacao-salas'];
export const isPluginActive = (id: string): boolean => ALWAYS_ON_PLUGINS.includes(id) || getActivePlugins().includes(id);
export const togglePlugin = (id: string): boolean => {
const active = getActivePlugins();
const wasActive = active.includes(id);
const next = wasActive ? active.filter(p => p !== id) : [...active, id];
localStorage.setItem(ACTIVE_PLUGINS_KEY, JSON.stringify(next));
return !wasActive;
};
export const getPluginConfig = (id: string): Record<string, string> => {
try {
const all = JSON.parse(localStorage.getItem(PLUGIN_CONFIG_KEY) || '{}');
return all[id] || {};
} catch { return {}; }
};
export const savePluginConfig = (id: string, config: Record<string, string>) => {
try {
const all = JSON.parse(localStorage.getItem(PLUGIN_CONFIG_KEY) || '{}');
localStorage.setItem(PLUGIN_CONFIG_KEY, JSON.stringify({ ...all, [id]: config }));
} catch {}
};