事例:会社管理ポータル
2025年に設立された新しい会社は、初日から、採用、オンボーディング、契約、勤怠管理、休暇、請求、会計を必要としていましたが、予算の都合で7つの製品を購入することはできませんでした。そのすべてを担う1つのプラットフォームを構築し、会社の運営に使っています。
課題
既製の人事、勤怠管理、請求ツールは、それぞれ月額で予算全体を上回り、どれもウクライナの個人事業主に関する法律、国内銀行を通じた電子署名、勤怠記録からクライアントの請求書に稼働時間が流れる仕組みに対応していませんでした。代わりの手段はスプレッドシートでしたが、誰かが休暇を取る週には止まってしまいます。
そこで、当社が販売している技術スタックでプラットフォームを構築し、クライアントの業務に適用するのと同じエンジニアリングルールを適用する本物の製品として扱い、クライアントが問い合わせられる基準となる事例にすることにしました。
機能
採用
求人サイトへの求人掲載、質問ライブラリを備えたTelegramボットによる候補者のスクリーニング、予約付きの技術面接と外部面接、試用期間の管理を行います。
オンボーディング
本人確認書類を収集し、クラウドのAIサービスで検証し、氏名の綴りを確認し、連絡先と機材を集め、IDプロバイダーを通じてアカウントを開設する、手順付きのフローです。
契約と文書
業務委託契約書とNDAをテンプレートからPDFとして生成し、電子署名に回し、署名済みの記録として保管します。クライアントとの契約書や作業明細書も、同じ流れで処理します。
稼働時間と休暇
プロジェクトのアサインごとの稼働時間を、外部の勤怠管理ツールから同期し、スペシャリスト自身が編集できます。休暇と病欠は、契約ごとの付与日数と承認に基づいて管理します。
報酬と請求
スペシャリストの月次請求書とクライアントの請求書を、同じ稼働時間の記録から作成します。為替レートは中央銀行のものを使い、単発の支払いの再請求や、署名済み請求書のアーカイブにも対応します。
会計とコンプライアンス
納税申告と支払いのリマインド、銀行明細のインポート、緊急連絡先、そして財務データに対する行レベルセキュリティと権限昇格申請を備えた権限モデルです。
通知
担当者が対応すべきあらゆるイベントを、チャットとメッセンジャーのカードで通知します。メッセージに財務の数値を載せないというルールがあり、数値はログインの向こうにとどまります。
構築方法
バックエンド
Azure Functions上の.NET 10、ソースジェネレーターで生成したメディエーターによるCQRSの垂直スライス、あらゆる境界での検証、バージョン管理されたマイグレーションを備えたEF Coreです。
データ
クライアントごとの行レベルセキュリティと、個人情報・財務情報のAlways Encrypted列を備えたAzure SQLで、キーはマネージドボールトに保管します。
フロントエンド
スタンドアロンコンポーネント、シグナル、ゾーンレスの変更検出を備えたAngular、Tailwindのデザインシステム、OpenAPIドキュメントから生成したAPIクライアントです。
配送
フェデレーション認証を使うGitHub Actions、環境全体を管理するTerraform、パイプラインでマイグレーションとして出荷するデータベース変更、CodeQLと依存関係のスキャンです。
設計を形づくったルール
- 固定された優先順位:コスト、次にセキュリティ、最新性、パフォーマンス、そして規制への適合の順です。対立が生じた場合は、常に上位のものを優先します。
- 人に関するデータの正本はIDプロバイダー。データベースはそのキャッシュであり、給与、採用データ、権限の唯一の保管場所です。
- 機密データは平文の列に置きません。一時的であっても置きません。暗号化は複数の場所で宣言し、起動時に検証します。
- すべてのバグ修正に、その種類のテストを付けます。それを検知できる最も広い強制の層に置き、ユニットテストではなくアーキテクチャテストになることも多くあります。
- チャットは信頼できない表示面。通知にはイベントの名前と、認証の向こうにあるページへのリンクだけを載せ、金額や単価が製品の外に出ることはありません。
御社にとっての意味
これはデモの説明ではありません。このプラットフォームは、毎日実際の会社を動かしています。自社のアーキテクチャ上の判断、マイグレーション、アラートと長く付き合ってきたため、どれが正しかったかが分かっています。その同じ見極める力を、御社の製品に持ち込みます。
御社にも同様のものが必要ですか。
現在スプレッドシートで運用しているプロセスをお知らせください。1営業日以内に、書面の計画、アーキテクチャの提案、見積りをお届けします。