محفظة واحدة، سجل واحد، وتسلسل لا يمكن أن يضيع فيه أي حركة.
لكل تاجر محفظة ممولة واحدة. تُصدر البطاقات منها، ويُصرف منها، وتعود السحوبات منها. لا يتحرك أي شيء دون تسجيل قيود متوازنة في سجل لا يقبل إلا الإضافة.
المحافظ
محفظة واحدة لكل تاجر، بوحدات صغرى صحيحة.
تحفظ محفظة التاجر الرصيد بوحدات صغرى صحيحة — سنتات وليس كسورًا عشرية. لا توجد أي قيمة عشرية في مسار الأموال، فلا يمكن أن تتراكم أخطاء تقريب عبر مليون حركة. تُستنتج الأرصدة من السجل بدل الوثوق بمجموع جارٍ، ومراقب كل ساعة يعيد حسابها وينبّه عند أي انحراف.
- الوحدة
- وحدات صغرى صحيحة (BIGINT)
- مصدر الرصيد
- مستنتج من قيود السجل
- مراقب الانحراف
- كل ساعة، وينبّه عند عدم التطابق
الإيداعات
التمويل يصل بالعملات المشفّرة ويُضاف عند التأكيد.
يطلب التاجر عنوان إيداع دائمًا لكل شبكة. الأموال المرسلة إليه تُضاف إلى المحفظة بعد التأكيد، كحركة متوازنة مثل أي حركة أخرى. تسوية الإيداع تتم على مرحلتين — المزوّد يبلّغ، ثم تجلب المنصة السجل الموثوق — فلا يمكن لإشعار بدون مبلغ أن يضيف رقمًا خاطئًا. ومسح مطابقة كل ساعة يعيد فحص أي شيء فات الـ webhook، دون تكرار.
- العناوين
- دائمة، لكل شبكة
- التسوية
- على مرحلتين: إشعار، ثم جلب السجل
- الاحتياط
- مطابقة كل ساعة، دون تكرار
الإصدار
تُصدر البطاقات عبر الحجز، ثم المزوّد، ثم التسوية.
الإصدار يحجز في المحفظة مبلغ الشحن الأولي ورسوم إصدار المنتج، ثم يتصل بشريك الإصدار المرخّص خارج معاملة قاعدة البيانات، ويسوّي الحركة في السجل عند النجاح. الاتصال بالمزوّد لا يتم أبدًا داخل معاملة أو قفل، فلا يمكن لمُصدر بطيء أو متعطّل أن يُبقي محفظة التاجر مفتوحة. وحين يُصدر الشريك بشكل غير متزامن، يعيد الطلب بطاقة قيد الانتظار وتتم التسوية نفسها لاحقًا من webhook الشريك أو من المطابقة — بأي من المسارين، ومرة واحدة فقط.
- التسلسل
- حجز ← مزوّد ← تسوية
- الاتصال بالمزوّد
- أبدًا داخل معاملة أو قفل
- النتيجة غير المتزامنة
- 202 قيد الانتظار، تُسوّى بالـ webhook أو بالمسح الدوري
حاملو البطاقات
الهوية تُحفظ مرة واحدة، مشفّرة، وتُعاد استخدامها.
هوية حامل البطاقة محفوظة في سجل العملاء بدل إعادة إرسالها مع كل طلب. السجلات مشفّرة أثناء التخزين ولا تُرسل لشريك الإصدار إلا ضمن طلب إصدار. أرقام البطاقات ورموز الأمان لا تُكشف عبر API ولا تُحفظ أبدًا — البطاقة تحمل رقمًا مخفيًا وآخر أربعة أرقام فقط، لا أكثر.
- التخزين
- مشفّر أثناء التخزين
- رقم البطاقة / CVV
- لا يُكشف ولا يُحفظ أبدًا
- بيانات البطاقة
- رقم مخفي + آخر أربعة أرقام فقط
التفويضات
الإنفاق يتحول إلى قيود مجموعها صفر.
التفويض لا يعدّل الرصيد مباشرة، بل يسجّل حركة قيدها المدين والدائن متساويان ومتعاكسان، فيكون صافي الحركة صفرًا ويكون الرصيد هو ما يقوله السجل عند قراءته. التصحيحات تُسجّل كقيود جديدة، وليس كتعديلات. لا شيء في السجل يُعدّل أو يُحذف أبدًا.
- السجل
- إضافة فقط
- كل حركة
- قيدان متوازنان على الأقل
- التصحيحات
- تُسجّل كقيود جديدة
السحوبات
الأموال تخرج عبر دورة موافقة، وليس عبر طلب API.
لا يوجد API عام للسحوبات. يطلب التاجر السحب من البوابة، ويوافق عليه مشغّل المنصة، ويُسجّل الإتمام مع إثبات الدفع. كل تغيير في الحالة يُكتب في سجل تدقيق لا يقبل إلا الإضافة مع اسم من قام به. هذا مقصود: النقطة التي تُخرج الأموال من المنصة هي النقطة الوحيدة التي يجب ألا يصل إليها مفتاح API مسرّب.
- API عام
- لا يوجد — البوابة ولوحة الإدارة فقط
- المسار
- طلب ← موافقة ← إتمام
- التدقيق
- كل انتقال، مع اسم المنفّذ
التقارير
الأرقام تُقرأ من السجل، وليس من عدّاد.
المجاميع الليلية تُبنى من قيود السجل بدل عمود إيرادات منفصل، فلا يمكن أن يختلف التقرير عن الأموال الفعلية. ونشاط وضع الاختبار مستبعد بنيويًا عبر الربط بين الجداول، وليس عبر فلتر يجب أن يتذكره أحد.
- المصدر
- قيود السجل
- الجدولة
- ليليًا
- نشاط الاختبار
- مستبعد بنيويًا
أين نحن اليوم.
تعمل المنصة افتراضيًا مع مزوّد بطاقات محاكى. أول تكامل إصدار حقيقي مبني ومعتمد في البيئة التجريبية، وينتقل للإنتاج بعد تأكيد بيانات الاعتماد وسر الـ webhook مع الشريك. توقيع إيداعات العملات المشفّرة منفّذ وينتظر الاعتماد الفعلي.
حتى يكتمل ذلك، تصف هذه الصفحة سلوكًا منفّذًا ومختبرًا، وليس خدمة إصدار فعلية. نفضّل أن نقول ذلك هنا على أن تكتشفه أثناء التكامل.