مشتری
جناب اقای علی درویشیاندستهبندی
Django RESTمشارکتکنندگان
تاریخ
1404/10/18سامانه حقوقی با Django | REST API | حق کاو
حقکاو یه سامانه جامع حقوقیه که بکاندش با Django REST Framework توسعه داده شده. توی این پروژه تیمی روی جستجوی چند هزار منبع حقوقی، قوانین، آرای قضایی، آزمون آنلاین، ورود پیامکی و APIهای اختصاصی کار کردیم و اینجا جزئیات پروژه و سهم خودم از توسعهش رو نوشتم. تازه بازم از AI Chat bot خبرایی هست که پایین تر بیشتر درموردش بخونید :)
حقکاو یه پروژه حقوقی بزرگ و کاملا تیمیه که از اون پروژههای چندتا صفحهای و جمعوجور نیست :) خروجی نهایی کار الان روی haqkav.ir بالاست و خودتون میتونید برید باهاش کار کنید.
من امیرحسین علیجانیام و توی این پروژه به عنوان برنامهنویس بکاند Django کار کردم. یه نکته رو هم اول کار شفاف بگم: حقکاو یه کار تیمی قویه و قرار نیست کل محصول رو به اسم خودم بزنم. من هسته اولیه بکاند، Accounts، آزمون، ماژول آرای قضایی و بخشی از ادمین و داکیومنت API رو نوشتم و توی مواردی مثل جستجوی قوانین، سرچ سراسری اولیه تسک هایی رو انجام دادم اما پروژه با همکاری تیم جلو رفت و قسمتهای مهم سایت مثل ماژول های قوانین ،آرای وحدت رویه ، نظریات مشورتی و ... ، بهینهسازیهای سنگین سرچ ، پلنهای دسترسی، ایمپورتهای حجیم، ماشینحسابهای حقوقی،
AI چت بات حرفه ای برای پاسخ به سوالات حقوقی ، دیپلوی و ماژولهای جدیدتر توسط همتیمیهام توسعه پیدا کرد. گیت هابشون رو بالا تر گذاشتم حتما بهشون فید بک مثبت بدید ;)
خلاصه این صفحه هم معرفی پروژهست هم دقیقا مشخص میکنم کجای کار دست من بوده و کجاش نتیجه همکاری تیمه.

صفحه اصلی حقکاو؛ جستجو توی منابع حقوقی، دستیار هوشمند و دسترسی به کتابخانه از همین صفحه شروع میشه
اصلا چی قرار بود ساخته بشه؟
قرار نبود یه سایت محتوامحور ساده داشته باشیم که چندتا قانون توش کپی بشه و تمام. دادههای حقوقی رابطه دارن. یه قانون ماده و تبصره داره، یه رأی میتونه به چند قانون مرتبط باشه، نظریه مشورتی و نشست قضایی و رأی وحدت رویه هرکدوم ساختار خودشونو دارن. از اون طرف کاربر باید بین چند ده هزار منبع سرچ کنه و جواب درست بگیره.
جدا از کتابخانه حقوقی، ورود با شماره موبایل، آزمون آنلاین، پروفایل، پلن دسترسی، ادمین مخصوص تیم محتوا و API برای فرانت هم لازم بود. اینجا دیگه قالب آماده و وردپرس جواب کار نبود. مدل داده و گردش اطلاعات باید دقیقا برای خود پروژه طراحی میشد و برای همین بکاند با Django و Django REST Framework پیاده شد.
کتابخانه قوانین؛ قانون و ماده و تبصره واقعا به هم وصلن
بخش قوانین یکی از قسمتهای اصلی پروژهست. قوانین بر اساس موضوعاتی مثل حقوقی، کیفری، خانواده، ثبتی، بانکی و مالی دستهبندی شدن و کاربر میتونه بینشون سرچ و فیلتر کنه.
چالش اصلی فقط لیست کردن قانون نبود. هر قانون ماده داره، هر ماده میتونه تبصره داشته باشه و ترتیب نمایش اینا هم مهمه. مدلها طوری چیده شدن که این ساختار والد و فرزندی حفظ بشه و فرانت مجبور نباشه خودش از یه سری داده نامرتب قانون بسازه.

کتابخانه قوانین حقکاو؛ دستهبندی موضوعی، سرچ، فیلتر و کارت خلاصه قوانین

جزئیات قانون مجازات اسلامی؛ ساختار کتاب، بخش، فصل و ماده و امکان جستجو داخل همون قانون
جستجوی قوانین، فیلترها، pagination و API جزئیات این بخش جزو کارهای خودم بود. داکیومنت API قوانین و ایمپورت اولیه دادهها رو هم من شروع کردم و بعد توی ادامه پروژه با همکاری تیم ابزارهای ایمپورت خیلی کاملتر شدن.
سرچ سراسری، نه یه سرچ الکی روی عنوان
کسی که دنبال جواب یه سوال حقوقیه قرار نیست اول بدونه جوابش توی قانون مدنیه یا رأی قضایی یا نظریه مشورتی. یه عبارت سرچ میکنه و انتظار داره نتیجه مرتبط بگیره. سرچ سراسری اولیه پروژه رو من روی چند مدل مختلف بستم تا نتیجهها یکجا برگردن.
بعد که حجم داده بالا رفت، تیم روی سرعت، رتبهبندی نتیجهها و زیرساخت سرچ کلی کار کرد. الان مثلا «فسخ قرارداد اجاره» رو که سرچ کنید، نتیجه میتونه هم از قانون بیاد هم از رأی قضایی و عبارت مورد نظر هم داخل متن هایلایت میشه. یعنی سرچ فقط title__icontains جنگو نیست :)

جستجوی «فسخ قرارداد اجاره» بین منابع مختلف و نمایش قسمت مرتبط متن

نتایج جستجوی «طلاق توافقی» روی موبایل
اینم نتیجه جستجوی «قانون مدنی» که فقط سوالهای پیشنهادی صفحه اصلی رو تست نکرده باشیم:

آرای قضایی؛ این قسمت تقریبا کامل کار خودمه
ماژول آرای قضایی رو از مدل و serializer و view تا اسکریپت تبدیل داده و پنل ادمین خودم نوشتم. سرچ و مرتبسازی آرا و ساختار responseها هم توی همین بخش انجام شد. دادهها هم آماده و ایمپورت شدن تا فرانت بتونه بر اساس دستهبندی صفحههای مختلف رو بسازه.
الان روی سایت میتونید آرا رو بر اساس اجرای احکام، دیوان عدالت، بانکی و مالی، خانواده، کیفری و بقیه موضوعات ببینید. برای هر رأی خلاصه داریم و صفحه جزئیات هم اطلاعات کامل و موارد مرتبط رو از API میگیره.

آرای قضایی حقکاو؛ دستهبندی موضوعی و نمایش خلاصه هر رأی
آزمون آنلاین حقوقی
اپ آزمون رو هم از صفر خودم شروع کردم. بانک سوال، گزینهها، ساخت آزمون، ثبت جواب و نتیجه نسخه اولیه جزو کار من بود و بعدتر تیم کلی قابلیت جدید مثل تاریخچه آزمون، آمار ضعف کاربر و حالت مطالعه رو بهش اضافه کرد.
کاربر میتونه نوع آزمون، درس، سال، تعداد سوال و درجه سختی رو انتخاب کنه. حالت آموزشی و محدودیت زمانی هم داره. وقتی داشتم اسکرین میگرفتم بانک سوال با فیلتر همون لحظه بیشتر از ۸۵۰۰ سوال داشت. پس با یه فرم نمایشی طرف نیستیم؛ پشت این صفحه نشست آزمون، جوابها، نتیجه، تاریخچه و آمار کاربر قرار گرفته.

ساخت آزمون آنلاین با فیلتر نوع آزمون، درس، سال، سختی و تعداد سوال
ورود با شماره موبایل، OTP و JWT
اپ Accounts پروژه رو من استارت زدم. کاربر شماره موبایلش رو وارد میکنه، کد تایید میگیره و بعد از verify توکن JWT برمیگرده. اگه حساب نداشته باشه همون موقع ساخته میشه. بعدتر پلن دسترسی و محدودیت قابلیتها هم توسط تیم روی همین سیستم کاربری سوار شد.
برای چنین محصولی ورود با موبایل خیلی طبیعیتر از اینه که کاربر برای یه آزمون یا دیدن تاریخچهش ایمیل و پسورد جدید حفظ کنه.
بقیه کتابخانه؛ جایی که پروژه تیمیتر شد
بعد از قوانین و آرای قضایی، منابع دیگهای مثل نظریات مشورتی، نشستهای قضایی، آرای وحدت رویه و اتهامات و خواستهها هم به پروژه اضافه شدن. این بخشها بیشتر با همکاری تیم جلو رفتن و هرکدوم API لیست، جزئیات، سرچ و فیلتر خودشونو دارن.
نظریات مشورتی

نشستهای قضایی

آرای وحدت رویه

اتهامات و خواستهها؛ یه بخش کاربردی برای پیدا کردن اطلاعات مرتبط با عنوان دعوا

دستیار هوشمند
توی حقکاو یه دستیار هوشمند حقوقی هم داریم که کاربر سوالشو میپرسه و جواب با استناد به منابع حقوقی بررسی میشه. سهم تیم جنگو توی این قسمت بیشتر سمت داده و API بکاند بوده و سرویس هوش مصنوعی به شکل جدا با تکنولوژی جدا توسعه داده شده.

