سلام بر همگی، محمد هستم و مهندس نرمافزارم. در این سلسله پست میخوایم نکات مهمی رو بررسی کنیم که باید در طراحی یک نرمافزار حسابداری رعایت بشن. با تکرارِ زیادی دیدم که نرمافزارهایی که بخشهای حسابداری دارن در این موضوع دچار مشکلات زیادی هستن؛ از گمشدنِ پول گرفته تا اشتباه حسابشدن بدهکاریِ آدمها. به همین خاطر تصمیم گرفتم این سلسله مطالب رو منتشر کنم که هم حرفهای خودم پایه و اساسِ دقیقتری داشته باشن و فُرم بگیرن، و هم اینکه اگه کسی خواست نرمافزاری با قابلیتهای مشابه ایجاد کنه، تو دیوار نره و بتونه یه چیزِ مستحکم با امکانِ خطای صفر بسازه. اخیراً به همیان اضافه شدم و به خاطرِ همین میخوام پستهام رو با تمرکز بر این اپلیکیشن بنویسم. بد نیست نصبش کنید و یکم باهاش کار کنید تا بیشتر در جوِ صحبتهام قرار بگیرید.
همیان یک اپلیکیشنه که با استفاده ازش میتونید با گروهی از آدمها، صندوق مالی ایجاد کنید. روال کار اینطوریه که صندوقتون رو ایجاد میکنید و اعضا رو بهش اضافه میکنید، بعد هر کی میتونه پول به صندوق واریز کنه و در کنارِ هم یک سپردهی مشترک داشته باشید. قطرهقطره جمع که میشه وانگهی دریا میشه و با کلی پولی که جمع شد میشه کلی کارهای مختلف کرد؛ مثلاً به عضوهایی از گروهمون که الآن نیاز دارن وام بدیم، با هم یک چیزی بخریم یا کارهای دیگهای که خلاقیت شما بهتر از من میتونه پیداشون کنه.
اول این رو بگم که منظورمون از «طراحی» در این پستها طراحیِ پایگاهداده، منطق نرمافزار و انشاءالله API هاست. پس پستهامون طراحی تجربهی کاربری و طراحی محصول رو در بر نمیگیرن. هر چند اون موارد هم مهم هستن و امیدوارم روزی بتونیم روشون وقت بذاریم و بررسیشون کنیم.
وقتی اسم حسابداری میآد، یه مقدار خود من مورمور میشم. آیا داریم صحبت از دفتر و دستک و کارهای اداری و بازیهای حقوقی میکنیم؟ در اینجا نه. در اینجا وقتی میگیم «حسابداری»، منظورمون اینه که حساب و کتاب یه «چیز»ی رو میخوایم داشته باشیم؛ حالا این «چیز» میتونه مثلاً سهمیهی سوخت باشه (در یک سیستم که سهمیهبندی سوخت افراد رو ذخیره میکنه)، میتونه پول باشه (در همیان، که بفهمیم کدوم عضو توی کدوم صندوق چقدر پول داره) و یا هر چیز دارای ارزشی که ما میخوایم حساب و کتابش رو تو دستمون داشته باشیم.
برای جا افتادن مسئله بیاید حساب بانکیمون رو بررسی کنیم. اول ببینیم در مورد این حساب، مهمترین مسئله چیه؟ احتمالاً میگید «موجودی» و درست هم میگید. ولی آیا دونستنِ موجودیِ حساب کافیه؟ و آیا این موجودی یک موجودیتِ مستقله؟ دیگه چه چیزهایی لازمن برای اینکه مفهوم حساب بانکی و موجودیِ اون تکمیل بشه؟
بذارید با چند سؤال، ذهنتون رو هُل بدم به سمتِ چیزی که میخوام بگم:
اگر جوابتون به هر کدوم از سؤالات بالا «بله» است، توی تلگرام به آیدی من (mtp_zdr@) پیام بدید تا بیشتر در این خصوص بحث کنیم. اما برای این پست، میخوام بگم که پاسخ درست «نه» است.
به خصوص بیاید روی سؤال دوم بحث کنیم: اگه بتونم بیام به موجودی حساب محمد همینطوری ۱ میلیونتومن اضافه کنم چه اتفاق بدی توی سیستم میافته؟
تا حالا اسم قانون پایستگی جرم به گوشتون خورده؟ آنتوان لاوازیه یک زمان گفت:
نه در کارهای هنری و نه در طبیعت هیچ چیز ظاهر نمیشود. و از آنجایی که کیفیت و کمیت مواد اصلی در هر واکنشی ثابت است میتوان میزان ماده را پیش و پس از واکنشها وزن نمود و دید که هیچ چیز نه به وجود میآید و نه از بین میرود. بلکه فقط از صورتی به صورت دیگر تبدیل میشود.
عبارات اولش جالبن؛ «نه در کارهای هنری و نه در طبیعت». به نظرم این نگاهش به دنیا حائز اهمیته. یه سری الگوهایی هستن که در جاهای مختلفی در دنیا میشه اونها رو دید و یکی از اونها، «قوانین پایستگی» ـه. قوانین پایستگی به طور کلی میگن که «X ـی به وجود نمیآد و از بین نمیره، بلکه از جایی به جای دیگه منتقل میشه». به جای X میشه هر چیزی رو گذاشت و به یک قانون جدید رسید.
حالا این مسائل چه ربطی به بحثِ حسابداری حساب من دارن؟ ربطشون وقتی مشخص میشه که به جای X بیایم و «پول» رو بذاریم:
پول به وجود نمیآد و از بین نمیره، بلکه از جایی به جای دیگه منتقل میشه.
اصلِ اول در هر سیستم حسابداری: اصلِ پایستگیِ ارزش
پس اگه من بیام و مقدار «موجودی» رو در حساب بانکیِ بانک رسالتم همینطوری ۱ میلیون تومن زیاد کنم، اصلِ بالا رو نقض کردم. چرا؟ چون یه پولی رو همینطوری ظاهر کردم بدون اینکه بگم از کجا اومده. اگه قرار باشه ۱ میلیون تومن به موجودی من اضافه بشه، باید اون ۱ میلیون تومن از یک جای دیگه اومده باشه.
پس دیدیم که بر اساس قانون پایستگیِ ارزش، مهمه که پولها در یک سیستم حساب و کتاب، فقط جابهجا بشن و ظاهر یا غیب نشن (هر چیزی که شما میخواید حساب و کتابش کنید اینطوره. یهو ظاهر یا غیب نمیشه). این شاید مهمترین چیزیه که باید در طراحی یک سیستم حسابداری بهش دقت کنیم.
حالا سؤال اینه که چطور جداول پایگاهداده و منطقِ نرمافزار رو طراحی کنیم که اصل پایستگی ارزش در اون حفظ بشه. در پستهای بعدی سعی میکنیم به این سؤال پاسخ بدیم و گامبهگام یک سیستم حسابداری اصولی طراحی کنیم که بتونه بدونِ غلط کار کنه و همیشه دقیق باشه.