Yemen GST Return
Prepare the monthly Yemen General Sales Tax return as a ten-box worksheet that computes in one pass from your posted ledger, nets credit notes against the sales and bills they reverse, and locks read-only once you mark it filed.
Why this module
Yemen GST Return
Totals that tie to your ledger
The total-output, total-input and net boxes are not typed in. They resolve from the company account.tax records by type of use and sum the posted tax journal items for the period, so box 5 equals the GST collected on posted invoices and box 9 equals the recoverable GST on posted bills, every time you compute.
Credit notes net the right way
Each total box nets one tax side rather than adding absolute values. GST collected posts on the credit side and a refund posts on the debit side, so subtracting the two subtracts the reversal a credit note carries. A sale refunded in the same month reduces output tax instead of inflating it.
A filed figure stays filed
Marking a run filed stamps who filed it and when, and turns the run read-only. Recompute and reset are refused with a clear message, so a later re-run can never quietly overwrite a number you already submitted. Amendments are made by creating a new run for the period.
Day in the life
The monthly return in one compute
After month-end you create a run for the company, the year and the month; the period dates fill in for the full month. You press Compute and the ten boxes populate in a single pass over the posted ledger: the total and net boxes from your GST taxes, the per-rate boxes from the Yemen chart tags, credit notes already netted. You check the net payable, mark the run filed, and it locks with your name and the time stamped on it. A row lands in the execution audit trail. Next month you repeat, and last month's figure is frozen behind you.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
A sale and a same-period credit note against it net down to the true output tax rather than the gross, because each total box subtracts the opposite ledger side; the supplier-credit case does the same on the input box.
A period with no posted movement (or before the Yemen chart is loaded) computes to zero across every box and reaches the computed state rather than raising, so an early or quiet month files cleanly.
Once a run is filed, both recompute and reset to draft raise a UserError; the only path to change a figure is a fresh run, which the unique-period constraint keeps separate and traceable.
Tag boxes match the sign-less tag on Odoo 17 and the signed pair on Odoo 16 to 18 at once, so the same seeded labels net to the same figure regardless of series.
What is inside
Built to do the job, end to end.
- eh.ye.gst.run. One Yemen GST return per company, year and month, with a draft to computed to filed lifecycle, auto-computed period dates, a unique-period constraint, a YYYY year check, the net-payable figure, chatter tracking and the filed stamp fields.
- eh.ye.gst.run.line. One computed line per box, carrying the label code, name, sequence and the amount in the company currency, rebuilt on every compute and cleared when a draft run is reset.
- eh.ye.gst.label. The seeded box definitions, each with an aggregation rule (output tax, input tax, net GST, tax tag or manual), an optional tag name and sign, and a guard that refuses a tag box with no tag name so a box cannot silently compute to zero.
- Report-execution audit trail. Every compute opens a start row and closes it with complete or fail on the shared eh.account.report.execution log, through the same pipeline as the standard ERP Heritage reports.
- Reporting-engine executor. A dynamic-report entry with code ye_gst registers the return on the ERP Heritage engine so it computes on Odoo 17 Community without Enterprise account_reports.
Honest about the edges
What this does not do, so nothing surprises you.
- It does not electronically file or transmit the return to the Yemen Tax Authority; marking a run filed is an internal status and lock, not a submission.
- It does not create the Yemen chart, taxes or tax tags; those come from eh_l10n_ye, and the per-rate boxes stay zero until the chart and its tags are present.
- It does not post a journal entry or a payment for the net GST; the run is a return worksheet, not an accounting entry.
- It covers a single calendar month per run; there is no quarterly or annual roll-up, and each month is its own run.
- It does not reproduce the Tax Authority's official paper form or e-form layout; it produces the box figures, not the government document.
- It does not auto-detect or reclassify transactions; a box reflects exactly what your posted taxes and tax tags carry for the period.
odoo 19 yemen gst return, yemen general sales tax odoo, yemen gst odoo community, monthly gst return worksheet, yemen tax report odoo, yemen l10n accounting, gst output input tax odoo, net gst payable odoo, yemen localization odoo 19, odoo community tax return no enterprise
إقرار ضريبة المبيعات العامة في اليمن
جهّز إقرار ضريبة المبيعات العامة الشهري في اليمن كورقة عمل بعشر خانات تُحتسب دفعةً واحدة من قيودك المرحّلة، وتخصم الإشعارات الدائنة من المبيعات والفواتير التي تعكسها، وتُقفَل للقراءة فقط بمجرد أن تسِمها كمُقدَّمة.
لماذا هذه الوحدة
إجماليات مطابقة لدفتر أستاذك
خانات إجمالي المخرجات وإجمالي المدخلات والصافي لا تُدخَل يدوياً. فهي تُستنتج من سجلات account.tax الخاصة بالشركة حسب نوع الاستخدام، وتجمع بنود القيود الضريبية المرحّلة خلال الفترة، فتساوي الخانة 5 ضريبة المبيعات المحصّلة على الفواتير المرحّلة، وتساوي الخانة 9 الضريبة القابلة للاسترداد على فواتير المشتريات المرحّلة، في كل مرة تحتسب فيها.
الإشعارات الدائنة تُخصم بالطريقة الصحيحة
تصفّي كل خانة إجمالية جانباً ضريبياً واحداً بدلاً من جمع القيم المطلقة. فضريبة المبيعات المحصّلة تُقيَّد في الجانب الدائن والاسترداد يُقيَّد في الجانب المدين، وطرح أحدهما من الآخر يخصم العكس الذي يحمله الإشعار الدائن. فالمبيعة التي تُسترَد في الشهر نفسه تُخفّض ضريبة المخرجات بدلاً من تضخيمها.
الرقم المُقدَّم يبقى مُقدَّماً
وسم دورة الإقرار كمُقدَّمة يثبّت من قدّمها ومتى، ويحوّلها إلى وضع القراءة فقط. تُرفَض إعادة الاحتساب وإعادة التعيين برسالة واضحة، فلا يمكن لإعادة تشغيل لاحقة أن تكتب فوق رقم سبق أن قدّمته دون علمك. وتُجرى التعديلات بإنشاء دورة إقرار جديدة للفترة.
يوم في حياة المستخدم
الإقرار الشهري باحتساب واحد
بعد نهاية الشهر تُنشئ دورة إقرار للشركة والسنة والشهر، فتُملأ تواريخ الفترة للشهر الكامل. تضغط على احتساب فتمتلئ الخانات العشر في مسار واحد على القيود المرحّلة: خانات الإجمالي والصافي من ضرائب المبيعات لديك، والخانات حسب المعدّل من وسوم شجرة الحسابات اليمنية، والإشعارات الدائنة مخصومة بالفعل. تراجع صافي المستحق، وتسِم الدورة كمُقدَّمة، فتُقفَل باسمك ووقتها مثبّتين عليها. ويُسجَّل صف في سجل تدقيق التنفيذ. وفي الشهر التالي تكرّر العملية، ويبقى رقم الشهر الماضي مجمّداً خلفك.
حالات خاصة تتعامل معها الوحدة
المبيعة والإشعار الدائن المقابل لها في الفترة نفسها يُصفَّيان إلى ضريبة المخرجات الحقيقية بدلاً من الإجمالي، لأن كل خانة إجمالية تطرح الجانب المقابل من الدفتر؛ وينطبق الأمر نفسه على خانة المدخلات في حالة الإشعار الدائن من المورّد.
الفترة التي لا حركة مرحّلة فيها (أو قبل تحميل شجرة الحسابات اليمنية) تُحتسب صفراً في كل خانة وتبلغ حالة "محتسب" بدلاً من إطلاق خطأ، فالشهر المبكر أو الهادئ يُقدَّم بلا عثرات.
بمجرد تقديم دورة الإقرار، تُطلق كلٌّ من إعادة الاحتساب وإعادة التعيين إلى مسودة خطأ UserError؛ والسبيل الوحيد لتغيير رقم هو دورة إقرار جديدة، يبقيها قيد الفترة الفريد منفصلة وقابلة للتتبّع.
خانات الوسوم تطابق الوسم بلا إشارة في Odoo 17 والزوج ذا الإشارة في Odoo 16 إلى 18 في آنٍ واحد، فتُصفّي التسميات المُعرَّفة مسبقاً نفسها إلى الرقم ذاته أياً كان الإصدار.
ماذا يوجد بالداخل
- eh.ye.gst.run: إقرار ضريبة مبيعات يمني واحد لكل شركة وسنة وشهر، بدورة حياة من مسودة إلى محتسب إلى مُقدَّم، وتواريخ فترة مُحتسبة تلقائياً، وقيد فترة فريد، والتحقق من صيغة السنة YYYY، ورقم الصافي المستحق، وتتبّع عبر سجل التتبع (chatter)، وحقول ختم التقديم.
- eh.ye.gst.run.line: بند محتسب واحد لكل خانة، يحمل رمز التسمية واسمها وترتيبها والمبلغ بعملة الشركة، يُعاد بناؤه في كل احتساب ويُمحى عند إعادة تعيين دورة مسودة.
- eh.ye.gst.label: تعريفات الخانات المُعرَّفة مسبقاً، لكلٍّ منها قاعدة تجميع (ضريبة مخرجات، ضريبة مدخلات، صافي ضريبة مبيعات، وسم ضريبي أو يدوي)، واسم وسم وإشارة اختياريان، وحارس يرفض خانة وسم بلا اسم وسم كي لا تُحتسب خانة صفراً دون علمك.
- سجل تدقيق تنفيذ التقارير: كل احتساب يفتح صف بداية ويُغلقه بحالة اكتمال أو إخفاق في سجل eh.account.report.execution المشترك، عبر المسار نفسه الذي تسلكه تقارير ERP Heritage القياسية.
- مُنفِّذ محرّك التقارير: مدخل تقرير ديناميكي برمز ye_gst يسجّل الإقرار على محرّك ERP Heritage كي يُحتسب على Odoo 17 Community دون account_reports الخاص بالإصدار Enterprise.
ما لا تقوم به الوحدة
- لا يقدّم الإقرار أو يرسله إلكترونياً إلى مصلحة الضرائب اليمنية؛ فوسم دورة الإقرار كمُقدَّمة حالة وقفل داخليان، لا تقديماً فعلياً.
- لا يُنشئ شجرة الحسابات اليمنية أو الضرائب أو الوسوم الضريبية؛ فهذه تأتي من eh_l10n_ye، وتبقى الخانات حسب المعدّل صفراً حتى تتوفّر الشجرة ووسومها.
- لا يرحّل قيداً محاسبياً أو دفعة عن صافي ضريبة المبيعات؛ فالدورة ورقة عمل إقرار، لا قيداً محاسبياً.
- يغطّي شهراً ميلادياً واحداً لكل دورة؛ فلا تجميع ربع سنوي أو سنوي، وكل شهر دورته الخاصة.
- لا يحاكي النموذج الورقي الرسمي أو تخطيط النموذج الإلكتروني لمصلحة الضرائب؛ فهو ينتج أرقام الخانات، لا المستند الحكومي.
- لا يكتشف المعاملات أو يعيد تصنيفها تلقائياً؛ فالخانة تعكس تماماً ما تحمله ضرائبك ووسومك الضريبية المرحّلة عن الفترة.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
The Australia country pack for the ERP Heritage Employment Hero integration
Sync certifications, qualifications and employee document metadata from the Employment Hero people platform into...
Sync Employment Hero leave categories, leave requests and leave balances into the standard Odoo Time Off app, wit...
Show the Hijri (Umm al-Qura) date alongside Gregorian dates across Odoo 17
Please log in to comment on this module