صورتحسابهای الکترونیکی بخشی از حسابداری مدرن هستند
دیجیتالیشدن حسابداری همچنان پیش میرود. مدتهاست که قالبهای صورتحساب الکترونیکی فراتر از یک فایل PDF هستند که با ایمیل ارسال میشود.
یک صورتحساب الکترونیکی واقعی حاوی دادههای ساختاریافتهای است که سیستمهای حسابداری و ERP میتوانند آنها را بهصورت خودکار پردازش کنند.
با پروژه متنباز جدیدمان برای Odoo 19 Community میخواهیم دقیقاً به همین نیاز پاسخ دهیم.
چندین افزونه توسعه دادهایم که آنها را بهرایگان در اختیار جامعه Odoo قرار میدهیم.
این پروژه بهصورت عمومی در GitHub در دسترس است:
Odoo 19 Invoice E-Files در GitHub
تمرکز اصلی ما بر اتریش است، اما بخشی از این راهکار برای شرکتهای خارج از اتریش نیز کاربرد دارد.
سه ماژول برای صورتحسابهای الکترونیکی
این پروژه در حال حاضر از سه بخش اصلی تشکیل شده است:
- ebInterface 6.1 برای اتریش
- ZUGFeRD برای صورتحسابهای الکترونیکی
- ارسال خودکار به e-Rechnung.gv.at
به این ترتیب، نیازهای گوناگون مربوط به صورتحسابهای الکترونیکی را در یک پروژه متنباز برای Odoo 19 Community گرد هم آوردهایم.
ebInterface 6.1 – قالب صورتحساب اتریش
یکی از محورهای اصلی توسعه ما ebInterface 6.1 است.
ebInterface قالب استاندارد اتریش برای صورتحسابهای الکترونیکی ساختاریافته است.
ماژول ما
l10n_at_ebinterface
از صورتحساب مشتری یا سند بستانکار در Odoo، یک فایل XML مطابق ebInterface 6.1 تولید میکند.
در این فرایند، اطلاعات مرتبط از صورتحساب Odoo به ساختار XML منتقل میشود، از جمله:
- صادرکننده صورتحساب
- دریافتکننده صورتحساب
- اقلام صورتحساب
- مالیاتها
- اطلاعات پرداخت
- مشخصات حساب بانکی
- اطلاعات صورتحساب
فایل XML تولیدشده مستقیماً به صورتحساب مربوطه پیوند داده میشود.
چرا برای این کار ماژول اختصاصی توسعه دادیم؟
هنگام توسعه متوجه شدیم که در حال حاضر، برای استاندارد بومی اتریش یعنی ebInterface، ماژول متناظری در هسته Odoo یا مجموعه ماژولهای OCA برای Odoo 19 Community وجود ندارد.
دقیقاً میخواستیم همین کمبود را برطرف کنیم.
بهجای اینکه راهکاری ویژه اتریش را فقط برای نصب خودمان توسعه دهیم، آن را در قالب یک ماژول مستقل متنباز پیادهسازی کردیم.
به این ترتیب، دیگر اعضای جامعه Odoo نیز میتوانند از آن بهرهمند شوند.
ZUGFeRD بهصورت خودکار همراه هر صورتحساب
دومین محور اصلی پروژه ما ZUGFeRD است.
ZUGFeRD یک صورتحساب PDF را با یک صورتحساب XML ساختاریافته ترکیب میکند.
نتیجه، یک صورتحساب بهاصطلاح ترکیبی است: افراد میتوانند صورتحساب را بهصورت PDF بخوانند و نرمافزار نیز میتواند دادههای ساختاریافته موجود در آن را بهطور خودکار پردازش کند.
Odoo 19 در اصل از پیش از ZUGFeRD یا CII پشتیبانی میکند.
با این حال، در عمل محدودیتهایی وجود دارد.
ماژول ما
account_invoice_zugferd_ebinterface_auto
به همین دلیل، دقیقاً همین نیاز را برطرف میکند.
ZUGFeRD دیگر صرفاً یک گزینه نیست
میخواستیم روند کار تا حد امکان خودکار باشد.
بنابراین، هنگام ارسال صورتحساب مشتری، ابتدا بررسی نمیشود که آیا ZUGFeRD برای آن مشتری بهصورت جداگانه تنظیم شده است یا خیر.
در عوض، ZUGFeRD برای فاکتورهای مشتری و یادداشتهای بستانکار بهطور خودکار بهکار میرود.
علاوه بر این، فایل XML با قالب ebInterface تولیدشده نیز همراه صورتحساب ارائه میشود.
به این ترتیب، یک فرایند یکپارچه شکل میگیرد:
صورتحساب Odoo → PDF → صورتحساب الکترونیکی ساختاریافته → ارسال
بدون اینکه کاربر مجبور باشد برای هر صورتحساب مراحل اضافی انجام دهد.
کاستیهای Odoo 19 Community را نیز برطرف میکنیم
هنگام پیادهسازی، با چند مورد خاص در نحوه پیادهسازی Odoo 19 روبهرو شدیم.
از جمله، در صادرکننده CII وابستگیهایی وجود دارد که ممکن است در نصبهایی با تنظیمات کشوری متفاوت مشکل ایجاد کنند.
ماژول ما چندین مورد از این محدودیتهای عملی را برطرف میکند.
از جمله این موارد:
- نبود فیلدهای مربوط به دورههای درآمد تحققنیافته
- محدودیت تبدیل به PDF/A-3 بر اساس کشور
- نبود یا تعییننشدن مشخصات حساب بانکی در صورتحسابهای موجود
هدف این است که شرکتها حتی خارج از ترکیبهای کشوریِ پیشبینیشده اولیه نیز بتوانند با اطمینان از ZUGFeRD استفاده کنند.
e-Rechnung.gv.at – ارسال مستقیم به دولت اتریش
بخش سوم بهویژه برای شرکتهایی کاربرد دارد که برای نهادهای بخش عمومی صورتحساب صادر میکنند.
با استفاده از
l10n_at_erechnung_gv_at
میتوان صورتحساب ebInterface را مستقیماً به وبسرویس e-Rechnung.gv.at اتریش ارسال کرد.
به این ترتیب، صدور صرف فاکتور به یک فرایند فاکتور الکترونیکی خودکار تبدیل میشود.
برای مثال، روند کار میتواند به این صورت باشد:
ایجاد صورتحساب در Odoo
↓
تولید XML با قالب ebInterface
↓
ارسال صورتحساب
↓
ارسال خودکار ebInterface به e-Rechnung.gv.at
به این ترتیب، فرایندی که در حالت عادی دستی است، مستقیماً در Odoo ادغام میشود.
ارسال خودکار فقط برای مشتریانی که به آن نیاز دارند
ارسال به e-Rechnung.gv.at بهصورت پیشفرض برای همه مشتریان فعال نمیشود.
در عوض میتوان آن را برای هر مشتری اتریشی بهطور جداگانه فعال کرد.
برای این کار، اطلاعات موردنیاز، از جمله موارد زیر،
- شماره تأمینکننده
- گروه خرید / شماره شعبه
- مرجع سفارش
در پرونده مشتری ثبت میشوند.
ماژول همچنین بررسی میکند که پیشنیازهای فعالسازی فراهم باشند.
استفاده آزمایشی و عملیاتی
برای e-Rechnung.gv.at میتوان بین محیط آزمایشی و محیط عملیاتی انتخاب کرد.
اطلاعات ورود به وبسرویس USP در تنظیمات Odoo ذخیره میشود.
به این ترتیب، میتوان یکپارچهسازی را ابتدا در محیطی آزمایشی آماده کرد و سپس از آن برای ارسال واقعی صورتحسابها استفاده کرد.
خودکارسازی بهجای کار اضافی
هدف ما از توسعه این راهکار، اضافه کردن دکمههای بیشتر برای حسابدار نبود.
درست برعکس.
ایده این است:
حداقل کار دستی ممکن.
یک صورتحساب در Odoo ایجاد میشود.
قالبهای ساختاریافته مورد نیاز بهطور خودکار تولید میشوند.
هنگام ارسال، فایلهای مربوط بهطور خودکار پیوست میشوند.
همچنین برای مشتریان اتریشی که تنظیمات لازم برایشان انجام شده است، صورتحساب میتواند بهطور خودکار به e-Rechnung.gv.at نیز ارسال شود.
دقیقاً همین خودکارسازی است که تفاوت میان یک خروجی ساده فایل و یک راهکار واقعاً یکپارچه برای صورتحساب الکترونیکی را رقم میزند.
مشکلات کیفیت دادهها پنهان نمیشوند
با این حال، نکته مهم دیگری در پیادهسازی ما وجود دارد:
کیفیت یک صورتحساب الکترونیکی به کیفیت دادههایی بستگی دارد که از آنها تولید میشود.
به همین دلیل، تلاش نمیکنیم اطلاعات الزامیِ موجودنبوده را بیسروصدا با مقادیر دلخواه جایگزین کنیم.
برای مثال، اگر اطلاعات الزامی ZUGFeRD یا ebInterface موجود نباشد، Odoo باید کاربر را از این موضوع آگاه کند.
از جمله موارد زیر:
- مشخص نبودن کشور مشتری
- نبود اطلاعات مالیاتی در ردیفهای صورتحساب
- نبود اطلاعات حساب بانکی
از نظر ما، این رویکرد بهتر از ارسال صورتحساب الکترونیکیای است که از نظر قالب درست تولید شده، اما محتوای نادرستی دارد.
متنباز برای Odoo Community
این پروژه را نیز بهرایگان و بهصورت متنباز در اختیار همه قرار میدهیم.
چرا؟
چون خودمان هم از نرمافزارهای متنباز بهره میبریم.
Odoo Community بستری عالی برای برنامهریزی منابع سازمانی، حسابداری و فرایندهای کسبوکار فراهم میکند. هرگاه در کار روزمره به قابلیتی نیاز داشته باشیم که موجود نباشد، آن را توسعه میدهیم.
و اگر راهحل برای شرکتهای دیگر هم جالب باشد، آن را در اختیار جامعه قرار میدهیم.
از نظر ما، این یعنی عمل به فلسفه متنباز.
با تمرکز بر اتریش، اما نه فقط برای اتریش
تمرکز اصلی این پروژه مشخصاً بر اتریش است.
ebInterface و e-Rechnung.gv.at بهویژه برای شرکتهای اتریشی کاربرد دارند.
در مقابل، پشتیبانی از ZUGFeRD برای شرکتهای خارج از اتریش نیز کاربرد دارد.
بنابراین، این پروژه صرفاً راهکاری مختص اتریش نیست.
بهویژه ترکیب دادههای ساختاریافته صورتحساب با یک سند PDF/A-3 که بهطور خودکار تولید میشود، میتواند برای دیگر نصبهای Odoo نیز مفید باشد.
برای Odoo 19 Community
این ماژولها برای Odoo 19 Community توسعه یافتهاند.
این مخزن در حال حاضر شامل موارد زیر است:
- l10n_at_ebinterface
- account_invoice_zugferd_ebinterface_auto
- l10n_at_erechnung_gv_at
ماژولها به یکدیگر وابستهاند؛ بنابراین، بسته به مورد استفاده، فقط اجزای مورد نیاز باید نصب شوند.
سهم ما در جامعه کاربران
ما این پروژه را نرمافزار تجاری نهاییشدهای نمیدانیم، بلکه آن را سهمی در توسعه بیشتر جامعه Odoo میبینیم.
شاید کسی فقط به ebInterface نیاز داشته باشد.
شاید شرکت دیگری به ZUGFeRD نیاز داشته باشد.
شاید شرکتی لازم باشد مرتباً از طریق e-Rechnung.gv.at برای کارفرمایان بخش عمومی صورتحساب ارسال کند.
پروژه ما میتواند در هر سه حالت، نقطه شروع مناسبی باشد.
و چون کد منبع بهصورت آزاد در دسترس است، هر کاربر میتواند راهکار را بررسی، سفارشیسازی و توسعه دهد.
متنباز یعنی با هم بهتر شویم
ما معتقدیم متنباز بودن، بهویژه در سیستمهای برنامهریزی منابع سازمانی، مزیت بزرگی است.
شرکتها نیازهای متفاوتی دارند.
راهکاری که برای یک شرکت کاملاً مناسب است، شاید برای شرکتی دیگر نیاز به تغییر داشته باشد.
دسترسی آزاد به کد منبع، این کار را ممکن میکند.
به همین دلیل، از موارد زیر استقبال میکنیم:
- بازخورد
- گزارشهای خطا
- پیشنهادهای بهبود
- درخواستهای ادغام کد
- پشتیبانی از موارد کاربرد بیشتر
یک راهکار خوب برای جامعه کاربران لزوماً با نخستین کامیت شکل نمیگیرد.
چنین راهکاری با توسعه مستمر به دست کاربران و توسعهدهندگان متعدد شکل میگیرد.
استفاده رایگان از پروژه
کد منبع کامل بهصورت عمومی در GitHub در دسترس است:
GitHub – Odoo 19 Invoice E-Files
اطلاعات نصب و مستندات هر یک از ماژولها نیز در همانجا موجود است.
برای یکپارچهسازی وبسرویس اتریشی e-Rechnung.gv.at، کتابخانه پایتون Zeep نیز لازم است.
سهم ما در دنیای باز Odoo
با این پروژه میخواهیم نشان دهیم که حتی توسعههای اختصاصی کوچک نیز میتوانند برای یک جامعه کامل ارزش ایجاد کنند.
ما در ابتدا این ماژولها را برای برآورده کردن نیازهایی مشخص توسعه دادیم.
اکنون این راهکارها را بهرایگان در اختیار همه کاربران Odoo 19 Community قرار میدهیم.
به این ترتیب، یک راهکار اختصاصی میتواند به راهکاری برای جامعه کاربران تبدیل شود.
Odoo 19. متنباز. صورتحسابهای الکترونیکی. اتریش. و رایگان برای جامعه کاربران.
این پروژه را دقیقاً با همین هدف منتشر کردهایم.