الامتثال القانوني والامتثال
تحمل وساطة الفوركس/العقود مقابل الفروقات/العملات المشفرة بالتجزئة واجبات قانونية + الاحتفاظ بالسجلات. تنفذ الوحدة أربعة دعائم صناعية قياسية: موافقة الكشف عن المخاطر، مسار تدقيق مقاوم للعبث، الاحتفاظ بالسجلات بنمط MiFID/ESMA، حقوق بيانات GDPR. الكل مُوقّف بواسطة علم ميزة Compliance.
1. المستندات القانونية الموثوقة + الموافقة
LegalDocument(إجمالي) — شروط خدمة موثوقة، كشف المخاطر من العقود مقابل الفروقات، أو سياسة الخصوصية. تم تحرير الإصدار، ثم نشره؛ الإصدارات المنشورة ثابتة (التحرير يرمي)، لذا يمكن دائماً استرجاع نص المستخدم الذي وافق عليه. المستند النشط لنوع = أعلى إصدار منشور له.ConsentRecord(إجمالي) — سجل ثابت أن المستخدم قبل إصدار مستند معين في وقت معين، مع عنوان IP الأصلي.- الفرض:
RouteGroupBuilder/RouteHandlerBuilder.RequireConsent(type)يحظر الإجراء بـ403عندما يوجد مستند منشور من هذا النوع ولم يوافق المستخدم على الإصدار النشط منه. تطبيقها على إنشاء ملف تعريف النسخ (RiskDisclosure). لا شيء منشور → الإجراءات مسموح بها — لا شيء يوافق عليه حتى الآن — لذا تمكين وحدة لا يحظر شيء بأثر رجعي حتى يتم نشر الكشف فعلاً.
2. مسار تدقيق مقاوم للعبث
يتم ربط إدخالات AuditLog بـ hash: كل صف يخزن PrevHash و Hash = SHA-256(prev | canonical fields). AuditChainInterceptor ينطبق السلسلة بشكل شفاف في SaveChanges، لذا لا تتغير مواقع استدعاء التدقيق الموجودة. IAuditTrailVerifier.VerifyAsync إعادة المسارات السلسلة، تقارير أول صف الذي لا يطابق الـ hash المخزن أو الوصلة للخلف بعد الآن — كشف أي تحرير أو حذف من السجل السابق. نقطة نهاية المالك: GET /api/compliance/audit/verify.
3. الاحتفاظ بالسجلات (MiFID II / ESMA RTS)
يتم إرضاء الاحتفاظ بالسجلات بواسطة سجل التدقيق الثابت ومسلسلة الـ hash بالإضافة إلى سجلات الموافقة المحتفظ بها والسجلات الحذف الناعم (غير المحذوف بشدة). الطوابع الزمنية UTC من TimeProvider المحقونة. تحتفظ سجلات الموافقة بإصدار المستند + عنوان IP؛ لا يتم تحوير المستندات القانونية المنشورة أبداً. الاحتفاظ = عدم تنظيف هذه الجداول (إضافة فقط / حذف ناعم).
4. حقوق بيانات GDPR
GET /api/compliance/export— تصدير قابل للقراءة الآلة لبيانات المتصل (الملف الشخصي، الموافقات، ملفات تعريف النسخ، تحديات الشركات الملكية).POST /api/compliance/erase— الحق في المحو:AppUser.Anonymize()تمسح PII (البريد الإلكتروني، MFA) والصف حذف ناعم، يحافظ على الاتساق المرجعي/التدقيق.
ملخص API
| الطريقة | المسار | الدور | الغرض |
|---|---|---|---|
| GET | /api/compliance/documents/active | User+ | المستندات المنشورة النشطة |
| GET | /api/compliance/consent/status | User+ | أي موافقات معلقة |
| POST | /api/compliance/consent | User+ | قبول النسخة النشطة من مستند |
| GET | /api/compliance/export | User+ | تصدير بيانات GDPR |
| POST | /api/compliance/erase | User+ | محو GDPR للحساب الخاص بك |
| POST | /api/compliance/documents | Owner | صياغة مستند |
| POST | /api/compliance/documents/{id}/publish | Owner | نشر إصدار |
| GET | /api/compliance/audit/verify | Owner | تحقق من سلسلة التجزئة التدقيق |
واجهة المستخدم: /settings/legal (nav الإعدادات → القانونية والخصوصية، مُوقّفة بواسطة Compliance) يعرض الاتفاقات المعلقة بأزرار القبول + إجراءات تصدير/محو GDPR.
الاختبارات
- الوحدة —
UnitTests/Compliance/LegalDocumentTests.cs(مسودة/نشر/ثابتية، التقاط الموافقة),AuditChainTests.cs(روابط hash، كشف العبث، حساسية المحتوى). - التكامل —
IntegrationTests/CompliancePersistenceTests.cs(استعلامات نسخة نشطة + موافقة على Postgres حقيقي),AuditChainIntegrityTests.cs(السلسلة تحقق سليمة، ثم كشف العبث على مستوى SQL),ComplianceFlowTests.cs(WebApplicationFactory، قاعدة بيانات معزولة: بوابة موافقة تحظر إنشاء النسخ حتى يتم قبول كشف المخاطر؛ تصدير GDPR؛ تحقق من التدقيق). - E2E —
E2ETests/ComplianceTests.cs: صفحة القانونية والخصوصية وعرض تصدير GDPR يعودان بيانات المستخدم في المتصفح الحقيقي.