Skip to content

Repository files navigation

GridScale OA

企業内部向け OA システムです。フロントエンドは静的ページ、バックエンドは Python 標準ライブラリ + SQLite で動作します。

起動方法

バックエンド API を起動します。

cd C:\Projects\gridscaleOAsystem
$env:OA_ADMIN_PASSWORD = "ローカル開発用の安全なパスワード"
python backend\server.py

初回起動時に OA_ADMIN_PASSWORD が未設定の場合、開発環境では管理者パスワードをランダム生成してバックエンドのターミナルに一度だけ表示します。既存データベースの管理者パスワードは変更されません。

別のターミナルでフロントエンドを起動します。

cd C:\Projects\gridscaleOAsystem\frontend
python -m http.server 5173

ブラウザーで以下を開きます。

http://localhost:5173

テスト

python -m unittest backend.test_server -v
node frontend\smoke-test.js

初期管理者

ユーザー名: admin
パスワード: 初回起動前に OA_ADMIN_PASSWORD で設定した値

このアカウントは初期管理者です。休暇申請、経費申請、承認履歴などの業務データは backend\oa.sqlite3 に保存されます。本番環境では OA_ENV=production と OA_ADMIN_PASSWORD の設定が必須です。

新しく作成する一般アカウントの初期パスワードは 000000 です。初回ログイン時にパスワード変更を案内し、変更後は初期パスワードを使用できません。

一般社員は「個人資料」から氏名のよみ、連絡先、個人連絡先、住所の変更を申請できます。申請内容は管理者が承認するまで現在の社員情報に反映されません。

バックエンドはリバースプロキシ配下の HTTPS 環境で運用してください。

AWS 配備前の状態

Docker、コンテナの停止処理、存活/就绪チェック(/api/health、/api/ready)、本番設定の起動時検証、AWS staging 用 ECS task definition を用意しています。手順と本番移行の阻塞項目は deploy/aws/README.md を参照してください。

現在の SQLite 版は staging / UAT 用です。RDS PostgreSQL、添付ファイルの S3 移行、横向きスケール可能な会话/SSO、定时任务和恢复演练完成前,不应作为 AWS production 多任务服务部署。生产配置门禁可执行:

python scripts\check_production_config.py

该门禁在当前 SQLite 版本上预期会失败,这是为了防止误部署,不是测试失败。

認証とメール設定

ログイン状態は HttpOnly Cookie で管理されます。ローカル開発では http://localhost:5173 または http://127.0.0.1:5173 から API にアクセスできます。本番環境では .env.example を参考に、許可するオリジン、Cookie、SMTP を設定してください。

パスワード再設定コードは通常メールで送信され、API 応答には含まれません。メール未接続のローカル開発で画面表示を確認する場合に限り、バックエンド起動前に次を設定します。

$env:OA_EXPOSE_RESET_CODE = "1"

この設定は本番環境では使用しないでください。

Slack 連携

Slack 連携を有効にすると、休暇・経費の新規承認依頼と処理結果を本人の Slack DM に通知し、承認者はメッセージ内の「承認する」「差し戻す」から処理できます。ユーザー名簿の「Slackで連絡」から同僚の Slack プロフィールも直接開けます。

  1. Slack App を作成し、Bot Token Scopes に chat:write、users:read、users:read.email を設定してワークスペースへインストールします。
  2. Interactivity を有効にし、Request URL を https://<OAのドメイン>/api/slack/interactions に設定します。
  3. .env.example の OA_SLACK_BOT_TOKEN、OA_SLACK_SIGNING_SECRET、OA_SLACK_TEAM_ID を設定してバックエンドを再起動します。本番の秘密情報は AWS Secrets Manager で管理してください。
  4. 社員情報画面で「Slack連携を同期」を実行すると、社員メールアドレスと Slack メールアドレスを照合します。個別に Slack ユーザーIDを登録することもできます。

Slack からの操作は署名と送信時刻を検証し、Slack アカウントと OA の社員・承認者が一致する場合のみ受け付けます。通知は送信キューに保存され、通信エラー時は自動再試行します。

ローカル環境で登録した Bot Token と Signing Secret は system_settings に暗号化して保存でき、環境変数が設定されている場合は環境変数を優先します。メッセージ内の承認・差戻しボタンは、公開 HTTPS の Interactivity URL を設定した後に限り OA_SLACK_INTERACTIONS_ENABLED=1 で有効にしてください。未設定時も通知と「OAシステムを開く」は利用できます。

実装済み機能

  • ログイン、ログアウト
  • パスワード再設定(6桁のワンタイムコード、15分有効、1回限り)
  • 管理者によるユーザーのパスワードリセット(旧セッション失効、操作ログ記録)
  • ユーザー、部門、ロール、権限の管理画面
  • ユーザー名簿(氏名・よみ・部門・メール・電話の検索、連絡先表示)
  • ホームの承認待ち、自分の申請、自分の承認
  • 休暇管理内の休暇カレンダー(休暇申請と承認済み休暇の月/週/日表示。独立メニューなし)
  • 会議は単一日付で登録し、予定が集中する日付は最大 3 件を表示して「+N 件」から当日の全予定を確認
  • 休暇申請、営業日自動計算、0.5 日単位調整、年休残数上限チェック、一覧、詳細、承認、差戻し、取下げ
  • 経費申請、明細、一覧、詳細、部門承認、経理確認、支払登録、差戻し、取下げ
  • 経費承認日に基づく給与支給予定日の自動計算
  • 経費総額と次回給与で支給可能な経費総額の表示
  • 管理者による経費締日、給与支給日の設定
  • SQLite データベースへの永続保存(AWS 移行用の PostgreSQL/S3 構成は docs/OA系统优化修改方案.md を参照)
  • GS 接頭辞の8桁社員番号を自動採番し、年休付与履歴と申請時の残数確保を管理
  • アカウント管理と社員情報を分離。アカウント側ではログイン名、パスワード、ロール、状態のみを管理
  • マイナンバーと雇用保険被保険者番号を暗号化して保存し、一覧ではマスキング表示
  • 社長、システム管理者、人事担当者が社員情報を閲覧・編集可能
  • Slack DM への申請通知、メッセージ内承認・差戻し、メールアドレス同期、ユーザー名簿からの Slack 連絡

About

GridScale OA internal office automation system

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages