رزرو نوبت
منوی دسته بندی

تست






تحلیل هوشمند نتایج آزمایش پزشکی


تحلیل هوشمند نتایج آزمایش پزشکی

سن و جنسیت خود را وارد کرده، سپس مقادیر آزمایش‌های مورد نظر را تکمیل و دکمه تحلیل را بزنید.

سلب مسئولیت مهم: این ابزار صرفاً جنبه اطلاع‌رسانی اولیه دارد و به هیچ عنوان جایگزین تشخیص، توصیه و درمان پزشکی حرفه‌ای نمی‌باشد. تفسیر نتایج آزمایش‌ها پیچیده است و باید توسط پزشک متخصص و با در نظر گرفتن سوابق پزشکی کامل شما انجام شود. همیشه برای هرگونه تصمیم‌گیری درمانی به پزشک خود مراجعه کنید. محدوده‌های طبیعی ارائه شده در این ابزار عمومی هستند و ممکن است با محدوده‌های مرجع آزمایشگاه شما متفاوت باشند.



<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>تحلیل هوشمند نتایج آزمایش پزشکی</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;700&display=swap" rel="stylesheet">
    <style>
        body {
            font-family: 'Vazirmatn', sans-serif;
            direction: rtl;
            background-color: #f0f4f8; /* Light pastel blue-gray background */
        }
        .container {
            max-width: 800px;
            margin: 2rem auto;
            padding: 2rem;
            background-color: #ffffff; /* White container background */
            border-radius: 0.75rem; /* Tailwind rounded-xl */
            box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* Tailwind shadow-lg */
        }
        .form-input, .form-select {
            border-color: #cbd5e1; /* Tailwind slate-300 */
            border-radius: 0.375rem; /* Tailwind rounded-md */
            padding-top: 0.5rem;
            padding-bottom: 0.5rem;
            transition: all 0.15s ease-in-out;
        }
        .form-input:focus, .form-select:focus {
            border-color: #3b82f6; /* Tailwind blue-500 */
            box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); /* Focus ring */
        }
        .result-card {
            border: 1px solid #e2e8f0; /* Tailwind slate-200 */
            border-radius: 0.5rem; /* Tailwind rounded-lg */
            padding: 1.5rem;
            margin-top: 1rem; 
            background-color: #f8fafc; /* Tailwind slate-50, slightly off-white */
        }
        .result-card:first-child {
            margin-top: 1.5rem;
        }
        .result-title {
            font-size: 1.125rem; /* Tailwind text-lg */
            font-weight: 700; /* Tailwind font-bold */
            color: #1e293b; /* Tailwind slate-800 */
        }
        .result-text {
            font-size: 0.95rem; 
            color: #334155; /* Tailwind slate-700 */
            line-height: 1.65;
        }
        .brief-explanation-text {
            font-size: 0.85rem;
            color: #475569; /* Tailwind slate-600 */
            font-style: italic;
        }
        .disclaimer {
            font-size: 0.875rem; 
            color: #dc2626; /* Tailwind red-600 */
            margin-top: 2rem;
            padding: 1rem;
            background-color: #fee2e2; /* Tailwind red-100 */
            border: 1px solid #fca5a5; /* Tailwind red-300 */
            border-radius: 0.375rem;
            text-align: center;
            font-weight: normal;
        }
        label {
            text-align: right;
            display: block;
            font-weight: 600; /* Tailwind font-semibold */
            color: #475569; /* Tailwind slate-600 */
        }
        input[type="number"] {
            text-align: right;
        }
        .test-entry {
            padding: 1.25rem; 
            border: 1px solid #e2e8f0; 
            border-radius: 0.5rem; 
            margin-bottom: 1rem;
            transition: box-shadow 0.2s ease-in-out;
        }
        .test-entry:hover {
            box-shadow: 0 4px 12px -1px rgba(0,0,0,0.07);
        }
        .test-entry:last-child {
            margin-bottom: 0;
        }
        .user-info-section {
            background-color: #eff6ff; /* Tailwind blue-50 */
            padding: 1.5rem;
            border-radius: 0.5rem;
            margin-bottom: 2rem;
            border: 1px solid #bfdbfe; /* Tailwind blue-200 */
        }
        .bg-pastel-1 { background-color: #e0f2fe; border-left: 4px solid #7dd3fc; } 
        .bg-pastel-2 { background-color: #dcfce7; border-left: 4px solid #86efac; } 
        .bg-pastel-3 { background-color: #fef3c7; border-left: 4px solid #fde047; } 
        .bg-pastel-4 { background-color: #f3e8ff; border-left: 4px solid #d8b4fe; } 
        .bg-pastel-5 { background-color: #ffe4e6; border-left: 4px solid #fda4af; } 
    </style>
</head>
<body class="bg-gray-100">
    <div class="container">
        <header class="text-center mb-8">
            <h1 class="text-3xl font-bold text-blue-700">تحلیل هوشمند نتایج آزمایش پزشکی</h1>
            <p class="text-gray-700 mt-2">سن و جنسیت خود را وارد کرده، سپس مقادیر آزمایش‌های مورد نظر را تکمیل و دکمه تحلیل را بزنید.</p>
        </header>

        <div class="user-info-section grid grid-cols-1 sm:grid-cols-2 gap-6">
            <div>
                <label for="age" class="block text-sm font-medium text-gray-700 mb-1">سن:</label>
                <input type="number" id="age" name="age" class="form-input mt-1 block w-full py-2 px-3 shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm" placeholder="مثال: 35">
            </div>
            <div>
                <label for="gender" class="block text-sm font-medium text-gray-700 mb-1">جنسیت:</label>
                <select id="gender" name="gender" class="form-select mt-1 block w-full py-2 px-3 shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm">
                    <option value="">انتخاب کنید...</option>
                    <option value="male">آقا</option>
                    <option value="female">خانم</option>
                </select>
            </div>
        </div>

        <div class="bg-white p-6 rounded-lg shadow-md">
            <div id="testInputsContainer" class="space-y-4">
                </div>

            <button onclick="analyzeAllTests()" class="w-full mt-8 bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-md focus:outline-none focus:shadow-outline transition duration-150 ease-in-out text-lg">
                تحلیل تمام نتایج وارد شده
            </button>
        </div>

        <div id="resultArea" class="mt-6">
            </div>
        
        <div class="disclaimer">
            <strong>سلب مسئولیت مهم:</strong> این ابزار صرفاً جنبه اطلاع‌رسانی اولیه دارد و به هیچ عنوان جایگزین تشخیص، توصیه و درمان پزشکی حرفه‌ای نمی‌باشد. تفسیر نتایج آزمایش‌ها پیچیده است و باید توسط پزشک متخصص و با در نظر گرفتن سوابق پزشکی کامل شما انجام شود. همیشه برای هرگونه تصمیم‌گیری درمانی به پزشک خود مراجعه کنید. محدوده‌های طبیعی ارائه شده در این ابزار عمومی هستند و ممکن است با محدوده‌های مرجع آزمایشگاه شما متفاوت باشند.
        </div>
    </div>

    <script>
        // Data for medical tests in the specified order
        const testData = {
            fbs: {
                name: "قند خون ناشتا (FBS)",
                briefExplanation: "میزان قند موجود در خون پس از ۸ تا ۱۲ ساعت ناشتایی را اندازه‌گیری می‌کند.",
                unit: "mg/dL",
                ranges: [
                    { limit: 70, interpretation: "پایین‌تر از حد طبیعی (هیپوگلیسمی). نیاز به بررسی بیشتر.", status: "پایین" },
                    { limit: 100, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: 125, interpretation: "بالاتر از حد طبیعی (پیش‌دیابت).", status: "مرزی بالا" },
                    { limit: Infinity, interpretation: "بسیار بالاتر از حد طبیعی (احتمال دیابت). مراجعه فوری به پزشک ضروری است.", status: "بالا" }
                ],
                normalRangeTextGeneral: "70-100 mg/dL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص غدد"
            },
            hba1c: {
                name: "هموگلوبین ای‌وان‌سی (HbA1c)",
                briefExplanation: "میانگین قند خون طی ۲-۳ ماه گذشته را نشان می‌دهد و برای تشخیص و کنترل دیابت استفاده می‌شود.",
                unit: "%",
                ranges: [
                    { limit: 5.7, interpretation: "طبیعی، نشان‌دهنده کنترل خوب قند خون در افراد غیر دیابتی.", status: "طبیعی" },
                    { limit: 6.5, interpretation: "پیش‌دیابت، ریسک ابتلا به دیابت در آینده افزایش یافته است.", status: "پیش‌دیابت" },
                    { limit: Infinity, interpretation: "دیابت، نیاز به مدیریت و درمان دیابت تحت نظر پزشک.", status: "دیابت" }
                ],
                normalRangeTextGeneral: "کمتر از 5.7% (طبیعی)، 5.7%-6.4% (پیش‌دیابت)، 6.5% و بالاتر (دیابت)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص غدد"
            },
            bun: {
                name: "نیتروژن اوره خون (BUN)",
                briefExplanation: "محصول زائد متابولیسم پروتئین است که توسط کلیه‌ها دفع می‌شود و عملکرد کلیه را نشان می‌دهد.",
                unit: "mg/dL",
                ranges: [ // Example ranges, can vary
                    { limit: 7, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد، نیاز به بررسی بیشتر.", status: "پایین" },
                    { limit: 20, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی، ممکن است نشانه‌ای از مشکل کلیوی یا دهیدراتاسیون باشد.", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 7-20 mg/dL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص کلیه (نفرولوژیست)"
            },
            creat: {
                name: "کراتینین (Creatinine)",
                briefExplanation: "محصول زائد عضلانی است که توسط کلیه‌ها فیلتر می‌شود و شاخص مهمی برای عملکرد کلیه است.",
                unit: "mg/dL",
                genderSpecificRanges: {
                    male: [
                        { limit: 0.7, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                        { limit: 1.3, interpretation: "در محدوده طبیعی برای آقایان.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای آقایان، ممکن است نشانه‌ای از مشکل کلیوی باشد.", status: "بالا" }
                    ],
                    female: [
                        { limit: 0.6, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                        { limit: 1.1, interpretation: "در محدوده طبیعی برای خانم‌ها.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای خانم‌ها، ممکن است نشانه‌ای از مشکل کلیوی باشد.", status: "بالا" }
                    ]
                },
                normalRangeTextMale: "آقایان: حدود 0.7-1.3 mg/dL",
                normalRangeTextFemale: "خانم‌ها: حدود 0.6-1.1 mg/dL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص کلیه (نفرولوژیست)"
            },
            uric_acid: {
                name: "اسید اوریک (Uric Acid)",
                briefExplanation: "محصول نهایی متابولیسم پورین‌ها است و افزایش آن می‌تواند منجر به نقرس یا سنگ کلیه شود.",
                unit: "mg/dL",
                genderSpecificRanges: {
                    male: [
                        { limit: 3.4, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                        { limit: 7.0, interpretation: "در محدوده طبیعی برای آقایان.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای آقایان، ریسک نقرس افزایش می‌یابد.", status: "بالا" }
                    ],
                    female: [
                        { limit: 2.4, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                        { limit: 6.0, interpretation: "در محدوده طبیعی برای خانم‌ها.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای خانم‌ها، ریسک نقرس افزایش می‌یابد.", status: "بالا" }
                    ]
                },
                normalRangeTextMale: "آقایان: حدود 3.4-7.0 mg/dL",
                normalRangeTextFemale: "خانم‌ها: حدود 2.4-6.0 mg/dL",
                specialist: "پزشک عمومی، متخصص داخلی، روماتولوژیست"
            },
            tg: {
                name: "تری‌گلیسرید (Triglycerides - TG)",
                briefExplanation: "نوعی چربی در خون است که افزایش آن با خطر بیماری‌های قلبی و پانکراتیت مرتبط است.",
                unit: "mg/dL",
                ranges: [
                    { limit: 150, interpretation: "مطلوب.", status: "مطلوب" },
                    { limit: 200, interpretation: "مرزی بالا.", status: "مرزی بالا" },
                    { limit: 500, interpretation: "بالا، نیاز به مداخله و تغییر سبک زندگی.", status: "بالا" },
                    { limit: Infinity, interpretation: "بسیار بالا، ریسک پانکراتیت و بیماری قلبی شدیداً افزایش یافته است.", status: "بسیار بالا" }
                ],
                normalRangeTextGeneral: "کمتر از 150 mg/dL (مطلوب)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص قلب و عروق، متخصص غدد"
            },
            chol: {
                name: "کلسترول تام (Total Cholesterol)",
                briefExplanation: "مجموع انواع چربی‌های موجود در خون را نشان می‌دهد و برای ارزیابی خطر بیماری‌های قلبی مهم است.",
                unit: "mg/dL",
                ranges: [
                    { limit: 200, interpretation: "مطلوب.", status: "مطلوب" },
                    { limit: 240, interpretation: "مرزی بالا.", status: "مرزی بالا" },
                    { limit: Infinity, interpretation: "بالا، ریسک بیماری‌های قلبی افزایش یافته است.", status: "بالا" }
                ],
                normalRangeTextGeneral: "کمتر از 200 mg/dL (مطلوب)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص قلب و عروق"
            },
            hdl: {
                name: "کلسترول خوب (HDL Cholesterol)",
                briefExplanation: "کلسترول 'خوب' خون است که به خارج کردن کلسترول اضافی از عروق و کاهش خطر بیماری قلبی کمک می‌کند.",
                unit: "mg/dL",
                genderSpecificRanges: { // HDL levels: Higher is better
                    male: [
                        { limit: 40, interpretation: "پایین، ریسک بیماری قلبی افزایش یافته است.", status: "پایین" },
                        { limit: Infinity, interpretation: "مطلوب برای آقایان.", status: "مطلوب" } // Typically >40 is good, >60 is protective
                    ],
                    female: [
                        { limit: 50, interpretation: "پایین، ریسک بیماری قلبی افزایش یافته است.", status: "پایین" },
                        { limit: Infinity, interpretation: "مطلوب برای خانم‌ها.", status: "مطلوب" } // Typically >50 is good, >60 is protective
                    ]
                },
                normalRangeTextMale: "آقایان: بیشتر از 40 mg/dL (مطلوب)",
                normalRangeTextFemale: "خانم‌ها: بیشتر از 50 mg/dL (مطلوب)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص قلب و عروق"
            },
            ldl: {
                name: "کلسترول بد (LDL Cholesterol)",
                briefExplanation: "کلسترول 'بد' خون است که افزایش آن باعث تجمع پلاک در عروق و افزایش خطر بیماری قلبی می‌شود.",
                unit: "mg/dL",
                ranges: [ // LDL levels: Lower is better
                    { limit: 100, interpretation: "مطلوب (یا کمتر از 70 در افراد با ریسک بسیار بالا).", status: "مطلوب" },
                    { limit: 130, interpretation: "نزدیک به مطلوب/بالای مطلوب.", status: "نزدیک به مطلوب" },
                    { limit: 160, interpretation: "مرزی بالا.", status: "مرزی بالا" },
                    { limit: 190, interpretation: "بالا.", status: "بالا" },
                    { limit: Infinity, interpretation: "بسیار بالا.", status: "بسیار بالا" }
                ],
                normalRangeTextGeneral: "کمتر از 100 mg/dL (مطلوب)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص قلب و عروق"
            },
            sgot: {
                name: "اس‌جی‌او‌تی (SGOT/AST)",
                briefExplanation: "آنزیمی است که عمدتاً در کبد، قلب و عضلات یافت می‌شود و افزایش آن می‌تواند نشانه‌ای از آسیب به این اعضا باشد.",
                unit: "U/L",
                ranges: [ // Example ranges
                    { limit: 5, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                    { limit: 40, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی، ممکن است نشانه‌ای از آسیب کبدی یا قلبی باشد.", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 5-40 U/L",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص گوارش و کبد (هپاتولوژیست)"
            },
            sgpt: {
                name: "اس‌جی‌پی‌تی (SGPT/ALT)",
                briefExplanation: "آنزیمی است که عمدتاً در کبد یافت می‌شود و حساس‌ترین شاخص آسیب سلول‌های کبدی است.",
                unit: "U/L",
                ranges: [ // Example ranges
                    { limit: 7, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                    { limit: 56, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی، معمولاً نشانه‌ای از آسیب کبدی است.", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 7-56 U/L",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص گوارش و کبد (هپاتولوژیست)"
            },
            alk: {
                name: "آلکالین فسفاتاز (Alkaline Phosphatase - ALP)",
                briefExplanation: "آنزیمی است که در کبد، استخوان‌ها، روده و کلیه یافت می‌شود و در بیماری‌های کبدی و استخوانی تغییر می‌کند.",
                unit: "U/L",
                ranges: [ // Example ranges, can be age-dependent
                    { limit: 44, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                    { limit: 147, interpretation: "در محدوده طبیعی (در بزرگسالان).", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی، ممکن است نشانه‌ای از بیماری کبدی یا استخوانی باشد.", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 44-147 U/L (در بزرگسالان)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص گوارش و کبد، متخصص ارتوپدی"
            },
            iron: {
                name: "آهن (Iron)",
                briefExplanation: "میزان آهن سرم خون را اندازه‌گیری می‌کند که برای ساخت هموگلوبین و انتقال اکسیژن ضروری است.",
                unit: "µg/dL",
                genderSpecificRanges: {
                    male: [
                        { limit: 65, interpretation: "پایین‌تر از حد طبیعی برای آقایان.", status: "پایین" },
                        { limit: 176, interpretation: "در محدوده طبیعی برای آقایان.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای آقایان.", status: "بالا" }
                    ],
                    female: [
                        { limit: 50, interpretation: "پایین‌تر از حد طبیعی برای خانم‌ها.", status: "پایین" },
                        { limit: 170, interpretation: "در محدوده طبیعی برای خانم‌ها.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای خانم‌ها.", status: "بالا" }
                    ]
                },
                normalRangeTextMale: "آقایان: حدود 65-176 µg/dL",
                normalRangeTextFemale: "خانم‌ها: حدود 50-170 µg/dL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص خون (هماتولوژیست)"
            },
            ferritin: {
                name: "فریتین (Ferritin)",
                briefExplanation: "پروتئینی است که آهن را در بدن ذخیره می‌کند و سطح آن نشان‌دهنده میزان ذخایر آهن بدن است.",
                unit: "ng/mL",
                genderSpecificRanges: { 
                    male: [
                        { limit: 30, interpretation: "پایین‌تر از حد طبیعی برای آقایان (کمبود آهن محتمل).", status: "پایین" },
                        { limit: 300, interpretation: "در محدوده طبیعی برای آقایان.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای آقایان (اضافه بار آهن یا التهاب محتمل).", status: "بالا" }
                    ],
                    female: [
                        { limit: 15, interpretation: "پایین‌تر از حد طبیعی برای خانم‌ها (کمبود آهن محتمل).", status: "پایین" },
                        { limit: 150, interpretation: "در محدوده طبیعی برای خانم‌ها.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای خانم‌ها (اضافه بار آهن یا التهاب محتمل).", status: "بالا" }
                    ]
                },
                normalRangeTextMale: "آقایان: حدود 30-300 ng/mL",
                normalRangeTextFemale: "خانم‌ها: حدود 15-150 ng/mL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص خون (هماتولوژیست)"
            },
            tibc: {
                name: "ظرفیت اتصال کل آهن (TIBC)",
                briefExplanation: "توانایی پروتئین‌های خون (عمدتاً ترانسفرین) برای اتصال به آهن را نشان می‌دهد و در ارزیابی وضعیت آهن بدن کاربرد دارد.",
                unit: "µg/dL",
                ranges: [ // Example ranges
                    { limit: 240, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد.", status: "پایین" },
                    { limit: 450, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی، معمولاً در کمبود آهن دیده می‌شود.", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 240-450 µg/dL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص خون (هماتولوژیست)"
            },
            t3: {
                name: "تری‌یدوتیرونین (Total T3)",
                briefExplanation: "یکی از هورمون‌های فعال تیروئید است که متابولیسم بدن را تنظیم می‌کند.",
                unit: "ng/dL",
                ranges: [ // Example ranges for Total T3
                    { limit: 80, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد (کم‌کاری تیروئید).", status: "پایین" },
                    { limit: 200, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی (پرکاری تیروئید).", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 80-200 ng/dL (برای Total T3)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص غدد"
            },
            t4: {
                name: "تیروکسین (Total T4)",
                briefExplanation: "هورمون اصلی تیروئید است که نقش مهمی در متابولیسم، رشد و نمو دارد.",
                unit: "µg/dL",
                ranges: [ // Example ranges for Total T4
                    { limit: 4.5, interpretation: "ممکن است پایین‌تر از حد طبیعی باشد (کم‌کاری تیروئید).", status: "پایین" },
                    { limit: 12.0, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی (پرکاری تیروئید).", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 4.5-12.0 µg/dL (برای Total T4)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص غدد"
            },
            tsh: {
                name: "هورمون محرک تیروئید (TSH)",
                briefExplanation: "هورمونی است که از غده هیپوفیز ترشح شده و عملکرد غده تیروئید را کنترل می‌کند.",
                unit: "µIU/mL",
                ranges: [ 
                    { limit: 0.4, interpretation: "پایین‌تر از حد طبیعی (احتمال پرکاری تیروئید).", status: "پایین" },
                    { limit: 4.0, interpretation: "در محدوده طبیعی.", status: "طبیعی" }, // Some labs use up to 4.5 or 5.0
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی (احتمال کم‌کاری تیروئید).", status: "بالا" }
                ],
                normalRangeTextGeneral: "حدود 0.4-4.0 µIU/mL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص غدد"
            },
            wbc: {
                name: "شمارش گلبول‌های سفید (WBC)",
                briefExplanation: "تعداد گلبول‌های سفید خون را نشان می‌دهد که نقش مهمی در سیستم ایمنی بدن و مبارزه با عفونت‌ها دارند.",
                unit: "cells/µL",
                ranges: [ 
                    { limit: 4500, interpretation: "پایین‌تر از حد طبیعی (لکوپنی).", status: "پایین" },
                    { limit: 11000, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی (لکوسیتوز). ممکن است نشان‌دهنده عفونت یا التهاب باشد.", status: "بالا" }
                ],
                normalRangeTextGeneral: "4,500-11,000 cells/µL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص عفونی یا هماتولوژیست"
            },
            hb: {
                name: "هموگلوبین (Hb)",
                briefExplanation: "پروتئین موجود در گلبول‌های قرمز است که اکسیژن را به بافت‌های بدن حمل می‌کند و کمبود آن باعث کم‌خونی می‌شود.",
                unit: "g/dL",
                genderSpecificRanges: {
                    male: [
                        { limit: 13.5, interpretation: "پایین‌تر از حد طبیعی برای آقایان (احتمال کم‌خونی).", status: "پایین" },
                        { limit: 17.5, interpretation: "در محدوده طبیعی برای آقایان.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای آقایان (احتمال پلی‌سیتمی).", status: "بالا" }
                    ],
                    female: [
                        { limit: 12.0, interpretation: "پایین‌تر از حد طبیعی برای خانم‌ها (احتمال کم‌خونی).", status: "پایین" },
                        { limit: 15.5, interpretation: "در محدوده طبیعی برای خانم‌ها.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای خانم‌ها (احتمال پلی‌سیتمی).", status: "بالا" }
                    ]
                },
                normalRangeTextMale: "آقایان: 13.5-17.5 g/dL",
                normalRangeTextFemale: "خانم‌ها: 12.0-15.5 g/dL",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص خون (هماتولوژیست)"
            },
            hct: {
                name: "هماتوکریت (HCT)",
                briefExplanation: "درصد حجم خون که توسط گلبول‌های قرمز اشغال شده است را نشان می‌دهد و در تشخیص کم‌خونی یا غلظت خون کاربرد دارد.",
                unit: "%",
                genderSpecificRanges: {
                    male: [
                        { limit: 40, interpretation: "پایین‌تر از حد طبیعی برای آقایان (احتمال کم‌خونی).", status: "پایین" },
                        { limit: 54, interpretation: "در محدوده طبیعی برای آقایان.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای آقایان (احتمال پلی‌سیتمی یا دهیدراتاسیون).", status: "بالا" }
                    ],
                    female: [
                        { limit: 36, interpretation: "پایین‌تر از حد طبیعی برای خانم‌ها (احتمال کم‌خونی).", status: "پایین" },
                        { limit: 48, interpretation: "در محدوده طبیعی برای خانم‌ها.", status: "طبیعی" },
                        { limit: Infinity, interpretation: "بالاتر از حد طبیعی برای خانم‌ها (احتمال پلی‌سیتمی یا دهیدراتاسیون).", status: "بالا" }
                    ]
                },
                normalRangeTextMale: "آقایان: حدود 40-54%",
                normalRangeTextFemale: "خانم‌ها: حدود 36-48%",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص خون (هماتولوژیست)"
            },
            plt: {
                name: "پلاکت‌ها (Platelets - PLT)",
                briefExplanation: "سلول‌های کوچکی در خون هستند که به لخته شدن خون و جلوگیری از خونریزی کمک می‌کنند.",
                unit: "x10³/µL", // or cells/µL; often reported as e.g., 150 for 150,000
                ranges: [
                    { limit: 150, interpretation: "پایین‌تر از حد طبیعی (ترومبوسیتوپنی)، ریسک خونریزی افزایش می‌یابد.", status: "پایین" },
                    { limit: 450, interpretation: "در محدوده طبیعی.", status: "طبیعی" },
                    { limit: Infinity, interpretation: "بالاتر از حد طبیعی (ترومبوسیتوز)، ریسک لخته شدن خون افزایش می‌یابد.", status: "بالا" }
                ],
                normalRangeTextGeneral: "150,000-450,000/µL (یا 150-450 x10³/µL)",
                specialist: "پزشک عمومی، متخصص داخلی، متخصص خون (هماتولوژیست)"
            }
        };

        const pastelClasses = ['bg-pastel-1', 'bg-pastel-2', 'bg-pastel-3', 'bg-pastel-4', 'bg-pastel-5'];

        function populateTestInputs() {
            const container = document.getElementById('testInputsContainer');
            container.innerHTML = ''; 
            let colorIndex = 0;

            // Iterate in the order defined in testData
            Object.keys(testData).forEach(key => {
                const test = testData[key];
                const testInputDiv = document.createElement('div');
                const pastelClass = pastelClasses[colorIndex % pastelClasses.length];
                testInputDiv.classList.add('test-entry', 'flex', 'flex-col', 'sm:flex-row', 'sm:items-center', 'sm:justify-between', pastelClass);
                
                testInputDiv.innerHTML = `
                    <div class="sm:w-2/5 mb-2 sm:mb-0">
                        <label for="testValue-${key}" class="block text-md font-medium text-gray-800">${test.name}</label>
                        <p class="text-xs text-gray-600 mt-1">${test.briefExplanation}</p>
                    </div>
                    <div class="flex items-center space-x-2 space-x-reverse w-full sm:w-3/5">
                        <input type="number" step="any" id="testValue-${key}" data-test-key="${key}" class="form-input test-value-input mt-1 block w-full py-2 px-3 border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" placeholder="مقدار...">
                        <span class="text-sm text-gray-600 whitespace-nowrap min-w-[70px] text-left">${test.unit}</span>
                    </div>
                `;
                container.appendChild(testInputDiv);
                colorIndex++;
            });
        }

        window.onload = populateTestInputs;

        function analyzeAllTests() {
            const ageInput = document.getElementById('age').value;
            const gender = document.getElementById('gender').value;
            const resultArea = document.getElementById('resultArea');
            resultArea.innerHTML = ''; 

            let hasValues = false;
            let hasErrors = false;

            if (!ageInput || !gender) {
                displayGlobalError("لطفاً سن و جنسیت را مشخص کنید. این اطلاعات برای تفسیر دقیق‌تر برخی آزمایش‌ها ضروری است.");
                return;
            }
            const age = parseInt(ageInput);
             if (isNaN(age) || age <= 0 || age > 120) {
                displayGlobalError("سن وارد شده معتبر نیست. لطفاً سن صحیح را وارد کنید.");
                return;
            }

            const allInputs = document.querySelectorAll('.test-value-input');
            allInputs.forEach(input => {
                const testKey = input.getAttribute('data-test-key');
                const testValueInput = input.value.trim();

                if (testValueInput === '') {
                    return; 
                }
                hasValues = true;

                const testValue = parseFloat(testValueInput);
                const currentTest = testData[testKey];

                if (isNaN(testValue)) {
                    appendErrorCard(currentTest.name, `مقدار وارد شده نامعتبر است. لطفاً یک عدد صحیح وارد کنید.`);
                    hasErrors = true;
                    return; 
                }

                if (!currentTest) {
                    appendErrorCard("خطای نامشخص", `اطلاعات مربوط به آزمایش با کلید ${testKey} یافت نشد.`);
                    hasErrors = true;
                    return;
                }

                let interpretation = "اطلاعات کافی برای تفسیر این مقدار وجود ندارد.";
                let status = "نامشخص";
                let rangesToUse = currentTest.ranges; 
                let normalRangeTextToDisplay = currentTest.normalRangeTextGeneral || "محدوده طبیعی مشخص نشده. لطفاً به برگه آزمایش خود مراجعه کنید.";

                if (currentTest.genderSpecificRanges && gender) {
                    if (gender === 'male' && currentTest.genderSpecificRanges.male) {
                        rangesToUse = currentTest.genderSpecificRanges.male;
                        normalRangeTextToDisplay = currentTest.normalRangeTextMale || normalRangeTextToDisplay;
                    } else if (gender === 'female' && currentTest.genderSpecificRanges.female) {
                        rangesToUse = currentTest.genderSpecificRanges.female;
                        normalRangeTextToDisplay = currentTest.normalRangeTextFemale || normalRangeTextToDisplay;
                    }
                }
                
                if (rangesToUse) {
                    for (const range of rangesToUse) {
                        if (testValue < range.limit) {
                            interpretation = range.interpretation;
                            status = range.status;
                            break;
                        }
                         // Handle cases where value might be exactly on a limit or above last limit
                        if (range.limit === Infinity && testValue >= (rangesToUse[rangesToUse.length-2]?.limit || 0) ) {
                             interpretation = range.interpretation;
                             status = range.status;
                        }
                    }
                } else { // Fallback if no ranges defined (should not happen with current data)
                     interpretation = "محدوده طبیعی برای این آزمایش و جنسیت مشخص نشده است.";
                }
                
                appendResultCard(currentTest, testValue, normalRangeTextToDisplay, status, interpretation);
            });

            if (!hasValues && !hasErrors) {
                 displayGlobalError("هیچ مقداری برای آزمایش‌ها وارد نشده است. لطفاً حداقل یک مقدار را وارد کنید.");
            }
             if (hasValues || hasErrors) {
                resultArea.style.display = 'block';
            } else {
                resultArea.style.display = 'none';
            }
        }
        
        function appendResultCard(test, value, normalRange, status, interpretation) {
            const resultArea = document.getElementById('resultArea');
            const resultCard = document.createElement('div');
            resultCard.classList.add('result-card');
            resultCard.innerHTML = `
                <h2 class="result-title">تحلیل نتیجه آزمایش: ${test.name}</h2>
                <p class="brief-explanation-text mt-1 mb-2">${test.briefExplanation || ''}</p>
                <div class="result-text mt-3 space-y-1">
                    <p><strong>مقدار وارد شده:</strong> ${value} ${test.unit}</p>
                    <p><strong>محدوده طبیعی مرجع (بر اساس جنسیت و آزمایشگاه):</strong> ${normalRange}</p>
                    <p><strong>وضعیت:</strong> <span class="font-semibold ${getStatusColor(status)}">${status}</span></p>
                    <p><strong>تفسیر اولیه:</strong> ${interpretation}</p>
                    <p><strong>پزشک متخصص مرتبط (جهت پیگیری در صورت نیاز):</strong> ${test.specialist || 'مشورت با پزشک عمومی توصیه می‌شود.'}</p>
                </div>
            `;
            resultArea.appendChild(resultCard);
        }

        function appendErrorCard(testName, message) {
            const resultArea = document.getElementById('resultArea');
            const errorCard = document.createElement('div');
            errorCard.classList.add('result-card', 'bg-red-50', 'border-red-300');
            errorCard.innerHTML = `
                <h2 class="result-title text-red-700">خطا در تحلیل آزمایش: ${testName}</h2>
                <p class="result-text mt-2 text-red-600">${message}</p>
            `;
            resultArea.appendChild(errorCard);
        }
        
        function displayGlobalError(message) {
            const resultArea = document.getElementById('resultArea');
            resultArea.innerHTML = ''; 
            resultArea.style.display = 'block';
            const errorCard = document.createElement('div');
            errorCard.classList.add('result-card', 'bg-red-100', 'border-red-400', 'text-red-700');
             errorCard.innerHTML = `
                <h2 class="result-title text-red-700">توجه</h2>
                <p class="result-text mt-2">${message}</p>
            `;
            resultArea.appendChild(errorCard);
        }
        
        function getStatusColor(status) {
            status = (status || "").toLowerCase();
            if (status.includes("پایین") || status.includes("کمبود") || status.includes("بالا") || status.includes("ناکافی") || status.includes("مثبت") || status.includes("مشکوک") || status.includes("دیابت")) {
                return "text-red-600"; 
            } else if (status.includes("مرزی") || status.includes("پیش‌دیابت")) {
                return "text-yellow-600"; 
            } else if (status.includes("طبیعی") || status.includes("مطلوب") || status.includes("کافی") || status.includes("منفی")) {
                return "text-green-600";
            }
            return "text-gray-700"; 
        }
    </script>
</body>
</html>
تحلیل هوشمند نتایج آزمایش پزشکی

تحلیل هوشمند نتایج آزمایش پزشکی

سن و جنسیت خود را وارد کرده، سپس مقادیر آزمایش‌های مورد نظر را تکمیل و دکمه تحلیل را بزنید.

سلب مسئولیت مهم: این ابزار صرفاً جنبه اطلاع‌رسانی اولیه دارد و به هیچ عنوان جایگزین تشخیص، توصیه و درمان پزشکی حرفه‌ای نمی‌باشد. تفسیر نتایج آزمایش‌ها پیچیده است و باید توسط پزشک متخصص و با در نظر گرفتن سوابق پزشکی کامل شما انجام شود. همیشه برای هرگونه تصمیم‌گیری درمانی به پزشک خود مراجعه کنید. محدوده‌های طبیعی ارائه شده در این ابزار عمومی هستند و ممکن است با محدوده‌های مرجع آزمایشگاه شما متفاوت باشند.