دراسة حالة · Hart College

نظام معلومات الطلاب (SIS) مخصص لكلية مهنية كندية — كتالوج المقررات، والتسجيل متعدد الدفعات، ورسوم Stripe الدراسية، وإدارة قائمة على القسائم (Next.js + Django + PostgreSQL)

كيف استبدلت UnlockLive ثلاث أدوات منفصلة وصندوق بريد مشتركاً واحداً بنظام معلومات طلابي مخصص وموحّد لكلية مهنية كندية — كتالوج دورات عام بـ Next.js، وبوابة للطلاب للتسجيل ودفع الرسوم الدراسية عبر Stripe، ولوحة إدارة بـ Django للدفعات والدورات والقسائم والمرشحين والمرفقات. النتيجة: تحصيل 100% من الرسوم الدراسية إلكترونياً، وتسجيل أسرع 5 مرات، وبلا جداول بيانات للمطابقة.

  • القطاعالتعليم العالي / SaaS للكليات المهنية
  • السنة2024
  • البلدكندا
  • المدة5 أشهر
Custom Student Information System (SIS) for a Canadian Career College — Course Catalog, Multi-Intake Enrolment, Stripe Tuition & Coupon-Driven Admin (Next.js + Django + PostgreSQL) hero screenshot

النتائج في لمحة

  • 100%من دفعات الرسوم الدراسية تُحصَّل الآن عبر الإنترنت من خلال Stripe (دون شيكات أو تحويلات إلكترونية)
  • 5xسرعة أكبر في مسار التسجيل مقارنةً بخط الأساس: جداول البيانات + البريد الوارد
  • 0جداول التسوية في نهاية الشهر (نظام SIS هو المصدر الوحيد الموثوق)
  • 5أشهر من الاستكشاف إلى أول دفعة قبول حية على نظام SIS الجديد
“Their work is satisfactory on all counts.”
Office Manager, Hart College of Cardiac Sonography & Healthcare, Toronto, Ontario · تقييم عميل على Clutch

التحدي

كانت Hart College تدير القبول عبر موقع تسويقي عام، وتسجيل الدورات في جدول بيانات منفصل، وتحصيل الرسوم الدراسية بالشيكات والتحويل الإلكتروني، والتواصل مع الطلاب عبر صندوق بريد مشترك. لم يكن شيء منها متطابقاً. كان المسؤولون يعيدون إدخال كل طالب جديد في ثلاثة أماكن، ولم يكن لدى أمين السجل إجابة موحدة عن سؤال «من المسجّل في هذه الدفعة؟»، وكانت الإدارة المالية تقضي أسبوعاً كاملاً كل شهر في ملاحقة المدفوعات المفقودة ومطابقتها مع أسماء لا تتطابق تماماً بين الأنظمة.

كان المطلوب بسيطاً في ظاهره: استبدال كل ذلك بنظام معلومات طلابي (SIS) واحد يستطيع فيه المرشح اكتشاف دورة من صفحة تسويقية عامة، والتسجيل في دفعة محددة، ودفع الرسوم الدراسية إلكترونياً، ورؤية جدوله وسجل مدفوعاته في بوابة ذاتية الخدمة — ويستطيع المسؤول إنشاء الدفعات والدورات والقسائم والمرشحين والمرفقات من لوحة واحدة دون جداول بيانات موازية ودون أعمال مطابقة في نهاية الشهر.

حلّنا

بنينا نظام SIS واحداً مخصصاً عبر ثلاث واجهات منسقة: كتالوج دورات عام بـ Next.js، وبوابة للطلاب للتسجيل والرسوم الدراسية، ولوحة إدارة بـ Django + Django REST Framework — وكلها مدعومة بـ PostgreSQL وتكامل Stripe Payments + Webhooks الذي يُبقي نظام SIS مصدراً وحيداً للحقيقة لكل دولار.

