完整的中医经方诊断逻辑增强版

我将为您扩展诊断逻辑,使其涵盖更多经典证型和经方对应关系,形成一个更完整的中医诊断系统。

1. 首先更新 prescriptions.php 增加更多经方

<?php
// 经方数据库 - 增强版
$classic_prescriptions = [
    // 解表剂
    'gui_zhi_tang' => [
        'name' => '桂枝汤',
        'composition' => '桂枝9g, 芍药9g, 生姜9g, 大枣4枚, 甘草6g',
        'indications' => '太阳中风证。头痛发热,汗出恶风,鼻鸣干呕,苔白不渴,脉浮缓或浮弱者。',
        'contraindications' => '表实无汗,或表寒里热,不汗出而烦躁者禁用。',
        'category' => '解表剂'
    ],
    'ma_huang_tang' => [
        'name' => '麻黄汤',
        'composition' => '麻黄9g, 桂枝6g, 杏仁6g, 甘草3g',
        'indications' => '太阳伤寒证。恶寒发热,头身疼痛,无汗而喘,舌苔薄白,脉浮紧。',
        'contraindications' => '表虚自汗、血虚而脉兼尺中迟、误下而见身重心悸者禁用。',
        'category' => '解表剂'
    ],
    'sang_ju_yin' => [
        'name' => '桑菊饮',
        'composition' => '桑叶7.5g, 菊花3g, 杏仁6g, 连翘5g, 薄荷2.5g, 桔梗6g, 甘草2.5g, 芦根6g',
        'indications' => '风温初起。咳嗽,身热不甚,口微渴,脉浮数。',
        'contraindications' => '风寒咳嗽不宜使用。',
        'category' => '解表剂'
    ],

    // 和解剂
    'xiao_chai_hu_tang' => [
        'name' => '小柴胡汤',
        'composition' => '柴胡12g, 黄芩9g, 人参6g, 半夏9g, 甘草5g, 生姜9g, 大枣4枚',
        'indications' => '少阳病证。往来寒热,胸胁苦满,默默不欲饮食,心烦喜呕,口苦,咽干,目眩,舌苔薄白,脉弦者。',
        'contraindications' => '肝阳上亢、肝火偏盛者慎用。',
        'category' => '和解剂'
    ],

    // 清热剂
    'bai_hu_tang' => [
        'name' => '白虎汤',
        'composition' => '石膏30g, 知母9g, 甘草3g, 粳米9g',
        'indications' => '阳明气分热盛证。壮热面赤,烦渴引饮,汗出恶热,脉洪大有力。',
        'contraindications' => '表证未解的无汗发热,阴虚发热者禁用。',
        'category' => '清热剂'
    ],

    // 温里剂
    'si_ni_tang' => [
        'name' => '四逆汤',
        'composition' => '附子15g, 干姜9g, 甘草6g',
        'indications' => '少阴病。四肢厥逆,恶寒蜷卧,呕吐不渴,腹痛下利,神衰欲寐,舌苔白滑,脉微细者。',
        'contraindications' => '真热假寒者禁用。',
        'category' => '温里剂'
    ],

    // 补益剂
    'si_jun_zi_tang' => [
        'name' => '四君子汤',
        'composition' => '人参9g, 白术9g, 茯苓9g, 甘草6g',
        'indications' => '脾胃气虚证。面色萎白,语声低微,气短乏力,食少便溏,舌淡苔白,脉虚弱。',
        'contraindications' => '实证、热证者不宜使用。',
        'category' => '补益剂'
    ],

    // 祛湿剂
    'ping_wei_san' => [
        'name' => '平胃散',
        'composition' => '苍术15g, 厚朴9g, 陈皮9g, 甘草6g',
        'indications' => '湿滞脾胃证。脘腹胀满,不思饮食,口淡无味,呕吐恶心,嗳气吞酸,肢体沉重,怠惰嗜卧,常多自利,舌苔白腻而厚,脉缓。',
        'contraindications' => '阴虚气滞者慎用。',
        'category' => '祛湿剂'
    ],

    // 理血剂
    'xue_fu_zhu_yu_tang' => [
        'name' => '血府逐瘀汤',
        'composition' => '桃仁12g, 红花9g, 当归9g, 生地黄9g, 川芎5g, 赤芍6g, 牛膝9g, 桔梗5g, 柴胡3g, 枳壳6g, 甘草3g',
        'indications' => '胸中血瘀证。胸痛,头痛日久,痛如针刺而有定处,或呃逆日久不止,或内热烦闷,或心悸失眠,急躁易怒,入暮潮热,唇暗或两目暗黑,舌质暗红或有瘀斑,脉涩或弦紧。',
        'contraindications' => '孕妇及无瘀血者忌用。',
        'category' => '理血剂'
    ]
];

