گزارش وضعیت پروژه — «ت ح»

مهندسی معکوس و بازنویسی نرم‌افزار حسابداری طلا و جواهر

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

۱. آنچه ساخته شد

ریپوی پروژه — ۱۴۵ فایل، ۸ کامیت

کامیتکاری که کرد
2d61ac5مستندات اولیه، فارسی
89848f6دو زبانه شد: فارسی و انگلیسی
240717fتعریف ایجنت داخل ریپو
b68f699بازنویسی مسیر پروژه حول پشتهٔ مقصد
4142ed1اصلاح: به API مبدأ دسترسی نداریم
b80bd90رفع ابهام میان مبدأ و مقصد
c63be5aثبت شش تصمیم پروژه
ee1a8deنقشهٔ راه هشت‌فازی
بخشتعدادچیست
اسناد فارسی و انگلیسی۱۰ + ۱۰هر سند در دو زبان
پوشهٔ ایجنت۱۳تعریف ایجنت به‌همراه ده مرجع
ابزارها۴پارسر بسته، برداشت سایت، تبدیل متن، تولید مرجع
صفحات خام۱۰۵برداشت‌شده از سایت مبدأ
اسپک API۱OpenAPI کامل، ۶۹۶ کیلوبایت
هیچ لینک شکسته‌ای در هیچ‌یک از دو زبان باقی نمانده است.

ایجنت — نصب‌شده و فعال

ایجنت تخصصی این پروژه ساخته و در مسیر مهارت‌های کاربری نصب شد. سیستم آن را شناسایی کرد و در کاتالوگ مهارت‌ها ثبت شد. ایجنت این‌ها را می‌داند: پشتهٔ مبدأ، پشتهٔ مقصد، شش تصمیم پروژه، تله‌های بازنویسی، و مسیر رسیدن به هر سند.

دانش فنی محلی

بستهٔ نصب رسمی دانلود و کامل باز شد: ۳۲۷ مگابایت شامل فایل اجرایی اصلی، کتابخانه‌های همراه، و شصت قالب گزارش.

۲. آنچه فهمیدیم

واقعیت‌های تأییدشدهٔ مبدأ

موردواقعیتشاهد
زبان برنامهدلفی ۱۲، ویندوز ۳۲ بیتیرشتهٔ کامپایلر در باینری
پایگاه دادهSQL Server از طریق ADOنام کامپوننت‌ها
پایگاه محلیSQLite نسخهٔ ۳٫۴۵٫۲رشته‌های داخل باینری
وب‌سرویسسرور HTTP داخلی، درون خود برنامهجدول ایمپورت
گزارش‌هاFastReport 4، شصت قالباستخراج از بسته
نصبپرتابل، بدون نصب در Program Filesآموزش رسمی
موجودیت‌های دامنههشتاد و چهار نامنام کامپوننت‌های داده
متدهای APIشصت و هفت متداسپک OpenAPI
سرور هوش مصنوعیهفتاد ابزار با احراز هویتسایت رسمی

سه نکتهٔ غیرشهودی

  1. بدنهٔ درخواست‌ها اندیس‌محور است؛ نام کلید هیچ معنایی ندارد و ترتیب آرگومان مهم است.
  2. هر درخواست دو هدر اجباری دارد: نام پایگاه داده، و توکن دسترسی.
  3. کد فاکتور اسنادی که از طریق هوش مصنوعی ثبت می‌شوند، همیشه پیشوند ویژه‌ای دارد.
مشکل امنیتی مبدأ: فایل گواهی SSL که همراه بستهٔ نصب توزیع می‌شود، کلید خصوصی مشترک همهٔ نصب‌ها را در خود دارد. مقصد این را با گواهی اختصاصی هر نصب و کتابخانهٔ رمزنگاری Rust رفع می‌کند.

دستاورد مهندسی معکوس

فرمت اختصاصی بستهٔ نصب شکسته شد: یک آرشیو سفارشی که طول فشرده‌اش در فایل ذخیره نمی‌شود و باید از جریان فشرده‌سازی اندازه گرفته شود. پارسر آن نوشته شده و کل بستهٔ نصب را باز می‌کند.

۳. تصمیم‌های قطعی