يقدم الموقع العام كتالوج Next.js سريعاً ومحسّناً لـ SEO: لكل دورة صفحة تفاصيل قابلة للفهرسة وجدول الدفعة والمتطلبات المسبقة وتفصيل الرسوم الدراسية ودعوة مضمّنة «سجّل الآن» — فيصبح الموقع التسويقي أيضاً أعلى مسار التسجيل لا كتيباً منفصلاً. وبمجرد نقر المرشح، يصل إلى جلسة Stripe Checkout تُنشأ على الخادم بالمبلغ والعملة والقسيمة ومعرّف الدفعة الصحيحة مضمّنة في البيانات الوصفية.

عند نجاح الدفع، يصل webhook من Stripe إلى واجهة Django API ويُنشئ الطالب أو يحدّثه بشكل غير مكرر الأثر، ويربطه بالدفعة المختارة، ويرفق الإيصال، ويرسل رسالة تأكيد بالبريد — كل ذلك في معاملة موقّعة واحدة. ثم تعرض بوابة الطالب «دوراتي» و«جدولي» و«رسومي الدراسية» (مع سجل المدفوعات والمبالغ المستردة كاملاً) وتبويباً للمستندات الخاصة بالكشوف الدراسية والهوية والاتفاقيات الموقّعة.

توفر لوحة إدارة Django لأمين السجل مكاناً واحداً لإدارة البرنامج بالكامل: إنشاء دفعة، وربط الدورات وأعضاء هيئة التدريس بها، وتحديد رموز القسائم (نسبة مئوية أو مبلغ ثابت، بنطاق لكل دفعة أو لكل دورة)، ورفع سجلات المرشحين والمرفقات، ونشر الإعلانات، واستخراج تقارير التسجيل والإيرادات دون فتح Excel. وتفصل الأدوار بين أمين السجل والإدارة المالية وهيئة التدريس والمسؤول بحيث لا يرى كل مستخدم إلا الواجهة التي يحتاجها.

وأخيراً، ربطنا webhooks الخاصة بـ Stripe بشكل غير مكرر الأثر، وقفلنا سجلات الرسوم الدراسية بمجموع اختباري (checksum) ليتمكن القسم المالي من إثبات تطابق SIS مع Stripe، وزودنا كل نقطة نهاية بـ Sentry + CloudWatch، وخزّنا كل ملف PDF موقّع / هوية مرفوعة في S3 بروابط موقّعة محددة المدة (دون وصول مباشر إلى الكائنات).

  • كتالوج دورات عام بـ Next.js محسّن لـ SEO بصفحة قابلة للفهرسة لكل دورة وجدول الدفعات ودعوة مضمّنة «سجّل الآن»
  • جلسات Stripe Checkout تُنشأ على الخادم مع معرّف الدفعة ورمز القسيمة والعملة وتفصيل الرسوم الدراسية مضمّنة في البيانات الوصفية
  • webhooks غير مكررة الأثر من Stripe — الطالب وربط الدفعة وصف الرسوم وبريد الإيصال تُكتب كلها في معاملة موقّعة واحدة
  • بوابة الطالب مع دوراتي وجدولي ورسومي الدراسية (سجل المدفوعات والمبالغ المستردة كاملاً) ورفع المستندات
  • لوحة إدارة Django: الدفعات والدورات والقسائم (نسبة مئوية أو مبلغ ثابت، بنطاق لكل دفعة أو دورة) والمرشحون والمرفقات والإعلانات
  • وصول مفصول الأدوار لأمين السجل والإدارة المالية وهيئة التدريس والمسؤول — يرى كل مستخدم الواجهة التي يستخدمها فعلاً فقط
  • مطابقة الرسوم الدراسية بمجموع اختباري ليتمكن القسم المالي من إثبات تطابق SIS وStripe في أي لحظة دون فتح Excel
  • S3 + روابط موقّعة محددة المدة لكل كشف درجات وهوية واتفاقية موقّعة — دون وصول مباشر إلى الكائنات

