会計ロジック・レセプト・検査基準値の間違いを見つけて直す方法
VetCare Proの会計機能・レセプト機能・検査基準値等は、動物病院の実務経験がない公務員獣医が、 素人が推測で実装したものです。以下のような問題がある可能性があります:
このガイドは、これらの問題をご自身で見つけて修正する方法を解説します。
PHPの基本的な知識があれば、ほとんどの修正は可能です。PHPの経験がない方でも、 このガイドに沿って進めれば、基本的な修正作業ができるように構成しています。
修正する前に、プロジェクトのファイル構造を理解しましょう。修正が必要なファイルがどこにあるかが分かります。
会計機能は、動物病院の会計実務を知らないまま作られています。以下の問題がある可能性が高いです。
対象ファイル:pages/invoice_form.php 74行目付近
現在の実装:消費税を round()(四捨五入)で計算しています。
// 現在のコード(invoice_form.php 74行目付近)
$tax = round($subtotal * ($tax_rate / 100)); // 四捨五入
潜在的な問題:動物病院の会計では切り捨てが一般的かもしれません(人間の医療では切り捨てが標準)。 ここがどうあるべきかは、実際の動物病院の会計実務に基づいて判断してください。
// 修正例1:切り捨てに変更
$tax = floor($subtotal * ($tax_rate / 100)); // 切り捨て
// 修正例2:切り上げに変更
$tax = ceil($subtotal * ($tax_rate / 100)); // 切り上げ
// 修正例3:1円未満を四捨五入(現状のまま)
$tax = round($subtotal * ($tax_rate / 100)); // 四捨五入
$amt = round($qty * $price);)にもあります。
行単位の端数処理と合計後の端数処理が一貫しているか確認してください。
対象ファイル:pages/invoice_form.php 75-77行目
現在の実装:合計 = 小計 + 消費税 - 割引 - 保険負担
// 現在のコード
$discount = (int)($_POST['discount'] ?? 0);
$insurance = (int)($_POST['insurance_covered'] ?? 0);
$total = $subtotal + $tax - $discount - $insurance;
潜在的な問題:
// 修正例:保険計算をより厳密にする場合
$subtotal = ...; // 小計(税抜)
$tax = floor($subtotal * ($tax_rate / 100));
$total_with_tax = $subtotal + $tax;
// 割引は税込額から
$after_discount = $total_with_tax - $discount;
// 保険負担額 = (割引後の額 - 免責金額) x 保険負担率
$deductible = (int)($_POST['deductible'] ?? 0);
$insurance_base = max(0, $after_discount - $deductible);
$insurance_covered = floor($insurance_base * $coverage_rate / 100);
// 飼い主負担額
$owner_pays = $after_discount - $insurance_covered;
対象ファイル:pages/invoice_form.php 43-46行目
// 現在のコード
$name = $_POST['item_name'][$i];
$qty = (float)$_POST['item_qty'][$i];
$price = (int)$_POST['item_price'][$i];
$amt = round($qty * $price); // 行合計を四捨五入
確認ポイント:数量が小数(例:0.5錠)の場合、行合計の端数処理が正しいか。 また、行単位で税込計算するのか、合計後に税込計算するのかも確認が必要です。
レセプト機能は完全にAIの推測で作られており、実際の動物保険のレセプト様式に一切準拠していません。 「レセプトっぽい見た目のフォーム」という認識でお使いください。実用化するには大幅な修正が必要です。
対象ファイル:pages/insurance_claim_form.php 15-18行目
// 現在のコード(保険負担額の計算)
$totalFee = (int)$_POST['total_medical_fee'];
$covRate = $policy ? $policy['coverage_rate'] : 50;
$coveredAmount = round($totalFee * $covRate / 100);
$ownerCopay = $totalFee - $coveredAmount;
問題点:
$_POST['deductible'](免責金額)がレセプト計算に反映されていない(データは保存されるが計算に使われない)
対象ファイル:pages/insurance_claims.php(レセプト一覧表示)
実際のレセプト様式に準拠させるには、以下の対応が必要です:
検査結果の「正常/異常」判定に使われる基準値は、サンプルデータとして入っているものです。 動物種・年齢・検査機器によって基準値は大きく異なります。必ず自院の検査機器メーカーの基準値に修正してください。
大量に修正する場合は、SQLiteデータベースを直接編集する方が効率的です。
# SQLite データベースに接続
sqlite3 data/vetcare.db
-- 検査マスタの一覧を確認
SELECT id, test_name, category, reference_low, reference_high, unit
FROM test_master
ORDER BY category, test_name;
-- 基準値の更新例(BUNの基準値を変更)
UPDATE test_master
SET reference_low = 10, reference_high = 30
WHERE test_name = 'BUN';
-- 一括修正用のCSVからインポート
-- (先にCSVを準備してから)
.mode csv
.import updated_test_master.csv test_master_temp
対象ファイル:migrations/002_seed_data.php
セットアップウィザードでサンプルデータを投入する際のデータを修正します。
新規インストール時に最初から正しい基準値が入るようになります。
検査結果の異常判定(高値↑/低値↓の表示)は、検査結果登録時に自動判定されます。 判定ロジックを確認・修正する場所:
// 検査結果の異常判定(lab_results関連のページで使用)
// 基本的な判定ロジック:
if ($result_value < $reference_low) {
$is_abnormal = 1; // 低値(↓で表示)
} elseif ($result_value > $reference_high) {
$is_abnormal = 1; // 高値(↑で表示)
} else {
$is_abnormal = 0; // 正常範囲内
}
// 問題点: 動物種・年齢・性別による基準値の違いが考慮されていない
// 改善案: test_master に species カラムを追加し、動物種別に基準値を設定
サンプルの薬品マスタに入っている薬品名・用量・単価はAIが推測で入力したものです。 必ず実際の薬品情報に基づいて修正してください。
請求書・領収書の印刷レイアウト、記載項目を自院に合わせてカスタマイズする方法です。
対象ファイル:pages/invoice_print.php
@media print セクション)を調整/* 印刷レイアウトの CSS 修正例 */
@media print {
/* 用紙サイズの変更(A5に変更する場合) */
@page {
size: A5;
margin: 10mm;
}
/* フォントサイズの調整 */
body {
font-size: 11px;
}
}
data/vetcare.db と修正するPHPファイルのコピーを保存config.php の DEBUG_MODE を true にしてエラーメッセージを確認Ctrl+G で行番号を指定してジャンプCtrl+F でキーワード検索Ctrl+S)git diff で変更点を確認php -l ファイル名.php で構文チェック| 修正したいこと | 対象ファイル | 検索キーワード |
|---|---|---|
| 消費税の端数処理 | pages/invoice_form.php | round($subtotal |
| 保険負担額の計算 | pages/insurance_claim_form.php | coverage_rate |
| 合計金額の計算式 | pages/invoice_form.php | $total = |
| 検査の異常判定 | pages/lab_results.php | is_abnormal |
| 印刷レイアウト | pages/invoice_print.php | @media print |
| 税率のデフォルト値 | pages/settings.php | tax_rate |
| 予約枠の設定 | pages/settings.php | appointment_interval |
| 薬品在庫の減算 | pages/invoice_form.php | stock_quantity |
修正した内容をGitHubを通じてプロジェクトにフィードバックしていただけると、 他のユーザーの方にも恩恵があります。