smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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';