データスキーマ仕様
全データセットは共通の meta + slices 構造を持ちます。
interface Dataset<T> {
meta: DatasetMeta
slices: TimeSlice<T>[] // effectiveFrom 昇順
}
interface DatasetMeta {
id: string // kebab-case
name: string // 日本語名
nameEn: string
category: 'tax' | 'compulsory-insurance' | 'social-insurance' | 'labor' | 'subsidy'
description: string
unit: 'JPY' | 'JPY_PER_YEAR' | 'JPY_PER_MONTH' | 'JPY_PER_DAY' | 'RATE' | 'DAY' | 'MIXED'
updateCycle: 'yearly' | 'on-revision'
updateMonth: number | null
sources: SourceRef[]
revisionHistory: Revision[] // 新しい順
notes: string[]
}
interface TimeSlice<T> {
effectiveFrom: string // 'YYYY-MM-DD'(この日以降に適用)
effectiveTo: string | null // 'YYYY-MM-DD'(この日まで)。null = 現行
sources: SourceRef[]
verifiedAt: string // 一次資料と照合した日
values: T // データセット固有の値
}規約
- 金額は整数円。上限なしは
null(JSON に Infinity は書けないため)。 - 率は小数(18.3% →
0.183)。percent表記は持たない。 - 日付・期間はすべて
YYYY-MM-DD。 - スライスは追記のみ。改定時は現行スライスに
effectiveToを入れ、新スライスを追加(過去日の計算互換を保つ)。 - 全データセットに現行スライスが必ず1本(
effectiveTo: null)。
これらの不変条件(現行スライス1本・期間の重複/隙間なし・値域)は CI(JSON Schema 検証 + アンカー値テスト)で保証しています。