في غرة أكتوبر 2026 يصبح لكل بنك تونسي خاضع لأحكام الأمر عدد 148 لسنة 2026 بابٌ واحد لا غير لقبول مطالب القروض والتمويلات الصغرى على الشرف: منصته الإلكترونية. هذا ما قرّره منشور البنك المركزي التونسي إلى البنوك عدد 8 لسنة 2026 المؤرخ في غرة سبتمبر 2026، وهو نصّ قصير من سبعة فصول وثلاثة ملاحق، لكنه في الواقع كرّاس شروط تقني كامل.
الجملة التي تختصر المنشور كله موجودة في آخر الفصل 3: «ولا يُعتدّ بأي مطلب يتم تقديمه بأي وسيلة أخرى غير المنصة الإلكترونية المخصّصة للغرض». مطلب على ورق في شبّاك الفرع لم يعد مطلبًا ناقصًا، بل لا وجود له قانونًا. وهذا يعني أن المنصة ليست واجهة تسجيل، بل هي السجلّ الرسمي الذي يُحتسب منه أجل البتّ وتُرتّب به الأسبقيات.
هذا الدليل موجّه إلى الفريق التقني الذي عليه أن يسلّم هذه المنصة قبل غرة أكتوبر. الجانب المتعلق بالحريف — من له الحق، وأي سقف ينطبق، وما الوثائق — مشروح في شروط قرض على الشرف والوثائق المطلوبة، ونصّ المنشور وما غيّره في المنشور عدد 8 لسنة 2026.
ما الذي ستبنيه
خدمة TypeScript واحدة تغطّي الالتزامات الأربعة التي يولّدها المنشور:
- بوابة إيداع تختم كل مطلب بختم توقيت إلكتروني، وتُصدر وصلًا آليًا يترك أثرًا كتابيًا.
- محرّك ترتيب بالأسبقية يعتمد تاريخ وتوقيت الختم لا تاريخ إدخال الموظّف، ويحتسب أجل العشرة أيام انطلاقًا منه.
- جسر مع مركزية معلومات البنك المركزي: اطّلاع إلزامي قبل الصرف، وتصريح حيني عند الصرف برموز الملحق عدد 1.
- مولّد الكشوفات الشهرية في نموذجي الملحقين 2 و3، يُرسَل عبر نظام تبادل المعطيات في أجل خمسة عشر يومًا من انتهاء الشهر.
المتطلبات المسبقة
- Node.js 20 فما فوق و TypeScript 5.
- قاعدة بيانات معاملاتية (المقاطع أدناه مكتوبة لـ PostgreSQL).
- نفاذ إلى خدمة ختم التوقيت لدى البنك، ونفاذ إلى قنوات مركزية المعلومات ونظام تبادل المعطيات المعتمدة لدى مؤسستكم.
- إلمام بالأمر عدد 148 لسنة 2026: الفئات الثلاث وسقوفها، والتسديد في أجل أقصاه سنتان، والإمهال الذي لا يتجاوز ستة أشهر.
ملاحظة على النطاق. المنشور لا يسمّي معيارًا تقنيًا لختم التوقيت ولا صيغة ملفّ لنظام تبادل المعطيات. ما نقترحه هنا (RFC 3161 للختم، وتوليد الكشوفات من مصدر واحد) اختيار هندسي مطابق للنصّ، وليس نصًّا في المنشور. اعتمدوا دائمًا الصيغ التي يقرّها البنك المركزي لقناتكم.
من أين تأتي كل هذه الالتزامات
قبل كتابة سطر واحد، من المفيد ربط كل مكوّن بالفصل الذي يولّده. هذا الجدول هو خريطة المشروع كلها:
| الفصل | الالتزام | ما يترجَم إليه في الشيفرة |
|---|---|---|
| الفصل 3 | الإيداع حصريًا عبر المنصة، ختم توقيت إلكتروني، وصل آلي | بوابة إيداع وحيدة + جدول أختام + إشعار موثّق |
| الفصل 3 | الترتيب بالأسبقية واحتساب أجل البتّ من الختم | فهرسة على توقيت الختم + مؤقّت الأجل |
| الفصل 4 | الاطلاع على وضعية التعهدات قبل الصرف | فحص حاجب قبل أمر الصرف |
| الفصل 4 | التصريح الحيني عند الصرف برموز الملحق 1 | نمط صندوق الصادر مع إعادة المحاولة |
| الفصل 5 | كشفان شهريان عبر نظام تبادل المعطيات في 15 يومًا | مولّد الملحقين 2 و3 + مجدول |
| الفصل 7 | دخول حيز التنفيذ في غرة أكتوبر 2026 | تاريخ التسليم |
لاحظوا أن الفصل 2 يُبقي هذه القروض خاضعة للسياسات الداخلية للبنك ولقواعد الحوكمة والرقابة الداخلية وتصنيف التعهدات. أي أن المنصة لا تُنشئ مسارًا موازيًا للمنظومة البنكية، بل تُدخل صنفًا جديدًا داخلها.
الخطوة 1: نموذج المطلب — ختم التوقيت هو السجلّ
الخطأ التصميمي الأول والأكثر كلفة هو معاملة توقيت الختم كحقل تاريخ عادي. الفصل 3 يجعل هذا التوقيت هو ما «يُثبت تاريخ وتوقيت الإيداع» وما «يُمكّن من ترتيبها بحسب أسبقية تقديمها» وما يُحتسب منه الأجل. أي أنه دليل، لا بيانات وصفية.
الدليل يعني شيئين: يُخزَّن الرمز الثنائي للختم كما ورد من الخدمة، ولا يُشتقّ أبدًا من ساعة الخادم.
// src/domain/application.ts
export type ApplicantClass = 'individual' | 'small_project' | 'sme_or_community_company';
export interface TimestampToken {
/** رمز الختم كما ورد من خدمة ختم التوقيت، محفوظًا كما هو */
readonly token: Buffer;
/** التوقيت المستخرج من الرمز — لا من ساعة الخادم */
readonly genTime: Date;
readonly authority: string;
readonly serial: string;
}
export interface LoanApplication {
readonly id: string;
readonly applicantId: string;
readonly applicantClass: ApplicantClass;
/** المبلغ بالمليم، لتفادي حساب الفاصلة العائمة */
readonly amountMillimes: number;
readonly governorateCode: string;
readonly stamp: TimestampToken;
readonly receiptRef: string;
status: 'submitted' | 'under_review' | 'approved' | 'rejected' | 'disbursed';
}السقوف تُفرض على مستوى النموذج لا على مستوى الواجهة، لأن الواجهة قابلة للتجاوز:
const CEILING_MILLIMES: Record<ApplicantClass, number> = {
individual: 5_000_000, // خمسة آلاف دينار
small_project: 10_000_000, // عشرة آلاف دينار
sme_or_community_company: 25_000_000 // خمسة وعشرون ألف دينار
};
export function assertWithinCeiling(app: LoanApplication): void {
const ceiling = CEILING_MILLIMES[app.applicantClass];
if (app.amountMillimes > ceiling) {
throw new DomainError('CEILING_EXCEEDED', {
requested: app.amountMillimes,
ceiling,
applicantClass: app.applicantClass
});
}
}الخطوة 2: باب واحد للإيداع، والوصل جزء من المعاملة
الفصل 3 يفرض أن تُصدر المنصة الوصل «إثر إيداع مطلب القرض أو التمويل وبصفة آلية». كلمة «آلية» تعني أن الوصل ليس مهمّة مؤجّلة في طابور، ولا رسالة يرسلها موظّف لاحقًا.
عمليًا: إن نجح الإيداع ولم يصل الوصل، فالبنك في وضع لا يستطيع فيه إثبات أنه أعلم الحريف. وإن أُرسل الوصل ثم فشلت المعاملة، فقد أعطيتم الحريف دليلًا على مطلب غير موجود. الحلّ هو تثبيت الوصل داخل المعاملة نفسها وإرساله بعد الالتزام مباشرة، مع أثر كتابي محفوظ.
// src/api/submit.ts
export async function submitApplication(input: SubmitInput): Promise<Receipt> {
assertWithinCeiling(toApplication(input));
// 1) الختم أولًا: التوقيت هو ما سيُرتّب المطلب ويحتسب منه الأجل
const stamp = await timestampService.stamp(canonicalDigest(input));
return db.transaction(async (tx) => {
const application = await tx.applications.insert({ ...input, stamp });
const receipt = await tx.receipts.insert({
applicationId: application.id,
reference: buildReceiptReference(application, stamp),
depositedAt: stamp.genTime,
channel: input.contactChannel,
body: renderReceiptText(application, stamp)
});
// إشعار مؤجّل داخل نفس المعاملة: لا يُرسل إلا إذا التزمت
await tx.outbox.insert({ topic: 'receipt.deliver', payload: { receiptId: receipt.id } });
return receipt;
});
}نصّ الوصل يجب أن يحمل تاريخ وتوقيت الإيداع المثبتين بالختم. أضيفوا إليه مرجعًا يستطيع الحريف الاستشهاد به، ولا تكتفوا برقم داخلي لا يظهر له.
أما «الباب الواحد» فيُفرض على مستوى البنية لا على مستوى النيّة: أي مسار إدخال آخر — استيراد من ملف، إدخال من الفرع، واجهة برمجية داخلية — يجب أن يمرّ بنفس الدالة أو أن يُغلق. المطلب الذي يدخل من باب آخر هو مطلب «لا يُعتدّ به»، ووجوده في قاعدة بياناتكم يخلق التزامًا لا يقابله سند.
الخطوة 3: الترتيب بالأسبقية وأجل العشرة أيام
الأسبقية تُحتسب من genTime وحده. وحين يتساوى توقيتان — وهو وارد في ثوانٍ الذروة الأولى لفتح المنصة — يجب أن يكون الفاصل حتميًّا وقابلًا للتفسير أمام مراجع، لا عشوائيًا.
export function byPriority(a: LoanApplication, b: LoanApplication): number {
const t = a.stamp.genTime.getTime() - b.stamp.genTime.getTime();
if (t !== 0) return t;
// فاصل حتمي عند التساوي: الرقم التسلسلي للختم من نفس السلطة
return a.stamp.serial.localeCompare(b.stamp.serial);
}أجل البتّ — عشرة أيام عمل مصرفية بحسب الفصل 6 من الأمر عدد 148 — ينطلق من الختم. وهو أجل بأيام عمل، لا بأيام تقويمية، ما يعني أن حسابه يحتاج تقويم أيام العطل البنكية:
export function decisionDeadline(stampedAt: Date, calendar: BankingCalendar): Date {
let cursor = new Date(stampedAt);
let remaining = 10;
while (remaining > 0) {
cursor = addDays(cursor, 1);
if (calendar.isBankingDay(cursor)) remaining -= 1;
}
return cursor;
}لا تُصلّبوا تقويم العطل في الشيفرة. الأعياد الدينية في تونس تتحرّك سنويًا، وقد تُضاف أيام معطّلة بقرار. اجعلوا
BankingCalendarجدولًا يُحيَّن، وسجّلوا مع كل مطلب نسخة التقويم التي احتُسب بها أجله، حتى يبقى الحساب قابلًا لإعادة الإنتاج بعد سنة.
الخطوة 4: الاطلاع على مركزية المعلومات قبل الصرف
الفصل 4 لا يجعل هذا الفحص خطوة استحسانية: على البنك، قبل صرف التمويل، الاطلاع على وضعية تعهدات طالب التمويل لدى مركزية معلومات البنك المركزي للتحقق من عدم حصوله على قرض أو تمويل من نفس الصنف لم يتم خلاصه بالكامل.
ثلاث دقائق في الصياغة تُترجم مباشرة إلى شيفرة:
- الفحص مرتبط بلحظة الصرف، لا بلحظة الموافقة. الموافقة قد تسبق الصرف بأيام، وقد يقترض الحريف من بنك آخر بينهما.
- الشرط هو «نفس الصنف»، أي أن الفحص يقارن برموز الملحق عدد 1، لا بمجموع مديونية الحريف.
- «لم يتم خلاصه بالكامل» تعني أن رصيدًا متبقّيًا مهما صغر يحجب التمويل الجديد.
const HONOUR_LOAN_CODES = ['260', '261', '185', '3400'] as const;
export async function assertNoOutstandingSameCategory(
applicantId: string,
category: (typeof HONOUR_LOAN_CODES)[number]
): Promise<void> {
const exposures = await centraleClient.getExposures(applicantId);
const blocking = exposures.filter(
(e) => e.kfcred === category && e.outstandingMillimes > 0
);
if (blocking.length > 0) {
throw new DomainError('OUTSTANDING_SAME_CATEGORY', { category, blocking });
}
}اجعلوا هذا الفحص حاجبًا داخل مسار الصرف نفسه، لا شاشة يراها الموظف. واحفظوا الردّ كاملًا مع طابعه الزمني: عند المراجعة، السؤال لن يكون «هل فحصتم؟» بل «ماذا كان الردّ لحظة الصرف؟».
الخطوة 5: التصريح الحيني عند الصرف
يفرض الفصل 4 التصريح لمركزية المعلومات «بصفة حينية عند صرف القرض أو التمويل» حسب رموز الملحق عدد 1:
| الرمز KFCRED | التسمية |
|---|---|
| 260 | قرض قصير المدى على الشرف (الأمر عدد 2026-148) |
| 261 | تمويل قصير المدى على الشرف (الأمر عدد 2026-148) |
| 185 | غير مخلّص في الأصل على قرض قصير المدى على الشرف |
| 3400 | قرض على الشرف للأفراد (الأمر عدد 2026-148) |
الفصل بين 260 و261 هو الفصل بين القرض والتمويل، أي بين الصيغة التقليدية وصيغة الصيرفة الإسلامية التي يحيل عليها المنشور صراحة في مراجعه. والرمز 185 ليس صنفًا عند الإسناد، بل حالة لاحقة: غير مخلّص في الأصل. من يبني جدول رموز ثابتًا عند الصرف وينسى أن 185 يظهر لاحقًا في دورة الحياة، سيكتشف ذلك عند أول تعثّر.
«حينية» لا تعني «في الليلة الموالية». لكنها أيضًا لا تعني نداءً متزامنًا يُسقط عملية الصرف إن تعطّلت القناة. النمط الصحيح هو صندوق الصادر: تُكتب رسالة التصريح في نفس معاملة الصرف، ويتولّى عامل مستقلّ إرسالها فورًا مع إعادة محاولة متصاعدة.
export async function disburse(applicationId: string): Promise<void> {
const app = await repo.load(applicationId);
await assertNoOutstandingSameCategory(app.applicantId, categoryOf(app));
await db.transaction(async (tx) => {
await tx.applications.update(app.id, { status: 'disbursed', disbursedAt: new Date() });
await tx.ledger.recordDisbursement(app);
await tx.outbox.insert({
topic: 'centrale.declare',
payload: { applicationId: app.id, kfcred: categoryOf(app) },
availableAt: new Date() // فورًا
});
});
}الفائدة العملية للصندوق أنه يجعل السؤال «هل صُرّح بكل قرض مصروف؟» قابلًا للإجابة باستعلام واحد: كل صرف بلا رسالة مُسلَّمة هو انحراف مرئي، لا خطأ صامت.
الخطوة 6: الملحق عدد 2 — الكشف الشهري موزّعًا حسب الولايات
الملحق عدد 2 يطلب كشفًا في حجم القروض والتمويلات المسندة على موارد حساب خط التمويل، موزعة حسب الولايات، وفي المبالغ المستخلصة وغير المستخلصة. لكلّ ولاية سطر يحمل العدد والمبلغ لكل فئة من المستفيدين — أفراد، مشروع صغير، مؤسسة اقتصادية صغرى أو متوسطة، شركة أهلية — ثم إجمالي القروض المسندة، وحصة الولاية من المبالغ المسندة بالمائة، ثم المبالغ المستخلصة وغير المستخلصة ونسبتها من الإجمالي.
الملحق نفسه يعرّف الفئتين تعريفًا رقميًا: المشروع الصغير هو ما لا يتجاوز حجم استثماره المتراكم مائة وخمسين ألف دينار بما في ذلك الأموال المتداولة؛ والمؤسسة الاقتصادية الصغرى أو المتوسطة هي ما تتراوح استثماراتها بين مائة وخمسين ألف دينار وخمسة عشر مليون دينار. صنّفوا المستفيد مرة واحدة عند الإسناد واحفظوا الصنف مع العملية. الشركة التي تنمو بين شهرين لا يجوز أن تُعيد كتابة كشف شهر مضى.
الوحدة في الملحق هي ألف دينار، بينما نظامكم يمسك المليم. هذا هو الموضع الذي تفشل فيه أغلب التنفيذات: يُقرَّب كل سطر على حدة، فلا يساوي مجموع الأسطر سطرَ الإجمالي.
const MILLIMES_PER_THOUSAND_DINARS = 1_000_000;
function toThousandDinars(millimes: number): number {
return Math.round((millimes / MILLIMES_PER_THOUSAND_DINARS) * 1000) / 1000;
}
export function buildAnnex2(rows: DisbursementRow[], period: Period): Annex2 {
const byGovernorate = new Map<string, Annex2Row>();
for (const row of rows) {
const g = byGovernorate.get(row.governorateCode) ?? emptyRow(row.governorateCode);
const bucket = g.classes[row.beneficiaryClass];
bucket.count += 1;
bucket.millimes += row.principalMillimes;
g.collectedMillimes += row.collectedMillimes;
byGovernorate.set(row.governorateCode, g);
}
const totalMillimes = sum([...byGovernorate.values()].map(totalOf));
return {
period,
rows: [...byGovernorate.values()].map((g) => ({
...g,
sharePercent: totalMillimes === 0 ? 0 : round2((totalOf(g) / totalMillimes) * 100),
uncollectedMillimes: totalOf(g) - g.collectedMillimes
})),
total: { millimes: totalMillimes, thousandDinars: toThousandDinars(totalMillimes) }
};
}القاعدة: اجمعوا بالمليم، وقرّبوا مرة واحدة عند العرض، واحتسبوا النسب من المبالغ الأصلية لا من المقرّبة. وأصدروا كل الولايات الأربع والعشرين حتى تلك التي لم تسجّل أي إسناد؛ سطر غائب يُقرأ على أنه بيانات ناقصة، وسطر بصفر يُقرأ على أنه معلومة.
الخطوة 7: الملحق عدد 3 — كشف حساب خط التمويل
الملحق عدد 3 جزآن. الأول معطيات حول الحساب: تاريخ انعقاد الجلسة العامة العادية للمساهمين، النتيجة المحاسبية الصافية المصادق عليها، حجم الاعتمادات المخصصة لخط التمويل — ويصفها الملحق صراحة بأنها 8 بالمائة من النتيجة المحاسبية — ثم تاريخ فتح الحساب وتاريخ تنزيل الاعتمادات به.
هذه المعطيات لا تتغيّر شهريًا، لكنها تُصرَّح شهريًا. اقرؤوها من مصدر واحد مرجعي مربوط بقرار الجلسة العامة، لا من إدخال يدوي يتكرّر اثنتي عشرة مرة في السنة. القيمة التي تُدخَل يدويًا كل شهر ستختلف عن نفسها في شهر ما.
الجزء الثاني كشف للعمليات المسجلة على الحساب إلى موفى الشهر: الرصيد الافتتاحي (1)، ناقص السحوبات بعنوان صرف القروض والتمويلات (2)، فرصيد الحساب في نهاية الشهر (3) = (1) − (2).
تنبيه على تعارض ظاهر بين الفصل والملحق. الفصل 5 يطلب «جردًا لكافة العمليات المسجلة بجانبيه الدائن والمدين»، بينما نموذج الملحق عدد 3 لا يعرض إلا الرصيد الافتتاحي والسحوبات والرصيد الختامي. لا تحذفوا الجانب الدائن من نموذج بياناتكم لمجرّد أن الجدول لا يعرض له خانة: احتفظوا بالجرد كاملًا في المصدر، وليكن النموذج عرضًا مشتقًّا منه. حين يُطلب التفصيل — وهو ما يقتضيه نصّ الفصل — تكونون قادرين على إصداره دون إعادة بناء تاريخي.
هذه القاعدة عامة: صرّحوا بما يطلبه النموذج، واحفظوا ما يطلبه النصّ.
الخطوة 8: الإرسال عبر نظام تبادل المعطيات في أجل خمسة عشر يومًا
الكشفان يُوجَّهان إلى البنك المركزي عبر نظام تبادل المعطيات «في أجل أقصاه خمسة عشر يومًا من تاريخ انتهاء الشهر المعني بالتصريح». هذا أجل قصير حين تدركون أن الإقفال المحاسبي للشهر عندكم قد لا يكتمل قبل اليوم العاشر.
اجعلوا التوليد قابلًا للتشغيل مرارًا وحتميًّا: نفس الشهر ونفس البيانات يعطيان نفس الملف بايتًا ببايت. ثم شغّلوه مبكرًا للمراجعة، وأرسلوه بعد الإقفال.
// src/jobs/monthly-declaration.ts
export async function runMonthlyDeclaration(period: Period): Promise<void> {
const deadline = addDays(endOfMonth(period), 15);
const annex2 = buildAnnex2(await repo.disbursementsFor(period), period);
const annex3 = buildAnnex3(await repo.creditLineAccountFor(period), period);
const bundle = serializeForDataExchange({ annex2, annex3, period });
const digest = sha256(bundle);
await repo.declarations.upsert({
period,
digest,
deadline,
generatedAt: new Date(),
status: 'ready'
});
}خزّنوا بصمة كل إرسال. عند أي تصحيح لاحق، الفرق بين البصمتين هو ما يشرح للمراجع ما تغيّر ولماذا، وهو أرخص بكثير من إعادة بناء الشهر من الذاكرة.
اختبار التنفيذ
خمسة اختبارات تغطّي المواضع التي ينكسر فيها هذا النوع من الأنظمة فعلًا:
describe('امتثال المنشور عدد 8 لسنة 2026', () => {
it('يرتّب حسب توقيت الختم لا حسب توقيت الإدراج', async () => {
const late = await submit({ ref: 'A', stampedAt: '2026-10-01T08:00:02Z' });
const early = await submit({ ref: 'B', stampedAt: '2026-10-01T08:00:01Z' });
expect([late, early].sort(byPriority)[0].receiptRef).toBe(early.receiptRef);
});
it('يرفض الإيداع إذا فشل ختم التوقيت', async () => {
timestampService.failNext();
await expect(submit(validInput)).rejects.toThrow('TIMESTAMP_UNAVAILABLE');
expect(await repo.count()).toBe(0); // لا مطلب بلا ختم
});
it('يحجب الصرف عند وجود قرض من نفس الصنف غير مخلّص', async () => {
centraleClient.setExposures('CIN123', [{ kfcred: '260', outstandingMillimes: 1 }]);
await expect(disburse(appOfCategory('260'))).rejects.toThrow('OUTSTANDING_SAME_CATEGORY');
});
it('يحتسب الأجل بأيام العمل المصرفية لا بالأيام التقويمية', () => {
const stamped = new Date('2026-10-01T09:00:00Z'); // خميس
expect(decisionDeadline(stamped, calendarWithWeekends())).toEqual(new Date('2026-10-15T09:00:00Z'));
});
it('يساوي مجموع أسطر الملحق 2 سطرَ الإجمالي بعد التقريب', () => {
const annex2 = buildAnnex2(fixtureRows, period);
const sumOfRows = annex2.rows.reduce((acc, r) => acc + totalOf(r), 0);
expect(toThousandDinars(sumOfRows)).toBe(annex2.total.thousandDinars);
});
});الاختبار الثاني هو الأهمّ. المنصة التي تقبل المطلب ثم تحاول ختمه لاحقًا تُنتج مطالب بلا سند، وهي الحالة الوحيدة التي لا يمكن إصلاحها بأثر رجعي: لا يمكن ختم الماضي.
أخطاء شائعة ومعالجتها
الوصل يصل والمطلب غير موجود. سببه إرسال الإشعار خارج المعاملة. الحلّ هو صندوق الصادر داخل نفس المعاملة كما في الخطوة 2.
اختلاف بين ترتيب المنصة وترتيب الفرع. سببه اعتماد created_at الخاص بقاعدة البيانات بدل genTime. احذفوا كل ترتيب لا يمرّ بدالة byPriority.
مجموع الولايات لا يساوي الإجمالي. تقريب على مستوى السطر. اجمعوا بالمليم وقرّبوا مرة واحدة.
تصريح مركزية مفقود لقرض مصروف. رسالة عالقة في صندوق الصادر بلا مراقبة. أضيفوا تنبيهًا على كل رسالة تجاوز عمرها حدًّا، لا على نسبة الفشل فقط.
الاطلاع تمّ عند الموافقة لا عند الصرف. إن فصل بين الموافقة والصرف أكثر من يوم، أعيدوا الفحص عند الصرف. النصّ يربطه بالصرف صراحة.
الخطوات التالية
- ارجعوا إلى شروط الانتفاع والسقوف والوثائق في شروط قرض على الشرف قبل تثبيت قواعد التحقق في الواجهة.
- استعملوا مولّد مطلب قرض على الشرف كمرجع لحقول المطلب ولصياغته المتداولة عند تصميم استمارة المنصة، وتفقيط المبلغ بالحروف لتوليد المبلغ بالحروف في الوصل وفي وثائق العقد.
- تابعوا ما غيّره المنشور عدد 8 لسنة 2026 وانطلاق الإسناد عبر منصات البنوك.
الخلاصة
المنشور عدد 8 لسنة 2026 لا يطلب من البنوك واجهة تسجيل، بل يطلب أربعة أشياء قابلة للقيس: ختمًا يُثبت اللحظة، وصلًا يُثبت الإعلام، فحصًا يسبق الصرف، وكشفين يصلان في أجل خمسة عشر يومًا. من يبني هذه الأربعة حول مصدر واحد للحقيقة — العملية بالمليم، والصنف محفوظ عند الإسناد، والختم كما ورد — يسلّم قبل غرة أكتوبر ويجيب عن أسئلة المراجعة باستعلام لا بتحقيق.
إن كنتم تبنون هذه المنصة أو طبقة التصريح فوق منظومتكم الحالية وتريدون قراءة تقنية مستقلّة لفجوات الامتثال قبل الموعد، اطلبوا تشخيصًا — نراجع النموذج والمسارات والكشوفات مقابل نصّ المنشور وملاحقه.