گزارش وضعیت پروژه — «ت ح»
مهندسی معکوس و بازنویسی نرمافزار حسابداری طلا و جواهر
در یک خط: از یک آدرس سایت شروع کردیم و رسیدیم به پکیج نصب
معکوسشده، ده سند دوزبانه، یک ایجنت فعال، و یک نقشهٔ راه هشتفازی. پروژه از نظر
تصمیمها آمادهٔ کدنویسی است.
۱. آنچه ساخته شد
ریپوی پروژه — ۱۴۵ فایل، ۸ کامیت
| کامیت | کاری که کرد |
| 2d61ac5 | مستندات اولیه، فارسی |
| 89848f6 | دو زبانه شد: فارسی و انگلیسی |
| 240717f | تعریف ایجنت داخل ریپو |
| b68f699 | بازنویسی مسیر پروژه حول پشتهٔ مقصد |
| 4142ed1 | اصلاح: به API مبدأ دسترسی نداریم |
| b80bd90 | رفع ابهام میان مبدأ و مقصد |
| c63be5a | ثبت شش تصمیم پروژه |
| ee1a8de | نقشهٔ راه هشتفازی |
| بخش | تعداد | چیست |
| اسناد فارسی و انگلیسی | ۱۰ + ۱۰ | هر سند در دو زبان |
| پوشهٔ ایجنت | ۱۳ | تعریف ایجنت بههمراه ده مرجع |
| ابزارها | ۴ | پارسر بسته، برداشت سایت، تبدیل متن، تولید مرجع |
| صفحات خام | ۱۰۵ | برداشتشده از سایت مبدأ |
| اسپک API | ۱ | OpenAPI کامل، ۶۹۶ کیلوبایت |
هیچ لینک شکستهای در هیچیک از دو زبان باقی نمانده است.
ایجنت — نصبشده و فعال
ایجنت تخصصی این پروژه ساخته و در مسیر مهارتهای کاربری نصب شد. سیستم آن را
شناسایی کرد و در کاتالوگ مهارتها ثبت شد. ایجنت اینها را میداند: پشتهٔ مبدأ،
پشتهٔ مقصد، شش تصمیم پروژه، تلههای بازنویسی، و مسیر رسیدن به هر سند.
دانش فنی محلی
بستهٔ نصب رسمی دانلود و کامل باز شد: ۳۲۷ مگابایت شامل فایل اجرایی اصلی،
کتابخانههای همراه، و شصت قالب گزارش.
۲. آنچه فهمیدیم
واقعیتهای تأییدشدهٔ مبدأ
| مورد | واقعیت | شاهد |
| زبان برنامه | دلفی ۱۲، ویندوز ۳۲ بیتی | رشتهٔ کامپایلر در باینری |
| پایگاه داده | SQL Server از طریق ADO | نام کامپوننتها |
| پایگاه محلی | SQLite نسخهٔ ۳٫۴۵٫۲ | رشتههای داخل باینری |
| وبسرویس | سرور HTTP داخلی، درون خود برنامه | جدول ایمپورت |
| گزارشها | FastReport 4، شصت قالب | استخراج از بسته |
| نصب | پرتابل، بدون نصب در Program Files | آموزش رسمی |
| موجودیتهای دامنه | هشتاد و چهار نام | نام کامپوننتهای داده |
| متدهای API | شصت و هفت متد | اسپک OpenAPI |
| سرور هوش مصنوعی | هفتاد ابزار با احراز هویت | سایت رسمی |
سه نکتهٔ غیرشهودی
- بدنهٔ درخواستها اندیسمحور است؛ نام کلید هیچ معنایی ندارد و ترتیب آرگومان مهم است.
- هر درخواست دو هدر اجباری دارد: نام پایگاه داده، و توکن دسترسی.
- کد فاکتور اسنادی که از طریق هوش مصنوعی ثبت میشوند، همیشه پیشوند ویژهای دارد.
مشکل امنیتی مبدأ: فایل گواهی SSL که همراه بستهٔ نصب توزیع میشود،
کلید خصوصی مشترک همهٔ نصبها را در خود دارد. مقصد این را با گواهی اختصاصی هر
نصب و کتابخانهٔ رمزنگاری Rust رفع میکند.
دستاورد مهندسی معکوس
فرمت اختصاصی بستهٔ نصب شکسته شد: یک آرشیو سفارشی که طول فشردهاش در فایل ذخیره
نمیشود و باید از جریان فشردهسازی اندازه گرفته شود. پارسر آن نوشته شده و کل
بستهٔ نصب را باز میکند.
۳. تصمیمهای قطعی
| # | موضوع | انتخاب |
| ۱ | دستهٔ محصول | حسابداری کامل، جایگزین مبدأ |
| ۲ | چند کاربری | چند کاربر روی شبکهٔ محلی، معماری کلاینت و سرور |
| ۳ | اولین برش | سند خرید و فروش طلا |
| ۴ | گزارشها | فعلاً بدون گزارش، با تعهد طراحی پرسوجوها |
| ۵ | مهاجرت داده | از صفر، بدون مهاجرت |
| ۶ | کلاینتهای مبدأ | مهم نیستند، بنابراین API آزاد است |
پشتهٔ فناوری مقصد
| لایه | فناوری |
| بکاند | Rust |
| پایگاه داده | SQLite |
| کش و وضعیت زنده | Redis |
| پوستهٔ دسکتاپ | Tauri 2 |
| فرانتاند | React بههمراه TypeScript و Tailwind |
دو پیامدی که خودشان درآمدند
یک: معماری از برنامهٔ تکفایلی به کلاینت و سرور تغییر کرد.
سرور Rust تنها مالک فایل پایگاه داده است، کلاینتهای دسکتاپ از شبکه به آن وصل
میشوند، و هیچ کلاینتی فایل را مستقیم باز نمیکند. از دل همین تصمیم، احراز هویت
و سطح دسترسی از یک قابلیت بعدی به یک نیاز پایه تبدیل شد.
دو: تلهٔ پیش از تست، دقت عددی است. پایگاه دادهٔ مقصد نوع اعشاری
دقیق ندارد. پس پول بهصورت عدد صحیح ریال، وزن بهصورت عدد صحیح میلیگرم، و عیار
بهصورت عدد صحیح هزارم ذخیره میشود. هیچجا از عدد اعشاری شناور استفاده نمیکنیم.
۴. مسیری که جلو میرویم
۰ هستهٔ فنی — سرور، پوستهٔ دسکتاپ، دقت عددی، حالت WAL
۱ هویت و دسترسی — کاربر، نقش، رمزنگاری رمز، ثبت رویداد
۲ سند خرید و فروش طلا — قلب سیستم
۳ حسابها، مشتریان، مانده
۴ انبار: طلا، آبشده، سکه، شمش، ارز
۵ اتیکت و کارساخته
۶ چک، بانک، صندوق
۷ گزارش و چاپ — به تأخیر افتاده
هر فاز یک «تعریف انجامشده»ی قابل بررسی دارد. نمونه برای فاز صفر:
یک تست باید نشان دهد که جمع دو عدد اعشاری در نوع پول ما دقیقاً برابر مقدار
درست است، نه یک مقدار با خطای شناور در انتها.
چهار دروازهٔ توقف
| بعد از فاز | پرسشی که باید پاسخ بگیرد |
| ۰ | دقت عددی در عمل جواب داد؟ اگر نه، همینجا مدل پول را عوض میکنیم. |
| ۲ | مدل سند بهقدر کافی عمومی است که فازهای بعدی رویش بنشینند؟ |
| ۴ | پایگاه دادهٔ مقصد زیر بار چند کاربر میایستد؟ اگر نه، همینجا مهاجرت میکنیم. |
| ۶ | نبود گزارش دارد درد میشود؟ اگر بله، فاز گزارش را جلو میآوریم. |
۵. آنچه هنوز نمیدانیم
| نمیدانیم | اثرش بر کار |
| ساختار دقیق جداول پایگاه داده | مدل دامنه از نامها و مستندات ساخته میشود، نه از ستونهای واقعی |
| رفتار واقعی در حال اجرا | قواعد را از مستندات میخوانیم و تأیید نمیکنیم؛ مقایسهٔ خروجی ممکن نیست |
| دسترسی به محیط ویندوز | نصب مبدأ ممکن نیست، ولی با تصمیم پنجم دیگر مانع شروع نیست |
| مدل لایسنس مقصد | باید پیش از انتشار تصمیم گرفته شود |
۶. وضعیت عملیاتی
| مورد | وضعیت | توضیح |
| ریپو | آماده | ۱۴۵ فایل، ۸ کامیت، بدون لینک شکسته |
| ایجنت | فعال | نصبشده و در کاتالوگ ثبتشده |
| مستندات | آماده | ده سند در دو زبان |
| کد مقصد | شروع نشده | صفر خط |
| ایشوها | ساخته نشده | نقشه آمادهٔ تبدیل است |
| فضای دیسک | هشدار | حدود یک و نیم گیگابایت خالی |
۷. قدم بعدی
- تبدیل نقشهٔ راه به ایشو — هر چکلیست داخل فازها یک ایشو؛ حدود سی و پنج تا چهل ایشو با برچسب فاز و ترتیب وابستگی.
- فاز صفر — اسکلت پروژهٔ مقصد: پنج بخش دامنه، انبار، سرویس، رابط برنامهنویسی، و برنامه.
- فاز دو — سند خرید و فروش طلا؛ سنگینترین و باارزشترین بخش کار.
همهٔ محتوای این گزارش از منابع عمومی و بستهٔ نصب رسمی گردآوری شده و مستقل از شرکت مبدأ است.