職業性ストレス簡易調査票 準拠 ストレスチェックシステム
Translation pending
HealthTypeScript · PLpgSQLGitHub @hironoriuematsu-byteOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
厚生労働省「職業性ストレス簡易調査票(57項目)」準拠のストレスチェックシステムです。判定は合計点数法(B≧77、またはB≧63かつA+C≧76)。Next.js (App Router) + Supabase (Auth / Postgres / RLS) + Vercel で構成された、産業医事務所による複数企業(マルチテナント)運用向けの実装です。 現在の運用では company(事業者担当者)アカウントは発行しません(実施事務従事者に統一)。RLS・スキーマ上のcompanyロールの制御は将来のために残していますが、招待画面のロール選択は 従業員 / 実施事務従事者 のみです。 氏名・社員番号・部署は従業員本人が受検時に入力します(管理者は招待時にメールアドレスと企業のみ指定)。 企業間分離はすべてのRLSポリシーが company_id で行分離しており、企業Aのアカウントから企業Bのデータは1行も取得できません(受け入れテストで自動検証)。Read the full README ↗
厚生労働省「職業性ストレス簡易調査票(57項目)」準拠のストレスチェックシステムです。判定は合計点数法(B≧77、またはB≧63かつA+C≧76)。Next.js (App Router) + Supabase (Auth / Postgres / RLS) + Vercel で構成された、産業医事務所による複数企業(マルチテナント)運用向けの実装です。
| ロール | 想定者 | 個人結果 | 集団分析 | 面接指導申出 | アクセスログ |
|---|---|---|---|---|---|
| office | 産業医事務所 | 全企業・全結果 | 全企業 | 全企業分を閲覧・状態更新 | 閲覧可 |
| jimu | 実施事務従事者(企業ごと) | 自社の全結果 ※誓約必須 | 自社 | 自社分を閲覧・状態更新 | 不可 |
| company | 事業者側担当者 | 自社の同意ありのみ | 自社 | 不可 | 不可 |
| employee | 従業員 | 自分のみ | 不可 | 自分の申出のみ | 不可 |
現在の運用では company(事業者担当者)アカウントは発行しません(実施事務従事者に統一)。RLS・スキーマ上のcompanyロールの制御は将来のために残していますが、招待画面のロール選択は 従業員 / 実施事務従事者 のみです。
氏名・生年月日・部署は従業員本人が受検時に入力します(管理者は招待時にメールアドレスと企業のみ指定)。
企業間分離はすべてのRLSポリシーが company_id で行分離しており、企業Aのアカウントから企業Bのデータは1行も取得できません(受け入れテストで自動検証)。
Supabase SQL Editor で以下を順に実行:
supabase/migrations/0002_production.sql(適用済みの場合はスキップ)supabase/migrations/0003_app_fixes.sql — 必ず実行してください。内容:
auth.users に残したトリガーの削除(これを実行しないとユーザー招待が全件失敗します)consented_resultssupabase/migrations/0004_employee_self_entry.sql — 必ず実行してください。従業員本人が社員番号を入力できるようにする列権限の追加ですinsert into public.profiles (user_id, role, name)
values ('<officeユーザーのUID>', 'office', '植松 太郎');
以後のユーザー(従業員・jimu)は、officeダッシュボードの「ユーザー管理」から招待できます(単発またはCSV一括: メール, 企業コード の2列)。氏名・社員番号・部署は本人が受検時に入力します。
実施事務従事者(jimu)も自社の従業員を招待できます(jimuダッシュボードの「従業員招待」タブ。単発またはメールアドレス1列のCSV一括)。jimuが招待できるのは自社・従業員ロールのみで、他社への招待やjimu/officeロールの発行はAPI側で拒否されます。
個別招待の代わりに、受検用の配布URLで従業員が自己登録する方式が使えます:
/join/<トークン>)を開くと会社名・実施年度が表示され、自分のメールアドレス+パスワードで登録(登録したメールアドレスはログインに必要)環境変数(Settings > Environment Variables):
| 変数 | 用途 | 公開範囲 |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | SupabaseプロジェクトURL | クライアント公開(問題なし) |
NEXT_PUBLIC_SUPABASE_ANON_KEY | anonキー(RLS前提の操作のみ) | クライアント公開(問題なし) |
SUPABASE_SERVICE_ROLE_KEY | 招待API・通知API専用 | サーバーのみ。絶対にNEXT_PUBLIC_を付けない |
RESEND_API_KEY | 面接指導申出の通知メール送信 | サーバーのみ |
SENDER_EMAIL | 通知メールの送信元(Resend認証済みドメインのアドレス) | サーバーのみ |
GitHubへのpushで自動デプロイされます。
独自ドメイン(例: check.mestate.jp)の設定手順:
check.mestate.jp を追加cname.vercel-dns.com)をドメインのDNSに追加https://check.mestate.jp と https://check.mestate.jp/auth/callback){アプリURL}/auth/callback を追加通知はアプリ本体(/api/notify-interview)に組み込まれており、Edge FunctionやDatabase Webhookの設定は不要です。Vercelの環境変数に RESEND_API_KEY と SENDER_EMAIL を設定すれば動作します。
# ユニットテスト(スコアリング・年度判定・CSV生成/BOM・CSVパーサ)
npm test
# 受け入れテスト(実Supabaseに対する統合テスト。仕様書7章の1〜6+セキュリティ検証)
SUPABASE_URL=https://xxxx.supabase.co \
SUPABASE_ANON_KEY=eyJ... \
SUPABASE_SERVICE_ROLE_KEY=eyJ... \
npm run test:acceptance
受け入れテストはテスト用の企業・ユーザー・結果を作成して検証し、終了時に削除します(検証用プロジェクトでの実行推奨)。検証項目:
src/
app/
exam/ 従業員: 受検(年度重複時はブロック)
my/ 従業員: 結果・同意変更・面接指導申出
office/ 実施者: 企業横断ダッシュボード(結果/申出/集団分析/招待/ログ)
jimu/ 実施事務従事者: 誓約→自社ダッシュボード
company/ 事業者担当者: 集団分析+同意あり結果
api/invite/ 招待API(service_roleキーをサーバー内でのみ使用)
api/notify-interview/ 面接指導申出の通知メールAPI(Resend)
login, reset-password, account/update-password, auth/callback
components/ 共有UI(結果一覧・申出一覧・集団分析グラフ・招待・ログ)
lib/ スコアリング・年度・CSV・アクセスログ・Supabaseクライアント
supabase/
migrations/ 0002_production.sql(スキーマ+RLS) / 0003・0004(必須の補正)
tests/
unit/ ユニットテスト
acceptance/ 受け入れテスト(実Supabase統合)