Skip to main content

Cliente async para integracao de projetos Django com a API do CADSUS-MS.

Project description

cadsus_client

Biblioteca Python para simplificar a interoperabilidade de projetos Django com a API do CADSUS do Ministerio da Saude.

O pacote publicado no PyPI se chama 3s-cadsus-client, enquanto o import no codigo Python e cadsus_client.

Destaques

  • Cliente 100% assincrono com httpx.AsyncClient
  • Cache de token com suporte automatico ao cache do Django quando disponivel
  • Fallback para cache em memoria quando o Django nao estiver carregado
  • Autenticacao por API ou CERT
  • Metodo buscar_pessoa com deteccao automatica de CPF ou CNS
  • Conversao do retorno SOAP em dicionario Python com resultado.json()
  • Workflow de GitHub Actions pronto para build, teste e publicacao no PyPI

Instalacao

pip install 3s-cadsus-client

Configuracao por variaveis de ambiente

Metodo API

export CADSUS_AUTH_METHOD=API
export CADSUS_AUTH_LOGIN_URL=https://ses-token-api-linux.azurewebsites.net/login
export CADSUS_AUTH_TOKEN_URL=https://ses-token-api-linux.azurewebsites.net/token/osb
export CADSUS_API_URL=https://servicos.saude.gov.br/cadsus/v2/PDQSupplierJWT
export CADSUS_USER=user_cadsus
export CADSUS_PASSWORD=password_cadsus

Metodo CERT

export CADSUS_AUTH_METHOD=CERT
export CADSUS_AUTH_TOKEN_URL=https://ehr-auth.saude.gov.br/api/osb/token
export CADSUS_API_URL=https://servicos.saude.gov.br/cadsus/v2/PDQSupplierJWT
export CADSUS_CERT=/srv/app/cert.pem
export CADSUS_KEY=/srv/app/key.pem

Variaveis opcionais

export CADSUS_SYSTEM_CODE=CADSUS
export CADSUS_TIMEOUT=30
export CADSUS_CACHE_ALIAS=default
export CADSUS_CACHE_PREFIX=cadsus_client
export CADSUS_TOKEN_TTL_FALLBACK=300

Uso rapido

from cadsus_client import CadSUSClient


async def consultar_cadsus(identificador: str) -> dict | None:
    async with CadSUSClient.from_env() as client:
        resultado = await client.buscar_pessoa(identificador)
        return resultado.json()

Exemplo em projeto Django

from django.http import JsonResponse

from cadsus_client import CadSUSClient


async def buscar_pessoa_view(request):
    identificador = request.GET["identificador"]

    async with CadSUSClient.from_env() as client:
        resultado = await client.buscar_pessoa(identificador)
        payload = resultado.json()

    return JsonResponse(
        {
            "document_type": resultado.document_type.value,
            "identifier": resultado.normalized_identifier,
            "dados": payload,
        }
    )

Tambem existe um atalho para obter diretamente o dicionario parseado:

from cadsus_client import CadSUSClient


async def consultar_cadsus(identificador: str) -> dict | None:
    async with CadSUSClient.from_env() as client:
        return await client.buscar_pessoa_json(identificador)

Cache de token

Quando o Django estiver disponivel e configurado, a biblioteca usa django.core.cache automaticamente. Caso contrario, usa um cache em memoria do processo.

O tempo de expiracao do token e resolvido na seguinte ordem:

  1. Campo expires_in da resposta de autenticacao
  2. Claim exp do JWT retornado
  3. Fallback configurado por CADSUS_TOKEN_TTL_FALLBACK

Personalizacao avancada da autenticacao API

Como a especificacao recebida nao detalha o payload exato dos dois POSTs do metodo API, a biblioteca aplica o fluxo padrao abaixo:

  1. POST CADSUS_AUTH_LOGIN_URL com JSON {"username": "...", "password": "..."}
  2. POST CADSUS_AUTH_TOKEN_URL com header Authorization: Bearer <token-do-login>

Se a sua instalacao exigir outro formato, voce pode customizar os requests:

from cadsus_client import CadSUSClient, RequestDefinition


def build_login_request(settings):
    return RequestDefinition(
        method="POST",
        url=settings.auth_login_url,
        data={"user": settings.user, "password": settings.password},
    )


def build_token_request(settings, login_token):
    return RequestDefinition(
        method="POST",
        url=settings.auth_token_url,
        headers={"Authorization": f"Bearer {login_token}"},
        json={"grant_type": "client_credentials"},
    )


async def consultar(identificador: str):
    async with CadSUSClient.from_env(
        api_login_request_factory=build_login_request,
        api_token_request_factory=build_token_request,
    ) as client:
        return await client.buscar_pessoa(identificador)

Publicacao no PyPI

O workflow em .github/workflows/publish.yml roda testes em push e pull_request, gera os artefatos do pacote e publica no PyPI quando uma tag v* e enviada.

O fluxo foi montado para usar Trusted Publishing via OIDC. Antes da primeira release, cadastre o repositrio e o workflow no PyPI:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

3s_cadsus_client-0.1.1.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

3s_cadsus_client-0.1.1-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file 3s_cadsus_client-0.1.1.tar.gz.

File metadata

  • Download URL: 3s_cadsus_client-0.1.1.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for 3s_cadsus_client-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a8da757ff133e2a7366c023c59ba9e82757ab5461e0e50d6b82713af21459209
MD5 96e99ff2828a8b4bbb2102cef4f5513e
BLAKE2b-256 6931a6cb99612a9bd79a480d49a924cc4d0ad8368120b83d0afd9b2f14490f3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for 3s_cadsus_client-0.1.1.tar.gz:

Publisher: publish.yml on 3S-Saude/3s-cadsus-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file 3s_cadsus_client-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for 3s_cadsus_client-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cb038e7587ae6ee2cb02e2ca54d24e4930a316befe8775e55a2178b47ab5d719
MD5 70ec76e4078d5b01f3ce6c1c61ed432b
BLAKE2b-256 f8dd60079506ecc6f754c3c6bc72c0c11324203c66202708a095f9235e8ffbc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for 3s_cadsus_client-0.1.1-py3-none-any.whl:

Publisher: publish.yml on 3S-Saude/3s-cadsus-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page