// 症状与经方对应关系 - 增强版
$symptom_prescription_map = [
    // 发热相关证型
    'fever' => [
        'with_sweat' => 'gui_zhi_tang',
        'no_sweat' => 'ma_huang_tang',
        'alternating_chills_fever' => 'xiao_chai_hu_tang',
        'high_fever_thirst' => 'bai_hu_tang',
        'mild_fever_cough' => 'sang_ju_yin'
    ],

    // 疼痛相关证型
    'pain' => [
        'headache_with_sweat' => 'gui_zhi_tang',
        'headache_no_sweat' => 'ma_huang_tang',
        'chest_pain_fixed' => 'xue_fu_zhu_yu_tang',
        'abdominal_pain_cold' => 'si_ni_tang'
    ],

    // 消化系统症状
    'digestive' => [
        'poor_appetite_thick_coating' => 'ping_wei_san',
        'diarrhea_cold_limbs' => 'si_ni_tang',
        'weak_fatigue_pale' => 'si_jun_zi_tang'
    ],

    // 四肢症状
    'limbs' => [
        'cold_limbs_diarrhea' => 'si_ni_tang',
        'numbness_purple_tongue' => 'xue_fu_zhu_yu_tang'
    ],

    // 舌象相关
    'tongue' => [
        'pale_with_white_coating' => 'si_ni_tang',
        'red_with_yellow_coating' => 'bai_hu_tang',
        'purple_with_ecchymosis' => 'xue_fu_zhu_yu_tang',
        'teeth_marks_thick_coating' => 'ping_wei_san'
    ],

    // 脉象相关
    'pulse' => [
        'floating_tight' => 'ma_huang_tang',
        'floating_moderate' => 'gui_zhi_tang',
        'wiry' => 'xiao_chai_hu_tang',
        'surging' => 'bai_hu_tang',
        'thin_weak' => 'si_jun_zi_tang'
    ]
];
?>

2. 更新 diagnose.php 诊断逻辑

<?php
require_once 'functions.php';
require_once 'prescriptions.php';

// ... (之前的参数获取代码保持不变)

// 增强诊断逻辑
$diagnosis = '';
$recommended_prescription = null;
$diagnosis_notes = [];
$possible_prescriptions = [];

// 1. 根据发热症状辨证
if (isset($symptoms['fever'])) {
    $fever_type = $symptoms['fever_type'] ?? '';
    $fever_severity = $symptoms['fever_severity'] ?? 2;

    if ($fever_type === 'with_sweat') {
        $diagnosis = '太阳中风证';
        $possible_prescriptions['gui_zhi_tang'] = [
            'score' => 10,
            'reason' => '发热有汗,符合太阳中风证表现'
        ];
    } elseif ($fever_type === 'no_sweat') {
        $diagnosis = '太阳伤寒证';
        $possible_prescriptions['ma_huang_tang'] = [
            'score' => 10,
            'reason' => '发热无汗,符合太阳伤寒证表现'
        ];
    } elseif ($fever_type === 'alternating_chills_fever') {
        $diagnosis = '少阳证';
        $possible_prescriptions['xiao_chai_hu_tang'] = [
            'score' => 10,
            'reason' => '寒热往来,符合少阳证表现'
        ];
    } elseif (isset($symptoms['high_fever']) && $symptoms['high_fever'] == '1') {
        $diagnosis = '阳明经证';
        $possible_prescriptions['bai_hu_tang'] = [
            'score' => 9,
            'reason' => '高热烦渴,符合阳明经证表现'
        ];
    }
}

// 2. 根据头痛症状辨证
if (isset($symptoms['headache'])) {
    $headache_type = $symptoms['headache_type'] ?? '';

    if ($headache_type === 'with_sweat') {
        $possible_prescriptions['gui_zhi_tang']['score'] += 3;
        $possible_prescriptions['gui_zhi_tang']['reason'] .= '; 头痛有汗';
    } elseif ($headache_type === 'no_sweat') {
        $possible_prescriptions['ma_huang_tang']['score'] += 3;
        $possible_prescriptions['ma_huang_tang']['reason'] .= '; 头痛无汗';
    }

    if (isset($symptoms['headache_fixed']) && $symptoms['headache_fixed'] == '1') {
        $possible_prescriptions['xue_fu_zhu_yu_tang'] = [
            'score' => 7,
            'reason' => '头痛如针刺有定处,提示血瘀证'
        ];
    }
}

// 3. 根据四肢症状辨证
if (isset($symptoms['cold_limbs'])) {
    if (isset($symptoms['diarrhea']) && $symptoms['diarrhea'] == '1') {
        $diagnosis = '少阴病';
        $possible_prescriptions['si_ni_tang'] = [
            'score' => 10,
            'reason' => '四肢厥冷伴腹泻,符合少阴病表现'
        ];
    }
}

// 4. 根据消化系统症状辨证
if (isset($symptoms['poor_appetite'])) {
    if (isset($tongue['coating']) && in_array('thick_coating', $tongue['coating'])) {
        $possible_prescriptions['ping_wei_san'] = [
            'score' => 8,
            'reason' => '食欲不振伴舌苔厚腻,提示湿滞脾胃'
        ];
    }
}

if (isset($symptoms['weak_fatigue'])) {
    $possible_prescriptions['si_jun_zi_tang'] = [
        'score' => 7,
        'reason' => '乏力倦怠,提示脾胃气虚'
    ];
}

// 5. 根据舌象辨证
if (isset($tongue['body'])) {
    if ($tongue['body'] === 'pale' && isset($tongue['coating']) && in_array('white_coating', $tongue['coating'])) {
        $possible_prescriptions['si_ni_tang']['score'] = $possible_prescriptions['si_ni_tang']['score'] ?? 0 + 2;
        $diagnosis_notes[] = '舌淡苔白提示阳虚';
    }

    if ($tongue['body'] === 'red' && isset($tongue['coating']) && in_array('yellow_coating', $tongue['coating'])) {
        $possible_prescriptions['bai_hu_tang']['score'] = $possible_prescriptions['bai_hu_tang']['score'] ?? 0 + 3;
        $diagnosis_notes[] = '舌红苔黄提示里热证';
    }

    if ($tongue['body'] === 'purple') {
        $possible_prescriptions['xue_fu_zhu_yu_tang']['score'] = $possible_prescriptions['xue_fu_zhu_yu_tang']['score'] ?? 0 + 4;
        $diagnosis_notes[] = '舌质紫暗提示血瘀证';
    }
}

// 6. 根据脉象辨证
if ($pulse) {
    switch ($pulse) {
        case 'floating_tight':
            $possible_prescriptions['ma_huang_tang']['score'] = $possible_prescriptions['ma_huang_tang']['score'] ?? 0 + 2;
            $diagnosis_notes[] = '脉浮紧提示表寒实证';
            break;
        case 'floating_moderate':
            $possible_prescriptions['gui_zhi_tang']['score'] = $possible_prescriptions['gui_zhi_tang']['score'] ?? 0 + 2;
            $diagnosis_notes[] = '脉浮缓提示太阳中风';
            break;
        case 'wiry':
            $possible_prescriptions['xiao_chai_hu_tang']['score'] = $possible_prescriptions['xiao_chai_hu_tang']['score'] ?? 0 + 3;
            $diagnosis_notes[] = '脉弦提示少阳病';
            break;
        case 'surging':
            $possible_prescriptions['bai_hu_tang']['score'] = $possible_prescriptions['bai_hu_tang']['score'] ?? 0 + 3;
            $diagnosis_notes[] = '脉洪大提示阳明热盛';
            break;
        case 'thin_weak':
            $possible_prescriptions['si_jun_zi_tang']['score'] = $possible_prescriptions['si_jun_zi_tang']['score'] ?? 0 + 3;
            $diagnosis_notes[] = '脉细弱提示气虚';
            break;
    }
}

// 确定最终推荐的经方
if (!empty($possible_prescriptions)) {
    // 按分数排序
    uasort($possible_prescriptions, function($a, $b) {
        return $b['score'] <=> $a['score'];
    });

    // 获取分数最高的经方
    $top_prescription = key($possible_prescriptions);
    $recommended_prescription = $classic_prescriptions[$top_prescription];
    $diagnosis_notes[] = "推荐依据: " . $possible_prescriptions[$top_prescription]['reason'];

    // 如果没有明确的诊断名称,使用经方的主治证型
    if (empty($diagnosis)) {
        $diagnosis = $recommended_prescription['indications'];
    }
}

// 如果没有匹配到特定证型,提供一般建议
if (empty($diagnosis)) {
    $diagnosis = '四诊信息不足,请提供更多症状细节';
    $diagnosis_notes[] = '未能根据现有症状明确辨证';
}

// 添加脉象和舌象分析到诊断依据
if ($pulse) {
    $diagnosis_notes[] = '脉象: ' . $pulse;
}

if (isset($tongue['body'])) {
    $diagnosis_notes[] = '舌质: ' . get_tongue_description($tongue['body']);
}

if (isset($tongue['coating'])) {
    $coating_descriptions = array_map('get_tongue_description', (array)$tongue['coating']);
    $diagnosis_notes[] = '舌苔: ' . implode(', ', $coating_descriptions);
}

// 显示结果部分保持不变...
?>

3. 更新 index.php 增加更多症状选项

<!-- 在症状部分增加更多选项 -->
<fieldset>
    <legend>主要症状</legend>

    <!-- 发热症状组 -->
    <div class="symptom-group">
        <h3>发热</h3>
        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[fever]" value="1" <?php echo isset($symptoms['fever']) ? 'checked' : ''; ?>>
                有发热
            </label>
        </div>

        <div class="form-group sub-symptom">
            <label>发热类型:</label>
            <select name="symptoms[fever_type]">
                <option value="">-- 请选择 --</option>
                <option value="with_sweat" <?php echo (isset($symptoms['fever_type']) && $symptoms['fever_type'] === 'with_sweat') ? 'selected' : ''; ?>>有汗</option>
                <option value="no_sweat" <?php echo (isset($symptoms['fever_type']) && $symptoms['fever_type'] === 'no_sweat') ? 'selected' : ''; ?>>无汗</option>
                <option value="alternating_chills_fever" <?php echo (isset($symptoms['fever_type']) && $symptoms['fever_type'] === 'alternating_chills_fever') ? 'selected' : ''; ?>>寒热往来</option>
            </select>
        </div>

        <div class="form-group sub-symptom">
            <label>严重程度:</label>
            <select name="symptoms[fever_severity]">
                <option value="1" <?php echo (isset($symptoms['fever_severity']) && $symptoms['fever_severity'] == '1') ? 'selected' : ''; ?>>轻微</option>
                <option value="2" <?php echo (!isset($symptoms['fever_severity']) || (isset($symptoms['fever_severity']) && $symptoms['fever_severity'] == '2')) ? 'selected' : ''; ?>>中度</option>
                <option value="3" <?php echo (isset($symptoms['fever_severity']) && $symptoms['fever_severity'] == '3') ? 'selected' : ''; ?>>严重</option>
            </select>
        </div>

        <div class="form-group sub-symptom">
            <label>
                <input type="checkbox" name="symptoms[high_fever]" value="1" <?php echo isset($symptoms['high_fever']) ? 'checked' : ''; ?>>
                高热(39°C以上)
            </label>
        </div>

        <div class="form-group sub-symptom">
            <label>
                <input type="checkbox" name="symptoms[thirst]" value="1" <?php echo isset($symptoms['thirst']) ? 'checked' : ''; ?>>
                口渴喜饮
            </label>
        </div>
    </div>

    <!-- 疼痛症状组 -->
    <div class="symptom-group">
        <h3>疼痛</h3>
        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[headache]" value="1" <?php echo isset($symptoms['headache']) ? 'checked' : ''; ?>>
                头痛
            </label>
        </div>

        <div class="form-group sub-symptom">
            <label>头痛类型:</label>
            <select name="symptoms[headache_type]">
                <option value="">-- 请选择 --</option>
                <option value="with_sweat" <?php echo (isset($symptoms['headache_type']) && $symptoms['headache_type'] === 'with_sweat') ? 'selected' : ''; ?>>有汗</option>
                <option value="no_sweat" <?php echo (isset($symptoms['headache_type']) && $symptoms['headache_type'] === 'no_sweat') ? 'selected' : ''; ?>>无汗</option>
            </select>
        </div>

        <div class="form-group sub-symptom">
            <label>
                <input type="checkbox" name="symptoms[headache_fixed]" value="1" <?php echo isset($symptoms['headache_fixed']) ? 'checked' : ''; ?>>
                痛处固定
            </label>
        </div>

        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[chest_pain]" value="1" <?php echo isset($symptoms['chest_pain']) ? 'checked' : ''; ?>>
                胸痛
            </label>
        </div>

        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[abdominal_pain]" value="1" <?php echo isset($symptoms['abdominal_pain']) ? 'checked' : ''; ?>>
                腹痛
            </label>
        </div>
    </div>

    <!-- 消化系统症状组 -->
    <div class="symptom-group">
        <h3>消化系统</h3>
        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[poor_appetite]" value="1" <?php echo isset($symptoms['poor_appetite']) ? 'checked' : ''; ?>>
                食欲不振
            </label>
        </div>

        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[diarrhea]" value="1" <?php echo isset($symptoms['diarrhea']) ? 'checked' : ''; ?>>
                腹泻
            </label>
        </div>

        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[weak_fatigue]" value="1" <?php echo isset($symptoms['weak_fatigue']) ? 'checked' : ''; ?>>
                乏力倦怠
            </label>
        </div>
    </div>

    <!-- 四肢症状组 -->
    <div class="symptom-group">
        <h3>四肢症状</h3>
        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[cold_limbs]" value="1" <?php echo isset($symptoms['cold_limbs']) ? 'checked' : ''; ?>>
                四肢厥冷
            </label>
        </div>

        <div class="form-group">
            <label>
                <input type="checkbox" name="symptoms[numbness]" value="1" <?php echo isset($symptoms['numbness']) ? 'checked' : ''; ?>>
                肢体麻木
            </label>
        </div>
    </div>