دستیار هوشمند حقوقی و پیشنهاد سوالهای آماده برای شروع گفتگو
پنل ادمین جنگو، برای تیم محتوا نه برنامهنویس
وقتی چند ده هزار رکورد حقوقی دارید قرار نیست تیم محتوا برای هر اصلاح به برنامهنویس پیام بده. پنل ادمین پروژه چند مرحله سفارشی شد؛ برچسبهای فارسی، ویرایشگر متن، جستجو و فیلتر، مدیریت روابط بین محتواها و ابزار ایمپورت اکسل.
یه سری صفحههای ادمین روی دیتای زیاد واقعا سنگین میشدن و تیم روی queryها و تجربه کار با پنل هم کار کرد. هدف این نبود که فقط Django Admin بالا بیاد؛ قرار بود آدم غیر فنی بتونه هر روز باهاش محتوا مدیریت کنه.
زیرساخت فنی، بدون شعار
- بکاند: Django و Django REST Framework
- دیتابیس: PostgreSQL
- سرچ: PostgreSQL Full-Text Search و زیرساخت جستجوی جدا برای حجم بالاتر
- کش و OTP: Redis
- احراز هویت: OTP + JWT
- مستندات API: OpenAPI، Swagger و مستندات HTML
- دیپلوی: Docker، Gunicorn و سرویسهای جدا برای دیتابیس و کش
- مانیتورینگ و لاگ: Grafana و Loki در نسخه پروداکشن
یه بخش سخت و کمنمایش پروژه هم انتقال داده بود. اطلاعات حقوقی از منابع قدیمی و فایلهای مختلف میومد و لازم بود قبل از ورود به PostgreSQL تمیز، نرمال و مرتبط بشه. برای همین management commandهای مختلف، ایمپورت اکسل، انتقال از Mongo و گزارش خطا نوشته شد. اینا توی ظاهر سایت دیده نمیشن ولی بدونشون عملا کتابخانهای هم وجود نداشت.
دقیقا کجای این پروژه کار من بوده؟
این بخش رو بر اساس تاریخچه کامیتهای خود پروژه مینویسم که سهم تیم با سهم من قاطی نشه.
چیزایی که خودم شروع کردم یا نوشتم
- راهاندازی پروژه جنگو و اسکلت اولیه
- اپ Accounts، مدل کاربر و ادمین اولیه کاربر
- ورود و ثبتنام با شماره موبایل
- اپ آزمون و نسخه اولیه بانک سوال و جوابها
- جستجوی قوانین با فیلتر و صفحهبندی
- ماژول آرای قضایی از مدل و API تا ادمین و اسکریپت تبدیل داده
- سرچ سراسری نسخه اولیه
- API آیتمهای مرتبط و ساختار responseها
- مرتبسازی آرای قضایی
- مستندات API قوانین و بخشی از مستندات اولیه پروژه
چیزایی که تیم در ادامه ساخت یا کاملتر کرد
- نظریات مشورتی، نشستهای قضایی، آرای وحدت رویه و اتهامات و خواستهها
- بهینهسازیهای جدی سرچ و رتبهبندی نتایج
- پلنهای دسترسی، سهمیه و قابلیتهای هر پلن
- تکمیل آزمون، تاریخچه و آمار عملکرد کاربر
- ابزارهای ایمپورت حجیم و بهینهسازی ادمین
- ماشینحساب دیه، هزینه دادرسی و تاخیر تادیه
- دیپلوی، بکاپ و مانیتورینگ پروداکشن
به نظرم پروژه تیمی خوب دقیقا همینه؛ هرکس یه قسمت رو درست تحویل بده و در نهایت محصولی دربیاد که واقعا روی سرور کار کنه، نه اینکه فقط توی رزومه اسمش باشه.
نتیجه این نمونه کار
حقکاو برای من نمونه یه پروژه جنگوی واقعیه؛ دیتای زیاد داره، رابطه بین مدلهاش ساده نیست، سرچ بخش مهم محصوله، کاربر و پلن و آزمون داره، فرانت جدا از طریق API بهش وصله و تیم محتوا هم هر روز با پنلش کار میکنه.
اگه دنبال انجام پروژه جنگو، طراحی بکاند اختصاصی، توسعه REST API، پنل مدیریت یا یه سیستم پیچیده با کلی منطق و داده هستی این پروژه رو به عنوان نمونه کار واقعی من ببین. خود سایت هم روی haqkav.ir در دسترسه و میتونی با قسمتهای مختلفش کار کنی.
برای پروژه مشابه یا حتی یه ایده متفاوت که قراره با Django پیاده بشه از طریق janigo.ir پیام بده تا در موردش صحبت کنیم :)