Changes
17 changed files (+375/-0)
-
-
@@ -0,0 +1,14 @@// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 休日。なお、ここでいう「休日」とは労働基準法における定義であり、 // "国民の祝日に関する法律" で定義されている「休日」とはなんら // 関係がない。 "day off" は包括的な "休み" だが、他にいい表現が // なかったためシステム上の単語として採用している。 message DayOff {}
-
-
-
@@ -0,0 +1,18 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/work_record/v2/record_kind.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; message HalvedRecord { // 前半 (午前) の記録。 RecordKind am = 1; // 後半 (午後) の記録。 RecordKind pm = 2; }
-
-
-
@@ -0,0 +1,19 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/type/v1/date.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 時間単位年次有給休暇。 message HourlyPaidLeave { // この有給休暇が付与された年月日。 yamori.type.v1.Date provided_at = 1; // 利用した時間。 (1~24) uint32 hours = 2; }
-
-
-
@@ -0,0 +1,19 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/work_record/v2/leave.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 一日未満、もしくは半日未満の時間単位で法定・特別休暇を取得した。 message HourlyWorkspaceDefinedLeave { // 対象となる法定・特別休暇。 Leave leave = 1; // 利用した時間。 (1~24) uint32 hours = 2; }
-
-
-
@@ -0,0 +1,37 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/work_record/v2/leave_id.proto"; import "yamori/work_record/v2/leave_revision.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 休暇や休業。英語としては果てしなく微妙だが、法令の英語表記及び // 一般的な英語の言い回しで「休日」と「休暇 (休業) 」を区別しないため // 労働基準法で用いられている "paid leave" から "leave" だけを抜き // 出して利用している。通常の会話だと "parental leave" のように前に // 理由をつけることが殆どのため、 "leave" 単体だと (特に会社の // コンテキストだと) 非常に伝わりづらい。 message Leave { LeaveID id = 1; string display_name = 2; // カレンダーのようなスペースの限られた場所で表示する省略名。 // 未設定の場合は `display_name` の先頭 2 文字となる。 string abbreviation_name = 3; // 現在のバージョンを含む全てのバージョン。 // 適用開始日昇順でソートされており、未来のバージョンも含まれる。 repeated LeaveRevision revisions = 4; // 現在のバージョン。 // この休暇や休業が年月日に紐づいたものである場合はその日時点の // バージョン、マスタデータの場合はサーバ側の現在日もしくは // リクエストで指定された日付時点でのバージョンとなる。 LeaveRevision current_revision = 5; }
-
-
-
@@ -0,0 +1,14 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 休暇や休業を識別するための ID 。 // `lv-` というプリフィクスを持つ。 message LeaveID { string value = 1; }
-
-
-
@@ -0,0 +1,26 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/type/v1/date.proto"; import "yamori/work_record/v2/leave_revision_id.proto"; import "yamori/work_record/v2/leave_snapshot.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 休暇や休業の定義は常に一定とは限らない。運用中にマスタデータをそのまま変更して // しまうと過去のデータにも影響を与えてしまうため、バージョン管理を行う。 // このメッセージは各バージョンのスナップショット。 // バージョン管理する必要のあるデータだけ含んでいる。 message LeaveRevision { LeaveRevisionID revision_id = 1; // このバージョンを適用する開始日。 yamori.type.v1.Date start_at = 2; // このバージョンでの状態、データ。 LeaveSnapshot snapshot = 3; }
-
-
-
@@ -0,0 +1,14 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 休暇・休業の各バージョンを識別するための ID 。 // `lr-` というプリフィクスを持つ。 message LeaveRevisionID { string value = 1; }
-
-
-
@@ -0,0 +1,14 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; message LeaveSnapshot { // 有給休暇の出勤率計算を行う際に、この休暇・休業を行った日を出勤した // としてみなすかどうか。 bool is_worker_deemed_to_be_worked = 1; }
-
-
-
@@ -0,0 +1,16 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/type/v1/date.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 年次有給休暇。 message PaidLeave { // この有給休暇が付与された年月日。 yamori.type.v1.Date provided_at = 1; }
-
-
-
@@ -0,0 +1,35 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/work_record/v2/day_off.proto"; import "yamori/work_record/v2/leave.proto"; import "yamori/work_record/v2/paid_leave.proto"; import "yamori/work_record/v2/skipped.proto"; import "yamori/work_record/v2/worked.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 勤怠の記録。 message RecordKind { oneof kind { // 出勤した。 Worked worked = 1; // 欠勤した。 Skipped skipped = 2; // 休日 (公休) 。 DayOff day_off = 3; // 年次有給休暇を利用した。 PaidLeave paid_leave = 4; // 法定休暇・休業や特別休暇といったワークスペースで定義されている // 休暇・休業を利用した。 Leave workspace_defined_leave = 5; } }
-
-
-
@@ -0,0 +1,24 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/work_record/v2/hourly_paid_leave.proto"; import "yamori/work_record/v2/hourly_workspace_defined_leave.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 欠勤したことを表すレコード。 message Skipped { // 利用した時間単位年次有給休暇。 // 年次有給休暇付与の出勤率算定時に欠勤扱いを避けるために利用する // 可能性が排除できないため想定している。 HourlyPaidLeave hourly_paid_leave = 1; // 利用した一日・半日未満の法定・特別休暇の一覧。 // 年次有給休暇付与の出勤率算定時に欠勤扱いを避けるために利用する // 可能性が排除できないため想定している。 repeated HourlyWorkspaceDefinedLeave hourly_workspace_defined_leaves = 2; }
-
-
-
@@ -0,0 +1,29 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/type/v1/date.proto"; import "yamori/work_record/v2/halved_record.proto"; import "yamori/work_record/v2/record_kind.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; message WorkRecord { yamori.type.v1.Date date = 1; // ユーザが残したメモ、記載事項。 // システムがこのフィールドを自動的にパースすることはない。 string note = 2; oneof kind { // 一日全体の記録。 RecordKind day_whole = 3; // 勤務を前半 (午前) と後半 (午後) に分けて記録している。 // e.g. 半有、半出勤 HalvedRecord day_halved = 4; } }
-
-
-
@@ -0,0 +1,20 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.work_record.v2; import "yamori/work_record/v2/hourly_paid_leave.proto"; import "yamori/work_record/v2/hourly_workspace_defined_leave.proto"; option go_package = "pocka.jp/x/yamori/proto/go/work_record/v2;work_record"; // 出勤したことを表すレコード。 message Worked { // 利用した時間単位年次有給休暇。 HourlyPaidLeave hourly_paid_leave = 1; // 利用した一日・半日未満の法定・特別休暇の一覧。 repeated HourlyWorkspaceDefinedLeave hourly_workspace_defined_leaves = 2; }
-
-
-
@@ -0,0 +1,43 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.workspace.v2; import "google/protobuf/timestamp.proto"; import "yamori/type/v1/date.proto"; option go_package = "pocka.jp/x/yamori/proto/go/workspace/v2"; message PaidLeaveProvision { // 付与日。 yamori.type.v1.Date provided_at = 1; // 失効日。 yamori.type.v1.Date expires_at = 2; // 付与された年次有給休暇の日数。 int32 amount_days = 3; // 付与された年次有給休暇の残日数。 int32 remaining_days = 4; // 年次有給休暇の半日取得を行った際のもう半日分が余っているかどうか。 // 半日分も含めた残日数は以下のようにして計算できる。 // ``` // a = 0.5 if is_halved_day_remaining // 0 otherwise // x = remaining_days + a // ``` bool is_halved_day_remaining = 5; // 付与が行われた日時。 google.protobuf.Timestamp created_at = 6; // 内容の最終更新日時。 google.protobuf.Timestamp updated_at = 7; // この付与に関するメモ。 string note = 8; }
-
-
-
@@ -8,6 +8,7 @@import "yamori/workspace/v2/login_method.proto"; import "yamori/workspace/v2/user_id.proto"; import "yamori/workspace/v2/user_permissions.proto"; import "yamori/workspace/v2/worker.proto"; option go_package = "pocka.jp/x/yamori/proto/go/workspace/v2";
-
@@ -36,4 +37,8 @@ // するための設計となる。bool is_admin = 5; UserPermissions permissions = 6; // 労働者としての属性。このフィールドが空の場合はこのユーザは労働者ではない、 // ということになり記録はつけられない。 Worker worker = 7; }
-
-
-
@@ -0,0 +1,28 @@// SPDX-FileCopyrightText: 2025 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only edition = "2023"; package yamori.workspace.v2; import "yamori/paid_leave_provision/v1/paid_leave_provision_table.proto"; import "yamori/type/v1/date.proto"; import "yamori/work_record/v2/work_record.proto"; import "yamori/workspace/v2/paid_leave_provision.proto"; option go_package = "pocka.jp/x/yamori/proto/go/workspace/v2"; // 労働者としての情報、属性。 message Worker { // 勤怠記録。 repeated yamori.work_record.v2.WorkRecord work_records = 1; // 年次有給休暇の付与テーブル。 yamori.paid_leave_provision.v1.PaidLeaveProvisionTable paid_leave_provision_table = 2; // 初回の年次有給休暇の付与日。 yamori.type.v1.Date first_paid_leave_provision_at = 3; // 年次有給休暇の付与記録。 repeated PaidLeaveProvision paid_leave_provisions = 4; }
-