# minimum_wage_jp
日本の地域別最低賃金(都道府県別)をシンプルに扱うための Rust クレートです。
- 指定日の最低賃金(円)を取得
- 指定時給が最低賃金を満たすか判定(不足額も算出)
- 年度(改定年)を指定して率を取得
- データ構造は固定(埋め込み)で、適用開始日前は前年データにフォールバック
## インストール
Cargo.toml に依存関係を追加します。
```toml
[dependencies]
minimum_wage_jp = "1"
```
本リポジトリをそのまま使う場合は、上記のように path 依存を使ってください。
## 使い方(クイックスタート)
```rust
use chrono::NaiveDate;
use minimum_wage_jp::MinimumWageJp;
// 1 = 北海道, 13 = 東京都, 47 = 沖縄県(1..=47)
let hokkaido: u8 = 1;
// 今日の最低賃金(円)を取得
let rate_today = MinimumWageJp::rate(hokkaido).unwrap();
println!("today rate: {}", rate_today);
// 指定日の最低賃金(円)を取得
let date = NaiveDate::from_ymd_opt(2025, 10, 4).unwrap();
let rate = MinimumWageJp::rate_on_date(date, hokkaido).unwrap();
assert_eq!(rate, 1075);
// 満たすか判定(不足額付き)
let result = MinimumWageJp::is_compliant_on_date(date, hokkaido, 1020).unwrap();
match result {
minimum_wage_jp::MinimumWageJpCompliance::Compliant => println!("OK"),
minimum_wage_jp::MinimumWageJpCompliance::Short { shortage_yen, required_yen } => {
println!("不足: {}円 (必要: {}円)", shortage_yen, required_yen);
}
}
```
## API 概要
- MinimumWageJp::rate(pref: u8) -> Result<u16, MinimumWageJpErr>
- ローカル日付(今日)の最低賃金(円)。
- MinimumWageJp::rate_on_date(date: NaiveDate, pref: u8) -> Result<u16, MinimumWageJpErr>
- 指定日の最低賃金(円)。
- ポイント: 都道府県ごとの適用開始日が全国一斉日より遅い場合、適用日前は前年の率に自動フォールバックします。
- MinimumWageJp::rate_for_revision(year: u16, pref: u8) -> Result<u16, MinimumWageJpErr>
- 指定「年版(改定年)」の率。
- MinimumWageJp::is_compliant(pref: u8, hourly_yen: u32) -> Result<MinimumWageJpCompliance, MinimumWageJpErr>
- 今日の時給が満たすかを判定。
- MinimumWageJp::is_compliant_on_date(date: NaiveDate, pref: u8, hourly_yen: u32) -> Result<MinimumWageJpCompliance, MinimumWageJpErr>
- 指定日の時給が満たすかを判定。
### エラー型
- MinimumWageJpErr::InvalidPrefCode(u8)
- 都道府県コードが 1..=47 の範囲外。
- MinimumWageJpErr::DatasetNotFoundForDate { date, prev, next }
- まだデータが存在しない日付(最初の年版より前)など。
- prev/next には前後の候補が含まれ、UI での案内に利用できます。
- MinimumWageJpErr::DatasetNotFoundForYear { year }
- 対象年版が存在しない。
## 都道府県コードについて
- 本クレートでは都道府県コードを u8 の 1..=47 で扱います。
- 1: 北海道
- 13: 東京都
- 47: 沖縄県
- 無効なコードでは InvalidPrefCode エラーを返します。
## データセットと仕様
- 現在同梱している年版データ(埋め込み)
- 2024 年版(effective_from: 2024-10-01)
- 2025 年版(effective_from: 2025-10-01)
- 都道府県ごとに実際の適用開始日が異なる場合があります(例: 北海道は 2025-10-04)。
- 仕様(重要)
- 指定日付の属する「直近の年版」を選びます(effective_from が日付以下で最大のもの)。
- ただし、当該都道府県の「適用開始日」がその日付より後なら、前年版の率を用います。
- 最初の年版より前の日付では、Error とともに next 候補(最初の年版)を返します。
## 日付とタイムゾーン
- today() は chrono::Local を使い、ローカルタイムゾーンの「日付(NaiveDate)」を用います。
- サーバとクライアントでタイムゾーンが異なる場合は、is_compliant_on_date / rate_on_date を推奨します。
## テスト
```bash
cargo test
```
## 貢献(データ更新)
- 新しい年版の追加や適用開始日の修正は src/dataset.rs を編集して行います。
- 追加の際はテストを併せて更新し、挙動(フォールバック仕様)が満たされることを確認してください。