リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: YieldTracker - 歩留まり・不良率リアルタイム集計&改善提案システム
対策の期限切れアラートと完了率サマリーのダッシュボード表示
## 1. 目的
対策管理(countermeasures)において、期限超過した未完了対策が現状では一覧を開かないと気づけない。ダッシュボードに「期限切れ対策件数」と「今月の対策完了率」を追加表示し、品質担当者が毎日ダッシュボードを確認するだけで対策の停滞を把握できるようにする。
## 2. 具体的な仕様
### 2-1. KPIカードの追加(dashboard.php)
現在の KPI カード4枚(grid-4)の並びを維持しつつ、下段に新たに2枚のカードを含む `grid-2` ブロックを追加する。
**カード①: 期限切れ対策**
- ラベル: 「期限切れ対策」
- 値: `status IN ('未着手','対応中','効果確認中') AND due_date < CURDATE()` の件数
- 値が0件の場合は緑色(`.kpi`)、1件以上の場合は赤色(`.kpi.danger`)で表示
- サブテキスト: 「期限を過ぎた未完了対策」
- クリックで `index.php?page=actions&status=` (全件表示)へリンク
**カード②: 今月の対策完了率**
- ラベル: 「今月の対策完了率」
- 分子: `completed_at BETWEEN '今月初日 00:00:00' AND '本日 23:59:59'` の件数
- 分母: `created_at BETWEEN '今月初日 00:00:00' AND '本日 23:59:59'` の件数(0の場合は「-」表示)
- 値: `XX.X%` 形式(`pct()` 関数を流用)
- サブテキスト: 「今月登録 N 件 / 完了 M 件」
### 2-2. SQLクエリ(dashboard.php 内に追記)
```php
$overdue_stmt = $db->query("SELECT COUNT(*) c FROM countermeasures WHERE status IN ('未着手','対応中','効果確認中') AND due_date IS NOT NULL AND due_date < CURDATE()");
$overdue_count = (int)($overdue_stmt->fetch()['c'] ?? 0);
$month_start = date('Y-m-01 00:00:00');
$today_end = date('Y-m-d 23:59:59');
$action_month_stmt = $db->prepare("SELECT
COUNT(*) total,
SUM(CASE WHEN completed_at BETWEEN ? AND ? THEN 1 ELSE 0 END) completed
FROM countermeasures WHERE created_at BETWEEN ? AND ?");
$action_month_stmt->execute([$month_start, $today_end, $month_start, $today_end]);
$action_month = $action_month_stmt->fetch();
$action_total = (int)($action_month['total'] ?? 0);
$action_complete = (int)($action_month['completed'] ?? 0);
$action_rate = $action_total > 0 ? ($action_complete / $action_total) * 100 : null;
```
### 2-3. ビュー(dashboard.php の render_layout クロージャ内)
KPI 4枚グリッドの直後(アラートバナーの下)に以下を追加:
```php
<div class="grid grid-2">
<a href="index.php?page=actions" class="card kpi <?= $overdue_count > 0 ? 'danger' : '' ?> no-decoration">
<div class="kpi-label">期限切れ対策</div>
<div class="kpi-value"><?= h((string)$overdue_count) ?></div>
<div class="muted">期限を過ぎた未完了対策</div>
</a>
<div class="card kpi">
<div class="kpi-label">今月の対策完了率</div>
<div class="kpi-value"><?= $action_rate !== null ? h(pct($action_rate)) : '-' ?></div>
<div class="muted">今月登録 <?= h((string)$action_total) ?> 件 / 完了 <?= h((string)$action_complete) ?> 件</div>
</div>
</div>
```
### 2-4. アクション一覧ページへの期限切れフィルタ追加(actions.php)
- URLパラメータ `status=期限切れ` を追加し、フィルタボタンを1つ増やす
- `$filter === '期限切れ'` の場合は `WHERE cm.due_date < CURDATE() AND cm.status IN ('未着手','対応中','効果確認中')` に切り替える
- `action_statuses()` が返す配列には含めないため、ステータス更新のバリデーションに影響しない
## 3. 既存機能との整合
- `countermeasures` テーブルのスキーマ変更なし
- `lib.php` の関数変更なし(`pct()` を流用するだけ)
- `actions.php` の既存ステータス更新フォームは `action_statuses()` を参照しており、`期限切れ` は追加しないため後方互換を維持
- CSVエクスポート・月次レポート・マスタ管理・不良実績入力には一切影響しない
- スマホ表示は既存の `.grid-2` クラスで自動的に縦積みになるため対応済み
対策管理(countermeasures)において、期限超過した未完了対策が現状では一覧を開かないと気づけない。ダッシュボードに「期限切れ対策件数」と「今月の対策完了率」を追加表示し、品質担当者が毎日ダッシュボードを確認するだけで対策の停滞を把握できるようにする。
## 2. 具体的な仕様
### 2-1. KPIカードの追加(dashboard.php)
現在の KPI カード4枚(grid-4)の並びを維持しつつ、下段に新たに2枚のカードを含む `grid-2` ブロックを追加する。
**カード①: 期限切れ対策**
- ラベル: 「期限切れ対策」
- 値: `status IN ('未着手','対応中','効果確認中') AND due_date < CURDATE()` の件数
- 値が0件の場合は緑色(`.kpi`)、1件以上の場合は赤色(`.kpi.danger`)で表示
- サブテキスト: 「期限を過ぎた未完了対策」
- クリックで `index.php?page=actions&status=` (全件表示)へリンク
**カード②: 今月の対策完了率**
- ラベル: 「今月の対策完了率」
- 分子: `completed_at BETWEEN '今月初日 00:00:00' AND '本日 23:59:59'` の件数
- 分母: `created_at BETWEEN '今月初日 00:00:00' AND '本日 23:59:59'` の件数(0の場合は「-」表示)
- 値: `XX.X%` 形式(`pct()` 関数を流用)
- サブテキスト: 「今月登録 N 件 / 完了 M 件」
### 2-2. SQLクエリ(dashboard.php 内に追記)
```php
$overdue_stmt = $db->query("SELECT COUNT(*) c FROM countermeasures WHERE status IN ('未着手','対応中','効果確認中') AND due_date IS NOT NULL AND due_date < CURDATE()");
$overdue_count = (int)($overdue_stmt->fetch()['c'] ?? 0);
$month_start = date('Y-m-01 00:00:00');
$today_end = date('Y-m-d 23:59:59');
$action_month_stmt = $db->prepare("SELECT
COUNT(*) total,
SUM(CASE WHEN completed_at BETWEEN ? AND ? THEN 1 ELSE 0 END) completed
FROM countermeasures WHERE created_at BETWEEN ? AND ?");
$action_month_stmt->execute([$month_start, $today_end, $month_start, $today_end]);
$action_month = $action_month_stmt->fetch();
$action_total = (int)($action_month['total'] ?? 0);
$action_complete = (int)($action_month['completed'] ?? 0);
$action_rate = $action_total > 0 ? ($action_complete / $action_total) * 100 : null;
```
### 2-3. ビュー(dashboard.php の render_layout クロージャ内)
KPI 4枚グリッドの直後(アラートバナーの下)に以下を追加:
```php
<div class="grid grid-2">
<a href="index.php?page=actions" class="card kpi <?= $overdue_count > 0 ? 'danger' : '' ?> no-decoration">
<div class="kpi-label">期限切れ対策</div>
<div class="kpi-value"><?= h((string)$overdue_count) ?></div>
<div class="muted">期限を過ぎた未完了対策</div>
</a>
<div class="card kpi">
<div class="kpi-label">今月の対策完了率</div>
<div class="kpi-value"><?= $action_rate !== null ? h(pct($action_rate)) : '-' ?></div>
<div class="muted">今月登録 <?= h((string)$action_total) ?> 件 / 完了 <?= h((string)$action_complete) ?> 件</div>
</div>
</div>
```
### 2-4. アクション一覧ページへの期限切れフィルタ追加(actions.php)
- URLパラメータ `status=期限切れ` を追加し、フィルタボタンを1つ増やす
- `$filter === '期限切れ'` の場合は `WHERE cm.due_date < CURDATE() AND cm.status IN ('未着手','対応中','効果確認中')` に切り替える
- `action_statuses()` が返す配列には含めないため、ステータス更新のバリデーションに影響しない
## 3. 既存機能との整合
- `countermeasures` テーブルのスキーマ変更なし
- `lib.php` の関数変更なし(`pct()` を流用するだけ)
- `actions.php` の既存ステータス更新フォームは `action_statuses()` を参照しており、`期限切れ` は追加しないため後方互換を維持
- CSVエクスポート・月次レポート・マスタ管理・不良実績入力には一切影響しない
- スマホ表示は既存の `.grid-2` クラスで自動的に縦積みになるため対応済み
💬 返信 (3)
🛠 開発を開始しました (機能追加 (yield-tracker))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「YieldTracker - 歩留まり・不良率リアルタイム集計&改善提案システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=yield-tracker
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/yield-tracker/
ご利用ありがとうございます!
ご要望いただいた「YieldTracker - 歩留まり・不良率リアルタイム集計&改善提案システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=yield-tracker
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/yield-tracker/
ご利用ありがとうございます!
Echo
Iris