日付下限制御
締め済み期間へ新しい転送先行を増やさないため、計上したい日付を計上可能な日付へ補正する概念。
defined
validation: okcoverage: completeopen questions none
meaning: presentresponsibilities: presentboundaries: presentinvariants: presentrationale: presentevidence: presentlinked concepts: present
Open Questions
- None
Definition Statements
Meaning
6 statements
| Statement | Text |
|---|---|
転送先行を計上してよい日付の下限値に基づく日付補正制御posting-date-lower-bound-destination-row | 日付下限制御とは、転送先行を計上してよい日付の下限値に基づく日付補正制御である。 |
締め済みの日付より前または同日のデータは、新しい転送先行としてその日付に追加してはならない。destination-row | 締め済みの日付より前または同日のデータは、新しい転送先行としてその日付に追加してはならない。 |
計上したい日付が下限値より前または同日の場合、転送先行を拒否するのではなく、計上可能な最小日付へ補正destination-row-2 | 計上したい日付が下限値より前または同日の場合、転送先行を拒否するのではなく、計上可能な最小日付へ補正する。 |
黒伝計上時にも赤伝計上時にも考慮する必要がある。posting-date-lower-bound-red-transfer-black | 日付下限制御は、黒伝計上時にも赤伝計上時にも考慮する必要がある。 |
すべての Destination に存在するとは限らない。destination-posting-date-lower-bound-exists | 日付下限制御は、すべての `Destination` に存在するとは限らない。 |
締め管理テーブル、締め粒度、締め判定ロジックはアプリケーションに依存meaning-5dda4fa6 | 締め管理テーブル、締め粒度、締め判定ロジックはアプリケーションに依存する。 |
Responsibilities
5 statements
| Statement | Text |
|---|---|
締め済み期間に対して新しい転送先行が増えないようにするための計上日付制御を表す。posting-date-lower-bound-destination-row-closed-period | 日付下限制御は、締め済み期間に対して新しい転送先行が増えないようにするための計上日付制御を表す。 |
計上したい日付を、その Destination で許可される計上日付へ補正できる必要がある。destination-posting-date-lower-bound | 日付下限制御は、計上したい日付を、その `Destination` で許可される計上日付へ補正できる必要がある。 |
必要に応じて店舗、部門、会社などの業務単位ごとに異なる下限値を扱える必要がある。posting-date-lower-bound | 日付下限制御は、必要に応じて店舗、部門、会社などの業務単位ごとに異なる下限値を扱える必要がある。 |
transfer は、利用者または転送先設定が指定した補正関数を転送SQLへ組み込める仕組みを提供destination-transfer-sql | `transfer` は、利用者または転送先設定が指定した補正関数を転送SQLへ組み込める仕組みを提供する。 |
補正が発生した事実を任意の転送先列へ記録できてよい。posting-date-lower-bound-destination-record | 日付下限制御は、補正が発生した事実を任意の転送先列へ記録できてよい。 |
Boundaries
6 statements
| Statement | Text | Similarity negated |
|---|---|---|
締め日マスタそのものを定義しないnot-posting-date-lower-bound-define | 日付下限制御は、締め日マスタそのものを定義しない。 | - |
締め管理テーブルの物理構造を定義しないnot-posting-date-lower-bound-define-2 | 日付下限制御は、締め管理テーブルの物理構造を定義しない。 | - |
締め日判定ロジックそのものを transfer 内で所有しないnot-posting-date-lower-bound-transfer | 日付下限制御は、締め日判定ロジックそのものを `transfer` 内で所有しない。 | - |
transfer は、店舗別、会社別、月締め、日締めなどの業務固有ロジックを内蔵しないnot-transfer | `transfer` は、店舗別、会社別、月締め、日締めなどの業務固有ロジックを内蔵しない。 | - |
赤伝の符号反転列を定義しないnot-posting-date-lower-bound-red-transfer-define | 日付下限制御は、赤伝の符号反転列を定義しない。 | - |
Destination Link の source-to-destination mapping を再定義しないnot-destination-link-posting-date-lower-bound-define | 日付下限制御は、`Destination Link` の source-to-destination mapping を再定義しない。 | destination, destination-link |
Invariants
7 statements
| Statement | Text |
|---|---|
締め済み期間へ新しい転送先行を増やしてはならない。destination-row-closed-period | 締め済み期間へ新しい転送先行を増やしてはならない。 |
計上日付補正は、黒伝と赤伝の両方に適用できる必要がある。posting-date-red-transfer-black | 計上日付補正は、黒伝と赤伝の両方に適用できる必要がある。 |
mutable transfer model では、日付下限制御を表現できないため、日付下限制御が必要な Destination ではエラーとして扱うdestination-posting-date-lower-bound-mutable-transfer-model | `mutable transfer model` では、日付下限制御を表現できないため、日付下限制御が必要な `Destination` ではエラーとして扱う。 |
immutable transfer model では、締め済み期間の訂正や取消は、計上可能な日付へ補正された赤伝または黒伝として表現closed-period-red-transfer-black-immutable-model | `immutable transfer model` では、締め済み期間の訂正や取消は、計上可能な日付へ補正された赤伝または黒伝として表現する。 |
計上日付補正の結果は、転送先行に書き込まれる計上日付として扱われる。destination-row-posting-date | 計上日付補正の結果は、転送先行に書き込まれる計上日付として扱われる。 |
補正関数の引数は、補正対象となる転送先行の列から取得destination-row-target | 補正関数の引数は、補正対象となる転送先行の列から取得する。 |
補正関数は利用者側が定義する。transfer は補正関数の意味を解釈しないtransfer | 補正関数は利用者側が定義する。`transfer` は補正関数の意味を解釈しない。 |
Rationale
4 statements
| Statement | Text |
|---|---|
Closed Dates Must Not Receive New Rowsclosed-dates-must-not-receive-new-rows | Closed Dates Must Not Receive New Rows: 日締めや月締めによって締められた日付には、それ以上データが増えてはならない。 たとえば `2026-04-30` まで締められている場合、`2026-04-10` のデータをそのまま追加してはならない。 この場合、追加不能として転送を止めるのではなく、締められていない最小の日付、たとえば `2026-05-01` として計上する。 |
Red Transfer Needs The Same Controldestination-link-posting-date-lower-bound-red-transfer | Red Transfer Needs The Same Control: 黒伝では、`Destination Link` の mapping 後に作られる転送先行の論理形に対して日付補正を適用できる。 赤伝は転送先の元黒行を反転して生成する。 そのため、赤伝でも同じく、補正対象となる転送先行の論理形に対して日付補正を適用する。 日付下限制御は、黒伝と赤伝で別々の参照元を持つ概念ではない。 補正関数の引数は、常に補正対象となる転送先行の列から取得する。 |
Transfer Should Provide A Hook, Not Own Business Logicdestination-row-reference-transfer-should-provide-hook-not | Transfer Should Provide A Hook, Not Own Business Logic: 締め日判定は業務固有である。 たとえば店舗ごとに締め日が異なる場合、店舗IDと計上したい日付を補正関数へ渡し、許可された日付ならそのまま返し、不許可なら計上可能な最小日付を返す、という設計が考えられる。 ```text fn_journal_date(shop_id, journal_date) ``` 全社共通の締め日であれば、店舗IDの引数は不要かもしれない。 重要なのは、`transfer` が締め日ロジックそのものや締め管理テーブルを管理するのではなく、設定された補正関数を転送SQLへ組み込む仕組みを提供することである。 補正関数の定義は、アプリケーション側の関数として管理される。 `transfer` は、その関数名と転送先行のどの列を引数として渡すかを扱う。 同じアプリケーションで同じ補正関数を複数の `Destination` から使う場合、関数名や説明をマスタ化してよい。 ただし、そのマスタは補正関数を参照しやすくするための設定であり、締め管理テーブルや締め判定ロジックそのものではない。 |
Adjustment Notice Is Optionallineage-posting-date-lower-bound-destination-row-adjustment | Adjustment Notice Is Optional: 日付補正が発生した事実は、運用や調査で分かりやすい方がよい。 ただし、すべての転送先テーブルが補正通知用の列を持つとは限らない。 そのため、補正通知は必須ではなく任意の転送先列へ書き込める補助機能として扱う。 補正理由の詳細は日付下限制御の責務ではない。 必要な調査は `Lineage` や転送先行の値から確認する。 |
Internal Links
- None
External Relationships
| Concept | Kind | Reason | Supported by | Evidence |
|---|---|---|---|---|
転送先仕様destination | depends-on | 日付下限制御は Destination ごとに設定され、書き込み対象の destination row の列を使用する。 | posting-date-lower-bound-destination-row-closed-period, destination-posting-date-lower-bound, destination-transfer-sql | spec:posting-date-lower-bound |
Coverage
| Area | Coverage | Reason | Resolution criteria |
|---|---|---|---|
definition | complete | concept.json の意味、責務、境界、不変条件、理由を curated statement として移植済み。 | - |
relationships | complete | concept-relationship.json と移行元 concept.json の外部関係を反映済み。 | - |
Evidence
| Evidence ID | Type | Path | Exists |
|---|---|---|---|
spec:posting-date-lower-bound | spec | concept.json | yes |
Validation
- No validation issues.
Technical Metadata
- Source JSON:
packages/transfer/docs/concepts/posting-date-lower-bound/concept.json