كيف بنيناه

  1. 01

    الاستكشاف، ومتابعة عمل مكتب التسجيل، ونموذج بيانات يراعي دفعات القبول

    جلسنا مع فريقي شؤون التسجيل والمالية لمدة أسبوع ورسمنا كل نقطة أُنشئ فيها سجل الطالب أو عُدِّل أو دُفع عنه — عبر موقع التسويق وجدول التسجيل والبنك وصندوق البريد والمجلد المشترك. ونتج عن ذلك نموذج بيانات يراعي القبول، بمفاهيم أساسية هي `Batch` و`Course` و`Coupon` و`Candidate` و`Tuition`، بدلًا من إلحاق حالة الطالب بنظام CRM عام.

  2. 02

    كتالوج عام بـ Next.js + بوابة الطلاب + دفع يعتمد Stripe أولًا

    سلّمنا كتالوجًا عامًا سريعًا بـ Next.js ومحسّنًا لـ SEO بصفحة قابلة للفهرسة لكل دورة، وأزرار «Enrol now» مضمنة تنقل إلى جلسة Stripe Checkout تُنشأ على الخادم وتتضمن بيانات القبول والقسائم. ثم تعرض بوابة الطلاب الجدول والمدفوعات السابقة والإيصالات ورفع المستندات. فالموقع التسويقي هو قمع التحويل لا مجرد كتيّب.

  3. 03

    وحدة إدارة Django + Stripe webhooks آمنة التكرار (idempotent)

    على جانب العمليات، سلّمنا لوحة إدارة مبنية على Django + Django REST Framework: إدارة الدفعات والمقررات والكوبونات والمرشحين والمرفقات (CRUD)، وفصل الأدوار بين شؤون التسجيل والمالية وأعضاء هيئة التدريس والمسؤولين، وواجهة تقارير للتسجيل والإيرادات. وتصل webhooks الخاصة بـ Stripe بطريقة idempotent إلى نقطة نهاية Django واحدة تنشئ الطالب أو تحدّثه، وتربطه بالدفعة الصحيحة، وتسجّل صف الرسوم الدراسية، وترسل رسالة التأكيد بالبريد الإلكتروني ضمن معاملة موقّعة واحدة.

  4. 04

    التسوية، وS3، وقابلية الرصد، والتسليم

    ثبّتنا صفوف الرسوم الدراسية بمجموع اختباري (checksum) ليتمكن القسم المالي من إثبات تطابق نظام معلومات الطلاب مع Stripe في أي لحظة، وخزّنا كل ملف PDF موقّع وكل هوية مرفوعة في S3 بروابط موقّعة محدودة المدة، وزوّدنا كل نقطة نهاية بأدوات Sentry + CloudWatch. وحصل أمين السجل على دليل تشغيل لفتح دفعة قبول جديدة، وإصدار قسيمة، واسترداد دفعة رسوم دراسية، وتصدير تقرير التسجيل، وبقينا معه بعقد دعم مستمر لإجراء التحسينات.

حزمة التقنيات

  • Next.js (React)
  • Django
  • Django REST Framework
  • PostgreSQL
  • Stripe Payments + Webhooks
  • AWS S3 (تخزين المستندات)
  • Sentry + CloudWatch
  • Docker
  • تطوير البرمجيات المخصصة
  • هندسة SaaS للتعليم العالي
  • تكامل مدفوعات Stripe
  • تصميم UI/UX
  • DevOps والمراقبة

الأسئلة الشائعة

كيف تسوّون مدفوعات الرسوم الدراسية عندما يصل webhook من Stripe مرتين أو بترتيب خاطئ؟