#موضوعانتخاب
۱دستهٔ محصولحسابداری کامل، جایگزین مبدأ
۲چند کاربریچند کاربر روی شبکهٔ محلی، معماری کلاینت و سرور
۳اولین برشسند خرید و فروش طلا
۴گزارش‌هافعلاً بدون گزارش، با تعهد طراحی پرس‌وجوها
۵مهاجرت دادهاز صفر، بدون مهاجرت
۶کلاینت‌های مبدأمهم نیستند، بنابراین API آزاد است

پشتهٔ فناوری مقصد

لایهفناوری
بک‌اندRust
پایگاه دادهSQLite
کش و وضعیت زندهRedis
پوستهٔ دسکتاپTauri 2
فرانت‌اندReact به‌همراه TypeScript و Tailwind

دو پیامدی که خودشان درآمدند

یک: معماری از برنامهٔ تک‌فایلی به کلاینت و سرور تغییر کرد. سرور Rust تنها مالک فایل پایگاه داده است، کلاینت‌های دسکتاپ از شبکه به آن وصل می‌شوند، و هیچ کلاینتی فایل را مستقیم باز نمی‌کند. از دل همین تصمیم، احراز هویت و سطح دسترسی از یک قابلیت بعدی به یک نیاز پایه تبدیل شد.

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

۴. مسیری که جلو می‌رویم

۰ هستهٔ فنی — سرور، پوستهٔ دسکتاپ، دقت عددی، حالت WAL
۱ هویت و دسترسی — کاربر، نقش، رمزنگاری رمز، ثبت رویداد
۲ سند خرید و فروش طلا — قلب سیستم
۳ حساب‌ها، مشتریان، مانده
۴ انبار: طلا، آبشده، سکه، شمش، ارز
۵ اتیکت و کارساخته
۶ چک، بانک، صندوق
۷ گزارش و چاپ — به تأخیر افتاده

هر فاز یک «تعریف انجام‌شده»ی قابل بررسی دارد. نمونه برای فاز صفر:

یک تست باید نشان دهد که جمع دو عدد اعشاری در نوع پول ما دقیقاً برابر مقدار درست است، نه یک مقدار با خطای شناور در انتها.

چهار دروازهٔ توقف

بعد از فازپرسشی که باید پاسخ بگیرد
۰دقت عددی در عمل جواب داد؟ اگر نه، همین‌جا مدل پول را عوض می‌کنیم.
۲مدل سند به‌قدر کافی عمومی است که فازهای بعدی رویش بنشینند؟
۴پایگاه دادهٔ مقصد زیر بار چند کاربر می‌ایستد؟ اگر نه، همین‌جا مهاجرت می‌کنیم.
۶نبود گزارش دارد درد می‌شود؟ اگر بله، فاز گزارش را جلو می‌آوریم.

۵. آنچه هنوز نمی‌دانیم

نمی‌دانیماثرش بر کار
ساختار دقیق جداول پایگاه دادهمدل دامنه از نام‌ها و مستندات ساخته می‌شود، نه از ستون‌های واقعی
رفتار واقعی در حال اجراقواعد را از مستندات می‌خوانیم و تأیید نمی‌کنیم؛ مقایسهٔ خروجی ممکن نیست
دسترسی به محیط ویندوزنصب مبدأ ممکن نیست، ولی با تصمیم پنجم دیگر مانع شروع نیست
مدل لایسنس مقصدباید پیش از انتشار تصمیم گرفته شود

۶. وضعیت عملیاتی

موردوضعیتتوضیح
ریپوآماده۱۴۵ فایل، ۸ کامیت، بدون لینک شکسته
ایجنتفعالنصب‌شده و در کاتالوگ ثبت‌شده
مستنداتآمادهده سند در دو زبان
کد مقصدشروع نشدهصفر خط
ایشوهاساخته نشدهنقشه آمادهٔ تبدیل است
فضای دیسکهشدارحدود یک و نیم گیگابایت خالی

۷. قدم بعدی

  1. تبدیل نقشهٔ راه به ایشو — هر چک‌لیست داخل فازها یک ایشو؛ حدود سی و پنج تا چهل ایشو با برچسب فاز و ترتیب وابستگی.
  2. فاز صفر — اسکلت پروژهٔ مقصد: پنج بخش دامنه، انبار، سرویس، رابط برنامه‌نویسی، و برنامه.
  3. فاز دو — سند خرید و فروش طلا؛ سنگین‌ترین و باارزش‌ترین بخش کار.
همهٔ محتوای این گزارش از منابع عمومی و بستهٔ نصب رسمی گردآوری شده و مستقل از شرکت مبدأ است.