التقارير وقفل الأشهر المُغلقة
ما يكتبه كل إغلاق شهري في مساحة عملك، وكيف يسجّل كل شهر مُقفَل ما إذا كان مُطابَقًا بالكامل، وكيف يمنع القفل أي رقم صدر في التقارير من التغيّر دون سبب مكتوب.
ما يكتبه الإغلاق
يجري الإغلاق لشركة واحدة وشهر واحد. فيما يلي ما يتركه في مساحة عمل المراجعة، وما يقرؤه. يُسمّي Haruno كل شركة «client» (عميل)، وهي الكلمة المستخدمة في أسماء المجلدات والأوامر ولوحة المعلومات. في المسارات، يمثّل <client> اسمَ مجلد الشركة داخل workbooks/، مثل cobalt-systems.
| المُخرج | الوصف | متى يتغيّر |
|---|---|---|
| حزمة القوائم المالية | القوائم المالية بالتنسيق الخاص بالشركة. | في كل إغلاق لتلك الشركة. |
| ملف المطابقات | كل جدول بعد إعادة احتسابه مقابل دفتر الأستاذ. | في كل إغلاق لتلك الشركة. |
| تقرير المستثمرين | أرقام شركة واحدة، مُعدّة لمستثمريها. | في كل إغلاق لتلك الشركة. |
| reports/<client>/adjustments.csv | سجل التعديلات. | في كل إغلاق لتلك الشركة، بعد القفل. |
| لوحة معلومات المحفظة | تضم كل شركة أُجري لها إغلاق في مساحة العمل هذه ولا يزال لها ملف مواصفات (spec). | في نهاية كل تشغيل للإغلاق اكتمل فيه إغلاق شركة واحدة على الأقل. |
| ledger/ledger.sqlite | دفتر الأستاذ المرجعي الذي تُبنى منه كل التقارير: ملف واحد لمساحة العمل، تُحفظ فيه دفاتر كل شركة على حدة. | في كل إغلاق. ولا يتغيّر الشهر المُقفَل إلا بعد إعادة فتحه. |
| ledger/staging/ | نسخ عمل يُعدّها الإغلاق من كل ملف مصدر قبل تطبيق الربط الذي اعتمدته. لا تحتاج إلى فتحها أبدًا. | يُعاد بناؤها في كل إغلاق. |
| ledger/evidence/ | نسخة للقراءة فقط من كل ملف مصدر. | عند استيراد ملف جديد أو مصحَّح. |
| .haruno/skills/QuickBooksCFO/specs/<client>.yaml | ملف المواصفات: الربط والأحكام التي سجّلتها. | لا يغيّره الإغلاق أبدًا. يتغيّر فقط عندما تقدّم إجابة أو تعتمد تغييرًا. |
تبقى ملفات الشركة نفسها حيث وصلت، في workbooks/<client>/. يقرؤها الإغلاق ولا يعدّلها أبدًا.
تطّلع على التقارير ولوحة المعلومات في تطبيق macOS، ويمكنك تصدير أيٍّ منها بصيغة PDF لإرساله إلى غيرك.
الإغلاق نفسه يجري على جهازك ولا ينقل أيًّا من بيانات العملاء، سواء أكان المساعد يعمل أم لا. المحادثة ترسل ما ترسله أنت: عندما تطلب من Haruno القيام بشيء، فإن ما تكتبه وما تطبعه الأدوات في المقابل (أسماء الحسابات، ومسمّيات البنود، والأرقام، والملاحظات) يُرسَل عبر خدمة Inferara المستضافة إلى مزوّد النموذج الذي يجيب. راجع أين تذهب بياناتك.
حزمة القوائم المالية
حزمة القوائم المالية هي حزمة التقارير الشهرية بتنسيق الشركة نفسها: مسمّيات البنود نفسها، والمجاميع الفرعية نفسها، ووحدة عرض المبالغ نفسها كما في الحزمة المالية التي أرسلتها الشركة، لأنها تُبنى من بنية ذلك المصنّف نفسه. كل رقم فيها مصدره دفتر الأستاذ. ولا شيء فيها مكتوب يدويًا.
من الأعلى إلى الأسفل:
- الغلاف. اسم الشركة، وعبارة «Financial Reporting Package» (حزمة التقارير المالية)، وعبارة «Unaudited Monthly Results Through» (النتائج الشهرية غير المدققة حتى) متبوعةً بشهر الإغلاق، وعملة التقرير مذكورةً مرة واحدة.
- «Restated periods» (الفترات المُعاد عرضها). يظهر فقط عندما يكون شهر مُقفَل قد أُعيد فتحه ثم تغيّرت أرقامه.
- «Issued with unresolved findings» (صدرت مع ملاحظات غير محلولة). يظهر فقط عندما تكون هناك ملاحظات مفتوحة عالية أو متوسطة الخطورة. يسرد كلًّا منها بدرجة خطورتها والفحص الذي أثارها وموضوعها، وينصّ على أن الأشهر «reported with exception» (صدر مع استثناء) وليست «fully reconciled» (مُطابَق بالكامل).
- الميزانية العمومية. عمود لكل شهر يحتفظ به دفتر الأستاذ. ويُعلَّم صف «CHECK» (التحقق) الخاص بالشركة، وهو عادةً إجمالي الأصول ناقص إجمالي الالتزامات وحقوق الملكية، في أي شهر لا تتّفق فيه الأرقام في حدود سنت واحد.
- قائمة الأرباح والخسائر. الأعمدة نفسها، مع عمود منذ بداية السنة التقويمية حتى تاريخه للسنة التقويمية التي يقع فيها أحدث شهر، ولا يكون أبدًا تراكميًا منذ التأسيس.
- الملاءة المالية والاستمرارية. يُدرج دائمًا: رأس المال العامل، ونسبة التداول، والنقد، وإجمالي حقوق الملكية، ومدة كفاية النقد (Runway) مع الأساس الذي تستند إليه. وحيث يتضمّن دليل الحسابات أرصدة الأطراف ذات العلاقة، تُعرض منفصلةً عن ديون الأطراف الخارجية. ويسرد المؤشرات المتعلقة بمبدأ الاستمرارية وفق ASC 205-40 التي تحقّقت، أو يذكر أنه لم يتحقّق أيٌّ منها. وهو يعرض مؤشرات ولا يخلص أبدًا إلى استنتاج بشأن الاستمرارية.
- التحصيلات مقابل الإيرادات. ما تشير القوائم إلى أنه حُصِّل، مقابل ما أُثبت من إيرادات، مع عنوان يوضّح أنه تقدير مشتق، لا رقم مأخوذ من المصرف.
- هامش الربح الإجمالي. الإيرادات ناقص تكلفة الإيرادات لكل شهر، ولكل مصدر إيرادات حيث يقرن ملف المواصفات بند إيرادات كل مصدر ببند تكلفته.
تتبع القوائم وحدة عرض المبالغ لدى الشركة، فتكون بالآلاف عندما تعرض الشركة أرقامها بالآلاف؛ أمّا الأقسام الثلاثة الأخيرة والصفوف المُعاد عرضها فبوحدات العملة الكاملة، وتذكر ذلك صراحةً. عملة واحدة لكل شركة، ولا تُحوَّل أبدًا. وفي غياب قائمة تدفقات نقدية مستوردة، تستند مدة كفاية النقد إلى التغيّر في النقد، شاملًا التمويل، ويُشار إلى ذلك في عنوانها. راجع مؤشرات الملاءة المالية.
ملف المطابقات
ملف المطابقات يعرض جداول الشركة مقارنةً بدفتر الأستاذ العام (GL) لشهر الإغلاق، أي أحدث شهر يحتفظ دفتر الأستاذ بمطابقات له. ويذكر رأس الملف ذلك الشهر والعملة.
«Status summary» (ملخص الحالة). صف لكل حساب من حسابات الميزانية العمومية يطابقه ملف المطابقات لدى الشركة، بالأعمدة: «Account» (الحساب)، و«Schedule» (الجدول)، و«Per GL» (حسب دفتر الأستاذ العام)، و«Per schedule» (حسب الجدول)، و«Difference» (الفرق)، و«Status» (الحالة). ويذكر عمود «Schedule» نوعَ الجدول الذي قُرئت ورقة العمل على أساسه، مثل rollforward (الرصيد الافتتاحي والحركة والرصيد الختامي)، أو prepaid_amort (إطفاء المصروفات المدفوعة مقدمًا)، أو fixed_assets (سجل استهلاك)، أو accrual_reverse_new (استحقاقات تُعكس ثم يُعاد تسجيلها).
| الحالة | المعنى |
|---|---|
| «reconciled» (مُطابَق) | يتّفق الجدول ودفتر الأستاذ العام في حدود سنت واحد. |
| «exception» (استثناء) | يختلفان بأكثر من سنت واحد. ولا تخفّف الأهمية النسبية من ذلك: فرقٌ قدره $200 يُعدّ استثناءً. |
| «open» (مفتوح) | تعذّر احتساب أي فرق. |
«Coverage alerts» (تنبيهات التغطية). يُدرج كل رصيد ذي أهمية نسبية لا تغطيه أي مطابقة على الإطلاق، باسمه ورصيده، مقيسًا بحدّ الأهمية النسبية للشركة المحدّد في ملف مواصفاتها. وتُستبعد الحسابات التي منحتها إعفاءً.
قسم لكل حساب. صفوف كل جدول، مُعاد احتسابها لا منسوخة. تحمل صفوف جداول الحركة والاستحقاقات عمود «Recomputed» (مُعاد الاحتساب)، ويُعلَّم حيث لا يصل صفٌّ إلى رصيده الختامي المذكور. وتعرض جداول المصروفات المدفوعة مقدمًا ما أُثبت حتى الإغلاق وما تبقّى؛ وتعرض سجلات الأصول الثابتة الاستهلاك الشهري ومجمّع الاستهلاك وصافي القيمة الدفترية.
إعادة الاحتساب هي الغاية. يجمع ملف المطابقات صفوف الجدول نفسه بمعزل عن أي فرق مكتوب في ورقة العمل، فلا يمكن لفرق قديم أو مكتوب يدويًا أن يدّعي اتفاقًا في الأرقام لا يدعمه الجدول. وحيث لا تذكر ورقة العمل رقمًا من دفتر الأستاذ العام، يُختبر الاتفاق مقابل الرصيد المستورد من القوائم.
وتظهر الاستثناءات وغياب الجداول أيضًا ضمن الملاحظات، بوصفها recon_exceptions وrecon_coverage. راجع حالات المطابقة.
تقرير المستثمرين
تقرير المستثمرين هو صفحة شركة واحدة من لوحة المعلومات، مُعدّة لمن يموّلون الشركة لا لمن يمسكون دفاترها. يُعيد كل إغلاق كتابته، فيكون حديثًا بقدر أحدث ملف مُصدَّر. وهو التقرير الذي ترسله عندما يطلب منك مؤسسٌ تحديثًا للمستثمرين.
ما يتضمّنه
- النقد وحرق النقد (Burn) ومدة كفاية النقد. يستند مربّع مدة كفاية النقد إلى التغيّر الفعلي في النقد خلال الأشهر الأخيرة، شاملًا التمويل، ويُشار إلى ذلك في عنوانه.
- القوائم كما تعرضها حزمة القوائم المالية، دون صف «CHECK» الذي يقيس الفجوة في اتفاق الأرقام.
- مقارنة الفترة بسابقتها.
- التحصيلات مقابل الإيرادات.
- هامش الربح الإجمالي.
- المصروفات التشغيلية حسب فئة الإنفاق، وحسب القسم حيث تقسّم الشركة مصروفاتها على الأقسام.
- عدد الموظفين والأرقام المحسوبة لكل موظف، حيث تقدّم الشركة عدد موظفيها.
- الإيرادات المتكررة (MRR وARR ومعدل فقدان العملاء) وتكلفة اكتساب العميل وفترة الاسترداد، حيث تتوفر لدى الشركة.
- بطاقة الملاءة المالية بمؤشراتها. فمن دونها يكون التقرير دقيقًا ومضلّلًا في آنٍ واحد.
- إيضاحات حول ما تستطيع الدفاتر دعمه وما لا تستطيع، مثل رقم يحتاج إلى شهرين بينما لا يتوفر إلا شهر واحد.
ما يغيب عنه
- ملاحظات السلامة.
- جدول الربط.
- حالة المطابقة.
- قائمة مراقبة الانحرافات.
- حالة الإغلاق وسجل القفل.
- المربّعات التي تُظهر حالة الضوابط: اتفاق أرقام القوائم، واستثناءات المطابقة، وبند الموازنة الأكبر انحرافًا.
- الموازنة مقابل الفعلي، ما لم يسمح ملف مواصفات الشركة بإدراجها.
- التفاصيل على مستوى العملاء: جدول الإيرادات حسب العميل، وصفوف الفواتير والجداول التي يستند إليها الرقم. أمّا الرقم نفسه فيبقى.
- الإيضاحات الموجّهة إلى من يتولّى تحديث ملف المواصفات.
الغياب يعني الاستبعاد لا الإخفاء: فهذه الأقسام لا تُكتب في التقرير أصلًا، ولذلك لا تظهر في ملف PDF الخاص به أيضًا. ولا تظهر فيه أزرار لوحة المعلومات التي تضع سؤالًا في الدردشة دون إرساله.
ويذكر رأسه ماهيّته: مُعدّ لمستثمري الشركة، حتى أحدث شهر يحتفظ دفتر الأستاذ برصيد له، مع ختم تاريخ الملف المُصدَّر الذي تستند إليه الأرقام إن وُجد، وبعملة التقرير. وهو يغطي شركة واحدة بالضبط.
أمّا اطّلاع المستثمرين على خطة المؤسس مقارنةً بالدفاتر فقرار يعود إلى المؤسس، لذلك تبقى الموازنة مقابل الفعلي خارج التقرير ما لم يتضمّنها ملف مواصفات الشركة بالإعداد أدناه. ويجب أن تكون القيمة true أو false. وأي قيمة أخرى، بما فيها "no" مكتوبةً بين علامتي تنصيص، تُرفض بدل أن يُخمَّن المقصود منها.
investor:
budget: trueحالات الإغلاق
يحمل كل شهر مُقفَل سجلًّا بما كان معروفًا عند قفله. وتعرضه لوحة المعلومات شريحةً أعلى صفحة كل شركة، بجانب عدد الأشهر المُقفَلة.
| حالة الإغلاق | الشريحة | المعنى |
|---|---|---|
| «fully reconciled» (مُطابَق بالكامل) | خضراء | أُغلق كل شهر مُقفَل دون أن يبقى شيء غير محلول. |
| «reported with exception» (صدر مع استثناء) | حمراء | أُغلق شهر مُقفَل واحد على الأقل بينما كانت ملاحظات عالية أو متوسطة الخطورة لا تزال مفتوحة. |
| «open» (مفتوح) | كهرمانية | لم يُقفَل أي شهر بعد. |
| «not recorded» (غير مُسجَّل) | رمادية | لم يسجّل إغلاقُ شهرٍ مُقفَل ملاحظاتِه، إذ لم تكن عمليات الإغلاق التي أجرتها الإصدارات السابقة تسجّلها. |
الحالة الأضعف هي الغالبة. شريحة واحدة تتحدث باسم كل الأشهر المُقفَلة، لذا فهي تقدّم الادعاء الوحيد الذي يبقى صحيحًا بالنسبة إليها جميعًا: الاستثناء في أي شهر يتقدّم على شهر لم يسجّل شيئًا، وهذا بدوره يتقدّم على الأشهر المُطابَقة. ويُحصي الإيضاح المجاور للشريحة الأشهر المُقفَلة، وأي أشهر لا تزال مفتوحة. ولا يذكر عدد الأشهر التي تحمل الاستثناء منها. ولمعرفة هذه الأشهر، شغّل ingest.py periods، الذي يطبع الحالة على سطر كل شهر (راجع تتبّع مصدر الرقم).
لا تُحتسب ملاحظاتٍ غير محلولة إلا الملاحظات العالية والمتوسطة الخطورة. أمّا الملاحظات منخفضة الخطورة ومؤشرات الملاءة المالية والاستفسارات فلا تُحتسب: فنقص النقد لدى الشركة لا يجعل دفاترها غير مُطابَقة. راجع درجات الخطورة.