</fieldset>

<!-- 更新脉象选项 -->
<fieldset>
    <legend>脉象</legend>
    <div class="form-group">
        <label for="pulse">脉象:</label>
        <select id="pulse" name="pulse" required>
            <option value="">-- 请选择 --</option>
            <option value="floating_tight" <?php echo ($pulse === 'floating_tight') ? 'selected' : ''; ?>>浮紧</option>
            <option value="floating_moderate" <?php echo ($pulse === 'floating_moderate') ? 'selected' : ''; ?>>浮缓</option>
            <option value="sinking" <?php echo ($pulse === 'sinking') ? 'selected' : ''; ?>>沉</option>
            <option value="wiry" <?php echo ($pulse === 'wiry') ? 'selected' : ''; ?>>弦</option>
            <option value="surging" <?php echo ($pulse === 'surging') ? 'selected' : ''; ?>>洪大</option>
            <option value="thin_weak" <?php echo ($pulse === 'thin_weak') ? 'selected' : ''; ?>>细弱</option>
            <option value="slippery" <?php echo ($pulse === 'slippery') ? 'selected' : ''; ?>>滑</option>
            <option value="rapid" <?php echo ($pulse === 'rapid') ? 'selected' : ''; ?>>数</option>
        </select>
    </div>
</fieldset>

诊断逻辑增强说明

  1. 多维度辨证
  • 现在系统会综合考虑发热、疼痛、消化系统症状、四肢症状、舌象和脉象
  • 采用评分机制,不同症状组合会增加相关经方的推荐分数
  1. 新增证型覆盖
  • 太阳病(中风/伤寒)
  • 少阳病
  • 阳明病
  • 少阴病
  • 脾胃气虚
  • 湿滞脾胃
  • 血瘀证
  1. 更智能的推荐系统
  • 当多个经方可能适用时,系统会选择分数最高的
  • 提供详细的推荐依据说明
  1. 更全面的症状收集
  • 增加了消化系统症状
  • 细化了疼痛特征
  • 完善了脉象分类

这个增强版的诊断系统能够处理更复杂的中医辨证场景,提供更准确的经方推荐。您可以根据需要继续扩展症状和经方数据库。


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *