diff --git a/deploy/llm_prompt.py b/deploy/llm_prompt.py index ddcdd07..ee2a1d1 100644 --- a/deploy/llm_prompt.py +++ b/deploy/llm_prompt.py @@ -102,7 +102,7 @@ FALLBACK_DIFF = """Ты — анализатор допсоглашений (Д 7. Если в тексте есть и фраза о новой редакции, и точечные правки — приоритет за «новой редакцией»: full_replace. EDGE-CASES: -8. UNRESOLVED — если ДС упоминает изменение услуги, которой НЕТ в текущей спецификации, ИЛИ название настолько отличается, что нельзя уверенно сопоставить с конкретным id. В reason укажи причину. +8. UNRESOLVED — если ДС упоминает изменение услуги, которой НЕТ в текущей спецификации, ИЛИ название настолько отличается, что нельзя уверенно сопоставить с конкретным id. ВАЖНО: если СОМНЕВАЕШЬСЯ в сопоставлении — делай UNRESOLVED, а НЕ ADD. Лучше unresolved, чем ложный дубликат. В reason укажи причину. 9. Частичные данные: если в ДС нет цены/кол-ва/даты — ставь null для этих полей, не выдумывай. 10. Пропускай итоговые строки («Итого», «НДС», «К оплате») и подписи/реквизиты. 11. price, qty, sum — ЧИСЛА (без «руб.», без пробелов; «55 000,00» \u2192 55000). Не пересчитывай суммы сам — бери из ДС. @@ -242,17 +242,45 @@ def build_classify_prompt(header_text): body = prompt["body"].replace("{header_text}", header_text) return body, prompt.get("id", "") # Fallback - body = """Ты — классификатор договорных документов. Ниже фрагмент текста документа. + body = """Ты — классификатор договорных документов облачного провайдера НУБЕС. -Определи: -1. doc_type: "contract", "supplement", "specification", "other" -2. own_number: номер ЭТОГО документа -3. parent_number: номер родительского договора (для допников/спецификаций) -4. doc_date: дата в формате YYYY-MM-DD -5. counterparty: название контрагента -6. confidence: "ok" или "low" +Ниже фрагмент текста документа. Определи: -Верни СТРОГО JSON: {"doc_type":"...","own_number":"...","parent_number":"...","doc_date":"...","counterparty":"...","confidence":"..."} +1. doc_type: + - "contract" — договор (заголовок «Договор», «Соглашение», преамбула с условиями) + - "supplement" — допсоглашение (ссылается на родительский договор, меняет условия) + - "specification" — спецификация / приложение с таблицей услуг (стойко-места, IP, каналы, питание) + - "other" — НЕ договорной документ: акт сверки, счёт, счёт-фактура, УПД, акт оказанных услуг, платёжное поручение, доверенность, письмо + +2. own_number — номер ЭТОГО документа (например «XXX001-03700», «МЭС-123/2024», «1» для допника). + Если номер не указан — null. + +3. parent_number — номер родительского договора (для supplement и specification). + Для doc_type="contract": ВСЕГДА null. + +4. doc_date — дата документа в формате YYYY-MM-DD. Если дата прописью — переведи в цифры. + Если нет даты — null. + +5. counterparty — название КОНТРАГЕНТА (Заказчика). + ВАЖНО: НУБЕС — всегда Исполнитель. НЕ возвращай НУБЕС как counterparty. + НУБЕС известен как: «НУБЕС», «ООО НУБЕС», «ООО "НУБЕС"», «Nubes». + counterparty — ВСЕГДА другая сторона (Заказчик/Покупатель/Абонент). + Если документ не содержит контрагента — null. + +Верни СТРОГО JSON без пояснений: +{"doc_type":"...","own_number":"...","parent_number":"...","doc_date":"...","counterparty":"..."} + +ПРИМЕР 1 (договор): +Текст: «Договор № XXX001-03700 от 15.03.2025. ООО "НУБЕС" (Исполнитель) и ЗАО "ТехноПлюс" (Заказчик)...» +Ответ: {"doc_type":"contract","own_number":"XXX001-03700","parent_number":null,"doc_date":"2025-03-15","counterparty":"ЗАО \"ТехноПлюс\""} + +ПРИМЕР 2 (допсоглашение): +Текст: «Допсоглашение №1 к Договору № XXX003-01300 от 05.06.2024...» +Ответ: {"doc_type":"supplement","own_number":"1","parent_number":"XXX003-01300","doc_date":"2024-06-05","counterparty":"АО XXX003"} + +ПРИМЕР 3 (мусор): +Текст: «Акт сверки взаимных расчётов за 1 квартал 2025 г. Стороны: НУБЕС и ООО Ромашка. Сальдо 150 000 руб.» +Ответ: {"doc_type":"other","own_number":null,"parent_number":null,"doc_date":"2025-03-31","counterparty":"ООО Ромашка"} ДОКУМЕНТ: ---