گروهبندی داراییهای ثابت (Fixed Asset Categories)
مسیر دسترسی: دارایی ثابت > پیکربندی > گروههای دارایی
نام فنی: AssetCategory
۱. مقدمه و فلسفه وجودی
اگر سیستم دارایی ثابت را به یک «کتابخانه بزرگ» تشبیه کنیم، گروهبندی داراییها نقش «قفسهبندی و سیستم دهدهی دیویی» را بازی میکند. بدون یک ساختار درختی و منظم، مدیریت هزاران قلم دارایی (از یک خودکار تا یک توربین نیروگاهی) غیرممکن خواهد بود.
در ERP تابان، گروهبندی دارایی صرفاً یک «فولدربندی» ساده جهت گزارشگیری نیست؛ بلکه یک «ساختار هوشمند وراثتی» (Intelligent Inheritance Structure) است. این یعنی وقتی شما قانونی را روی «سرشاخه» تعریف میکنید، تمام «زیرشاخهها» و داراییهای متصل به آن، آن قانون را به ارث میبرند.
اهداف کلیدی این ماژول:
- ارثبری ویژگیها (Inheritance): جلوگیری از ورود اطلاعات تکراری. (مثلاً همه خودروها عمر مفید ۱۰ سال دارند).
- مدیریت مشخصات فنی (Dynamic Attributes): تعریف ویژگیهای منحصربهفرد برای هر نوع کالا (مثلاً خودرو نیاز به «شماره شاسی» دارد و لپتاپ نیاز به «مدل CPU»).
- تولید خودکار پلاک (Tagging logic): تعیین پیشوند پلاک اموال بر اساس گروه (مثلاً پلاکهای IT با
CMPشروع شوند).
۲. منطق سلسلهمراتبی و ارثبری (Hierarchy & Inheritance Logic)
ساختار گروهها در تابان به صورت درختی (Tree Structure) و نامحدود است. اما برای حفظ نظم، پیشنهاد میشود حداکثر تا ۴ سطح پیش بروید.
اصل ارثبری (The Inheritance Rule)
قویترین ویژگی این فرم، منطق ارثبری است. تنظیماتی مثل «روش استهلاک»، «عمر مفید» و «مشخصات فنی» از والد به فرزند منتقل میشوند، مگر اینکه در سطح فرزند بازنویسی (Override) شوند.
مثال:
- سطح ۱ (والد): گروه "تجهیزات رایانهای" (عمر مفید: ۳ سال).
- سطح ۲ (فرزند): گروه "سرورها" (عمر مفید: ۵ سال - بازنویسی شد).
- سطح ۲ (فرزند): گروه "پرینترها" (عمر مفید: همان ۳ سال والد را میگیرد).
۳. بخشهای عملیاتی فرم (Form Details)
این فرم از دو بخش اصلی تشکیل شده است: اطلاعات عمومی و مشخصات پویا.
۳-۱. اطلاعات عمومی (General Info)
| عنوان فیلد (UI) | نام فنی (DB) | نوع داده | الزامی؟ | شرح و منطق بیزینسی |
|---|---|---|---|---|
| نام گروه | Name |
String | بله | عنوان نمایشی (مثلاً: وسایل نقلیه سنگین). |
| کد گروه | Code |
String | بله | کد یونیک جهت گزارشگیری و تولید پلاک (مثلاً: VEH-HVY). |
| گروه والد | ParentID |
FK | خیر | اگر خالی باشد، به عنوان "ریشه" (Root) در نظر گرفته میشود. |
| طبقه دارایی پیشفرض | DefaultAssetClassID |
FK | خیر | اتصال به کدینگ حسابداری. هر دارایی که در این گروه ساخته شود، اتوماتیک این کلاس مالی را میگیرد. |
| دنباله پلاک | TagSequenceID |
FK | خیر | تعیین میکند که شمارنده پلاک برای این گروه از چه عددی شروع شود (مثلاً سری ۵۰۰۰). |
| پیشوند پلاک | TagPrefix |
String | خیر | کاراکتری که اول پلاک چاپ میشود (مثلاً IT- برای تجهیزات آیتی). |
۳-۲. مشخصات فنی پویا (Dynamic Attributes)
این بخش نقطه تمایز یک ERP قدرتمند است. داراییهای مختلف، دیتای متفاوتی نیاز دارند. ما نمیتوانیم در دیتابیس صدها ستون خالی ایجاد کنیم. در این تب، ادمین سیستم تعریف میکند که "هر کس داراییای از این گروه ایجاد کرد، باید چه سوالاتی را پاسخ دهد؟"
انواع داده قابل تعریف برای مشخصات:
- متنی (Text): مثل "شماره موتور"، "رنگ".
- عددی (Number): مثل "ظرفیت موتور (cc)"، "تعداد سیلندر".
- تاریخ (Date): مثل "تاریخ انقضای گارانتی"، "تاریخ تعویض روغن".
- لیست کشویی (Select): مثل "نوع سوخت" (بنزینی/دیزلی).
- بولی (Checkbox): مثل "آیا دزدگیر دارد؟".
نکته ارثبری: اگر در گروه والدِ "خودروها"، مشخصه "شماره شاسی" را تعریف کنید، تمام زیرگروهها (سواری، کامیون، موتورسیکلت) این فیلد را خواهند داشت.
۴. سناریوهای کاربردی (Use Cases)
سناریوی ۱: پیادهسازی کدینگ اموال دولتی (سادا)
در بخش دولتی، گروهبندی باید منطبق بر استاندارد وزارت دارایی باشد.
- گروه اصلی: اموال منقول
- زیرگروه ۱: وسایل نقلیه
- زیرگروه ۲: زمینی
- زیرگروه ۳: سواری (کد سادا: ۲۵۱۰۱)
- مشخصات پویا: شماره شاسی، شماره موتور، VIN.
- زیرگروه ۳: سواری (کد سادا: ۲۵۱۰۱)
- زیرگروه ۲: زمینی
- زیرگروه ۱: وسایل نقلیه
سناریوی ۲: مدیریت تجهیزات کارخانه (بخش خصوصی)
یک کارخانه نساجی میخواهد دستگاههایش را مدیریت کند.
- گروه: ماشینآلات تولیدی
- پیشفرض استهلاک: روش نزولی (۱۰٪).
- پیشفرض پلاک: شروع با
MAC-. - مشخصات پویا:
- توان مصرفی (عدد).
- کشور سازنده (لیست).
- تاریخ آخرین کالیبراسیون (تاریخ).
۵. تعامل با سایر بخشها (Integration)
-
هنگام ثبت دارایی جدید:
- کاربر ابتدا "گروه" را انتخاب میکند (مثلاً لپتاپ).
- سیستم بلافاصله فرم را تغییر میدهد و فیلدهای "CPU" و "RAM" را نشان میدهد (چون در گروه لپتاپ تعریف شدهاند).
- سیستم کد حسابداری "تجهیزات رایانهای" را پیشفرض انتخاب میکند.
-
هنگام پلاککوبی:
- سیستم به تنظیمات گروه نگاه میکند: "پیشوند
LP+ شمارنده۱۰۰۱". - پلاک نهایی:
LP-1001.
- سیستم به تنظیمات گروه نگاه میکند: "پیشوند
۶. ملاحظات فنی برای توسعهدهندگان (Developer Notes)
الف) ساختار دیتابیس (Adjacency List vs. Nested Set)
برای ذخیره ساختار درختی، با توجه به اینکه عمق درخت داراییها معمولاً کم است، روش Adjacency List (رفرنس به ParentID) همراه با CTE (Common Table Expressions) برای کوئریهای بازگشتی (Recursive) پیشنهاد میشود.
TABLE AssetCategory (
ID INT PK,
ParentID INT NULL FK,
Name NVARCHAR(100),
Lineage NVARCHAR(MAX) -- مثال: /1/5/12/ برای جستجوی سریع
);
ب) ذخیرهسازی مشخصات پویا (EAV vs. JSON)
برای ذخیره مقادیر ویژگیها (Attributes)، دو رویکرد وجود دارد. برای ERP تابان، استفاده از JSON در دیتابیسهای مدرن (SQL Server / PostgreSQL) توصیه میشود.
- تعریف الگو (در گروه):
{ "Attribute": "CPU", "Type": "String", "Required": true } - ذخیره مقدار (در دارایی):
{ "CPU": "Core i7", "RAM": "16GB" }
ج) اعتبارسنجی چرخشی (Circular Dependency Check)
سیستم باید هنگام ذخیره گروه، چک کند که یک گروه نمیتواند والدِ خودش یا والدِ پدرش باشد (جلوگیری از حلقه بینهایت).
۷. پرسشهای متداول (FAQ)
س: آیا میتوانم یک دارایی را همزمان در دو گروه قرار دهم؟
- پاسخ: خیر. هر دارایی باید دقیقاً یک والد (گروه) داشته باشد تا تکلیف ارثبری و حسابداری آن مشخص شود. اما میتوانید از "تگها" (Tags) برای دستهبندیهای جانبی استفاده کنید.
س: اگر تنظیمات گروه را تغییر دهم (مثلاً عمر مفید را زیاد کنم)، آیا داراییهای قدیمی هم تغییر میکنند؟
- پاسخ: به صورت پیشفرض خیر. تغییرات روی داراییهای "جدید" اعمال میشود. برای اعمال روی قدیمیها، باید یک "Batch Update" (بروزرسانی گروهی) اجرا کنید که سیستم معمولاً قبل از آن هشدار میدهد.
س: تفاوت «گروه دارایی» با «طبقه دارایی» چیست؟
- پاسخ:
- گروه (Category): جنبه عملیاتی و فنی دارد (درختواره، مشخصات فنی، پلاک).
- طبقه (Class): جنبه مالی و حسابداری دارد (کدینگ حساب، نرخ مالیاتی).
- ارتباط: هر گروه میتواند به یک طبقه لینک شود.