minimum_wage_jp 1.0.1

Japan minimum wage by prefecture: get rate for a date and check compliance
Documentation
# minimum_wage_jp

[![Crates.io](https://img.shields.io/crates/v/minimum_wage_jp.svg)](https://crates.io/crates/minimum_wage_jp)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

日本の地域別最低賃金(都道府県別)をシンプルに扱うための Rust クレートです。

## 特徴

- 指定日の最低賃金(円)を取得
- 指定時給が最低賃金を満たすか判定(不足額も算出)
- 年度(改定年)を指定して率を取得
- データは埋め込み済み、適用開始日前は前年データに自動フォールバック

## インストール

```toml
[dependencies]
minimum_wage_jp = "1"
```

## クイックスタート

```rust
use chrono::NaiveDate;
use minimum_wage_jp::{MinimumWageJp, MinimumWageJpCompliance};

// 都道府県コード: 1 = 北海道, 13 = 東京都, 47 = 沖縄県
let hokkaido: u8 = 1;

// 今日の最低賃金(円)を取得
let rate_today = MinimumWageJp::rate(hokkaido).unwrap();
println!("今日の最低賃金: {}円", 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 {
    MinimumWageJpCompliance::Compliant => println!("OK"),
    MinimumWageJpCompliance::Short { shortage_yen, required_yen } => {
        println!("不足: {}円 (必要: {}円)", shortage_yen, required_yen);
    }
}
```

## API

### 最低賃金の取得

| メソッド | 説明 |
|---------|------|
| `rate(pref: u8)` | 今日の最低賃金(円)を取得 |
| `rate_on_date(date: NaiveDate, pref: u8)` | 指定日の最低賃金(円)を取得 |
| `rate_for_revision(year: u16, pref: u8)` | 指定年版(改定年)の最低賃金を取得 |

### コンプライアンス判定

| メソッド | 説明 |
|---------|------|
| `is_compliant(pref: u8, hourly_yen: u32)` | 今日の時給が最低賃金を満たすか判定 |
| `is_compliant_on_date(date: NaiveDate, pref: u8, hourly_yen: u32)` | 指定日の時給が最低賃金を満たすか判定 |

### 戻り値の型

```rust
enum MinimumWageJpCompliance {
    Compliant,                                    // 最低賃金を満たしている
    Short { shortage_yen: u32, required_yen: u32 } // 不足あり
}
```

### エラー型

| エラー | 説明 |
|-------|------|
| `InvalidPrefCode(u8)` | 都道府県コードが 1〜47 の範囲外 |
| `DatasetNotFoundForDate { date, prev, next }` | 指定日のデータが存在しない |
| `DatasetNotFoundForYear { year }` | 指定年版のデータが存在しない |

## 都道府県コード

JIS X 0401 に準拠した 1〜47 の数値コードを使用します。

| コード | 都道府県 | コード | 都道府県 | コード | 都道府県 |
|:-----:|:-------:|:-----:|:-------:|:-----:|:-------:|
| 1 | 北海道 | 17 | 石川県 | 33 | 岡山県 |
| 2 | 青森県 | 18 | 福井県 | 34 | 広島県 |
| 3 | 岩手県 | 19 | 山梨県 | 35 | 山口県 |
| 4 | 宮城県 | 20 | 長野県 | 36 | 徳島県 |
| 5 | 秋田県 | 21 | 岐阜県 | 37 | 香川県 |
| 6 | 山形県 | 22 | 静岡県 | 38 | 愛媛県 |
| 7 | 福島県 | 23 | 愛知県 | 39 | 高知県 |
| 8 | 茨城県 | 24 | 三重県 | 40 | 福岡県 |
| 9 | 栃木県 | 25 | 滋賀県 | 41 | 佐賀県 |
| 10 | 群馬県 | 26 | 京都府 | 42 | 長崎県 |
| 11 | 埼玉県 | 27 | 大阪府 | 43 | 熊本県 |
| 12 | 千葉県 | 28 | 兵庫県 | 44 | 大分県 |
| 13 | 東京都 | 29 | 奈良県 | 45 | 宮崎県 |
| 14 | 神奈川県 | 30 | 和歌山県 | 46 | 鹿児島県 |
| 15 | 新潟県 | 31 | 鳥取県 | 47 | 沖縄県 |
| 16 | 富山県 | 32 | 島根県 | | |

## データセット

### 同梱データ

| 年版 | 適用開始日 |
|:---:|:--------:|
| 2024 | 2024-10-01 |
| 2025 | 2025-10-01 |

### 仕様

- 指定日に適用される最新の年版を自動選択
- 都道府県ごとの適用開始日が異なる場合、適用日前は前年版にフォールバック
  - 例: 北海道の 2025 年版適用開始日は 2025-10-04
- 最初の年版より前の日付を指定した場合はエラーを返却

## タイムゾーンについて

`rate()` および `is_compliant()` は `chrono::Local` を使用してローカル日付を取得します。
サーバ・クライアント間でタイムゾーンが異なる環境では、`rate_on_date()` / `is_compliant_on_date()` の使用を推奨します。

## テスト

```bash
cargo test
```

## 貢献

新しい年版の追加や適用開始日の修正は `src/dataset.rs` を編集してください。
変更時はテストも併せて更新し、フォールバック仕様が正しく動作することを確認してください。

## ライセンス

MIT License