Files
crm.clientright.ru/COURT_URL_FORMATION_LOGIC.md
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

20 KiB
Raw Blame History

Логика формирования ссылок на судебные дела (sudrf.ru)

📋 Структура URL

Общий формат ссылки:

https://{court-domain}.sudrf.ru/modules.php?name=sud_delo&srv_num={srv_num}&name_op=case&case_id={case_id}&case_uid={case_uid}&delo_id={delo_id}

Примеры ссылок:

Пример 1:

https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=case&case_id=471522071&case_uid=b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94&delo_id=1540005

Пример 2:

https://leninsky--pnz.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=case&case_id=170692229&case_uid=576762af-00bc-4346-8f15-f142608f0b4c&delo_id=1540005&case_type=0&new=0&srv_num=1

🔍 Разбор параметров

1. Домен суда ({court-domain})

  • Формат: {court-name}--{region-code}.sudrf.ru
  • Примеры:
    • krasnodar-sovetsky--krd - Советский районный суд г. Краснодара
    • leninsky--pnz - Ленинский суд г. Пензы
  • Логика: Формируется из названия суда и кода региона
  • Источник: Определяется по адресу ответчика или истца через API поиска судов

2. name=sud_delo

  • Значение: Всегда sud_delo
  • Назначение: Указывает модуль системы судов для работы с делами
  • Логика: Константа, не меняется

3. srv_num={srv_num}

  • Значение: Обычно 1 (может быть 2, 3 и т.д.)
  • Назначение: Номер сервера/инстанции, обрабатывающей запрос
  • Логика:
    • Для первой инстанции обычно 1
    • Для апелляции может быть другой номер
    • Может дублироваться в URL (как в примере 2)

4. name_op={operation} ⚠️ ВАЖНО: РАЗНЫЕ ОПЕРАЦИИ

  • Возможные значения:
    • case - просмотр конкретного дела (требует case_id, case_uid)
    • sf - форма поиска дел (search form)
    • Другие операции могут быть доступны
  • Логика:
    • name_op=case - для просмотра конкретного дела
    • name_op=sf - для поиска дел по критериям (форма поиска)
  • Пример формы поиска:
    https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=sf&delo_id=1540005
    
    Эта ссылка открывает форму поиска дел с фильтрами:
    • Дата поступления
    • Номер дела
    • Дата рассмотрения
    • Судья
    • И другие параметры

5. case_id={case_id} КЛЮЧЕВОЙ ПАРАМЕТР

  • Формат: Числовой идентификатор (обычно 6-9 цифр)
  • Примеры: 471522071, 170692229
  • Назначение: Внутренний числовой ID дела в системе суда
  • Логика:
    • Уникален для каждого дела
    • Присваивается при регистрации дела в системе
    • Может совпадать с номером дела или быть отдельным идентификатором
  • Источник: Получается из:
    • API Debexpert (если используется)
    • Базы данных суда
    • Регистрационных данных дела

6. case_uid={case_uid} КЛЮЧЕВОЙ ПАРАМЕТР

  • Формат: UUID (36 символов с дефисами)
  • Примеры:
    • b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94
    • 576762af-00bc-4346-8f15-f142608f0b4c
  • Назначение: Уникальный глобальный идентификатор дела (GUID)
  • Логика:
    • Генерируется системой при создании дела
    • Обеспечивает уникальность на уровне всей системы судов
    • Используется для связи дел между инстанциями
  • Источник: Получается из:
    • API Debexpert
    • Базы данных суда
    • Может быть в регистрационных данных

7. delo_id={delo_id} ⚠️ ВАЖНЫЙ ПАРАМЕТР

  • Формат: Числовой идентификатор (обычно 6-7 цифр)
  • Примеры: 1540005 (часто встречается)
  • Назначение: Идентификатор типа дела или категории дела
  • Логика:
    • Может быть константой для определенного типа дел
    • 1540005 часто используется для гражданских дел
    • Может различаться для разных категорий дел:
      • Гражданские дела
      • Административные дела
      • Уголовные дела
  • Источник: Определяется по типу/категории дела

8. Дополнительные параметры (опциональные):

case_type={case_type}

  • Значение: Обычно 0 или 1
  • Назначение: Тип дела (гражданское, административное и т.д.)

new={new}

  • Значение: 0 или 1
  • Назначение: Флаг нового дела

🧩 Логика формирования ссылки

Алгоритм формирования:

  1. Определение суда:

    court_domain = get_court_domain_by_address(address)
    // Результат: "krasnodar-sovetsky--krd"
    
  2. Получение идентификаторов дела:

    case_id = get_case_id_from_registration(case_number)
    case_uid = get_case_uid_from_registration(case_number)
    delo_id = get_delo_id_by_case_type(case_type)
    
  3. Формирование базового URL:

    base_url = "https://{court_domain}.sudrf.ru/modules.php"
    
  4. Формирование параметров:

    params = {
      "name": "sud_delo",
      "srv_num": "1",
      "name_op": "case",
      "case_id": case_id,
      "case_uid": case_uid,
      "delo_id": delo_id
    }
    
  5. Сборка финальной ссылки:

    url = base_url + "?" + build_query_string(params)
    

