ابزار جدید قابل تهیه در نسخه 12.02: ابزار اتصال نرمافزار فروش به سامانه مودیان (نوع و وضعیت فاکتورهای قابل ارسال و سیر عملیات ارسال اطلاعات)
در سامانه مودیان دو فیلد جداگانه ولی مربوط به هم برای توصیف صورتحساب لحاظ شدهاند: نوع و الگو. نوعِ اول حاوی اطلاعات کامل فروشنده، خریدار و کالا یا خدمت است / نوع دوم فاقد اطلاعات خریدار / نوع سوم فاقد اطلاعات خریدار و کالا یا خدمت است. به بیان دیگر نوع سوم رسید پرداخت وجه صادره از دستگاه کارتخوان بانکی یا درگاه الکترونیکی پرداخت (پایانه فروشگاهی) است. انواع اول و دوم برای صورتحسابهای شرکتی / سیستمی استفاده میشوند که البته نوع دوم برای فروش به مصرفکننده نهایی است.
در صورتحسابهای نوع اول یا دوم، یک "الگوی صورتحساب" نیز داریم: در نوع اول، الگوهای 1) فروش، 2) فروش ارزی، 3) صورتحساب طلا، جواهر و پلاتین، 4) قرارداد پیمانکاری، 5) قبوض خدماتی، 6) بلیط هواپیما، 7) صادرات وجود دارند. در نوع دوم، الگوهای 1) فروش، 2) صورتحساب طلا، جواهر و پلاتین وجود دارند. در صورتحسابهای نوع سوم الگو وجود ندارد.
از بین 10 مدل صورتحسابی که از ترکیب نوع و الگو حاصل میشوند؛ نوع سوم که مربوط به درگاههای پرداخت (POS) است طبیعتا به ما مربوط نمیشود + صورتحساب طلا و جواهر (2 مدل)، قبوض خدماتی و بلیط هواپیما مربوط به سیستمهای اختصاصی فروش هستند و ربطی به سیستم ما ندارند. 5 مدل صورتحساب باقی میماند که باید در سیستم نوسا پشتیبانی شوند. برای هر فاکتور فروش یک فیلد به نام "نوع صورتحساب در سامانه مودیان" خواهیم داشت که میتواند یکی از حالتهای زیر باشد:
فروش عادی (نوع 1 الگوی 1)
فروش ارزی (نوع 1 الگوی 2)
قرارداد پیمانکاری (نوع 1 الگوی 4)
صادرات (نوع 1 الگوی 7)
فروش به مصرفکننده نهایی (نوع 2 الگوی 1)
مقدار پیشفرض این فیلد، "فروش عادی" است و طبیعتا همهی برگههای فروشی که از قبل در پایگاه اطلاعات درج شدهاند همین نوع را خواهند داشت. در مستندات سامانه مودیان، نوع و الگوی صورتحساب تاثیر زیادی در ساختار JSON ارسالی به سامانه مودیان دارد. در سیستم نوسا این تاثیر را بیش از همه در تعریف روش ارسال خواهیم دید. خواهیم دید که در تعریف هر یک از سطرهای روش ارسال یک دریچهی قابل علامتگذاری چندگانه وجود دارد که با استفاده از آن تعیین میکنیم که فیلد مورد نظر (تعریف شده در آن سطر) در کدام نوع یا انواع صورتحساب باید به سامانه ارسال شود.
در ادامه این بخش به روش ارسال انواع فاکتور فروش و وضعیتهای آن خواهیم پرداخت، خلاصهای از این مراحل در ویدیو زیر در دسترس میباشد، در این ویدیو انواع فاکتورهای فروش و نحوه ارسال و دریافت استعلام فاکتورها در وضعیتهای گوناگون جهت ثبت داده فروش در کارپوشه سامانه مودیان بصورت آنلاین طی زیرساخت موجود سازمان مالیات در سایت tax.gov.ir و قانون پایانه های فروشگاهی و سامانه مودیان در فروردین 1402 آموزش داده خواهد شد.
زمان بندی محورهای اصلی این ویدیو:
- فرم محاوره فاکتور فروش برای سامانه مودیان 00:00:24
- نکات مهم در رابطه با ثبت فاکتورهای فروش برای سامانه مودیان 00:01:57
- نحوه ارسال صورتحساب به سامانه مودیان 00:08:20
- نحوه استعلام صحت صورتحساب از سامانه مودیان و رفع خطاها 00:12:41
- برخی فیلدهای سیستمی اطلاعات سامانه مودیان 00:15:04
- اصلاح فاکتور فروش پس از ارسال به سامانه مودیان 00:17:16
- حذف و یا ابطال صورتحساب ارسال شده به سامانه مودیان 00:24:01
بدون اینکه بخواهیم به جزییات تدوین یکی از سطرهای روش ارسال بپردازیم، در شکل فوق مشخص است که "روش تسویه" تحت نام "setm" در header درج میشود ولی نه برای انواع صادرات و فروش به مصرفکننده نهایی. در بحث بعدی، به عملیاتی که در همین رابطه برروی صورتحسابها (فاکتورهای فروش) درسیستم نوسا انجام میشوند میپردازیم که عبارتند از:
- ارسال صورتحساب اصلی: اولین و مهمترین و پرکاربردترین عملیات است. خواهیم دید که از فهرست برگههای فروش و با انتخاب تعدادی برگهی فروش قابل انجام است.
- ارسال صورتحساب اصلاحی: اگر کاربر، یک صورتحساب که قبلا به سامانه ارسال شده (و استعلام آن هم دریافت شده و خطایی هم نداشته) را بعدا اصلاح نماید، لازم است تا این اصلاحات در قالب یک صورتحساب اصلاحی به سامانه ارسال شود. خواهیم دید که چنین صورتحسابهایی به صورت خودکار توسط سیستم علامتگذاری میشوند (در یک وضعیت اختصاصی قرار میگیرند). فرمان ارسال آنها نیز از فهرست برگههای فروش قابل صدور است.
- استعلام صورتحسابهای اصلی و اصلاحی: پردازش صورتحسابها در سامانه مودیان بلافاصله انجام نمیشود و صحت دادهها یا خطاهای صورتحساب با تاخیر و پس از پردازش توسط سامانه در عملیات دیگری به نام "استعلام" مشخص میشود. استعلام این صورتحسابها نیز در فهرست برگههای فروش قابل انجام است.
- ارسال صورتحساب ابطالی: صورتحسابهایی که به سامانه مودیان ارسال شده باشند، مستقل از وضعیت کنونی آنها (اعلام صحت یا در انتظار استعلام یا...) دیگر در سیستم نوسا قابل حذف یا ابطال مستقیم نیستند. ابطال این صورتحسابها با تشریفات خاص و با ارسال موجودی به نام "صورتحساب ابطالی" انجام میشود. فرمان ارسال صورتحساب ابطالی (عملا آغاز فرآیند ابطال صورتحسابهایی که قبلا به سامانه مودیان ارسال شدهاند) در فرم ویرایش فاکتور فروش قابل صدور است.
- استعلام صورتحساب ابطالی: پردازش صورتحسابهای ابطالی نیز در سامانه مودیان با تاخیر انجام میشود و باید پس از طی زمانی (که مقدار آن از قبل مشخص نیست) نسبت به استعلام آنها اقدام کنیم. عملیات ابطال فیزیکی صورتحساب در سیستم نوسا عملا پس از استعلام صورتحساب ابطالی و در صورتی که صورتحساب خطایی نداشته باشد انجام خواهد شد. استعلام مزبور نیز از فرم ویرایش فاکتور فروش قابل انجام است.
هر صورتحساب یک فیلد مهم به نام "وضعیت ارسال به سامانه مودیان" دارد. طبیعتا همهی صورتحسابها در ابتدا در وضعیت "ارسال نشده" قرار دارند. تحت تاثیر عملیات فوق وضعیت صورتحسابها تغییر میکند. وضعیت ارسال و عملیاتی که قابل انجام است درهمکنش زیادی با هم دارند – به صورتی که هر یک از عملیات فقط برروی صورتحسابهایی با وضعیتهای به خصوص قابل اجرا هستند و در نتیجه در هر وضعیت فقط میتوان عملیات خاصی را انجام داد. وضعیتها عبارتاند از:
- ارسال نشده: صورتحسابهای جدید در این وضعیت قرار دارند. همچنین همهی صورتحسابهایی که از قبل در پایگاه اطلاعات موجود بودهاند نیز در همین وضعیت قرار خواهند داشت.
- در انتظار استعلام اصلی: صورتحسابها پس از ارسال اصلی در این وضعیت قرار خواهند گرفت. وضعیتهای "در انتظار" قاعدتا کاملا موقتی هستند و باید با استعلام به یکی از سایر وضعیتها تبدیل شوند.
- اعلام خطا در استعلام اصلی: اگر در استعلام صورتحساب اصلی خطایی مشاهده شود، صورتحساب در این وضعیت قرار میگیرد. این صورتحساب باید حتما اصلاح شود و دوباره به عنوان صورتحساب اصلی به سامانه ارسال گردد (که متعاقب آن در وضعیت در انتظار استعلام اصلی قرار خواهد گرفت).
- اعلام صحت: صورتحسابی که در استعلام خطا نداشته باشد عملا تعیین تکلیف شده و در وضعیت اعلام صحت قرار خواهد گرفت. این، وضعیت خاتمهی صورتحسابهای اصلی و اصلاحی است.
- نیازمند ارسال اصلاحی: اگر یک صورتحساب در وضعیت "اعلام صحت" توسط کاربر اصلاح شود، پس از طی تشریفات و تاییدات اختصاصی و با توجه به اختیارات کاربر، به عنوان یک صورتحساب که نیازمند ارسال اصلاحی است توسط سیستم علامتگذاری خواهد شد. این همان وضعیت صورتحسابی است که باید عملیات ارسال صورتحساب اصلاحی برای آن انجام شود.
- در انتظار استعلام اصلاحی: صورتحساب، پس از ارسال به عنوان اصلاحی، در این وضعیت قرار میگیرد و طبیعتا باید بعدا استعلام شود.
- اعلام خطا در استعلام اصلاحی: اگر در استعلام صورتحساب اصلاحی خطایی مشاهده شود، صورتحساب در این وضعیت قرارمیگیرد. صورتحساب باید برای رفع خطا اصلاح شود و دوباره به عنوان صورتحساب اصلاحی به سامانه ارسال گردد. اگر خطایی در استعلام اصلاحی رخ ندهد صورتحساب در وضعیت "اعلام صحت" قرار خواهد گرفت.
- در انتظار استعلام ابطالی: صورتحساب، پس از ارسال به عنوان ابطالی در این وضعیت قرار میگیرد.
- اعلام خطا در استعلام ابطالی: اگر در استعلام ابطالی خطایی گزارش شود صورتحساب در این وضعیت قرار میگیرد. توجه کنید که اگر خطایی از استعلام صورتحساب ابطالی گزارش نشود، صورتحساب به صورت فیزیکی در سیستم نوسا نیز باطل خواهد شد.
هر یک از عملیات پیشگفته برروی صورتحسابهایی با وضعیتهای به خصوص قابل اجرا هستند:
در مقابل، در هر وضعیت از صورتحسابها فقط عملیات مشخصی قابل اجرا است. اکثرا، طبیعتا فقط یکی از عملیات را خواهیم داشت، به جز حالت نیازمند ارسال اصلاحی که ممکن است بدون اجرای فرآیند ارسال اصلاحی، مستقیما ابطال شود.
در یکی از بخشهای آتی خواهیم دید که انواع و وضعیتهای صورتحسابها به عنوان پارامترهای قابل تعیین جدیدی در گزارشهای فروش در اختیار قرار داده شدهاند. در محاورهی ابتدایی این گزارشها، صفحهی "بخش" به "بخش (و حافظه مالیاتی)" تغییر نام یافته است و دریچههایی برای انتخاب انواع و وضعیتها (و حافظههای مالیاتی) مورد نظر برای تاثیر در گزارش در آن تعبیه شدهاند. پارامترهای پیشگفته از قضا در همین گزارش بیشترین کاربرد را دارند – برای احضار برگههایی که وضعیت آنها برای اجرای عملیات به خصوصی مناسب است (مثلا ارسال اصلی).
جهت شفاف سازی انواع وضعیتها، ویدیو زیر به تحلیل وضعیت های صورتحساب ها و عملیات در دسترس در هر وضعیت جهت ثبت داده فروش در کارپوشه سامانه مودیان بصورت آنلاین طی زیرساخت موجود سازمان مالیات در سایت tax.gov.ir و قانون پایانه های فروشگاهی و سامانه مودیان در فروردین 1402 خواهد پرداخت.
زمان بندی محورهای اصلی این ویدیو:
- وضعیت ها و عملیات مجاز صورتحساب ها برای سامانه مودیان 00:00:22
- برخی از پارامترهای جدید در گزارش های فروش برای سامانه مودیان 00:06:42
محدودیتهای ناشی از وضعیت صورتحساب در عملیات عادی سیستم فروش (اصلاح و حذف یا ابطال برگههای فروش)
طبیعی است که صورتحسابهای در انتظار استعلام (هر سه وضعیت) در بلاتکلیفترین وضعیت قابل تصور قرار دارند. اصلاح (یا حذف و ابطال) این صورتحسابها میسر نیست. توجه کنید که دادههای این برگههای فروش به سامانه مودیان ارسال شدهاند و پردازش آنها هنوز انجام نشده یا حاصل آن به اطلاع سیستم نرسیده است. اصلاح صورتحسابهایی که استعلام آنها منجر به گزارش خطا شده باشد (هر سه وضعیت) میسر است. این اصلاح برای رفع خطا و ارسال مجدد به سامانه ضروری است. البته حذف یا ابطال این صورتحسابها نیز غیرممکن است.
تنها وضعیتی که در آن اصلاح تشریفات خاصی دارد، وضعیت اعلام صحت (از استعلام) است. به یاد داریم که اصلاح برگهی فروش از فرم ویرایش و به صورت صریح (با یک تکمهی اختصاصی که به همین منظور تعبیه شده است) آغاز میشود. روال اصلاح چنین صورتحسابهایی به حدی اهمیت دارد که برای توضیح آن، یک بخش مجزا که در ادامهی همین مستند مشاهده میشود لحاظ کردهایم. به اختصار چنین است که اصلاح صورتحسابی در وضعیت اعلام صحت، آن صورتحساب را به وضعیت "نیازمند ارسال اصلاحی" میبرد و باید به عنوان صورتحساب اصلاحی به سامانه ارسال شود.
البته حافظه مالیاتی صورتحسابی که به سامانه ارسال شده باشد (در وضعیت "ارسال نشده" نباشد) اصولا غیرقابل تغییر است. حذف یا ابطال همین صورتحسابها به روال عادی سیستم نیز ناممکن است. دیدیم که صورتحسابهایی که پیش از این در سامانه تعیین تکلیف شدهاند (در وضعیت اعلام صحت یا حتی نیازمند ارسال اصلاحی قرار دارند) را میتوانیم با تشریفات خاصی ابطال کنیم – با ارسال صورتحساب ابطالی و استعلام آن.
مراحل تنظیم فاکتور فروش
در بخشهای قبلی، فیلدهای جدیدی که به برگههای فروش اضافه شدهاند را شرح دادیم. دیدیم که برخی از این فیلدها سیستمی هستند و تقریبا بدون دخالت مستقیم کاربر در فرآیندهای اصلاح برگه فروش یا ارسال و استعلام توسط سیستم مقداردهی میشوند. در مقابل برخی از فیلدها نیز باید توسط کاربر تعیین شوند. فیلدهای متعددی هم وجود دارند که یا اختیاری هستند یا فقط در برخی از انواع صورتحساب باید تعیین شوند (مثل شناسه قرارداد پیمانکاری). فیلدهای مزبور در یک فرم محاورهی تدوین مشخصات عمومی فاکتور فروش به نام "پیشفرض نوسا (سامانه مودیان)" قرار داده شدهاند. مطابق شکل زیر، در این محاوره یک صفحه به نام سامانه مودیان تعبیه شده است. در این صفحه، یک ناحیه چند صفحهای وجود دارد. در صفحهی اول فیلدهای اصلی و مهم قرار داده شدهاند؛ کاربر باید (با تشریفات و ملاحظاتی که در ادامه شرح خواهیم داد) حافظه مالیاتی را انتخاب نماید. البته در اکثر قریب به اتفاق موارد حافظه مالیاتی (به همراه کد شعبه فروشنده) از بخش کاربر قابل تشخیص است و نیازی به تغییر آنها پیش نمیآید.
نوع در سامانهی مودیان یکی از 5 حالتی است که پیش از این معرفی کردیم و باید توسط کاربر تعیین شود. دیدیم که این نوع بیش از همه در رابطه با روش ارسال اطلاعات قرار دارد و در درج فیلدهای مختلف در JSON صورتحساب نقش مهمی را ایفا میکند. یادآوری میکنیم که انواع عبارتند از: فروش عادی / فروش ارزی / قرارداد پیمانکاری / صادرات / فروش به مصرفکننده نهایی. همانطور که در شکل زیر دیده میشود برخی از فیلدهای سیستمی نیز در همین محاوره بازنمایی میشوند که البته قابل تغییر نیستند. این فیلدها را در بخشهای قبلی توصیف کردهایم. در ناحیهی چندصفحهای سامانه مودیان، صفحهای به نام "صادرات" هم مشاهده میشود. فیلدهای گمرکی و کوتاژ در این صفحه تعیین میشوند.
همانطور که پیش از این گفتیم، وضعیت ارسال فاکتورهای جدید "ارسال نشده" خواهد بود. اینها صورتحسابهایی هستند که باید به سامانه مودیان ارسال شوند. پردازش صورتحسابها در سامانه مودیان به صورت آنی انجام نمیشود – به همین دلیل ارسال یک صورتحساب به معنی پایان کار نیست و باید بعدا صحت دادهها یا احیانا خطاهای احتمالی را به صورت جداگانه و با فرآیند استعلام از سامانه مودیان درخواست کرد. پس از استعلام ممکن است خطاهایی گزارش شوند که به معنی پایان نیافتن کار ما با صورتحساب خواهد بود. در این حالت، صورتحساب در وضعیت "اعلام خطا در استعلام" قرار خواهد گرفت و لازم است تا پس از رفع خطاها (اصلاح برگهی فروش یا اصلاح روش ارسال) دوباره صورتحساب را ارسال کنیم. خطاهایی که در استعلام دریافت شدهاند در محاورهی اطلاعات عمومی فاکتور فروش در صفحهی سامانه مودیان و زیرصفحهی خطاها بازنمایی خواهند شد. در فرآیند استعلام ممکن است برخی اشکالات جزیی نیز در صورتحساب وجود داشته باشند که به عنوان اخطار (Warning) گزارش میشوند. این اخطارها نیز در یک صفحهی دیگر بازنمایی میشوند.
تغییر حافظه مالیاتی
در بخشهای قبل گفتیم که حافظههای مالیاتی در ارتباط نزدیک با بخشها قرار دارند. دیدیم که در حین تعریف حافظههای مالیاتی باید بخشهای سیستم را به حافظههای مالیاتی نسبت دهیم. در نهایت چنین خواهد شد که هر بخش به یک یا چند حافظه مالیاتی مرتبط خواهد بود. البته در 90 درصد از کاربردها فقط یک حافظه مالیاتی وجود دارد که همهی بخشها به آن حافظه مرتبط هستند.
با چنین طرحی، در حین تنظیم یک فاکتورفروش، با تعیین بخش (به صورت خودکار در ابتدا یا به صورت صریح توسط کاربر در صفحهی سند) حافظههای مالیاتیای که برای صورتحساب قابل انتخاباند هم معلوم میشوند. اولین حافظه مالیاتی به صورت خودکار لحاظ میشود. اگر در حین تخصیص بخشها به حافظهی مالیاتی "کد شعبه فروشنده" هم مشخص شده باشد، آن کد نیز به صورت خودکار در فیلد مربوط درج خواهد شد. با این همه کاربر میتواند با Ctrl+Enter در فیلد نام حافظه مالیاتی محاورهی زیر را احضار کند و نسبت به تغییر حافظه مالیاتی (و سایر فیلدها) اقدام نماید.
همانطور که مشاهده میشود در این محاوره تعیین بخش، حافظه مالیاتی و کد شعبه میسر است. با تغییر بخش ممکن است فهرست حافظههای مالیاتی قابل انتخاب در فیلد بعدی تغییر کنند. همچنین با تغییر بخش و حافظه مالیاتی، اگر کاربر به صورت دستی قبلا کد شعبه را تغییر نداده باشد، کد شعبه نیز به پیشفرضی که برای آن بخش در آن حافظه مالیاتی تعیین شده است مقداردهی میشود.
یادآوری میکنیم که تغییر بخش فقط در حین تنظیم برگهی فروش جدید میسر است (اصلاح بخش برگهای که قبلا تنظیم شده است میسر نیست). رویهی سیستم در تنظیم برگهها و سندهای جدید چنین است: هر کاربر دارای تعدادی بخش است که در صفحهی تعریف کاربران تعیین میشوند. یکی از این بخشها مستقیما برای کاربر تعیین میشود و بقیهی آنها با تکمهای که به همین منظور در تعریف کاربران داریم مشخص میشوند. اینها در مجموع بخشهای کاربر را تشکیل میدهند. به جز این، هر کاربر میتواند در تنظیمات سیستم (کاربر فعلی) بخش جاری خود را از بین همان بخشها تعیین کند. در تنظیم هر برگه (یا سند) جدید، سیستم همواره بخش جاری کاربر را به برگه نسبت میدهد. کاربری که اختیار تنظیم برگه برای سایر بخشها را نداشته باشد نمیتواند بخش مزبور را تغییر دهد و تا به حال تنها راه برای تنظیم برگه برای یک بخش دیگر (از بین بخشهای مجاز کاربر) این بود که کاربر در تنظیمات سیستم بخش جاری خود را تغییر دهد. در تنظیم فاکتور فروش جدید، با استفاده از امکاناتی که محاورهی فوق در اختیار قرار میدهد کاربران قادر خواهند بود که برای هر یک از بخشهای مجاز خود فاکتور فروش تنظیم نمایند – یعنی دریچهی بخش در محاورهی فوق حاوی تمام بخشهای مجاز کاربر خواهد بود.
در دریچهی حافظه مالیاتی یک گزینهی "ندارد" هم وجود دارد. این گزینه برای تنظیم فاکتور بدون ارتباط با سامانه مودیان تعبیه شده است. البته توجه کنید که در مشخصات یک سیستم اطلاعاتی (Admin)، در صفحهی "فروش" دریچهای برای تعیین "ارتباط فاکتور فروش با حافظه مالیاتی" تعبیه شده است که گزینههای ندارد / اجباری / اختیاری در آن لحاظ شدهاند. اگر این وضعیت "ندارد" باشد، طبیعتا، امکان تعیین حافظه مالیاتی برای برگهی فروش وجود نخواهد داشت. در مقابل در وضعیت "اجباری" امکان انتخاب گزینهی "ندارد" را نخواهیم داشت.
همانطور که در بخشهای قبلی توضیح دادیم، در سطرهای اصلی فاکتور فروش، دو فیلد جدید اضافه شدهاند که حسب مورد (و نیاز) توسط کاربر قابل درج هستند: "وزن خالص (برحسب کیلوگرم)" که به صورت اختصاصی در صورتحسابهای صادراتی باید تعیین شود و "شناسهی یکتای ثبت قرارداد حقالعملکاری".
آخرین نکتهی فرعی قابل اشاره در تنظیم برگههای فروش این است که در فراخوانی (کپی) یک فاکتور فروش (Ctrl+I) در دریچهی انتخابی چندگانهی "مشخصات عمومی برگه" گزینههایی برای کپی "اطلاعات پروانه و کوتاژ گمرکی" و نیز "شناسه یکتای ثبت قرارداد پیمانکاری" اضافه شدهاند.
صورتحساب اصلاحی
پیش از این در حین توصیف فیلد جدید فاکتور یعنی "نیازمند ارسال صورتحساب اصلاحی است" توضیحاتی در مورد تشریفات اصلاح صورتحسابهای ارسال شده به سامانه مودیان ارائه کردیم. به صورت خلاصه یادآوری میکنیم که هر صورتحساب یک فیلد مهم به نام "وضعیت ارسال به سامانه مودیان" دارد. فاکتورهای جدید (و همهی فاکتورهایی که از سالهای مالی قبل در پایگاه اطلاعاتی وجود دارند) در وضعیت "ارسال نشده" قرار دارند. اینها باید به عنوان صورتحساب اصلی به سامانه ارسال شوند. خواهیم دید که این عمل از فهرست برگههای فروش انجام میشود. اگر ارسال با خطا مواجه نشود صورتحساب در وضعیت "در انتظار استعلام اصلی" قرار میگیرد. صورتحسابهای در انتظار استعلام باید در فهرست برگههای فروش از سامانه استعلام شوند. حاصل استعلام ممکن است اعلام صحت یا اعلام خطای صورتحساب باشد که حسب مورد متناظر با وضعیتهای "اعلام صحت" یا "اعلام خطا در استعلام اصلی" است. صورتحسابهای دارای خطا باید اصلاح شوند و دوباره به سامانه ارسال شوند که در نتیجه دوباره در وضعیت در انتظار استعلام اصلی قرار میگیرند و باید استعلام شوند. اما صورتحسابهایی که در وضعیت "اعلام صحت" قرار دارند به نوعی تعیین تکلیف نهایی شدهاند و ممکن است دیگر هیچ کاری با آنها نداشته باشیم.
صورتحسابهای در انتظار استعلام در بلاتکلیفترین وضعیت قرار دارند و به همین دلیل طبیعی است که اصلاح آنها به هیچ وجه میسر نیست. صورتحسابهای با وضعیت "خطا در استعلام: طبیعتا باید اصلاح شوند تا خطاهای مربوط رفع شوند و به همین دلیل وضعیت ارسال، محدودیتی در اصلاح آنها ایجاد نمیکند. اما اصلاح صورتحسابهایی که در وضعیت "اعلام صحت" قرار داشته باشد قاعدتا با تشریفاتی همراه خواهد بود. دو نوع اصلاح برای این صورتحسابها تعبیه کردهایم – یکی اصلاح کامل که البته منجر به تغییر JSON قابل ارسال به سامانه مودیان نیز میشود و صورتحساب را به وضعیت "نیازمند ارسال اصلاحی" میبرد و دیگری یک اصلاح محدود که باعث تغییر JSON نخواهد شد. هر کاربر یک اختیار با عنوان " اصلاح اطلاعات اصلی صورتحسابهای نهايی (اعلام صحت)" دارد که فقط اگر واجد آن باشد میتواند به اصلاح آزاد چنین صورتحسابی اقدام کند. کاربری که اختیار پیشگفته را داشته باشد در اقدام به اصلاح صورتحساب "اعلام صحت" شده با پیغام زیر مواجه خواهد شد:
لغو کردن این پیغام به معنی لغو کردن اقدام به اصلاح برگهی فروش است. پاسخ مثبت باعث میشود که همزمان با ذخیره کردن صورتحساب پس از اصلاح، آن صورتحساب در وضعیت "نیازمند ارسال اصلاحی" قرار بگیرد. پاسخ منفی به این معنی است که کاربر نمیخواهد اصلاحات اساسی در برگه انجام دهد. این همان حالتی است که برای کاربری که فاقد اختیار پیشگفته باشد، توسط سیستم تحمیل میشود – یعنی کاربری که اختیار "اصلاح اطلاعات اصلی صورتحسابهای نهايی (اعلام صحت)" را نداشته باشد شبیه کاربری است که به پرسش فوق پاسخ منفی داده باشد. این محدودیت (در کنار سایر محدودیتهای احتمالی) به کاربر اطلاع داده خواهد شد.
فیلدهایی که در این وضعیت محدودیت خواهند داشت و اصلاح آنها میسر نخواهد بود را یادآوری میکنیم:
تاریخ، نوع صورتحساب در سامانه مودیان، مشتری (خریدار)، برخی از مشخصات مشتری متفرقه (شماره اقتصادی، شناسه ملی، کد پستی)، کد شعبه فروشند، فیلدهای مربوط به فروش صادراتی (پروانه و کوتاژ گمرکی و کد گمرک محل اظهار)، شناسه یکتای ثبت قرارداد پیمانکاری، درصد نسیه در پرداخت، رخداد انبار یا انجام خدمات (و در نتیجه کالا یا خدمت، مقدار، مقدار و واحد فرعی)، فروش برحسب واحد فرعی، وزن خالص، شناسه یکتای قرارداد حقالعملکاری، انواع فیلدهای مربوط بها (و مالیات و عوارض اعم از ریالی یا ارزی).
پارامترهای جدید در گزارشهای فروش
در محاورهی ابتدایی همهی گزارشهای سیستم فروش، در صفحهای که پیش از این برای انتخاب بخشهای دخیل در گزارش تعبیه شده بود، دریچههای جدیدی به صورتی که در شکل زیر دیده میشوند اضافه شدهاند:
همانطور که در شکل فوق دیده میشود، نام صفحه را به "بخش (و حافظه مالیاتی)" تغییر دادهایم. علاوه بر دریچههای مربوط به بخش، سه دریچهی جدید مشاهده میشوند. حافظههای مالیاتی تعریف شده در یک دریچه با گزینههای قابل علامتگذاری بازنمایی شدهاند که کارکرد مشخصی دارد. در همینجا یک گزینهی "ندارد" هم وجود دارد که متناظر با برگههایی است که حافظه مالیاتی در آنها تعیین نشده است (برگههای سالهای مالی قبل یا برگههایی که به هر دلیل قرار نبوده که حافظه مالیاتی داشته باشند و به سامانه ارسال شوند). دو دریچهی دیگر برای انتخاب ترکیب دلخواهی از انواع صورتحساب در سامانه مودیان و یا وضعیت ارسال تعبیه شدهاند. اینها هم رفتار و کارکرد مشخصی دارند. طبق معمول برای هر یک از دریچههای مزبور امکان علامتگذاری یا حذف علامت به یکباره برای همهی گزینهها تعبیه شده است.
یک کاربرد بسیار مهم برای این امکانات در زمانی است که میخواهیم با استفاده از فهرست برگههای فروش صورتحسابها را ارسال کنیم یا استعلام آنها را از سامانهی مودیان اخذ نماییم. در این عملیات باید همهی صورتحسابها حافظه مالیاتی داشته باشند + مربوط به یک حافظه مالیاتی مشترک باشند + وضعیتهای از پیش معلومی داشته باشند. مثلا برای ارسال صورتحسابهای اصلی، برگههای فروش باید در وضعیتهای "ارسال نشده" یا "اعلام خطا در استعلام اصلی" باشند. ارسال صورتحسابهای اصلاحی، در وضعیتهای "نیازمند ارسال اصلاحی" یا "اعلام خطا در استعلام اصلاحی" قابل انجام است. برای استعلام صورتحسابها نیز طبیعی است که برگههای فروش انتخاب شده باشد در وضعیتهای "در انتظار استعلام اصلی" یا "در انتظار استعلام اصلاحی" باشند. برای انجام عملیات پیشگفته میتوانیم با امکاناتی که در اینجا دیدیم صرفا فهرست برگههایی با حافظه مالیاتی و وضعیت مناسب را احضار کنیم.پ
خواهیم دید که ارسال صورتحساب ابطالی و استعلام ابطال را هم داریم که البته در فرم ویرایش فاکتور فروش (در کنار گزینههای حذف یا ابطال عادی برگه) انجام میشوند. برای کامل شدن وضعیتها، ذکر میکنیم که ارسال صورتحساب ابطالی برای برگههایی با وضعیتهای "اعلام صحت"، "نیازمند ارسال اصلاحی" و "اعلام خطا در استعلام ابطالی" قابل انجام است. استعلام ابطال نیز برای فاکتورهایی که در وضعیت "در انتظار استعلام ابطالی" باشند قابل انجام است. در مورد صورتحسابهای ابطالی در بخشهای بعدی توضیح خواهیم داد.
ارسال و استعلام صورتحسابها
پیش از این بارها اشاره کردیم که ارسال و استعلام صورتحسابها (اصلی و اصلاحی) از فهرست برگههای فروش انجام میشود. طبق معمول روش کار چنین است که صورتحسابهای مورد نظر از بین سطرهای بازنمایی شده در گزارش انتخاب میشوند و فرمان مناسب صادر میگردد. اگر چند صورتحساب به صورت همزمان انتخاب نشده باشند عملیات برروی تک صورتحساب تحت مکاننما اجرا خواهد شد. تکمهی "ارسال به و استعلام از سامانه مودیان" در فهرست برگههای فروش و منویی که با فشار آن تکمه احضار میشود را در شکل زیر مشاهده میکنید:
ارسال، به تفکیک برای صورتحسابهای اصلی و صورتحسابهای اصلاحی انجام میشود. یادآوری میکنیم که صورتحسابهایی که یکبار به سامانه ارسال شده و اعلام صحت آنها استعلام شده باشد، اگر توسط کاربر اصلاح شوند در وضعیت "نیازمند ارسال اصلاحی" قرار میگیرند. این صورتحسابها باید به عنوان اصلاحی ارسال شوند. رویهی ارسال در هر دو مورد مشابه است: برگههای فروش در فهرست انتخاب میشوند + فرمان ارسال صادر میشود + روش ارسال انتخاب میشود (از بین روشهایی که از قبل تعریف شده است – یا پیشفرض نوسا). در ادامه محاورهای به شکل زیر بازنمایی میشود:
در یک متن نسبتا مفصل در ابتدای محاوره تعداد صورتحسابهای انتخاب شده به تفکیک وضعیت گزارش میشوند. در ارسال اصلی وضعیتهای قابل قبول "ارسال نشده" و "اعلام خطا در استعلام اصلی" هستند و در ارسال اصلاحی "نیازمند ارسال اصلاحی" و "اعلام خطا در استعلام اصلاحی". البته قبلا کنترل شده است که همهی برگههای انتخاب شده حافظه مالیاتی مشترکی داشته باشند و در وضعیتهای پیشگفته قرار داشته باشند. واضح است که اگر پس از ارسال، در استعلام از سامانه خطا بگیریم قاعدتا باید بتوانیم پس از اصلاحات لازم دوباره همان صورتحساب را ارسال کنیم و به همین دلیل است که وضعیتهای "اعلام خطا در استعلام" نیز برای ارسال قابل قبول هستند.
در محاورهی مورد بحث، حافظه مالیاتی (مشترک در بین فاکتورهای انتخاب شده) و روش ارسال انتخاب شده نیز گزارش میشوند. دو دریچه قابل علامتگذاری در این محاوره دیده میشود. یکی مربوط به استفاده از نسخهی قدیمی API است که پیش از این در بخش استعلام حافظه مالیاتی و کد اقتصادی در مورد آن توضیح دادیم. دیگری مربوط به یک پارامتر API است که فقط در مستندات ذکر شده و قرار است منجر به پردازش صورتحسابها با اولویت بالا شود. البته هیچ توضیحی در مورد شرایط استفاده از این امکان و اینکه اصولا اگر میشود با اولویت بالا پردازش کرد چرا باید اصلا از اولویت پایین استفاده کرد داده نشده است. با این همه ما پارامتر مزبور و دریچهی فعال کردن آنرا نیز پیادهسازی کردهایم.
عملیات ارسال با تکمهی اختصاصی انجام میشود. صورتحسابهای انتخاب شده تک به تک و به ترتیب تاریخ و شماره سند (ترتیب پیشفرض) ارسال میشوند. به ازای هر صورتحساب یک شمارهی سریال جدید در حافظه مالیاتی تخصیص داده میشود و با ترکیب آن سریال با شناسهی حافظه مالیاتی و تاریخ صورتحساب، شناسهی منحصر به فرد جدیدی برای صورتحساب تشکیل میشود. همچنین یک uid نیز ایجاد و به صورتحساب نسبت داده میشود. اینها در پایان ارسال صورتحساب در دادههای صورتحساب در پایگاه اطلاعاتی نوسا نیز ذخیره میشوند.
ممکن است در ارسال خطایی پیش بیاید که احتمالا ناشی از مشکلات شبکه یا درست نبودن کلیدهای نامتقارن در حافظه مالیاتی و مواردی از این قبیل است. توجه کنید که این خطا به صورت اساسی و کلی با خطاهایی که بعدا از استعلام حاصل میشوند متفاوت است. این خطا یعنی موفق به ارسال نشدیم – مثلا شبکه قطع است – و باید پس از رفع مشکل دوباره دقیقا همین صورتحساب، بدون اصلاح محتویات، دوباره ارسال شود. به همین دلیل اگر در حین ارسال با خطایی برخورد کنیم، آن خطا صرفا گزارش میشود و وضعیت و سایر دادههای صورتحساب در سیستم نوسا تغییری نخواهند کرد. همچنین آخرین سریال صادر شده از یک حافظه مالیاتی، در صورتی که خطایی رخ داده باشد، تغییری نخواهد کرد و همین سریال (و احتمالا شناسهی منحصر به فرد حاصل از آن) مجددا مورد استفاده قرار خواهد گرفت. آخرین نکتهی قابل اشاره این است که اگر در حین ارسال تعدادی صورتحساب در میانهی راه با خطا مواجه شویم باید عملیات ارسال را متوقف کنیم و خطای ارسال را گزارش دهیم – چرا که اگر از ارسال یک صورتحساب صرفنظر کنیم و بقیه را صادر کنیم حتما شماره سریال صورتحسابهای ارسالی به ترتیب مناسب نخواهند بود (و مثلا بینشان فاصله خواهد افتاد).
اگر در ارسال یک صورتحساب خطایی پیش نیاید اولا آخرین سریال صادر شده از حافظه مالیاتی در پایگاه دادهها اصلاح میشود و ثانیا صورتحساب در وضعیت "در انتظار استعلام اصلی" یا "در انتظار استعلام اصلاحی" قرار خواهد گرفت. همزمان، شناسهی منحصر به فرد صورتحساب، uid و شمارهی ارجاع بازگشته از سامانه نیز در صورتحساب ذخیره خواهند شد.
یادآوری میکنیم که در ارسال صورتحساب اصلاحی، یک سریال جدید از حافظه مالیاتی اخذ میشود و متعاقب آن یک شناسهی منحصر به فرد جدید برای صورتحساب تولید میشود. به همین ترتیب، uid جدیدی هم به سامانه اطلاع داده میشود و سامانه نیز در مقابل شمارهی ارجاع جدیدی را بازمیگرداند. این دادهها (شناسه، uid و شمارهی ارجاع جدید) در صورتحساب، جایگزین مقادیر قبلی میشوند و در مقابل فیلدهای متناظر از صورتحساب (پیش از اصلاح) به عنوان شناسه، uid و شمارهی ارجاع صورتحساب مرجع در صورتحساب ذخیره میشوند.
صورتحسابهای ارسال شده به سامانهی مودیان بلافاصله پردازش نمیشوند و باید وضعیت آنها را پس از ارسال، از سامانه استعلام کنیم. استعلام صورتحسابهای اصلی و اصلاحی ارسال شده به همراه هم از فهرست برگههای فروش قابل انجام است. رویه استعلام چنین است: برگههای فروش در فهرست انتخاب میشوند + فرمان استعلام صادر میشود. در ادامه محاورهای به شکل زیر بازنمایی میشود:
در یک متن در ابتدای محاوره تعداد صورتحسابهای انتخاب شده به تفکیک وضعیت گزارش میشوند. در فرآیند استعلام، وضعیتهای قابل قبول "در انتظار استعلام اصلی" و "در انتظار استعلام اصلاحی" هستند. البته قبلا کنترل شده است که همهی برگههای انتخاب شده، حافظه مالیاتی مشترکی داشته باشند و در وضعیتهای پیشگفته قرار داشته باشند. در محاورهی مورد بحث، حافظه مالیاتی (مشترک در بین فاکتورهای انتخاب شده) نیز گزارش میشود.
سه دریچهی قابل علامتگذاری در این محاوره دیده میشود که دوتای آنها عینا همانها هستند که در ارسال صورتحساب هم دیدیم و همان توضیحات در اینجا هم صادق هستند. دریچهی اول به دو روش متفاوتی که API سامانه مودیان برای استعلام در اختیار قرار میدهد مربوط است: استعلام با uid و استعلام با شمارهی ارجاع بازگشته از سامانه مودیان. قاعدتا استفاده از هر یک از این دو نباید برای ما تفاوتی داشته باشد و به همین دلیل استعلام به صورت پیشفرض با uid انجام میشود. با این همه در صورت تمایل میتوانید با علامتگذاری دریچهی مربوط، استعلام را با شماره ارجاع انجام دهید.
درخواست استعلام عملا به سامانه "ارسال" میشود که این عمل با یک تکمهی اختصاصی قابل انجام است. حاصل استعلام ممکن است یکی از 3 وضعیت زیر باشد: پردازش صورتحساب در سامانه مودیان هنوز به انجام نرسیده است / صورتحساب صحیح بوده و خطایی نداشته است / صورتحساب دارای خطا بوده است. اگر پردازش هنوز انجام نشده باشد هیچ تغییری در صورتحساب داده نمیشود و صرفا به کاربر اطلاع داده میشود تا در آینده دوباره استعلام صورتحساب را درخواست نماید. اگر صورتحساب صحیح بوده باشد، فیلد "وضعیت صورتحساب در سامانهی مودیان" به "اعلام صحت" تبدیل میشود (هم در صورتحسابهای اصلی و هم در اصلاحی). اگر خطایی وجود داشته باشد، فیلد وضعیت، حسب مورد، به "اعلام خطا در استعلام اصلی" یا "اعلام خطا در استعلام اصلاحی" مقداردهی میشود. گفتیم که این صورتحسابها باید پس از رفع خطا دوباره به سامانه ارسال شوند. در هر صورت خطاها و اخطارهای گزارش شده از سامانه در فیلدهای متناظر در صورتحساب نیز درج خواهند شد. این فیلدها در فرم ویرایش فاکتور فروش، در محاورهی فاکتور و در صفحهی "سامانه مودیان" قابل مشاهده خواهند بود.
ملاحظات مربوط به فعالیت همزمان کاربران
نمیدانیم سامانهی مودیان تا چه میزان قادر است اجرای همزمان API خود از یک رایانه (سرور نوسا مشتری) را تحمل کند. مستقل از این نکته، در سیستم نوسا، محدودیتهایی در استفادهی همزمان کاربران از امکانات ارسال و استعلام وجود دارند. این محدودیتها از دو نکته ناشی میشوند: یکی اینکه آخرین سریال صادر شده از یک حافظه مالیاتی نباید در هر لحظه در دو عملیات موازی تغییر داده شود. و دیگر اینکه ارسال و استعلام صورتحسابها منجر به اصلاح برگههای فروش میشود (و از قضا از مهمترین انواع اصلاح این برگهها به شمار میآید) و به همین دلیل مانند این است که کاربر مشغول اصلاح همزمان برگههایی است که برای ارسال یا استعلام انتخاب کرده است.
به این ترتیب اولا ارسال و استعلام صورتحسابهای یک حافظه مالیاتی به صورت همزمان توسط دو کاربر (ایستگاه کاری – کلاینت) میسر نیست. کاربر دوم با خطای زیر مواجه خواهد شد:
و ثانیا همهی برگههای فروش انتخاب شده عملا برای اصلاح علامتگذاری میشوند. به این ترتیب اگر کاربر دیگری مشغول اصلاح یکی از آنها باشد عملیات ارسال یا استعلام با خطا مواجه میشود و در مقابل تا زمانی که ارسال به سامانه انجام نشده باشد سایر کاربران نمیتوانند اقدام به اصلاح برگه یا سند فروش نمایند. خطایی که در این شرایط ارائه میشود مشابه رویهی عادی سیستم فروش است:
ملاحظات مربوط به فعالیت همزمان کاربران
در حذف و ابطال عادی برگههای فروش، طبیعی است که محدودیت زیر را داشته باشیم:
حذف چنین برگههایی اصولا ممکن نیست. در مقابل ابطال آنها پس از طی تشریفات خاص میسر است. به این منظور باید موجودی به نام صورتحساب ابطالی را به سامانه مودیان ارسال کنیم. البته توجه داشته باشید که برگههایی که در انتظار استعلام اصلی یا اصلاحی باشند و یا پس از استعلام در وضعیت اعلام خطا در استعلام اصلی یا اصلاحی قرار گرفته باشند هنوز تعیین تکلیف نشدهاند و امکان ابطال آنها، حتی با ارسال صورتحساب ابطالی وجود ندارد (ارسال صورتحساب ابطالی در سامانهی مودیان با خطا مواجه خواهد شد). صورتحسابهای ابطالی ارسال شده باید به صورت جداگانه استعلام شوند – یعنی پردازش ابطال نیز بلافاصله پس از ارسال انجام نمیشود و به همین دلیل نیاز به استعلام ابطالی داریم. طبق معمول حاصل استعلام ممکن است "اعلام خطا در استعلام ابطالی" باشد. همانند اعلام خطاهای مشابه قبلی، اینها نیز باید (پس از رفع خطا) دوباره ارسال ابطالی شوند.
خلاصه اینکه فقط صورتحسابهایی که در وضعیتهای "اعلام صحت"، "نیازمند ارسال اصلاحی" و "اعلام خطا در استعلام ابطالی" قرار داشته باشند را میتوان به عنوان صورتحساب ابطالی به سامانه مودیان ارسال نمود. توجه کنید که صورتحساب در ابتدا به صورت فیزیکی در سیستم نوسا باطل نخواهد شد و کماکان با وضعیت "در انتظار استعلام ابطالی" باقی خواهد ماند. ارسال صورتحساب ابطالی و استعلام آن با امکاناتی که در فرم ویرایش فاکتور فروش به منوی تکمهی حذف برگه افزوده شدهاند (همانجایی که فرمان ابطال فاکتور فروش قرار داده شده بود) میسر است:
برای ارسال صورتحساب ابطالی نیز باید یک JSON به سامانه مودیان ارسال شود. این JSON با همان روش ارسال اطلاعات (که قبلا برای ارسال صورتحسابهای اصلی یا اصلاحی با آن درگیر بودیم) تشکیل میشود. به یاد داریم که در سطرهای یک روش ارسال میتوانیم از سیستم بخواهیم که فیلد JSON مربوط "در صورتحساب ابطالی (نیز) ارسال شود". با صدور فرمان "ارسال صورتحساب ابطالی به سامانه مودیان" ابتدا باید یک روش ارسال انتخاب شود تا همان فیلدهایی که به صورت فوق علامتگذاری شدهاند در تشکیل JSON دخالت داده شوند. سپس، اگر صورتحساب در یکی از وضعیتهای مجاز پیشگفته قرار داشته باشد، محاورهای به شکل زیر بازنمایی خواهد شد:
برخلاف ارسالهای اصلی و اصلاحی، در اینجا ارسال صورتحساب ابطالی فقط برای یک برگهی فروش انجام میشود. این برگه البته ممکن است از وضعیتهای اعلام صحت، نیازمند ارسال اصلاحی و اعلام خطا در استعلام ابطالی باشد. وضعیت مزبور به همراه حافظه مالیاتی و روش صدور انتخاب شده برای تشکیل JSON در محاوره بازنمایی میشوند. دو دریچهی قابل علامتگذاری که پیش از این در ارسال اصلی و اصلاحی دیده بودیم در اینجا هم دیده میشوند و همان کارکرد را دارند.
در ارسال صورتحساب ابطالی، یک سریال جدید از حافظه مالیاتی اخذ میشود و متعاقب آن یک شناسهی منحصر به فرد جدید برای صورتحساب تولید میشود. به همین ترتیب، uid جدیدی هم به سامانه اطلاع داده میشود و سامانه نیز در مقابل شمارهی ارجاع جدیدی را بازمیگرداند. این دادهها (شناسه، uid و شمارهی ارجاع جدید) در صورتحساب، جایگزین مقادیر قبلی میشوند و در مقابل فیلدهای متناظر از صورتحساب (پیش از ابطال) به عنوان شناسه، uid و شمارهی ارجاع صورتحساب مرجع در صورتحساب ذخیره میشوند. همچنین آخرین سریال صادر شده از حافظه مالیاتی در پایگاه دادهها نیز اصلاح میشود.
صورتحسابهای ابطالی ارسال شده به سامانهی مودیان بلافاصله پردازش نمیشوند و باید وضعیت آنها را پس از ارسال، از سامانه استعلام کنیم. دیدیم که یک گزینه در همان منوی حذف فاکتور فروش برای استعلام صورتحساب ابطالی از سامانه مودیان تعبیه شده است. طبیعی است که فقط اگر صورتحساب در وضعیت "در انتظار استعلام ابطالی" باشد میتوان این فرمان را صادر کرد. با اینکار محاورهای به شکل زیر بازنمایی میشود:
متن توضیحات و دریچههای قابل علامتگذاری کاملا شبیه موارد قبلی هستند و توضیح بیشتر نیاز ندارند. درخواست استعلام عملا به سامانه "ارسال" میشود که این عمل با یک تکمهی اختصاصی قابل انجام است. حاصل استعلام ممکن است یکی از 3 وضعیت زیر باشد: پردازش صورتحساب ابطالی در سامانه مودیان هنوز به انجام نرسیده است / صورتحساب ابطالی دارای خطا بوده است / صورتحساب ابطالی صحیح بوده و خطایی نداشته است. اگر پردازش هنوز انجام نشده باشد هیچ تغییری در صورتحساب داده نمیشود و صرفا به کاربر اطلاع داده میشود تا در آینده دوباره استعلام صورتحساب را درخواست نماید. اگر خطایی وجود داشته باشد، فیلد وضعیت صورتحساب به "اعلام خطا در استعلام ابطالی" مقداردهی میشود. گفتیم که این صورتحسابها باید پس از رفع خطا دوباره به سامانه ارسال شوند. در هر صورت خطاها و اخطارهای گزارش شده از سامانه در فیلدهای متناظر در صورتحساب درج خواهند شد. این فیلدها در فرم ویرایش فاکتور فروش، در محاورهی فاکتور و در صفحهی "سامانه مودیان" قابل مشاهده خواهند بود.
اما اگر خطایی از استعلام صورتحساب ابطالی دریافت نشود، عملیات ابطال صورتحساب به روال عادی ادامه مییابد (تشکیل html از صورتحساب و سند فروش مربوط و ذخیره در فهرست صورتحسابهای ابطالی، اینبار به همراه شناسه، uid و شمارهی ارجاع صورتحساب اصلی و ابطالی). البته ممکن است کاربر در مراحل متنوع ابطال به دلیلی ادامهی عملیات را لغو کند. در این شرایط، هیچ تغییری در صورتحساب داده نشده و کماکان در وضعیت "در انتظار استعلام ابطالی" باقی میماند. در آینده، برای ابطال فیزیکی چنین صورتحسابی میتوانیم دوباره اقدام به استعلام ابطالی نماییم.
کنترل تکراری نبودن برگهی فروش در فراخوانی فایل صادره
در ایجاد فایل صادره از برگههای فروش (یا سندهای فروش)، همهی فیلدهای اطلاعاتی جدید صورتحساب، مربوط به سامانه مودیان و حافظهی مالیاتی نیز صادر میشوند و در فراخوانی نیز خوانده شده و در برگهی فروش جدید حاصل از فراخوانی درج میشوند. اینها شامل شناسهی منحصر به فرد صورتحساب در سامانه مودیان (و شناسهی مرجع در صورتحسابهای اصلاح شده)، وضعیت ارسال، uid و شمارهی ارجاع نیز هستند. با این رویه میتوانیم حافظهی مالیاتی و صورتحسابهای صادر شدهی وابسته به آنرا به سادگی در بین پایگاههای اطلاعاتی جابجا کنیم و مثلا ادامهی عملیات با سامانهی مودیان را از یک پایگاه اطلاعاتی دیگر پیگیری نماییم. مثلا یک فاکتور در وضعیت اعلام خطا در استعلام اصلی را صادر کنیم و در پایگاه دیگری فراخوانی نماییم و در همانجا آنرا اصلاح، بازارسال و استعلام کنیم و به وضعیت نهایی ببریم.
یک نکتهی مهم در اینجا وجود دارد: شناسهی منحصر به فرد صورتحساب نباید تکراری شود. یعنی در فراخوانی هر صورتحساب از فایل صادره باید کنترل کنیم که شناسهی منحصر به فرد آن (و همچنین شناسهی منحصر به فرد صورتحساب مرجع آن) در بین شناسههای اصلی و ارجاعی برگههای فروش در پایگاه اطلاعاتی مقصد وجود نداشته باشد. این کنترل باعث میشود که مثلا نتوانیم یک صورتحساب ارسال شده به سامانه مودیان را در یک فایل صادر کنیم و سپس همان صورتحساب را در همان پایگاه اطلاعاتی به عنوان یک صورتحساب جدید فراخوانی نماییم.