尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Chefe Coruja — Plataforma de Gestão Hospitalar (Fase 1) Plataforma multi-tenant de gestão para hospitais, UPAs e clínicas. Fase 1 entrega a fundação: organizações, unidades, perfis/vínculos por papel, setores e leitos — com RLS no banco e auditoria. A aba do plantonista é uma Central Clínica com ferramentas de apoio à decisão (inspirada no hosppital.com): calculadoras, escores, protocolos, dengue, games e ventilação mecânica. O módulo de escala do projeto anterior (chefe-coruja) foi preservado na branch legacy/escala. A Fase 2+ importará o banco antigo.檢視完整 README ↗
Plataforma multi-tenant de gestão para hospitais, UPAs e clínicas. Fase 1 entrega a fundação: organizações, unidades, perfis/vínculos por papel, setores e leitos — com RLS no banco e auditoria. A aba do plantonista é uma Central Clínica com ferramentas de apoio à decisão (inspirada no hosppital.com): calculadoras, escores, protocolos, dengue, games e ventilação mecânica.
O módulo de escala do projeto anterior (
chefe-coruja) foi preservado na branchlegacy/escala. A Fase 2+ importará o banco antigo.
| Camada | Tecnologia |
|---|---|
| Front | React 19 + Vite + TypeScript |
| UI | Tailwind CSS v4 + shadcn/ui (Base UI) |
| Backend/DB | Supabase (Postgres + Auth + RLS) |
| Estado servidor | TanStack Query |
| Forms | react-hook-form + zod |
Três papéis atribuídos por unidade (a mesma pessoa pode ser gestor na unidade A
e plantonista na unidade B), mais o super_admin (dono da plataforma):
| Papel | Escopo | Vê identidade de paciente? |
|---|---|---|
admin | Todas as unidades da organização | Nunca — só agregados via view |
gestor | Uma unidade | Sim |
plantonista | Uma unidade | Só pacientes sob seu cuidado (Fase 2) |
Regra inviolável: o admin não lê leitos/setores diretamente (RLS nega
SELECT); ele recebe apenas agregados de vw_censo_unidade, com supressão de
contagens < 5 (anti-dedução LGPD).
supabase --version)# 1. Dependências
npm install
# 2. Variáveis de ambiente
cp .env.example .env.local
# preencha VITE_SUPABASE_URL e VITE_SUPABASE_ANON_KEY do novo projeto
# 3. Aplicar migrations + seed
supabase link --project-ref <SEU_REF>
supabase db push
# 4. (Re)gerar tipos do Supabase (opcional — já há uma versão em src/types/database.ts)
npx supabase gen types typescript --project-id <SEU_REF> > src/types/database.ts
# 5. Rodar
npm run dev
No painel do Supabase: Authentication → Providers → Email → “Confirm email”.
auth.users
via SQL: o GoTrue exige uma linha correspondente em auth.identities, sem a
qual o login falha com "Database error querying schema".-- Dono da plataforma
INSERT INTO public.super_admins (perfil_id)
SELECT id FROM public.perfis WHERE email = '[email protected]';
-- Admin / gestor / plantonista na UPA do seed (id fixo do seed)
INSERT INTO public.vinculos (perfil_id, unidade_id, papel, criado_por)
SELECT p.id, '00000000-0000-0000-0000-000000000101', 'admin',
(SELECT id FROM public.perfis WHERE email = '[email protected]')
FROM public.perfis p WHERE p.email = '[email protected]';
INSERT INTO public.vinculos (perfil_id, unidade_id, papel, criado_por)
SELECT p.id, '00000000-0000-0000-0000-000000000101', 'gestor',
(SELECT id FROM public.perfis WHERE email = '[email protected]')
FROM public.perfis p WHERE p.email = '[email protected]';
INSERT INTO public.vinculos (perfil_id, unidade_id, papel, criado_por)
SELECT p.id, '00000000-0000-0000-0000-000000000101', 'plantonista',
(SELECT id FROM public.perfis WHERE email = '[email protected]')
FROM public.perfis p WHERE p.email = '[email protected]';
O seed cria: 1 organização, 2 unidades (UPA Centro + Hospital Regional), 4 setores e 30 leitos.
Ambiente já provisionado (projeto
saqjrjtrkzkswsxxvdxn): os usuários[email protected],[email protected],[email protected]e[email protected](senhaTeste@1234) já existem com vínculos e podem ser usados para testar o app. A conta[email protected]é o dono da plataforma. (Criados via API de admin do GoTrue, comauth.identitiescorretas.)
| Comando | Descrição |
|---|---|
npm run dev | Dev server (Vite) |
npm run build | Typecheck + build de produção |
npm run lint | ESLint |
npm run typecheck | tsc -b --noEmit |
supabase/migrations/ → schema, funções, RLS, view, seed (SQL versionado)
src/
types/database.ts → tipos gerados do Supabase
lib/ → cliente, api, constantes
contexts/ → AuthContext e UnidadeContext
hooks/ → queries TanStack Query
routes/ → RequireAuth, RequireRole, RedirectHome
pages/ → telas da Fase 1
content/registry.tsx → catálogo da Central Clínica do plantonista
pages/plantonista/ → calculadoras, escores, protocolos, dengue, games, ventilação
components/ui/ → shadcn/ui (Base UI)
Conteúdo adaptado do site de referência (removendo Nutrição, Enfermagem e Cirurgia; renomeando Fisioterapia → Ventilação Mecânica):
| Seção | Ferramentas |
|---|---|
| Calculadoras (13) | IOT, drogas vasoativas, sedação, bloqueio neuromuscular, controle glicêmico, heparinização (+ajuste TTPa), hipo/hipernatremia, hidantalização, nefropatia por contraste, profilaxia TEV, acesso venoso |
| Escores (6) | SAPS 3, PESI, NIH AVC, NEWS, NEWS 2, TIMI |
| Protocolos (7) | HDA/LAMG, hiperpotassemia, glicêmico, abstinência, colonoscopia, decanulação, nefropatia |
| Dengue (4) | Classificação/conduta/hidratação (MS), fluxograma, manual, vídeo |
| Games (2) | Infection — Pneumonia, Minigame de Emergência |
| Ventilação Mecânica (5) | HACOR, R/I ratio, manobra de recrutamento, suporte ventilatório, mobilidade funcional |
plantonista chamando setores de outra unidade recebe zero linhas (bloqueio no banco).admin com select * from leitos retorna vazio; só a vw_censo_unidade entrega agregados.log_auditoria.Nota de segurança: a policy de
SELECTdeleitos/setoresusaunidades_gestor_plantonista()— unidades onde o usuário é gestor ou plantonista. Isso impede oadminde ler dados diretos (migration20260815000007_fase1_fix_admin_leitos.sql).
-- todas as tabelas do schema public devem aparecer SEM rowsecurity=false
select tablename, rowsecurity
from pg_tables
where schemaname = 'public'
order by tablename;
-- nenhuma policy pode ter expressão `true`
select tablename, policyname
from pg_policies
where schemaname = 'public' and with_check = 'true';