فواتير اشتراكات بعدة عملات: طرق تقريب عملية ونموذج بيانات صغير للحفاظ على تطابق المجاميع عبر الويب، الجوال، والتصديرات المحاسبية.

مشكلة شائعة: دفع الويب يظهر إجماليًا، وتطبيق الهاتف يظهر إجماليًا مختلفًا قليلًا، والتصدير المحاسبي يعرض رقمًا ثالثًا. كل نظام يقوم بحساب "معقول" لكنه ليس نفس الحساب.
الاشتراكات تزيد الأمر سوءًا لأنك تكرر الحساب مرات ومرات. فروق صغيرة تتراكم عبر التجديدات، التقييد عند الترقية منتصف الدورة، الاعتمادات والاستردادات، رسوم المحاولة بعد فشل الدفع، وفترات جزئية في بداية أو نهاية الخطة.
الانحراف عادةً يبدأ بخيارات صغيرة تظل غير مرئية حتى لا تعد كذلك: متى تقرّب (لكل سطر أو في النهاية)، أي أساس ضريبي تستخدم (صافي أم إجمالي)، كيف تتعامل مع العملات التي لها وحدات صغرى 0 أو 3 أرقام عشرية، وما هو سعر الصرف المطبق (أي طابع زمني، أي مصدر، أي دقة). إذا قام الويب بالتقريب إلى منزلتين عشريتين لكل سطر والهاتف يقرب فقط الإجمالي النهائي، قد تحصل على فرق 0.01 حتى لو كانت المدخلات نفسها.
الهدف ممل لكنه مهم: نفس الفاتورة يجب أن تُنتج نفس المجاميع في كل مكان، في كل مرة. هذا يُبقي العملاء مطمئنين، يقلل تذاكر الدعم، ويصمد أمام عمليات التدقيق.
"الاتساق" يعني أنه بالنسبة لمعرّف فاتورة وإصدار معين:
مثال: عميل يرقّي من 19.99 يورو إلى 29.99 يورو منتصف الشهر، يحصل على رسوم مقيدة، ثم اعتمادات صغيرة عن وقت التوقف. إذا قام نظام بتقريب كل سطر مقيد وآخر يقرب الإجمالي النهائي فقط، قد تختلف الفاتورة المصدّرة عما رآه العميل، رغم أن كل رقم يبدو "قريبًا بما يكفي".
قبل أن تناقش أسعار الصرف أو قواعد تقريب الضرائب، أَمسك بالأساسيات. إن كانت هذه غامضة، ستنحرف الفواتير عبر تطبيق الويب، التطبيق المحمول، والتقارير المحاسبية.
كل سطر في الفاتورة والإجمالي يجب أن يحمل بوضوح ثلاثة مبالغ: الصافي (قبل الضريبة)، الضريبة، والإجمالي (صافي + ضريبة). اختر أحدها كمصدر الحقيقة للتخزين والحساب، ثم استخرج الباقي بنفس الطريقة في كل مكان. كثير من الفرق يخزنون الصافي والضريبة ثم يحسبون الإجمالي لأن ذلك يسهل التدقيق والاستردادات.
كن صريحًا بشأن أي عملة تُمثل كل رقم. الفرقات الشائعة بين ثلاثة مفاهيم:
قد تكون هذه نفسها أو مختلفة. إذا كانت فاتورتك باليورو لكن البطاقة تُسوّى بالدولار، يجب أن تظل الفاتورة متسقة باليورو حتى لو اختلف الإيداع البنكي.
بعد ذلك،عامِل المال كأعداد صحيحة بالوحدات الصغرى (مثل السنت). تخزين 9.99 كعدد عشري شائع يولد مشكلة 9.989999 لاحقًا، خاصة عند إضافة ضريبة أو خصم أو تقييد أو عناصر متعددة. خزّن 999 (سنت) مع رمز العملة، وقُم بالتنسيق للعرض فقط.
أخيرًا، قرر وضع الضريبة للأسعار:
فحص عملي: خطة معروضة 10.00 (شاملة الضريبة، ضريبة 20%) يجب أن تولّد نفس الإجمالي المخزن بالوحدات الصغرى على الويب والهاتف، ثم يُستخرج الصافي والضريبة بقاعدة مشتركة.
اختلافات أسعار الصرف غالبًا ما تبدأ قبل قواعد الضريبة والتقريب. نظامان يمكن أن يكونا "صحيحين" ولكنهما يختلفان لأنهما استخدما مصادر مختلفة، طوابع زمنية مختلفة، أو دقة مختلفة.
مزودو الأسعار نادرًا ما يتطابقون تمامًا. بعضهم يعطي أسعار منتصف السوق، والبعض الآخر يضيف هامشًا. البعض يحدث كل دقيقة، البعض كل ساعة أو يوميًا. حتى مع نفس المزود، قد يقرب نظام السعر إلى 4 منازل عشرية وآخر يحتفظ بـ8+ منازل، وهذا يغيّر المجاميع عند ضرب مبالغ الاشتراك والضرائب.
أهم قرار هو ماذا يعني طابع السعر الزمني. إذا كنت تفرض باليورو لكن العميل يدفع بالدولار، هل تُثبّت سعر الصرف عند إصدار الفاتورة أم عند تحصيل الدفع؟ كلا الخيارين شائعان، لكن خلطهما عبر الويب والتطبيق والتقارير يضمن الاختلافات.
بعد اختيار القاعدة، خزّن السعر الدقيق المستخدم على الفاتورة. لا تعيد حسابه لاحقًا من "أسعار حالية" حتى لو أمكنك الرجوع إلى أسعار تاريخية. تصحيحات المزود وفروق المناطق الزمنية وتغييرات الدقة الصغيرة ستجعل الفواتير القديمة تنحرف عند التصدير أو عند إعادة توليد PDF.
مثال بسيط: تصدر فاتورة عند 23:59 لكن الدفع يتم عند 00:02. تلك الطوابع غالبًا ما تقع في أيام مزود مختلفة، لذا جدول أسعار يومي قد ينتج أرقامًا مختلفة.
قرّر ووثّق تفاصيل أسعار الصرف:
حالات خاصة تحتاج معالجة مبكرًا: العملات ذات الأصفار العشرية (مثل JPY)، الأسعار ذات الدقة العالية جدًا، والاستردادات. ينبغي عمومًا أن تعيد الاستردادات استخدام سعر الصرف المخزن بالأصل. وإلا قد يختلف مبلغ الاسترداد عمّا يتوقعه العميل وما يظهر في التصدير المحاسبي.
إذا أردت أن تتطابق الفواتير عبر الويب، المحمول، والتقارير المحاسبية، يجب أن يخزن نموذج البيانات النتائج، ليس المدخلات فقط. الهدف بسيط: نفس الفاتورة يجب أن تُعرض بنفس الوحدات الصغرى في كل مكان، حتى بعد شهور.
مجموعة صغيرة من الكيانات عادةً تكفي:
قاعدة رئيسية: الحقول المالية يجب أن تكون أعدادًا صحيحة بالوحدات الصغرى. خزّن سعر الوحدة والمجاميع المحسوبة للسطر. هذا يمنع إعادة الحساب لاحقًا بقواعد تقريب مختلفة أو مصدر سعر صرف مختلف.
يجب التقاط سعر الصرف على الفاتورة، لا استنتاجه. حتى لو خزّنت جدول أسعار مشتركًا، يجب أن تحتفظ الفاتورة بقيمة fx_rate_value الدقيقة المستخدمة عند التثبيت (ومصدرها) حتى يمكن للتقارير إعادة إنتاج نفس الأرقام.
تحتاج إلى جدول تفصيل ضريبي منفصل فقط عندما يمكن أن تحتوي فاتورة واحدة على معدلات ضريبية متعددة أو اختصاصات متعددة في نفس الوقت. حينها خزّن صفًا لكل معدل ضريبي مع taxable_base_minor و tax_amount_minor.
أخيرًا، اعتبر الفاتورة المثبتة غير قابلة للتغيير. احفظ لقطة القيم المحسوبة عند لحظة تثبيتها، ولا تعيد حساب المجاميع من الاشتراك لاحقًا. هذا القرار الواحد يقضي على معظم أخطاء "لماذا تغيرت السنتات؟".
التقريب ليس تفصيلًا رياضيًا فقط. إنه قاعدة منتج. إذا قام الويب بالتقريب بطريقة، والهاتف بطريقة أخرى، والتقارير بطريقة ثالثة، ستحصل على مجاميع مختلفة حتى لو بدت المدخلات متطابقة.
ثلاث استراتيجيات شائعة تختلف في مكان "تثبيت" الوحدات الصغرى:
لاشتراكات، الافتراضي الجيد هو التقريب لكل سطر. إنه متوقع للعملاء (كل سطر يبدو صحيحًا)، سهل للتدقيق، ومستقر عبر التجديدات. التقريب لكل وحدة قد ينحرف عند تغيير الكمية أو عرض سعر الوحدة في الواجهة. التقريب عند الإجمالي غالبًا يولّد تذاكر "لماذا لا تجمع الأسطر؟" لأن مجاميع الأسطر المرئية قد لا تساوي الإجمالي المعروض.
مشكلة السنت الكلاسيكية تظهر عندما لديك عناصر كثيرة أو ضرائب جزئية. مثال: 20 سطرًا كل منها ينتج باقٍ 0.004. بالتقريب لكل سطر قد يصبح الفرق 0.08 مقارنةً بالتقريب في النهاية. مع تحويلات العملة، تلك البواقي الصغيرة تظهر أكثر وتتراكم مع الزمن في التصديرات وتقارير الإيرادات.
أيا كانت خيارتك، اجعلها حتمية. نفس المدخلات يجب أن تُعطي نفس النواتج عبر الويب، المحمول، والتقارير:
إذا بنت كلٍ من الويب والمحمول تدفقات فوترة، اكتب قاعدة التقريب كمواصفة قابلة للاختبار، لا كسلوك في الواجهة فقط.
للحفاظ على نفس الأرقام على الويب، المحمول، وفي التصديرات المحاسبية، عامل الحساب كوصفة طبخ. الفكرة الأساسية: احسب بدقة عالية، لكن خزّن واجمع أعدادًا صحيحة فقط بعملة الفاتورة.
ابدأ بكل سطر بصافي الدفعة بدقة عالية. احتفظ بالأرقام الإضافية عند ضرب الكمية، تطبيق الخصومات، وإذا لزم الأمر تحويل العملة. ثم قرب مرة واحدة إلى وحدات الفاتورة الصغرى باستخدام القاعدة المختارة. خزّن هذه الصحيحة كصافي السطر.
احسب الضريبة من صافي السطر المخزن (أو من مجمل مجموعة ضريبية إذا كانت قواعدك تسمح بتجميع حسب المعدل). طبق نفس قاعدة التقريب وخزن الضريبة كوحدة صحيحة. هنا غالبًا ما تنحرف الأنظمة: جانب يقرب قبل الضريبة والآخر بعد.
احسب إجمالي كل سطر كـ (الصافي المخزن + الضريبة المخزنة). مجاميع الفاتورة هي مجموع الوحدات المخزنة. لا تعيد حساب المجاميع من قيم عشرية لعرضها. الواجهات والتقارير يجب أن تقرأ الأعداد الصحيحة المخزنة وتنسقها.
إذا تطلّب القانون المحلي مجاميع ضريبية على مستوى الفاتورة، قد تحتاج لتوزيع باقي الوحدات. مثال: ثلاثة أسطر لكل منها ضريبة 0.01 ربما تجمع 0.03، لكن تقريب مستوى الفاتورة يقول 0.02. قرّر فاصل حاسم حتمي (مثلاً: أضف أو اخصم 1 وحدة صغرى بدءًا من أكبر سطر خاضع للضريبة، ثم فرز ثابت حسب id السطر). خزّن التعديل كتصحيح ضريبي صغير على الأسطر المتأثرة حتى تُعيد كل الأنظمة إنتاجه.
ثبّت الفاتورة. بعد التقريب النهائي وتوزيع أي بواقي، عامل الفاتورة على أنها غير قابلة للتعديل. إذا تغيّر سعر الاشتراك لاحقًا، اصنع فاتورة جديدة أو مذكرة ائتمان، لكن لا تعيد كتابة الأرقام القديمة.
فحص عملي: إذا كانت خطة بقيمة 9.99 يورو تحمل ضريبة 19%، قد يكون الصافي المخزن 999 سنتًا، الضريبة 190 سنتًا، الإجمالي 1189 سنتًا. يجب على كل عميل عرض 11.89 يورو من تلك الأعداد المخزنة، لا بحساب الضريبة ديناميكيًا.
تقريب الضريبة هو المكان الذي تتحول فيه الحسابات الصحيحة إلى فواتير متباينة. القضية الأساسية بسيطة: التقريب المبكر يغير المجموع النهائي.
إذا قربت الضريبة لكل سطر (أو لكل كمية) ثم جمعت، قد تحصل على مجموع مختلف عما إذا جمعت الضريبة غير المقربة عبر الفاتورة ثم قربتها مرة واحدة في النهاية. مع العديد من الأسطر، تتراكم الفجوات، خصوصًا عندما تُوجد وحدات صغرى وتحويلات عملة بالفعل كسورًا.
مثال ملموس (منزلتان): سطران كل واحد قابِل للضريبة 0.05 وبضريبة 10%. الضريبة غير المقربة لكل سطر 0.005. إذا قربت لكل سطر، كل واحدة تصبح 0.01، فيكون إجمالي الضريبة 0.02. إذا قربت على مستوى الفاتورة، المجموع الخاضع للضريبة 0.10، الضريبة 0.01. كلاهما مبرَّر ولكنهما يختلفان.
عندما يجب إظهار ضريبة لكل سطر وأيضًا المواءمة مع إجمالي الفاتورة، وزّع باقي التقريب بطريقة حتمية:
لا تزال التصديرات تنحرف عند تجميع السطور لأغراض محاسبية (حسب المنتج، المعدل الضريبي، أو الاختصاص). للحفاظ على تطابق مجاميع التصدير مع مجاميع الفاتورة، وزّع البواقي داخل كل مجموعة مطلوبة أولًا، ثم تحقّق أن تجمعات المجموعات تتطابق مع ضريبة وإجمالي الفاتورة.
إن كانت المحاسبة تطلب تقسيم الضريبة حسب المعدل أو الاختصاص لكن الواجهة تظهر رقمًا واحدًا، خزّن التفصيل على أي حال (مجاميع لكل معدل أو اختصاص مع قاعدة تخصيص ودية للتدقيق). الواجهة يمكنها عرض مجموع واحد، والتصديرات تحمل دلاءًا مفصلة دون تغيير الإجمالي العام للفاتورة.
معظم عدم تطابق الفواتير يحدث في الزوايا. قرر القواعد مبكرًا فتتوقف عن أن تكون مفاجآت.
العملات ذات الصفر العشري تحتاج عناية خاصة. JPY وKRW لا تحتويان على وحدات صغرى، لذا أي خطوة تفترض "سنت" ستخلق اختلافات بصمت. قرّر ما إذا كنت تقرب على كل سطر، على مستوى الضريبة، أم فقط الإجمالي، وتأكد أن كل عميل يستخدم نفس إعدادات العملة.
ضريبة القيمة المضافة عبر الحدود قد تغيّر المعدل اعتمادًا على موقع العميل وما الدليل المقبول (عنوان الفوترة، IP، رقم ضريبي). الجزء الصعب ليس المعدل نفسه بل متى تثبته. اختر نقطة زمنية (التسوية، إصدار الفاتورة، أو بداية فترة الخدمة) والتزم بها.
التقييد هو مكان تتكاثر فيه الكسور. قد تخلق ترقية منتصف الدورة مبالغ مثل 9.3333... لليوم. قرّر ما إذا كنت تقيد الصافي أولًا، أم الإجمالي، أم فترة الخدمة، ثم احسب الباقي من هناك. تغيير الترتيب يغيّر الوحدة الصغرى الأخيرة.
اكتب هذه القواعد حتى لا تنحرف مع الزمن:
الاستردادات هي الفخ النهائي. إذا كانت الفاتورة الأصلية خصصت باقي 0.01 لسطر واحد، يجب أن يعكس الاسترداد ذلك التخصيص بالضبط. وإلا سيرى العميل مجموعًا واحدًا ودفاتر الحسابات مجموعًا آخر.
معظم اختلافات الفواتير ليست ناتجة عن "رياضيات صعبة". تأتي من خيارات صغيرة وغير متسقة في أجزاء مختلفة من المنتج.
خطأ كبير هو تخزين المال كأعداد عشرية عائمة. قيمة مثل 19.99 لا يمكن تمثيلها بدقة في كثير من الأنظمة، فتظهر أخطاء صغيرة عند جمع الأسطر أو تطبيق الخصومات أو حساب الضريبة. خزّن المبالغ كأعداد صحيحة بالوحدات الصغرى مع رمز العملة ودقة الوحدات الصغرى.
مشكلة شائعة أخرى هي إعادة حساب سعر الصرف أثناء التصدير. العميل دفع بناءً على سعر محدد في وقت محدد. إذا سحب التصدير "سعر اليوم" ستحصل على إجمالي مختلف حتى لو كان كل شيء آخر صحيحًا. عامل الفاتورة كلقطة: خزّن سعر الصرف المستخدم، المبالغ المحوّلة، ونتائج التقريب.
تظهر اختلافات التقريب أيضًا عندما تقرب الواجهة والخلفية في مراحل مختلفة. مثال: الخلفية تقرب الضريبة لكل سطر، بينما واجهة الويب تقرب فقط الإجمالي. كلا منطقين قد يبدوان منطقيين، لكنهما لن يتطابقا.
خمسة مقترِفين يشرحون معظم الفجوات:
فحص واقعي سريع: تطبيق محمول يعرض ثلاثة عناصر بـ 9.99 يورو مع ضريبة 20%. إن قرب التطبيق الضريبة في النهاية لكن الخلفية قربت لكل سطر، يمكنك أن تكون مخطئًا بسنت واحد. تلك السنتة تكفي لكسر المصالحة وإحداث تذاكر دعم.
الإصلاح الأبسط ممل لكنه فعّال: احسب مرة واحدة في الخلفية، خزّن لقطة الفاتورة الكاملة، ودع الويب والمحمول يعرضان تلك الأعداد المخزنة بالضبط.
عندما تختلف الأرقام بين الويب، المحمول، والتصدير المحاسبي، فغالبًا ما تكون المشكلة تخزين وتقريب، لا رياضيات.
ابدأ بمبدأ أن العملاء يجب أن يعرضوا ما تخزّنه الفاتورة، لا يعيدوا حسابه. يجب أن تكون الخلفية مصدر الحقيقة الوحيد، وكل قناة تقرأ نفس القيم المحفوظة.
يجب أن تعكس الاستردادات وملاحظات الائتمان نتائج تقريب الفاتورة الأصلية. إن كانت الفاتورة الأصلية قربت الضريبة لكل سطر، يجب أن يعكس الاسترداد نفس الشيء مستخدمًا نفس دقة العملة وسعر الصرف المخزن. وإلا قد تظهر مبالغ متبقية صغيرة وتتراكم.
طريقة عملية لفرض هذا هي تخزين لقطة حسابية واضحة مع كل فاتورة: العملة، دقة الوحدات الصغرى، وضع التقريب، سعر الصرف والطابع الزمني، ووحدات السطر النهائية.
إليك فاتورة تبقى متطابقة في كل القنوات.
افترض أن الفاتورة مصدرة باليورو (منزلتان)، الضريبة 20%، والعميل يُخصم بالدولار. الخلفية تُخزن لقطة سعر الصرف: 1 EUR = 1.0857 USD.
| البند | صافي (EUR) |
|---|---|
| خطة Pro (شهري) | 19.99 |
| مقاعد إضافية | 10.00 |
| خصم (10% من 29.99، مقترب) | -3.00 |
صافي المجموع (EUR) = 26.99
ضريبة 20% (EUR) = 5.40 (لأن 26.99 x 0.20 = 5.398، مقترب إلى 5.40)
الإجمالي (EUR) = 32.39
الآن تستخلص الخلفية المجاميع بعملة الشحن من المجاميع المخزنة باليورو ولقطة سعر الصرف المخزنة:
إذا خزّنت أيضًا مبالغ كل سطر بالـUSD، غالبًا ستحصل على فرق 0.01 عند تقريب كل سطر محوّل ثم جمعهم. هنا عادةً ما تنحرف الفواتير.
اجعلها حتمية: حوِّل وقَرِّب كل سطر ثم وزّع أي سنت متبقي (موجب أو سالب) بترتيب ثابت (مثلاً حسب line_id تصاعديًا) حتى يصبح مجموع الأسطر يساوي الإجمالي USD الثابت بالفعل.
يجب أن يعرض الويب والمحمول مجاميع الأسطر والضرائب وسعر الصرف والإجمالي المخزنة من الخلفية، لا أن يعيدوا حسابها. التصدير المحاسبي يجب أن يصدر نفس الأرقام المخزنة بالإضافة إلى لقطة سعر الصرف (القيمة، الطابع الزمني أو المصدر) حتى تتطابق اليومية مع ما رآه العميل.
خطوة عملية مقبلة هي تنفيذ الحساب كخدمة مشتركة تنتج لقطة فاتورة واحدة (أسطر، ضرائب، مجاميع، سعر الصرف، تعديلات التقريب) ولتقرأ كل القنوات تلك اللقطة. إذا بنيت هذه التدفقات على Koder.ai (Koder.ai)، فالنموذج القائم على اللقطة يساعد الويب والمحمول والتقارير على البقاء متوافقة لأن الجميع يقرؤون نفس القيم المحفوظة.
لأن كل نظام غالبًا ما يتخذ قرارات طفيفة مختلفة حول متى يتم التقريب، ماذا يتم تقريبُه (صافي أم إجمالي)، وأيّ دقة تُستخدم للضريبة وسعر الصرف. تلك الاختلافات الصغيرة تظهر كفجوات 0.01–0.02 يورو أو دولار، خصوصًا عند وجود عمليات تقييد، اعتمادات، ومحاولات دفع متكررة.
خزن المبالغ كأعداد صحيحة بالوحدات الصغرى (مثل السنت) مع رمز العملة، وقم بتنسيقها للعرض فقط. الأرقام العشرية العائمة لا تمثل كثيرًا من القيم بدقة، فتنتج أخطاء صغيرة عند جمع عناصر متعددة أو تطبيق ضرائب وخصومات.
اختر مقدارًا واحدًا ليكون مصدر الحقيقة المخزون، واستخرج الباقي بنفس القاعدة في كل مكان. الافتراضي الشائع هو تخزين الصافي والضريبة كوحدات صغرى وحساب الإجمالي = الصافي + الضريبة، لأن ذلك يسهل الاستردادات والتدقيق ويحافظ على ثبات المجاميع.
عملة الفاتورة هي العملة القانونية للمجاميع التي تُقرّ بها الفاتورة وتُقارَن بها، عملة العرض ما تُظهره للعميل عند تصفح الخطط، وعملة التسوية هي ما يودعه مزود الدفع في حسابك البنكي؛ هذه يمكن أن تختلف بشرط أن تبقى حسابات الفاتورة متسقة.
لا تعيد جلب الأسعار عند التصدير أو إعادة إنشاء PDF. خزن سعر الصرف الدقيق المستخدم في الفاتورة (القيمة، الدقة، المزود، والوقت الفعّال) وأعِد استخدامه دائمًا حتى تنتج الفواتير القديمة نفس الأرقام بعد شهور.
اختر قاعدة واحدة وثبتها: إما "السعر عند إصدار الفاتورة" أو "السعر عند تحصيل الدفع". طبّق نفس القاعدة في كل الأنظمة. المزج بين الطوابير الزمنية عبر الأنظمة يسبب اختلافات خاصة في حدود منتصف الليل وفروق المناطق الزمنية.
الافتراضي الآمن لفواتير الاشتراك هو التقريب لكل سطر ثم جمع وحدات السطر المخزنة إلى المجاميع. هذا سهل الشرح للعملاء، ويمنع تذاكر الدعم حول "لماذا لا تساوي هذه الأسطر الإجمالي؟"، ويكون مستقرًا إذا طبّقت كل القنوات نفس القاعدة.
اختر صراحةً بين تقريب الضريبة لكل سطر أو عند مستوى الفاتورة، ثم طبّق ذلك بشكل حتمي. إذا اضطررت للتوافق مع إجمالي الفاتورة، وزّع وحدات الباقي بطريقة ثابتة وخزن مبالغ الضريبة النهائية لكل سطر حتى تُطابق كل الأنظمة النتيجة نفسها.
التقييد ينتج كسورًا متكررة (مثل معدلات يومية)، لذا ترتيب العمليات يهم. اختر طريقة واحدة (مثلاً: قُم بتقييد الصافي أولًا ثم احسب الضريبة من الصافي المخزن)، قرب في النقطة المتفق عليها، وخزن وحدات السطر النهائية حتى تعكس الترقيات والخصومات والاستردادات الحساب الأصلي.
الأبسط: الخلفية تُنتج لقطة فاتورة نهائية (الأسطر، الضرائب، المجاميع، قواعد الدقة والوحدات الصغرى، لقطة سعر الصرف، وضع التقريب) وعاملها كشيء غير قابل للتعديل بعد التثبيت. ثم تعرض الويب والتطبيقات وملفات PDF والتقارير الأعداد المخزنة بدلًا من إعادة الحساب؛ هذا أيضًا نمط جيد عند بناء تدفقات الفوترة على Koder.ai.