Изтегля документацията на конкретна поръчка от eop.bg, анализира изискванията и подготвя структуриран анализ. Използва се след избор на поръчка от eop-scan.
Преди да започнеш, прочети метаданните на поръчката с Read tool:
./eopowers/offers/$ARGUMENTS/meta.mdПроверка за вече изтеглени файлове: Ако ./eopowers/offers/$ARGUMENTS/attachments/ вече съществува и съдържа файлове (изтеглени от eop-scan) — пропусни изтеглянето и премини директно към парсване. Покажи: "📁 Прикачените файлове вече са изтеглени от eop-scan. Преминавам към анализ."
https://app.eop.bg/today/$ARGUMENTS./eopowers/offers/$ARGUMENTS/attachments/python3 -c "
import zipfile, os, shutil, subprocess
attachments = './eopowers/offers/$ARGUMENTS/attachments'
for f in [x for x in os.listdir(attachments) if x.endswith('.zip')]: zipfile.ZipFile(os.path.join(attachments, f)).extractall(attachments)
for f in [x for x in os.listdir(attachments) if x.endswith('.rar')]: subprocess.run(['unrar', 'x', '-o+', os.path.join(attachments, f), attachments + '/'], capture_output=True)
for root, dirs, files in os.walk(attachments): for fname in files: src = os.path.join(root, fname) dst = os.path.join(attachments, fname) if src != dst and not os.path.exists(dst): shutil.move(src, dst)
for root, dirs, files in os.walk(attachments, topdown=False): if root != attachments and not os.listdir(root): os.rmdir(root) "
**Обработка на грешки:** timeout 60 секунди на файл, пропускай повредени файлове и документирай в analysis.md.
---
### Идентификация на шаблон
Евристика за идентификация на шаблон:
1. **Имена на файлове:** търси "образец", "приложение", "template", "оферт", "предложение"
2. **Структура на документа:** двуколонни таблици, полета за попълване, празни клетки
3. **Тип файл:** DOCX за текстови шаблони, XLSX за КСС
4. **При неяснота:** попитай потребителя "Кой файл е шаблонът за оферта?"
---
### Парсване на документи
Изпрати subagent eop-offer-analyzer с пътищата до всички изтеглени файлове за структурирано извличане на данни.
Алтернативно, парсвай директно:
**DOCX файлове:**
```python
python -c "
from docx import Document
doc = Document('path/to/file.docx')
for para in doc.paragraphs:
print(para.text)
for table in doc.tables:
for row in table.rows:
print(' | '.join(cell.text.strip() for cell in row.cells))
"
XLSX файлове (КСС):
python -c "
from openpyxl import load_workbook
wb = load_workbook('path/to/file.xlsx')
for sheet in wb.sheetnames:
ws = wb[sheet]
for row in ws.iter_rows(values_only=True):
print(' | '.join(str(c) if c else '' for c in row))
"
След успешно парсване, запиши ./eopowers/offers/$ARGUMENTS/analysis.md със следната структура:
# Анализ на поръчка $ARGUMENTS
## Обща информация
- Възложител: [name]
- Уникален номер: [number]
- Прогнозна стойност: [value]
- Краен срок: [deadline]
- Начин на възлагане: [procedure]
## Критерии за оценка
- Цена: [X]%
- Техническо предложение: [Y]%
- Срок за изпълнение: [Z]%
(или: "Най-ниска цена" ако единствен критерий)
## Изисквания (по позиции)
| # | Изискване | Минимум | Единица | Забележка |
|---|-----------|---------|---------|-----------|
| 1 | ... | ... | ... | ... |
## КСС позиции (ако има)
| # | Описание | Ед. мярка | Количество | Ед. цена | Обща стойност |
|---|----------|-----------|-----------|----------|---------------|
| 1 | ... | ... | ... | (празно) | (празно) |
## Идентифицирани шаблони
- Оферта (DOCX): [filename]
- КСС (XLSX): [filename]
- Други: [list]
## Специални условия
- Гаранция за участие: [amount/type]
- Гаранция за изпълнение: [amount/type]
- Подизпълнители: [allowed/not allowed]
- Срок за изпълнение: [max days]
## Прикачени файлове
- [filename1] — [description/type]
- [filename2] — [description/type]