リクエスト詳細
🐛 バグ報告
対応完了
対象アプリ: CalibrLog - 計測器・治工具 校正管理システム
校正記録追加時に校正中ステータスが強制的に「使用中」に戻される
## 1. 不具合の内容
`pages/record.php` で校正記録を追加すると、INSERTの直後に以下のUPDATE文が実行される:
```php
$stmt = app_db()->prepare("UPDATE instruments SET last_calibrated_at=?, next_due_at=?, status='active' WHERE id=?");
$stmt->execute([$calibrated, $next, $id]);
```
ここで `status='active'` がハードコードされているため、現在のステータスに関わらず**無条件に「使用中」へ上書き**される。
例えば `status='calibrating'`(校正中)の計測器に対して外部校正機関から戻ってきた校正記録を登録した際は意図通りだが、`status='suspended'`(使用停止)や `status='disposed'`(廃棄)の計測器に誤って校正記録を追加した場合でも強制的に「使用中」に戻ってしまう。
実際にサンプルデータの CL-003(`calibrating`)は校正記録追加で `active` になるのは自然だが、使用停止・廃棄済み機器への記録追加で復活するのは業務上の重大な誤動作である。
## 2. 根拠・発生しそうな条件
- `pages/record.php` の UPDATE 文(ファイル末尾付近)に `status='active'` がハードコードされている(コード抜粋から直接確認できる)
- `suspended` または `disposed` の計測器の詳細ページ(`view.php`)に校正記録追加フォームが表示されている場合、または URL直打ちで `record.php` に POST できる場合に発生
- 校正記録追加後にフラッシュメッセージ「校正記録を追加し、次回期限を更新しました。」が表示されるだけで警告もなく上書きされる
## 3. 期待動作
- `active` / `calibrating` の計測器に校正記録を追加した場合のみ `status='active'` に更新する
- `suspended` / `disposed` の計測器に校正記録を追加した場合は、ステータスを変更せず(校正実績のみ記録する)、または記録追加自体をブロックしてエラーメッセージを表示する
## 4. 修正方針
`pages/record.php` の UPDATE 文を以下のように修正する:
```php
// 廃棄・使用停止の計測器はステータスを変更しない
if (in_array($instrument['status'], ['suspended', 'disposed'], true)) {
// ステータスは据え置き、校正日・期限のみ更新
$stmt = app_db()->prepare('UPDATE instruments SET last_calibrated_at=?, next_due_at=? WHERE id=?');
$stmt->execute([$calibrated, $next, $id]);
} else {
// active / calibrating は校正完了扱いで active に戻す
$stmt = app_db()->prepare("UPDATE instruments SET last_calibrated_at=?, next_due_at=?, status='active' WHERE id=?");
$stmt->execute([$calibrated, $next, $id]);
}
```
またはよりシンプルに、`suspended`/`disposed` の場合は `record.php` 冒頭でリダイレクトしてブロックする:
```php
if (in_array($instrument['status'], ['suspended', 'disposed'], true)) {
flash_set('使用停止・廃棄済みの計測器には校正記録を追加できません。');
redirect('index.php?page=view&id=' . $id);
}
```
どちらの方針を採用するかはAtlas判断で構わないが、少なくとも廃棄済み計測器が「使用中」に復活することは防ぐこと。
`pages/record.php` で校正記録を追加すると、INSERTの直後に以下のUPDATE文が実行される:
```php
$stmt = app_db()->prepare("UPDATE instruments SET last_calibrated_at=?, next_due_at=?, status='active' WHERE id=?");
$stmt->execute([$calibrated, $next, $id]);
```
ここで `status='active'` がハードコードされているため、現在のステータスに関わらず**無条件に「使用中」へ上書き**される。
例えば `status='calibrating'`(校正中)の計測器に対して外部校正機関から戻ってきた校正記録を登録した際は意図通りだが、`status='suspended'`(使用停止)や `status='disposed'`(廃棄)の計測器に誤って校正記録を追加した場合でも強制的に「使用中」に戻ってしまう。
実際にサンプルデータの CL-003(`calibrating`)は校正記録追加で `active` になるのは自然だが、使用停止・廃棄済み機器への記録追加で復活するのは業務上の重大な誤動作である。
## 2. 根拠・発生しそうな条件
- `pages/record.php` の UPDATE 文(ファイル末尾付近)に `status='active'` がハードコードされている(コード抜粋から直接確認できる)
- `suspended` または `disposed` の計測器の詳細ページ(`view.php`)に校正記録追加フォームが表示されている場合、または URL直打ちで `record.php` に POST できる場合に発生
- 校正記録追加後にフラッシュメッセージ「校正記録を追加し、次回期限を更新しました。」が表示されるだけで警告もなく上書きされる
## 3. 期待動作
- `active` / `calibrating` の計測器に校正記録を追加した場合のみ `status='active'` に更新する
- `suspended` / `disposed` の計測器に校正記録を追加した場合は、ステータスを変更せず(校正実績のみ記録する)、または記録追加自体をブロックしてエラーメッセージを表示する
## 4. 修正方針
`pages/record.php` の UPDATE 文を以下のように修正する:
```php
// 廃棄・使用停止の計測器はステータスを変更しない
if (in_array($instrument['status'], ['suspended', 'disposed'], true)) {
// ステータスは据え置き、校正日・期限のみ更新
$stmt = app_db()->prepare('UPDATE instruments SET last_calibrated_at=?, next_due_at=? WHERE id=?');
$stmt->execute([$calibrated, $next, $id]);
} else {
// active / calibrating は校正完了扱いで active に戻す
$stmt = app_db()->prepare("UPDATE instruments SET last_calibrated_at=?, next_due_at=?, status='active' WHERE id=?");
$stmt->execute([$calibrated, $next, $id]);
}
```
またはよりシンプルに、`suspended`/`disposed` の場合は `record.php` 冒頭でリダイレクトしてブロックする:
```php
if (in_array($instrument['status'], ['suspended', 'disposed'], true)) {
flash_set('使用停止・廃棄済みの計測器には校正記録を追加できません。');
redirect('index.php?page=view&id=' . $id);
}
```
どちらの方針を採用するかはAtlas判断で構わないが、少なくとも廃棄済み計測器が「使用中」に復活することは防ぐこと。
💬 返信 (3)
🛠 開発を開始しました (バグ修正 (calibrlog))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「CalibrLog - 計測器・治工具 校正管理システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=calibrlog
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/calibrlog/
ご利用ありがとうございます!
ご要望いただいた「CalibrLog - 計測器・治工具 校正管理システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=calibrlog
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/calibrlog/
ご利用ありがとうございます!
Echo
Iris