ضمانتان. (1) معالج webhook هو idempotent: يُفحص كل `event.id` من Stripe مقابل جدول `processed_webhooks` قبل أي كتابة، فتصبح إعادة المحاولة بلا أثر. (2) يخزّن كل صف رسوم دراسية قيمة تحقق مشتقة من `(student_id, batch_id, amount, currency, coupon_code, stripe_payment_intent)`. يستطيع القسم المالي تشغيل استعلام مطابقة من سطر واحد في أي وقت لإثبات اتفاق صفوف SIS مع رسوم Stripe — بلا Excel ولا مطابقة يدوية ولا ذعر نهاية الشهر.

كيف يُنمذَج التسجيل متعدد دورات القبول في نظام SIS؟

نتعامل مع `Batch` (الدفعة) ككيان أساسي مستقل، لا كوسم على الطالب. تحمل الدفعة تاريخ بدايتها وسعتها ومقرراتها وتكليفات هيئة التدريس. ينتمي الطالب إلى دفعة واحدة أو أكثر، ويمكن تحديد نطاق القسيمة لكل دفعة قبول أو لكل مقرر، وتُصفّى التقارير حسب الدفعة بنقرة واحدة. وهذا هو الفرق بين "نظام CRM فيه حقل للقبول" ونظام معلومات طلابية حقيقي، ولهذا لم يعد أمين السجل يحتفظ بجدول بيانات موازٍ.

هل المنصة قابلة للتوسع لتشمل كليات مهنية أو مزودي تدريب آخرين؟

نعم. نموذج البيانات مستقل عن المؤسسة — فـ `Batch` و`Course` و`Coupon` و`Candidate` و`Attachment` و`Tuition` ليست خاصة بـ Hart. يمكن إدخال مؤسسة ثانية بإعادة تغليف واجهة Next.js الأمامية وتهيئة حساب Stripe جديد؛ أما لوحة إدارة Django والمخطط الأساسي فقابلان لإعادة الاستخدام. وقد صمّمناه بحيث يكون التوسع إلى التعليم الأساسي والثانوي (K-12) والتدريب المهني وبرامج التعليم المستمر تغييرًا في الإعدادات وليس إعادة بناء.

كم استغرق بناء نظام معلومات الطلاب (SIS) لكلية Hart College، وكيف كان الفريق منظماً؟

خمسة أشهر من البداية إلى النهاية مع فريق من أربعة أشخاص (مدير منتج/PM واحد، ومهندسان Full-stack، ومصمم واحد). بشكل تقريبي: 3 أسابيع للاستكشاف ومرافقة موظفي القبول والتسجيل؛ و12 أسبوعًا لواجهة Django REST API + كتالوج Next.js العام + بوابة الطلاب + لوحة الإدارة؛ و3 أسابيع لتحصين webhooks الخاصة بـ Stripe وأعمال مرفقات S3 والمراقبة وتدريب موظفي التسجيل؛ وأسبوعان للقبول التجريبي قبل فتح باب القبول الحي التالي على نظام معلومات الطلاب (SIS) الجديد.

ما الحزمة التقنية التي تشغّل نظام معلومات الطلاب في Hart College؟

موقع عام ببوابات للطلاب والمسؤولين مبني على Next.js (React)، وواجهة API بـ Django + Django REST Framework، وPostgreSQL للبيانات المعاملاتية، وStripe Payments + Webhooks للرسوم الدراسية، وAWS S3 لمرفقات المستندات، وSentry + CloudWatch للمراقبة — وكلها في حاويات Docker ومنشورة عبر البنية التحتية ككود.

هل تريد نتيجة كهذه؟

تحدّث إلى الفريق نفسه الذي بنى نظام معلومات الطلاب (SIS) مخصص لكلية مهنية كندية — كتالوج المقررات، والتسجيل متعدد الدفعات، ورسوم Stripe الدراسية، وإدارة قائمة على القسائم (Next.js + Django + PostgreSQL). سنحدد نطاق مشروعك، ونقدّم لك عرضًا بسعر ثابت، ونُريك أقرب مثال من أعمالنا.

احجز مكالمة استراتيجية