# اصلاحات سه ایراد گزارش (نسخه بازبینی تیر ۱۴۰۵ — دور دوم)

## ۱) نمایش اعداد نادرست در پنل «خلاصه نتایج»

**ریشه‌یابی:**

- شمارنده‌های «بحرانی / غیربحرانی» در `recomputeSummary` همیشه صفر هاردکد شده بودند و هیچ‌گاه از نتایج شبکه (CPM/IAP) پر نمی‌شدند.
- «تاریخ اولیه پایان / تاریخ پایان جدید» هیچ‌گاه مقداردهی نمی‌شد (همیشه «— → —»).
- خروجی PDF/Word فیلدهای ناموجود (`originalEndDate`/`newEndDate` روی shape قدیمی) را می‌خواند.
- پنل پس از اجرای تحلیل به‌روزرسانی نمی‌شد چون نتایج شبکه فقط یک‌بار و قبل از استخراج رویدادها محاسبه می‌شد.

**اصلاح:** خلاصه نتایج اکنون به‌صورت زنده از موتور CPM/IAP پر می‌شود (بحرانی = رویدادهای دارای اثر بر مسیر بحرانی؛ تاریخ‌های پایان مبنا/جدید از شبکه به شمسی). خروجی PDF/Word نیز همین مقادیر را می‌خواند.

## ۲) عدم تحلیل برنامه زمان‌بندی (برنامه شناخته می‌شد اما EOT همیشه ۰ بود)

**ریشه‌یابی:**

- محاسبه شبکه **قبل از** استخراج رویدادهای تأخیر توسط AI اجرا می‌شد (لیست رویدادها خالی بود) و پس از استخراج، دیگر تکرار نمی‌شد.
- رویدادهای استخراج‌شده از AI هیچ‌گاه `linkedActivityId` نداشتند → در `runIap` همگی «unnetworked» می‌شدند → EOT = ۰ («عدم اعمال روابط تأخیر / Impact Links»).
- لیست فعالیت‌ها برای اتصال دستی از خطوط متن فایل ساخته می‌شد (شناسه‌های جعلی `act-…`) که با UID واقعی برنامه هم‌خوانی نداشت؛ حتی اتصال دستی هم وارد شبکه نمی‌شد.

**اصلاح:**

- مدل برنامه (XML/XER) یک‌بار پارس و در state نگهداری می‌شود؛ لیست فعالیت‌ها از UID های واقعی برنامه ساخته می‌شود.
- تابع جدید `suggestActivityLink` در `cpm.ts`: اتصال خودکار رویداد به فعالیت (۱: تطبیق واژگانی عنوان؛ ۲: هم‌پوشانی بازه تاریخ با کمترین شناوری کل). رویداد بدون تطبیق معقول، صریحاً «متصل‌نشده» گزارش می‌شود — هرگز حدس خاموش زده نمی‌شود.
- CPM/IAP پس از هر تغییر رویدادها/برنامه به‌صورت زنده بازمحاسبه می‌شود.
- پس از استخراج رویدادها توسط AI، شبکه با رویدادهای نهایی مجدداً اجرا و بخش قطعی «نتایج محاسباتی شبکه زمان‌بندی (CPM/IAP — موتور محاسباتی نرم‌افزار)» به انتهای گزارش الصاق می‌شود؛ این اعداد از موتور محاسباتی می‌آیند، نه از متن LLM.

## ۳) عدم استناد به قرارداد در گزارش

**ریشه‌یابی:** متن قرارداد با همان بودجه انتقال کوچک سایر فایل‌ها بریده می‌شد؛ دستور صریح استخراج مواد قرارداد در بسته‌های مرحله‌ای وجود نداشت؛ و هیچ کنترلی پس از تولید گزارش انجام نمی‌شد.

**اصلاح:**

- بودجه انتقال اسناد ریشه‌ای (قرارداد/مکاتبات/اسناد مرجع) از ۸۵هزار به ۱۷۰هزار کاراکتر افزایش یافت (با کف ۲۰هزار).
- بسته‌های مرحله‌ای حاوی قرارداد، دستور الزامی «استخراج ماده + نقل قول مستقیم + نام فایل» می‌گیرند و مرحله ادغام نهایی موظف به حفظ عین این استنادها است.
- نام واقعی فایل‌های قرارداد همراه با الزام استناد به prompt تحلیل تزریق می‌شود.
- کنترل کیفیت قطعی پس از تولید: اگر قرارداد آپلود شده اما نام آن در گزارش نیامده باشد، هشدار صریح در ابتدای گزارش درج می‌شود (هرگز سکوت نمی‌شود).

## فایل‌های تغییر یافته

- `src/legacy/utils/cpm.ts` — افزودن `suggestActivityLink`
- `src/legacy/components/delay/DelayAnalysisPage.tsx` — پارس مدل برنامه، اتصال خودکار، بازمحاسبه زنده، خلاصه نتایج واقعی، بخش قطعی گزارش، کنترل استناد قرارداد، اصلاح تاریخ‌های خروجی PDF/Word
- `src/legacy/services/geminiService.ts` — بودجه اسناد ریشه‌ای، دستور استخراج مواد قرارداد در بسته‌ها و حفظ آن‌ها در ادغام نهایی