تظهر الحالة نفسها، بالكلمات نفسها، في رأس لوحة المعلومات، وعلى سطر كل شهر في قائمة الفترات (ingest.py periods، راجع تتبّع مصدر الرقم)، وفي إيضاح «Issued with unresolved findings» في حزمة القوائم المالية، وفي الملخص الذي يطبعه الإغلاق عند انتهائه. بالنسبة إلى Cobalt Systems في العرض التجريبي باستخدام بيانات اصطناعية، يكون الملخص كالتالي:
locked 2023-02-28 … 2026-06-30 (41 periods) — reported with exception: 3 unresolved finding(s) (presentation_tieout, recon_exceptions, unmapped_active_account); re-opening one needs a reason (`ingest.py reopen`)القفل
يُقفَل كل شهر يُصدر الإغلاق أرقامًا له عند انتهاء الإغلاق، سواء اتّفقت أرقامه أم لا؛ فالملاحظات لا تؤثر في القفل. أمّا الأشهر التي لا توجد إلا لأن مستندًا ذكرها، مثل أشهر موازنة مستقبلية، فلا تُقفَل.
ما يرفضه القفل
بمجرد قفل الشهر، فإن أي شيء من شأنه تغيير ما يعرضه يوقف إغلاق تلك الشركة: لا يُكتب شيء في دفتر الأستاذ الخاص بها، ولا يُحدَّث أي تقرير لها، ولا يُقفَل أي شيء. وتواصل الشركات الأخرى التي يجري إغلاقها في التشغيل نفسه إغلاقَها. ويشمل ذلك المصنّف المصحَّح الذي يغيّر رقمًا أو يحذفه أو يضيفه، ويشمل كذلك أي تغيير في ملف المواصفات يمسّ مكان عرض حساب ما أو طريقة احتساب بند في القائمة، إذ يحرّك ذلك بندًا في القائمة دون المساس بأي رقم مخزّن. ويذكر الرفض كل شهر مُقفَل سيمسّه، ويبيّن الأرقام التي ستتغيّر: أول اثني عشر رقمًا كاملةً، ثم عدد ما تبقّى منها. من العرض التجريبي باستخدام بيانات اصطناعية، بعد اعتماد ربط الحساب 1450 لدى Cobalt:
2023-02-28 presentation BS line 'CHECK': -6,600.00 -> 0.00
2023-02-28 presentation BS line 'Other assets': 19,500.00 -> 26,100.00
2023-02-28 presentation BS line 'TOTAL ASSETS': 5,394,868.29 -> 5,401,468.29أمّا ما لا يؤدي إلى الرفض فهو: إعادة إغلاق شهر من الأرقام نفسها؛ وإعادة تسمية الشركة لحساب يحتفظ برقمه؛ وصف صفري توقف الملف المُصدَّر عن تضمينه، لأن الرقم الغائب و0.00 هما الرقم نفسه في التقارير؛ وقائمة تدفقات نقدية منذ بداية السنة حتى تاريخه لفترة جديدة؛ والتفاصيل التي لا تقع على أي بند في القوائم، مثل تقارير تفاصيل المعاملات والملفات المُصدَّرة من أنظمة الفوترة أو إدارة علاقات العملاء.
إعادة فتح الشهر
يظل تصحيح الشهر المُقفَل ممكنًا، لكن ليس بصمت. تتطلّب إعادة الفتح ذكر السبب: جملة واحدة، بكلمات من قرّر تغيير شهر صدرت تقاريره. ويُحفظ السبب مع الفترة بشكل دائم، ويُطبع في حزمة القوائم المالية عندما تتغيّر الأرقام. ويُرفض السبب الفارغ، أو العبارة المؤقتة مثل tbd، أو أي نص محاط بقوسين زاويين < >.
عندما يواجه Haruno الرفض أثناء محادثة، ينقله إليك ويتوقف. ولا يعيد فتح أي شهر من تلقاء نفسه أبدًا، ولا يكتب السبب نيابةً عنك أبدًا. أخبره بالسبب بكلماتك، فيعيد فتح الأشهر التي ذكرها الرفض بالضبط، ويحفظ جملتك مع كل منها، ويطبّق التغيير، ثم يُغلقها من جديد. ومن Terminal، يُنفَّذ ذلك بأمر واحد:
python3 .haruno/skills/QuickBooksCFO/scripts/close.py --workspace . --client cobalt-systems --reopen-reason "1450 was unmapped; approved as Other assets"لإعادة فتح أشهر منفردة يدويًا، استخدم ingest.py reopen. هنا تكون قيمة --client اسمَ الشركة كما يسجّله ملف مواصفاتها وكما تُظهره تقاريرها (مثل «Cobalt Systems, Inc.»)، لا اسم المجلد، وتكون قيمة --period نهاية شهر، ويمكن تكرارها. استبدل العناصر النائبة بكلماتك الخاصة.
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py reopen --ledger ledger/ledger.sqlite --client "<client name>" --period YYYY-MM-DD --reason "<their words>"لمعرفة وضع شركة ما، شغّل ingest.py periods (الأمر الكامل مذكور في قسم تتبّع مصدر الرقم). يسرد هذا الأمر كل شهر على أنه مُغلق أو مفتوح مع حالة إغلاقه، ولكل شهر أُعيد فتحه، يسرد كل انتقال مع من نفّذه والسبب.
إعادة العرض
لا يحتوي Haruno على خلية تعدّلها ولا على قيد تعديل ترحّله. يُسجَّل التصحيح في النظام المحاسبي الخاص بالشركة، فيظهر في الملف المُصدَّر التالي، وإعادة استيراد ذلك المصنّف المصحَّح هي إعادة العرض: أعِد فتح الأشهر التي يمسّها مع ذكر السبب، ويعيد الإغلاق إغلاقها.
إذا تغيّرت الأرقام فعلًا، فإن كل حزمة قوائم مالية بعد ذلك تتضمّن جدول «Restated periods»: الشهر، ومتى أُعيد فتحه، ومن أعاد فتحه، والسبب، والأرقام التي تغيّرت. أمّا الشهر الذي أُعيد فتحه ثم تُرك دون تغيير فيعرض ما سبق إرساله، لذا يظهر في ingest.py periods لا في الحزمة. ويُحفظ كل إغلاق وكل إعادة فتح، بالترتيب، مع الأرقام التي عرضها كل شهر في تلك اللحظة؛ ولا تُعاد كتابة هذا السجل أبدًا.
لمعرفة ما يحدث في سير العمل عندما يُرفض الإغلاق، راجع عندما يرفض الإغلاق المتابعة.
سجل التعديلات
reports/<client>/adjustments.csv هو جدول التعديلات الذي يحتفظ به مكتب المحاسبة عادةً يدويًا، لكنه هنا مشتقّ من دفتر الأستاذ. يعيد كل إغلاق كتابته بعد القفل ليشمل السجل التاريخي الكامل للشركة، بصف لكل رقم في كل إعادة عرض.
| العمود | ما يحتويه |
|---|---|
| period | نهاية الشهر، أو الفترة الزمنية بالنسبة إلى بند من التدفقات النقدية. |
| kind | «balance» (رصيد) أو «activity» (حركة) لرقم من دفتر الأستاذ؛ «presentation» (عرض) لبند في القائمة تغيّر دون رقم يستند إليه، كما بعد تغيير في الربط؛ «cash flow» (تدفق نقدي) لبند من قائمة تدفقات نقدية مستوردة؛ «not itemized» (غير مفصّل) لإعادة فتح سجّلها إصدار سابق لم يكن يحتفظ بالأرقام. |
| subject | الحساب أو بند القائمة. |
| was, now, delta | الرقم الذي صدر سابقًا، والرقم الحالي، والتغيّر. |
| reopened_at, reason, actor | متى أُعيد فتح الشهر، والسبب، والمستخدم الذي نفّذ ذلك. وقيمة actor سجلٌّ، لا توقيعُ اعتماد. |
| closed_at | متى أُغلق الشهر مرة أخرى. |
تُكتب رؤوس الأعمدة دائمًا، فيدلّ السجل الفارغ على أنه لم يُعَد عرض أي شيء. أمّا صف «not itemized» فيدلّ على أن الشهر تغيّر ولا سبيل إلى تحديد الرقم الذي تغيّر؛ وهذه هي الإجابة كاملة، وليست فجوة تُملأ بالتخمين.
في العرض التجريبي باستخدام بيانات اصطناعية، يُفصَّل اعتماد ربط الحساب 1450 لدى Cobalt في صفوف «presentation» للبنود «CHECK» و«Other assets» و«TOTAL ASSETS» في كل شهر من الأشهر الـ41، أي 123 صفًا إجمالًا، لأن الربط يغيّر ما يراه القارئ ولا يغيّر أي رقم مخزّن. أمّا رصيد مصرفي مصحَّح فيُفصَّل في صف «balance» واحد يذكر الحساب. ويتضمّن جدول «Restated periods» في حزمة القوائم المالية الصفوف نفسها، بوحدات العملة الكاملة لا بالآلاف.
مصنّفات المصدر المحفوظة
يُنسخ كل ملف مصدر إلى ledger/evidence/ عند استيراد أرقامه، بحيث يمكن لاحقًا تقديم الملف الذي يستند إليه أي رقم صدر في التقارير، حتى بعد أن تحفظ الشركة فوق نسختها الخاصة مرات عديدة.
- تُحفظ لكل شركة على حدة، للقراءة فقط، وتُسمّى وفق محتوى الملف، فلا يُنسخ شيء عند إعادة إغلاق شهر لم يتغيّر. ويحتفظ المخزن بالنسخ المختلفة التي أرسلتها الشركة.
- تبقى النسخة المستبدَلة بعد التصحيح: فهي الدليل على ما صدر في التقارير سابقًا.
- لا يُحتفظ بالملف الذي تغيّر بين قراءته وحفظه، ويذكر الإغلاق ذلك في اليوم نفسه، وهو اليوم الوحيد الذي قد يظل فيه استرداده ممكنًا. ولا يوقف حفظ النسخة أي إغلاق أبدًا.
للعثور على الملف الذي جاء منه رقم ما:
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py evidence --ledger ledger/ledger.sqlite --client "<client name>"يذكر هذا الأمر كل ملف مصدر، وما قُرئ منه، والتواريخ التي يحمل أرقامًا لها، وما إذا كانت النسخة المحفوظة لا تزال هي ذلك الملف: «ok» (لم تتغيّر) أو «missing» (مفقودة) أو «altered» (معدّلة) أو «unreadable» (تتعذّر قراءتها)، ويُعاد التحقق من ذلك في كل مرة تسأل فيها.
ويعيد كل إغلاق أيضًا التحقق من النسخ، ويُثير ملاحظة evidence_integrity (متوسطة الخطورة) لأي نسخة فُقدت، أو كُتب فيها، أو تعذّرت قراءتها. ولا تتأثر القوائم؛ فما يُفقد هو القدرة على تقديم الملف الذي تستند إليه. وتُعاد النسخة المفقودة عند استيراد الملف نفسه مرة أخرى. أمّا إعادة الاستيراد فلا تكتب أبدًا فوق نسخة معدّلة، لذا تبقى الملاحظة قائمة حتى يستبدل شخصٌ النسخة يدويًا من نسخة أصلية معروف أنها سليمة.
تتبّع مصدر الرقم
يمكن تتبّع كل رقم في لوحة المعلومات إلى تقرير كتبه الإغلاق، أو ملف مصدر، أو دفتر الأستاذ نفسه.
التقارير وسجل التعديلات وملف المواصفات مذكورة في قسم ما يكتبه الإغلاق؛ أمّا ملفات الشركة كما وردت فموجودة في workbooks/<client>/. وللنزول إلى ما دون التقارير، اقرأ دفتر الأستاذ نفسه.
لقراءة دفتر الأستاذ نفسه، استخدم query.py من مجلد مساحة العمل. يفتح هذا الأمر دفتر الأستاذ للقراءة فقط، ولا يتضمّن أي خيار للكتابة؛ فالأرقام لا تتغيّر إلا عبر الإغلاق، انطلاقًا من ملف المواصفات والمصنّفات. تحتاج هذه الأوامر إلى Python 3 قياسي ولا شيء غير ذلك. يعيد الأمر الأول رصيد النقد لدى شركة في نهاية شهر، مجموعًا بالطريقة التي تجمعه بها لوحة المعلومات: في العرض التجريبي باستخدام بيانات اصطناعية، مبلغ $1,442,000 لشركة Meridian Robotics، وهو الرقم الظاهر في مربّع «Cash» (النقد) الخاص بها. في الاستعلام، تعني '10%' كل حساب يبدأ رقمه بـ 10، وهي البادئة الافتراضية لحسابات النقد. وإذا كانت حسابات النقد لدى الشركة مرقّمة بطريقة مختلفة، فاستخدم بادئاتها الخاصة بدلًا من ذلك.
# النقد في نهاية شهر، مجموعًا بالطريقة التي تجمعه بها لوحة المعلومات
python3 .haruno/skills/QuickBooksCFO/scripts/query.py ledger/ledger.sqlite "SELECT p.end_date, SUM(b.balance) AS cash FROM account_balance b JOIN gl_account a ON a.account_id = b.account_id JOIN period p ON p.period_id = b.period_id JOIN client c ON c.client_id = a.client_id WHERE c.name = 'Meridian Robotics, Inc.' AND a.acct_num LIKE '10%' AND p.end_date = '2026-06-30' GROUP BY 1"
# كل بنود مقارنة الفترة بسابقتها، لا الأكبر منها فقط
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py compare --ledger ledger/ledger.sqlite --client "Meridian Robotics, Inc." --grain quarter
# الأشهر المُقفَلة
python3 .haruno/skills/QuickBooksCFO/scripts/ingest.py periods --ledger ledger/ledger.sqlite --client "Meridian Robotics, Inc."
# جداول دفتر الأستاذ وأعمدتها
python3 .haruno/skills/QuickBooksCFO/scripts/query.py ledger/ledger.sqlite --schemaالأوامر التي تشغّلها بنفسك تقرأ مساحة العمل ولا ترسل شيئًا. وعندما تطلب من Haruno أن يتتبّع رقمًا نيابةً عنك، فإن ما تكتبه وما تطبعه الأدوات في المقابل يُرسَل عبر خدمة Inferara المستضافة إلى مزوّد النموذج الذي يجيب. راجع أين تذهب بياناتك وتشغيل الأوامر بنفسك.