📊 Источники данных для формирования

1. Из API Debexpert:

Если используется интеграция с Debexpert API, параметры могут приходить в ответе:

{
  "case_id": "471522071",
  "case_uid": "b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94",
  "court_code": "23RS0047",
  "court_domain": "krasnodar-sovetsky--krd"
}

2. Из базы данных CRM:

В таблице проектов могут храниться:

  • case_number - номер дела (может совпадать с case_id)
  • uid - UUID дела (соответствует case_uid)
  • link1, link2, link3 - готовые ссылки для разных инстанций

3. Из регистрационных данных:

При регистрации дела в суде выдаются:

  • Номер дела (может быть case_id)
  • УИД дела (case_uid)
  • Код суда (для определения домена)

🔗 Связь между параметрами

Важные наблюдения:

  1. case_id и номер дела:

    • Могут совпадать, но не всегда
    • case_id - внутренний ID системы
    • Номер дела - публичный номер (например, "2-1836/2025")
  2. case_uid - универсальный идентификатор:

    • Один case_uid может использоваться для всех инстанций
    • Связывает дело в первой инстанции, апелляции и кассации
  3. delo_id - категория дела:

    • Может быть одинаковым для дел одного типа
    • 1540005 часто используется для гражданских дел
  4. Домен суда:

    • Определяется по адресу ответчика/истца
    • Может меняться при переходе в апелляцию/кассацию

🔍 Форма поиска дел (name_op=sf)

Структура URL формы поиска:

https://{court-domain}.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=sf&delo_id={delo_id}

Пример:

https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=sf&delo_id=1540005

Что это такое:

Это форма поиска дел в системе суда, а не просмотр конкретного дела. Страница содержит форму с полями для фильтрации:

  • Дата поступления (от/до)
  • Номер дела
  • Дата рассмотрения (от/до)
  • Судья
  • Тип дела (гражданское, административное и т.д.)
  • Статус дела
  • И другие фильтры

Отличие от name_op=case:

Параметр name_op=case name_op=sf
Назначение Просмотр конкретного дела Форма поиска дел
Требует case_id, case_uid Только delo_id (опционально)
Результат Страница с информацией о деле Форма для ввода критериев поиска
Использование Парсинг конкретного дела Поиск дел по критериям

Логика использования:

  1. Форма поиска (sf):

    • Открывается для поиска дел
    • Пользователь вводит критерии (номер дела, даты и т.д.)
    • После отправки формы происходит поиск
    • Результаты поиска содержат ссылки на конкретные дела
  2. Просмотр дела (case):

    • Открывается по ссылке из результатов поиска
    • Или формируется напрямую, если известны case_id и case_uid
    • Содержит полную информацию о деле и его движении

Как это связано с формированием ссылок:

Сценарий 1: Известны параметры дела

→ Формируем ссылку напрямую с name_op=case
→ Парсим страницу дела

Сценарий 2: Известен только номер дела

→ Открываем форму поиска (name_op=sf)
→ Вводим номер дела в форму
→ Получаем результаты поиска
→ Извлекаем case_id и case_uid из результатов
→ Формируем ссылку с name_op=case

🛠️ Практические рекомендации

Для парсинга ссылок:

  1. Проверка обязательных параметров:

    function validateCourtUrl(url) {
      const urlObj = new URL(url);
      const params = urlObj.searchParams;
      const nameOp = params.get('name_op');
    
      if (nameOp === 'case') {
        // Для просмотра дела нужны все параметры
        const requiredParams = ['case_id', 'case_uid', 'delo_id'];
        const missing = requiredParams.filter(p => !params.get(p));
        if (missing.length > 0) {
          throw new Error(`Отсутствуют обязательные параметры: ${missing.join(', ')}`);
        }
      } else if (nameOp === 'sf') {
        // Для формы поиска delo_id опционален
        // Никаких обязательных параметров
      }
    
      return true;
    }
    
  2. Валидация формата:

    // case_id - только цифры
    /^\d{6,9}$/.test(case_id)
    
    // case_uid - UUID формат
    /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(case_uid)
    
    // delo_id - только цифры
    /^\d{6,7}$/.test(delo_id)
    
  3. Извлечение параметров из URL:

    function parseCourtUrl(url) {
      const urlObj = new URL(url);
      const params = urlObj.searchParams;
      const nameOp = params.get('name_op');
    
      const result = {
        court_domain: urlObj.hostname,
        name_op: nameOp,
        srv_num: params.get('srv_num'),
        delo_id: params.get('delo_id')
      };
    
      // Для просмотра дела добавляем специфичные параметры
      if (nameOp === 'case') {
        result.case_id = params.get('case_id');
        result.case_uid = params.get('case_uid');
        result.case_type = params.get('case_type');
        result.new = params.get('new');
      }
    
      // Для формы поиска может быть тип операции
      if (nameOp === 'sf') {
        result.is_search_form = true;
      }
    
      return result;
    }
    

