Metadata-Version: 2.4
Name: sintezy
Version: 0.2.0
Summary: SDK oficial para integração com a plataforma Sintezy
Author-email: Sintezy <contato@sintezy.com>
License: MIT
Project-URL: Homepage, https://github.com/Sintezy/sintezy-sdk-python
Project-URL: Documentation, https://sintezy.com/developers
Project-URL: Repository, https://github.com/Sintezy/sintezy-sdk-python
Keywords: sintezy,medical,transcription,healthcare,sdk
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: requests>=2.25.0

# Sintezy SDK Python

SDK oficial para integração com a plataforma Sintezy.

## Instalação

```bash
pip install sintezy
```

## Uso Rápido

```python
from sintezy import SintezySDK

# 1. Inicializar a SDK
sdk = SintezySDK(
    client_id='seu-client-id',
    client_secret='seu-client-secret'
)

# 2. Criar uma consulta (autenticação é automática)
appointment = sdk.create_appointment(
    user_email='medico@clinica.com',
    user_name='Dr. João Silva',
    layout={
        'fields': [
            {'name': 'Queixa Principal', 'content': 'inserir aqui a queixa principal', 'position': 0},
            {'name': 'História da Doença Atual', 'content': 'inserir aqui a história', 'position': 1},
            {'name': 'Exame Físico', 'content': 'inserir aqui os exames', 'position': 2},
            {'name': 'Diagnóstico', 'content': 'inserir aqui o diagnóstico', 'position': 3},
            {'name': 'Conduta', 'content': 'inserir aqui a conduta', 'position': 4},
        ]
    }
)

# 3. Abrir portal para gravação
print(f"Portal URL: {appointment.portal_url}")
# O médico grava a consulta no portal

# 4. Após finalizar, buscar o documento principal
documento = sdk.get_document(appointment.secure_id, 'document')

# 5. Gerar outros documentos
receita = sdk.generate_document(appointment.secure_id, 'prescription')
atestado = sdk.generate_document(appointment.secure_id, 'certificate')
```

## Métodos Disponíveis

### Autenticação

| Método | Descrição |
|--------|-----------|
| `authenticate()` | Autentica usando Client Credentials (OAuth 2.0). Chamado automaticamente. |
| `is_authenticated()` | Verifica se há um token válido |

### Consultas (Appointments)

| Método | Descrição |
|--------|-----------|
| `create_appointment(...)` | Cria uma nova consulta e retorna a URL do portal |
| `get_appointment(secure_id)` | Busca uma consulta pelo ID |
| `delete_appointment(secure_id)` | Exclui uma consulta (soft delete) |

### Documentos

| Método | Descrição |
|--------|-----------|
| `generate_document(secure_id, document_type=None, contextualization=None, format=None)` | Gera um documento de uma consulta finalizada |
| `get_document(secure_id, document_type)` | Busca um documento já gerado |
| `list_documents(secure_id)` | Lista os documentos e quais já existem |

### Transcrição e assinatura

| Método | Descrição |
|--------|-----------|
| `get_transcription(secure_id)` | Transcrição da consulta, após a gravação |
| `get_subscription_status(email)` | Status da assinatura do médico (API keys reseller) |

## Tipos de Documento

| Tipo | Descrição |
|------|-----------|
| `document` | Prontuário/Documento principal (gerado automaticamente ao finalizar) |
| `anamnese_summary` | Resumo de anamnese |
| `clinic_summary` | Resumo clínico |
| `referral` | Encaminhamento |
| `exames_call` | Solicitação de exames |
| `prescription` | Receita médica |
| `certificate` | Atestado médico |
| `inss_report` | Laudo INSS |

## Documentos com o seu prompt

Além dos tipos acima, você pode escrever o próprio prompt do documento, com os
mesmos dois textos que o médico preenche no portal da Sintezy:

- **`contextualization`**: objetivo do documento, tom esperado, regras e
  informações obrigatórias.
- **`format`**: como o texto deve aparecer, com seções, quebras de linha,
  título e assinatura.

Os dois são sempre obrigatórios juntos. Nada do que você envia fica cadastrado
na Sintezy: reenvie o prompt a cada geração.

```python
# Tipo do catálogo com o SEU prompt.
# Continua sendo clinic_summary e é buscado por esse tipo.
sdk.generate_document(
    secure_id,
    'clinic_summary',
    contextualization='Explique a consulta ao paciente em linguagem simples...',
    format='RESUMO DA CONSULTA\n\nOlá, [NOME]...',
)

# Documento que não é de nenhum tipo do catálogo: o document_type vira o NOME
# que você dá a ele, e a busca depois é por esse nome.
sdk.generate_document(secure_id, 'carta_alta', contextualization='...', format='...')
carta = sdk.get_document(secure_id, 'carta_alta')

# Sem document_type, o documento é gravado com o nome `custom`.
sdk.generate_document(secure_id, contextualization='...', format='...')
custom = sdk.get_document(secure_id, 'custom')
```

Regras que valem a pena saber:

- Um documento por nome, por consulta. Regerar com o mesmo `document_type`
  substitui o anterior; nomes diferentes convivem.
- O nome aceita `a-z`, `0-9`, `_` e `-`, até 64 caracteres.
- A anamnese principal (`document`) segue o layout da consulta e não aceita
  prompt próprio.
- A consulta precisa estar finalizada.
- Use sempre `documento.type` da resposta para buscar depois.

## Licença

MIT
