چطور یک اپ صورتحساب بسازیم
یک اپ صورتحساب فهرستی از مشتریان نگه میدارد، به شما اجازه میدهد صورتحساب با ردیفهای کالا و مالیات بسازید، به هر کدام یک شماره یکتا میدهد، یک PDF یا لینکی تولید میکند که مشتری بتواند باز کند، و پیگیری میکند که پرداخت شده یا نه. نسخه اول یک اپ پایگاه داده ساده است که میتوانید در یک یا دو بعدازظهر با AI بسازید. جزئیاتی که اهمیت دارند — شمارهگذاری، مالیات، صورتحسابهای قفلشده، وضعیت پرداخت — همان چیزی هستند که یک نمونه آزمایشی را از چیزی که میتوانید برای مشتری بفرستید جدا میکند.
تصمیم بگیرید به چه نوع ابزار صورتحسابی نیاز دارید
«اپ صورتحساب» چند چیز متفاوت را در بر میگیرد. پیش از شروع یکی را انتخاب کنید:
| نوع | چه کسی استفاده میکند | چه چیزی آن را متفاوت میکند |
|---|---|---|
| مولد صورتحساب شخصی | یک فریلنسر | یک کسبوکار، PDF سریع، فهرست ساده چه کسی پرداخت کرده |
| ابزار صورتحساب کسبوکار | یک تیم کوچک | چند کاربر، فهرست مشترک مشتریان، گزارشها |
| صورتحساب داخل یک اپ بزرگتر | مشتریان یا کارکنان شما | صورتحسابهایی که از کارها، رزروها یا ساعات کاری که از قبل ثبت میکنید ساخته میشوند |
| محصول صورتحساب برای دیگران | کسبوکارهای زیاد | هر حساب فقط داده خودش را میبیند — این یک SaaS است |
نوع سوم جایی است که ساختن خودتان بیشترین سود را دارد: اگر از قبل کارها یا ساعات را ثبت میکنید، ساختن صورتحساب از همان داده وقت بازنویسی را ذخیره میکند. نوع چهارم یک MVP از SaaS کامل است با دغدغههای خودش درباره حسابها و صورتحسابگیری.
مدل داده
چهار جدول بیشتر نیازها را پوشش میدهد:
- تنظیمات کسبوکار — نام، نشانی، شماره مالیاتی یا VAT، لوگو، اطلاعات بانکی، شرایط پرداخت پیشفرض، نرخ مالیات پیشفرض، واحد پول و شماره صورتحساب بعدی.
- مشتریان — نام، شرکت، ایمیل، نشانی صورتحساب، شماره مالیاتیشان در صورت نیاز و شرایط پیشفرض.
- صورتحسابها — شماره، مشتری، تاریخ صدور، تاریخ سررسید، وضعیت، واحد پول، یادداشتها و جمعها (جمع جزء، مالیات، جمع کل).
- ردیفهای کالا — صورتحساب، توضیح، تعداد، قیمت واحد، نرخ مالیات و جمع ردیف.
اگر مشتریان به صورت قسطی یا با چند روش پرداخت میکنند، یک جدول پرداختها اضافه کنید: صورتحساب، تاریخ، مبلغ، روش و مرجع.
قواعدی که مهماند
این بخشها را ابزارهای ساخت با AI درست انجام نمیدهند مگر اینکه صریحاً بخواهید:
- شمارههای پشتسرهم و یکتا. بسیاری از سیستمهای مالیاتی انتظار دارند شماره صورتحساب یکتا و پشتسرهم باشد. شماره را هنگام صدور صورتحساب روی سرور تولید کنید، نه هنگام ساخت پیشنویس، تا پیشنویسهای رهاشده شکاف نسازند.
- صورتحسابهای ارسالشده را قفل کنید. وقتی صورتحسابی ارسال شد، ویرایش بیصدای آن مشکل است. فقط پیشنویسها قابل ویرایش باشند؛ برای صورتحساب ارسالشده، آن را باطل کنید و یک صورتحساب جدید صادر کنید، یا یک یادداشت بستانکاری صادر کنید.
- جزئیات مشتری را کپی کنید (snapshot). اگر مشتری سال آینده نشانیاش را عوض کند، صورتحسابهای سال گذشته باید نشانی قدیمی را نشان دهند. هنگام صدور، جزئیات مشتری را روی صورتحساب کپی کنید.
- پول بهصورت واحدهای کوچکترین سکه. مبالغ را به سنت (یا پنس) ذخیره کنید، نه بهصورت اعشاری، تا جمعها از خطای گرد کردن منحرف نشوند. مالیات را همانطور گرد کنید که اداره مالیات انتظار دارد، برای هر ردیف یا برای هر صورتحساب.
- وضعیتی که با واقعیت همخوان است. پیشنویس، ارسالشده، پرداختشده، پرداختشده بخشی، سررسیدگذشته، باطلشده. «سررسیدگذشته» باید از روی تاریخ سررسید محاسبه شود، نه اینکه دستی تنظیم شود.
PDF یا صفحه صورتحساب؟
مشتریان PDF انتظار دارند، اما یک صفحه وب برای همگام نگه داشتن راحتتر است. بیشتر ابزارهای صورتحساب هر دو را ارائه میدهند:
- یک صفحه صورتحساب قابل اشتراک با لینکی که حدس زدنش سخت است، تا مشتری بدون ورود بتواند ببیند و پرداخت کند.
- دانلود PDF که از همان داده تولید میشود، با لوگو و اطلاعات شما.
چیدمان مناسب چاپ را بخواهید و PDF را روی اندازه کاغذ (A4 یا US Letter) بررسی کنید. فهرستهای بلند ردیفها باید بهدرستی بین صفحات بشکنند.
دریافت پول بهصورت آنلاین
نشان دادن اطلاعات بانکی روی صورتحساب برای بسیاری از کسبوکارها کافی است. اگر پرداخت با کارت میخواهید، یک ارائهدهنده پرداخت وصل کنید:
- Stripe Checkout یا لینک پرداخت برای مبلغ صورتحساب. مشتری روی صفحه صورتحساب «پرداخت کن» را میزند.
- یک وبهوک از سمت ارائهدهنده به اپ شما میگوید که پرداخت موفق بوده، و اپ صورتحساب را پرداختشده علامت میزند. صورتحساب را فقط به این دلیل پرداختشده علامت نزنید که مشتری به یک صفحه موفقیت برگشته — آن صفحه ممکن است بدون پرداخت هم باز شود. نحوه افزودن پرداخت به اپ را ببینید.
- ابتدا حالت آزمایشی. کلیدهای آزمایشی ارائهدهنده و کارتهای آزمایشی را استفاده کنید تا کل جریان کار کند.
دانستنش مفید است: Stripe از سپتامبر ۲۰۲۶ محصول صورتحساب خودش را با صفحات صورتحساب میزبانیشده هم ارائه میدهد. اگر فقط میخواهید صورتحساب بفرستید و پول بگیرید، همان ممکن است کافی باشد.
یادآورها
ایمیلهای خودکار «صورتحساب شما سررسید شده» یکی از باارزشترین امکانات و یکی از آسانترینها برای اشتباه کردن است. به اینها نیاز دارید:
- یک ارائهدهنده ایمیل (Resend، Postmark، SendGrid و مشابه آنها) — ارسال ایمیل از اپ را ببینید.
- چیزی که بهصورت زمانبندیشده اجرا شود تا صورتحسابهای سررسیدگذشته را پیدا کند. یک اپ وب منتشرشده که وقتی بیکار است میخوابد خودش بیدار نمیشود، پس از سازنده بپرسید بررسی چطور راهاندازی میشود — برای مثال یک فراخوانی زمانبندیشده از یک سرویس cron خارجی به یک endpoint در اپ شما.
- ثبت اینکه کدام یادآورها فرستاده شده، تا کسی دو بار یک ایمیل نگیرد.
با یک دکمه دستی «ارسال یادآور» شروع کنید. بعداً خودکار کنید.
یک پرامپت اولیه که کار میکند
یک اپ صورتحساب برای کسبوکار طراحی وب من بسازید. وارد میشوم و مشتریان را مدیریت میکنم (نام، شرکت، ایمیل، نشانی صورتحساب، شماره VAT). صورتحسابها را با ردیفهای کالا (توضیح، تعداد، قیمت واحد) میسازم، با نرخ VAT برای هر ردیف، و جمع جزء، VAT و جمع کل را بهصورت زنده محاسبه شده میبینم. شمارههای صورتحساب پشتسرهم هستند (INV-0001، INV-0002) و وقتی صورتحسابی را ارسالشده علامت میزنم تخصیص داده میشوند؛ پیشنویسها قابل ویرایش میمانند، صورتحسابهای ارسالشده قفل میشوند. هر صورتحساب وضعیت (پیشنویس، ارسالشده، پرداختشده، سررسیدگذشته) و تاریخ سررسید دارد؛ سررسیدگذشته از روی تاریخ سررسید محاسبه میشود. هر صورتحساب یک لینک خصوصی قابل اشتراک و دانلود PDF با لوگو و اطلاعات بانکی من دارد. داشبورد کل مانده و سررسیدگذشته را نشان میدهد. مبالغ را به پنس ذخیره کنید. فقط GBP. همهچیز در یک پایگاه داده ذخیره شود.
مراحل ساخت
- ابتدا تنظیمات و مشتریان. اطلاعات کسبوکار و فهرست مشتریان را کار بیندازید، چون هر صورتحساب به آنها وابسته است.
- ویرایشگر صورتحساب. ردیفهای کالا، مالیات و جمعها. با اعداد ناجور آزمایش کنید — ۳ × ۳۳٫۳۳ پوند با VAT ۲۰٪ — و جمعها را با ماشینحساب بسنجید.
- شمارهگذاری و قفلکردن. سه صورتحساب صادر کنید، یک پیشنویس را حذف کنید، یک صورتحساب دیگر صادر کنید. شمارهها باید بدون شکاف و تکرار پشتسرهم بمانند.
- صفحه صورتحساب و PDF. لینک اشتراک را در یک پنجره خصوصی باز کنید. PDF را چاپ کنید.
- پرداختها. Stripe را در حالت آزمایشی اضافه کنید، یک صورتحساب را با کارت آزمایشی پرداخت کنید، و تأیید کنید وبهوک آن را پرداختشده علامت میزند.
- بررسی امنیتی. خارج شوید و سعی کنید با تغییر شناسه در نشانی، صورتحساب مشتری دیگری را باز کنید. فقط لینک خصوصی باید کار کند و نباید صورتحسابهای دیگر را نشان دهد. چکلیست امنیتی موارد بیشتری برای امتحان دارد.
- خروجی. یک خروجی CSV از صورتحسابها و پرداختها برای حسابدارتان اضافه کنید.
اشتباهات رایج
- پول با عدد اعشاری. اینکه ۰٫۱ + ۰٫۲ برابر ۰٫۳ نشود یک باگ واقعی در اپهای واقعی است. واحدهای کوچک کامل را ذخیره کنید.
- صورتحسابهای ارسالشدهای که قابل ویرایشاند. تغییر صورتحساب پس از اینکه مشتری آن را دارد باعث اختلاف و مشکلات حسابداری میشود.
- شمارهها هنگام پیشنویس تخصیص داده شوند. شکاف و سردرگمی ایجاد میکند.
- لینکهای قابل حدس.
/invoice/42کسی را ترغیب میکند/invoice/43را امتحان کند. توکنهای تصادفی بلند استفاده کنید. - فرض یک قانون مالیاتی. نرخهای مالیاتی، reverse charge و متن الزامی بین کشورها و نوع مشتری فرق میکند. از حسابدار بپرسید؛ اجازه ندهید AI حدس بزند.
- نداشتن پشتیبان. صورتحسابها سوابقی هستند که ممکن است ملزم به نگهداری سالها باشید. منظم خروجی بگیرید و در طرحهایی که اجازه میدهند، کد را در GitHub نگه دارید.
هزینهها و ابزارها
| بخش | کاربرد | نکات |
|---|---|---|
| ساخت اپ / میزبانی / پایگاه داده | ساخت و اجرای اپ | در Mythex یک موجودی اعتباری همه اینها را پوشش میدهد — قیمتها را ببینید |
| ارائهدهنده پرداخت | پرداخت با کارت | برای هر تراکنش کارمزد میگیرد؛ قیمت فعلی ارائهدهنده را برای کشور خود بررسی کنید |
| ارائهدهنده ایمیل | ارسال صورتحساب و یادآور | بسیاری در حجم کم سطح رایگان دارند |
| دامنه | لینکهای حرفهای صورتحساب | اختیاری، سالانه صورتحساب میشود |
وقتی نرمافزار آماده صورتحساب بهتر است
خودتان بسازید وقتی صورتحساب بخشی از گردش کار خودتان است، وقتی میخواهید ابزاری دقیقاً متناسب با نحوه صورتحسابگیریتان باشد، یا وقتی میخواهید صورتحساب به اپی اضافه کنید که از قبل دارید. نرمافزار حسابداری یا صورتحساب معتبر را انتخاب کنید وقتی:
- به دفترداری، فید بانکی، ردیابی هزینه و اظهارنامه مالیاتی در یک جا نیاز دارید.
- کشورتان صورتحساب الکترونیک با قالب مشخص یا از یک کانال گواهیشده میخواهد.
- ترجیح میدهید حسابدارتان در ابزاری کار کند که از قبل میشناسد.
یک مسیر میانی رایج: بخشی را که مختص شماست بسازید (کارها، ساعات کاری، یک پورتال مشتری که مشتریان صورتحسابهایشان را در آن میبینند) و اعداد را به نرمافزار حسابداری صادر کنید. ساختن یا خریدن نرمافزار برای کسبوکارهای کوچک این تصمیم را بررسی میکند.
ساختن با Mythex
در Mythex اپ صورتحساب را در چت توصیف میکنید و شکل گرفتن آن را در پیشنمایش زنده میبینید. وقتی اپ به آن نیاز دارد یک پایگاه داده اضافه میکند، کلیدهای API مثل کلید مخفی Stripe شما را در رازهای پروژه نگه میدارد، و اپ را روی نشانیای منتشر میکند که بلافاصله میتوانید استفاده کنید. دستور Stripe در مستندات راهاندازی با کلیدهای خودتان را نشان میدهد. برای شروع از پرامپتی که مبانی را از قبل توصیف میکند، قالبهای مولد صورتحساب یا صورتحساب فریلنسری را امتحان کنید.
پرسشها
یک اپ صورتحساب به چه امکاناتی نیاز دارد؟
فهرست مشتریان، صورتحسابها با ردیفهای کالا، مالیات و جمعها، شمارههای یکتا و پشتسرهم، یک PDF یا صفحه صورتحساب قابل اشتراک، و وضعیت برای هر صورتحساب (پیشنویس، ارسالشده، پرداختشده، سررسیدگذشته). پرداخت آنلاین و یادآورها مفیدترین افزودههای بعدی هستند.
آیا اپ صورتحساب من میتواند پرداخت با کارت بپذیرد؟
بله، از طریق یک ارائهدهنده پرداخت مثل Stripe. اپ یک لینک پرداخت یا صفحه پرداخت برای مبلغ صورتحساب میسازد، و یک وبهوک از سمت ارائهدهنده وقتی پرداخت موفق شد صورتحساب را پرداختشده علامت میزند.
آیا استفاده از اپ صورتحساب خودم قانونی است؟
عموماً بله، اما صورتحسابها الزامات محتوایی قانونی دارند که بین کشورها فرق میکند — مشخصات فروشنده، شمارههای مالیاتی، تاریخها، تفکیک مالیات — و برخی کشورها صورتحساب الکترونیک با قالب مشخص میخواهند. پیش از تکیه بر آن، با حسابدار بررسی کنید چه چیزی برای شما صدق میکند.
آیا باید اپ صورتحساب بسازم یا از نرمافزار حسابداری استفاده کنم؟
اگر به دفترداری، ارائه اظهارنامه مالیاتی یا تطبیق حساب بانکی نیاز دارید، از نرمافزار حسابداری استفاده کنید. وقتی صورتحسابها به گردش کار خاص خودتان — کارها، ساعات کاری، پروژهها — وصلاند یا میخواهید ابزاری ساده بدون هزینه به ازای هر کاربر داشته باشید، خودتان بسازید.