Для формирования ссылок:

  1. Если есть все параметры:

    function buildCourtUrl(courtDomain, caseId, caseUid, deloId, srvNum = '1') {
      const baseUrl = `https://${courtDomain}.sudrf.ru/modules.php`;
      const params = new URLSearchParams({
        name: 'sud_delo',
        srv_num: srvNum,
        name_op: 'case',
        case_id: caseId,
        case_uid: caseUid,
        delo_id: deloId
      });
      return `${baseUrl}?${params.toString()}`;
    }
    
  2. Формирование ссылки на форму поиска:

    function buildSearchFormUrl(courtDomain, deloId = '1540005', srvNum = '1') {
      const baseUrl = `https://${courtDomain}.sudrf.ru/modules.php`;
      const params = new URLSearchParams({
        name: 'sud_delo',
        srv_num: srvNum,
        name_op: 'sf',
        delo_id: deloId
      });
      return `${baseUrl}?${params.toString()}`;
    }
    
  3. Если есть только номер дела:

    • Нужно получить case_id и case_uid из API или базы данных
    • delo_id можно определить по типу дела
    • Альтернатива: использовать форму поиска для поиска дела по номеру

⚠️ Важные замечания

  1. Не все параметры обязательны:

    • Минимально необходимые: case_id, case_uid, delo_id
    • Остальные могут быть опциональными
  2. Разные инстанции:

    • Для первой инстанции: обычно srv_num=1
    • Для апелляции: может быть другой srv_num или другой домен
    • case_uid обычно остается тем же
  3. Изменение структуры:

    • Система судов может менять структуру URL
    • Рекомендуется проверять работоспособность ссылок
  4. Кодировка:

    • Все параметры должны быть правильно закодированы
    • UUID не требует кодирования
    • Числовые ID не требуют кодирования

📝 Примеры использования

Пример 1: Парсинг существующей ссылки

const url = "https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=case&case_id=471522071&case_uid=b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94&delo_id=1540005";

const parsed = parseCourtUrl(url);
console.log(parsed);
// {
//   court_domain: "krasnodar-sovetsky--krd.sudrf.ru",
//   case_id: "471522071",
//   case_uid: "b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94",
//   delo_id: "1540005",
//   srv_num: "1"
// }

Пример 2: Парсинг ссылки на форму поиска

const searchUrl = "https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=sf&delo_id=1540005";

const parsed = parseCourtUrl(searchUrl);
console.log(parsed);
// {
//   court_domain: "krasnodar-sovetsky--krd.sudrf.ru",
//   name_op: "sf",
//   srv_num: "1",
//   delo_id: "1540005",
//   is_search_form: true
// }

Пример 3: Формирование ссылки на просмотр дела

const url = buildCourtUrl(
  "krasnodar-sovetsky--krd",
  "471522071",
  "b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94",
  "1540005"
);
// Результат: "https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=case&case_id=471522071&case_uid=b5ff4b7f-bb1b-4cea-bcb6-a952174a6d94&delo_id=1540005"

Пример 4: Формирование ссылки на форму поиска

const searchUrl = buildSearchFormUrl("krasnodar-sovetsky--krd", "1540005");
// Результат: "https://krasnodar-sovetsky--krd.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=sf&delo_id=1540005"

🔄 Связь с текущим парсером

В файле court_parser_function.js парсер уже умеет:

  • Определять тип суда по домену (региональный/московский)
  • Парсить события из таблиц div#cont2 или div#cont3
  • Обрабатывать разные форматы дат

⚠️ Важно:

  • Парсер работает только с name_op=case (просмотр конкретного дела)
  • Форма поиска (name_op=sf) не парсится текущим парсером
  • Если в парсер передать ссылку с name_op=sf, он не найдет события

Что можно улучшить:

  • Добавить валидацию параметров URL перед парсингом
  • Добавить проверку name_op - если это sf, вернуть ошибку с понятным сообщением
  • Добавить функцию извлечения параметров из URL
  • Добавить функцию формирования URL из параметров
  • 🔮 В будущем: добавить поддержку парсинга результатов поиска (если понадобится)

📚 Дополнительные ресурсы

  • Официальный сайт системы судов: https://sudrf.ru
  • API Debexpert (если используется): документация по интеграции
  • База данных court: таблицы с делами и ссылками

Дата создания: 2025-01-XX
Автор: Анализ структуры URL судебных дел
Версия: 1.0