Nordlet

← الأساسيات / حزم تطوير البرمجيات (SDK)

الاعتراف بالإيرادات (معيار التقرير المالي الدولي 15 / معيار المحاسبة الأمريكي 606)

الإيرادات المؤجلة، جداول الاستحقاق المتناسب، والجداول المرتبطة بالمراحل ونسبة الإنجاز، التزامات الاسترداد، والاشتراكات.

تأجيل الإيرادات على مستوى كل بند والاعتراف المجدول: التزامات العقود، طرق الاعتراف على مدى الزمن، تخصيص سعر المعاملة، مخصصات الاسترداد، الاشتراكات، وتعديلات العقود. المسار الافتراضي يظل دون تغيير - حيث يظل بند الفاتورة العادي يعترف بالإيراد بالكامل عند الإصدار (في نقطة زمنية محددة)، وهو ما يتوافق مع المعيارين 606 و15 لالتزام أداء واحد يتم الوفاء به عند التسليم. كل ما ورد أدناه هو اختياري (opt-in) لكل بند فاتورة على حدة.

البرمجيات مؤهلة للتوافق مع المعيارين 606 و15؛ وتعتبر الجهة المُعِدَّة للتقارير هي الجهة المسؤولة عن التوافق (أو عدم التوافق). يظل اختيار الطريقة الصحيحة لكل التزام أداء، وتقدير أسعار البيع المستقلة ومعدلات الاسترداد، وتقدير ما إذا كانت السلع أو الخدمات المتبقية منفصلة عند التعديل، بمزاعم محاسبية تتخذها الجهة المبلّغة.

الحسابات

تُدعم التدفقات بثلاثة حسابات رئيسية في شجرة الحسابات، ومربوطة كمفاتيح لقواعد الترحيل (يمكن تجاوزها لكل شركة عبر ledger/posting-rules/update): revenue.deferredIncome ← الحساب 4910 "Ateinančių laikotarpių pajamos" (التزام عقدي)، وrevenue.refundLiability ← الحساب 4450 "Grąžinimo įsipareigojimai pirkėjams" (التزامات الاسترداد)، وrevenue.contractAsset ← الحساب 2910 "Sukauptos pajamos" (أصل عقدي). تحصل الشركات الحالية على هذه الحسابات عن طريق إعادة تطبيق قالب شجرة الحسابات (ledger/accounts/apply-template).

التزامات الأداء على بنود الفاتورة

تستقبل البنود في sales/invoices/create|update المعلمة recognition: { method, startDate, endDate, milestones } حيث تكون قيمة method واحدة مما يلي:

الطريقة السلوك عند الإصدار الاعتراف
point_in_time (افتراضي) دائن للإيراد بالكامل عند الإصدار، دون تغيير
ratable (startDate..endDate) دائن للإيراد المؤجل جدول شهري موزّع حسب الأيام خلال فترة الخدمة
milestone (milestones[]، الننسب المئوية مجموعها 100) دائن للإيراد المؤجل شريحة واحدة لكل مرحلة، يتم الاعتراف بها عند وقوع الحدث
percent_complete دائن للإيراد المؤجل عبر تقارير الإنجاز التراكمي

تبقى الحسابات المدينة للعملاء (AR) وضريبة القيمة المضافة (VAT) دون تغيير: يثبت الإصدار مدينّاً للحساب 2410 بالقيمة الإجمالية، ودائناً للحساب 4492 لضريبة القيمة المضافة، ويقوم بتقسيم صافي المبلغ بين الإيراد (لبنود النقطة الزمنية) والحساب 4910 (للبنود المؤجلة). تُحفظ الجداول بعملة الأساس للشركة وبسعر الصرف السائد في تاريخ الإصدار - ويُظهر الأمر sales/recognition-schedules/list (sales:read) كل شريحة مع حالتها pending | recognized | cancelled (معلقة | معترف بها | ملغاة).

تخصيص سعر المعاملة. في حال وجود أكثر من بند، يقوم حقل standaloneSellingPrice في كل بند بتخصيص صافي الفاتورة عبر التزامات الأداء بشكل تناسبي (المعيار الدولي للتقرير المالي 15، الفقرات 76–80)؛ والمبلغ المخصص - وليس سعر البند المعلن - هو الذي يوجه التقسيم بين الإيراد والإيرادات المؤجلة والجداول الزمنية. تظل ضريبة القيمة المضافة مرتبطة ببنود الفاتورة كما هي معلنة.

محرك الاعتراف

يثبت الاعتراف قيداً مديناً بالحساب 4910 ودائناً للإيراد (حساب الخدمة أو المنتج ومركز التكلفة من البند الأصلي) كقيد يومية واحد لكل عملية تشغيل، مسجلاً في sales/recognition/runs/list.

  • POST /v1/sales/recognition/compute (sales:read) { asOfDate? } - معاينة تجريبية لشريح الاستحقاق المتناسب المستحقة.
  • POST /v1/sales/recognition/run (sales:write) { asOfDate?, postingDate?, scheduleIds? } - ترحيل شرائح الاستحقاق المتناسب المستحقة، أو الشرائح المحددة بالاسم عبر scheduleIds (بأي طريقة كانت).
  • POST /v1/sales/recognition/progress (sales:write) { invoiceLineId, percentComplete, date? } - لبنود نسبة الإنجاز: الإبلاغ عن الإنجاز التراكمي؛ حيث يتم ترحيل الفارق المكتسب حديثاً فوراً، ويتم رفض التراجعات.
  • POST /v1/sales/recognition/summary (sales:read) - المبلغ المعترف به حتى التاريخ، المبلغ المتبقي، عدد البنود المعلقة وتاريخ الاستحقاق التالي لكل بند، بالإضافة إلى إجماليات الشركة.

هناك ثلاثة أحداث تدفع عملية الاعتراف دون الحاجة إلى الاستعلام الدوري: إغلاق الفترة (ledger/periods/lock) الذي يعترف أولاً بكل ما هو مستحق حتى نهاية الفترة، ويُرحَّل في تاريخ نهاية الفترة؛ إصدار محضر التسليم (sales/acts/issue) الذي يعترف بشرائح المراحل المعلقة للفاتورة المرتبطة في تاريخ المحضر؛ ومؤقت استحقاق الجدولة الذي يُفعَّل حتى تاريخ الاستحقاق المتناسب التالي ويُرحِّل لكل شركة عند حلوله (تتم إعادة محاولة الفترة المغلقة لاحقاً). المراحل تعتمد على الأحداث قصداً - إذ إن تاريخ expectedDate لأي مرحلة هو معلومة تخطيطية ولا يؤدي أبداً إلى الاعتراف بمفرده.

الاعتبار المتغير - التزام الاسترداد

يقوم حقل refundEstimatePercent في أي بند بجعل تلك النسبة من صافي المبلغ (المخصص) دائنة للحساب 4450 بدلاً من الإيراد أو الإيرادات المؤجلة عند الإصدار - حيث تُستبعد عمليات الاسترداد المتوقعة من سعر المعاملة (المعيار الدولي للتقرير المالي 15، الفقرة 55). توجد حالة كل فاتورة في sales/refund-liability/list (المقدر، المستهلك، تسويات الاسترداد الفعلية المرصودة، والمتبقي).

القيم الفعلية: يؤدي إصدار إشعار دائن (credit note) مقابل الفاتورة إلى جعل الحساب 4450 مديناً بما يصل إلى الالتزام المتبقي قبل المساس بالإيراد. يقوم الأمر sales/refund-liability/true-up (sales:write) { invoiceId, estimatedTotal, date? } بمراجعة التقدير وترحيل الفارق مقابل الإيراد في أي من الاتجاهين (بحد أدنى يساوي المبلغ المستهلك). أما استردادات تسويات مزود خدمة الدفع (PSP) المطابقة للفاتورة فتُسجَّل على الالتزام وتُطلق خطاف الويب refund_liability.actual - وهي لا تُرحَّل مقابل الحساب 4450 مباشرة، لأن تخفيض الإيراد وضريبة القيمة المضافة على المخرجات يتطلب وجود الإشعار الدائن بوصفه مستند ضريبة القيمة المضافة.

الاشتراكات - الاتفاقيات إلى الفواتير

امنح الاتفاقية فترة فوترة billingPeriod (monthly | quarterly | annual) وسيقوم الأمر agreements/generate-invoice (agreements:write) بإنشاء مسودة فاتورة لفترة عدم الفوترة التالية: بنود من عناصر الاتفاقية (أو قيمة value كبند واحد لكل فترة)، وكل منها يتضمن اعترافاً متناسباً للإيراد على مدى فترة الخدمة. يقوم الأمر agreements/billing/run { asOfDate? } بمسح جميع الاتفاقيات النشطة، وتوليد كل فترة مستحقة، وإنهاء صلاحية الاتفاقيات التي تمت فوترتها بالكامل بعد تاريخ انتهاء صلاحيتها. يتم احتساب الفترات القصيرة النهائية تناسبياً بالأيام؛ ويمدد الخيار autoRenew المدة بطولها الأصلي ويستمر في الفوترة. تحمل الفواتير المُولَّدة المعرّف agreementId (يمكن التصفية عبره في sales/invoices/list).

تعديلات العقود

الأمر POST /v1/sales/recognition/modify (sales:write) { invoiceLineId, approach, date?, newEndDate?, newMilestones? }:

  • prospective (مستقبلي) - إلغاء الجدول المعلق وإعادة توزيع الجزء المتبقي غير المعترف به على الشروط الجديدة بدءاً من تاريخ التعديل (السلع أو الخدمات المتبقية منفصلة: المعيار الدولي للتقرير المالي 15، الفقرة 20(أ)، الفقرة 21(أ)). تأخذ البنود ذات الاستحقاق المتناسب الحقل newEndDate؛ وتأخذ البنود ذات المراحل الحقل newMilestones (نسب مئوية من المبلغ المتبقي).
  • cumulative_catch_up (التعديل التراكمي للإلحاق) (للبنود ذات الاستحقاق المتناسب فقط) - إعادة حساب الإيراد كما لو أن الشروط الجديدة قد تطبيقت منذ البداية وترحيل الفارق فوراً، في أي من الاتجاهين (التزام واحد مُوفى به جزئياً: الفقرة 21(ب))؛ وتتم إعادة توزيع المبلغ المتبقي.

تتدفق انخفاضات الأسعار عبر الإشعارات الدائنة: الإشعار الدائن مقابل فاتورة ذات جداول معلقة يجعل الإيراد المؤجل مديناً أولاً ويقلم خطة التعليق من نهايتها البعيدة، ثم يليه التزام الاسترداد، وبعد ذلك فقط يأتي الإيراد. أما زيادات الأسعار فهي عبارة عن فواتير إضافية تحمل خاصية الاعتراف الخاصة بها - وهي مستقبلية بطبيعتها.

الحدود والقيود

  • جداول وقسائم الاعتراف هي مبالغ بعملة الأساس (EUR) ومثبتة بسعر الصرف في تاريخ الإصدار؛ ولا تُعاد مراجعة الأرصدة المؤجلة بغرض فروق العملة بعد الإصدار.
  • يُتوفَّر حساب الأصل العقدي (2910) ضمن شجرة الحسابات وكمفتاح ترحيل، ولكن لا يوجد حتى الآن تدفق أتمتة للإيرادات غير المُفوتَرة يُرحَّل إليه - فالاعتراف المسبق قبل الفوترة يُعد يدوياً في دفتر اليومية اليوم.
  • يتطلب التخصيص وجود سعر بيع مستقل على جميع بنود الفاتورة أو عدم وجوده على أي منها؛ ولا يُطبق النهج المتبقي (الفقرة 79(ج)).
  • يتم تتبع التزامات الاسترداد بالصافي (بعد استبعاد ضريبة القيمة المضافة) على مستوى الفاتورة؛ ولا تتم نمذجة الأصل المقابل لحق استرداد السلع المرتجعة (الفقرة B25).
  • ينطبق التعديل التراكمي للإلحاق على البنود ذات الاستحقاق المتناسب؛ وتقتصر إعادة تخطيط المراحل على المستقبل فقط؛ بينما يتم تعديل بنود نسبة الإنجاز عبر تقارير الإنجاز، وليس عبر modify.
  • مكونات التمويل الهامة (الفقرات 60–65)، المقابل غير النقدي، والمقابل المستحق الدفع للعميل خارج نطاق التغطية.
  • تُرحَّل عمليات التشغيل التلقائية لاستحقاق الجداول في يوم إطلاقها؛ وتُرفض قسائم الإلحاق الموجهة إلى فترات مغلقة - لذا يجب فتح الفترة أو استخدام تاريخ ترحيل مفتوح.

FAQ

  • س: هل يمكنني استخدام طريقة الاستحقاق المتناسب مع تعديل تاريخ البداية والنهاية؟ ج: نعم، من خلال تعديلات العقود (باستخدام المسار المستقبلي prospective أو التراكمي cumulative_catch_up)، يسمح النظام بتعديل التواريخ وإعادة جدولة الأجزاء المتبقية تلقائياً وفقاً للمعايير المحاسبية.
  • س: ماذا يحدث لضريبة القيمة المضافة عند إصدار إشعار دائن لتقليل الإيراد المؤجل؟ ج: يتم التعامل مع ضريبة القيمة المضافة وفقاً للمستند النظامي (الإشعار الدائن)، حيث يتم عكس أثر الضريبة المقابل للجزء المخفض من قيمة الفاتورة الأصلية بالتوازي مع تخفيض الالتزامات أو الإيرادات.
  • س: هل يؤثر تغير أسعار الصرف على الأرصدة المؤجلة المسجلة؟ ج: لا، فالجداول وقسائم الاعتراف يتم تثبيتها بعملة الأساس (EUR) بناءً على سعر الصرف في تاريخ الإصدار الأولي، ولا تُجرى إعادة تقييم لفروق العملة على الأرصدة المؤجلة بعد تاريخ الإصدار.