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>
This commit is contained in:
@@ -53,7 +53,7 @@ export const WaitingInviteView: React.FC = () => {
|
||||
};
|
||||
|
||||
const colorMap: Record<string, string> = {
|
||||
blue: 'from-blue-600 to-indigo-600',
|
||||
blue: 'from-teal-600 to-emerald-600',
|
||||
purple: 'from-purple-600 to-violet-600',
|
||||
};
|
||||
|
||||
@@ -66,7 +66,7 @@ export const WaitingInviteView: React.FC = () => {
|
||||
<Stethoscope size={18} className="text-white" />
|
||||
</div>
|
||||
<span className="text-xl font-black text-gray-900 tracking-tighter uppercase italic">
|
||||
Score<span className="text-blue-600">Odonto</span>
|
||||
Score<span className="text-teal-600">Odonto</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -119,21 +119,21 @@ export const WaitingInviteView: React.FC = () => {
|
||||
</div>
|
||||
|
||||
{/* Info box */}
|
||||
<div className="bg-blue-50 border border-blue-100 rounded-2xl p-4 text-left mb-4">
|
||||
<p className="text-[10px] font-black text-blue-600 uppercase tracking-widest mb-1">
|
||||
<div className="bg-teal-50 border border-teal-100 rounded-2xl p-4 text-left mb-4">
|
||||
<p className="text-[10px] font-black text-teal-600 uppercase tracking-widest mb-1">
|
||||
O que fazer agora?
|
||||
</p>
|
||||
<ul className="space-y-1.5 text-sm text-blue-800 font-medium">
|
||||
<ul className="space-y-1.5 text-sm text-teal-800 font-medium">
|
||||
<li className="flex items-start gap-2">
|
||||
<span className="text-blue-400 mt-0.5">1.</span>
|
||||
<span className="text-teal-400 mt-0.5">1.</span>
|
||||
Informe seu e-mail <strong>{email}</strong> ao administrador
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<span className="text-blue-400 mt-0.5">2.</span>
|
||||
<span className="text-teal-400 mt-0.5">2.</span>
|
||||
Aguarde o convite ser enviado
|
||||
</li>
|
||||
<li className="flex items-start gap-2">
|
||||
<span className="text-blue-400 mt-0.5">3.</span>
|
||||
<span className="text-teal-400 mt-0.5">3.</span>
|
||||
Acesse o link do convite para completar o vínculo
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
Reference in New Issue
Block a user