Metadata-Version: 2.4
Name: medlabs-standard
Version: 0.1.1
Summary: Open JSON standard and Python SDK for deterministic lab report normalization
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: jsonschema>=4.23.0
Requires-Dist: pypdf>=5.0.0
Requires-Dist: structlog>=24.4.0
Provides-Extra: dev
Requires-Dist: pytest>=8.3.4; extra == 'dev'
Requires-Dist: ruff>=0.9.6; extra == 'dev'
Provides-Extra: providers
Requires-Dist: langfuse>=2.49.0; extra == 'providers'
Requires-Dist: openai>=1.61.0; extra == 'providers'
Requires-Dist: pydantic-settings>=2.7.1; extra == 'providers'
Requires-Dist: python-dotenv>=1.0.1; extra == 'providers'
Description-Content-Type: text/markdown

# MedLabs Standard

`MedLabs Standard` объединяет:
- `standard/` — открытый JSON-стандарт лабораторных панелей
- `sdk/python/medlabs_sdk/` — Python SDK для детерминированного пайплайна

Пайплайн SDK: `ingest -> extract -> normalize -> map -> validate`.

## Миссия

- Стандарт: привести результаты лабораторных отчетов к единому, машинно-читабельному JSON-контракту.
- Библиотека: дать простой и воспроизводимый способ получить этот контракт из текста/PDF, независимо от конкретного LLM-провайдера.

## Quick Start

### 1) Установка

Для работы из репозитория:

```bash
uv sync --extra providers --extra dev
```

После публикации в PyPI:

```bash
pip install "medlabs-standard[providers]"
```

### 2) Настройка переменных окружения

```bash
cp .env.example .env
```

Минимально нужны:
- `OPENAI_API_KEY`
- `OPENAI_MODEL` (можно оставить дефолт)

Опционально:
- `MEDLABS_SAMPLE_PDF` для `examples/parse_pdf.py`

`MedLabsPipeline()` автоматически читает переменные из окружения процесса и `.env/.env.local` по всей иерархии директорий (ближайший к текущей директории файл имеет приоритет).

### 3) Запуск examples

```bash
uv run --extra dev python examples/validate_standard_fixtures.py
uv run --extra dev python examples/pipeline_with_mock_llm.py
uv run --extra providers python examples/parse_text.py --panel CBC
uv run --extra providers python examples/parse_pdf.py --panel CBC
```

### 4) Минимальный код

```python
from medlabs_sdk import MedLabsPipeline

pipeline = MedLabsPipeline()
result = pipeline.parse_text("WBC 5,4 x10^9/L (4.0-10.0)", panel="CBC")
print(result.validation.is_valid, len(result.validation.issues))
```

Детали примеров: `examples/README.md`.
Flow пайплайна: `docs/flow.md`.

## Проверка качества

```bash
uv run --extra dev ruff check .
uv run --extra dev pytest -q
```
