diff --git a/docker/Dockerfile b/Dockerfile similarity index 89% rename from docker/Dockerfile rename to Dockerfile index 5956df38..2e37f77b 100644 --- a/docker/Dockerfile +++ b/Dockerfile @@ -25,12 +25,10 @@ RUN useradd -ms /bin/bash pysus \ COPY pyproject.toml poetry.lock LICENSE README.md /usr/src/ COPY pysus /usr/src/pysus -COPY docker/scripts/entrypoint.sh /entrypoint.sh -COPY docker/notebooks/ /home/pysus/Notebooks/ +COPY entrypoint.sh /entrypoint.sh RUN pip install poetry \ && cd /usr/src && poetry config virtualenvs.create false && poetry install --with docs \ - && pip install 'httpx<0.28' \ && chown -R pysus:pysus /home/pysus USER pysus diff --git a/docker/docker-compose.yaml b/docker-compose.yaml similarity index 83% rename from docker/docker-compose.yaml rename to docker-compose.yaml index a854abe4..a9429ff5 100644 --- a/docker/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,8 +1,8 @@ services: jupyter: build: - context: ".." - dockerfile: docker/Dockerfile + context: "." + dockerfile: Dockerfile hostname: pysus-jupyter container_name: pysus-jupyter ports: diff --git a/docker/notebooks/Welcome.ipynb b/docker/notebooks/Welcome.ipynb deleted file mode 100644 index c1d645a3..00000000 --- a/docker/notebooks/Welcome.ipynb +++ /dev/null @@ -1,89 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Welcome to PySUS\n", - "\n", - "PySUS provides tools for dealing with Brazil's public health data (SINAN, SINASC, SIM, SIH, SIA, PNI, IBGE, CNES, CIHA).\n", - "\n", - "## Quick start\n", - "\n", - "List available datasets and files:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import pysus\n", - "\n", - "pysus.list_files()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Fetch SINAN data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from pysus import sinan\n", - "\n", - "df = sinan(\"deng\", year=2023)\n", - "df.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Fetch SINASC data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from pysus import sinasc\n", - "\n", - "df = sinasc(state=\"RJ\", year=2023)\n", - "df.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Documentation\n", - "\n", - "- [PySUS GitHub](https://github.com/InfoDengue/PySUS)\n", - "- [PySUS Docs](https://pysus.readthedocs.io/)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "name": "python", - "version": "3.12.0" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docker/scripts/poetry-install.sh b/docker/scripts/poetry-install.sh deleted file mode 100644 index 0499a555..00000000 --- a/docker/scripts/poetry-install.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -poetry config virtualenvs.create false -poetry install --with docs diff --git a/docker/scripts/entrypoint.sh b/entrypoint.sh similarity index 100% rename from docker/scripts/entrypoint.sh rename to entrypoint.sh diff --git a/pysus/api/client.py b/pysus/api/client.py index 28d486ea..95cf8f06 100644 --- a/pysus/api/client.py +++ b/pysus/api/client.py @@ -322,9 +322,9 @@ async def download( if timeout is not None: with anyio.fail_after(timeout): - await client._download_file(file, local_path, callback) + await client.download(file, local_path, callback) else: - await client._download_file(file, local_path, callback) + await client.download(file, local_path, callback) await self._update_state( local_path=local_path, @@ -517,9 +517,7 @@ async def query( all_datasets = await self._ducklake.datasets() if dataset: - matching = [ - d for d in all_datasets if d.name.lower() == dataset.lower() - ] + matching = [d for d in all_datasets if d.name.lower() == dataset.lower()] if not matching: return [] target = matching[0] @@ -618,9 +616,7 @@ def get_columns(path: Path) -> set[tuple[str, str]]: else: paths_str = ", ".join(f"'{p}'" for p in paths) - query = ( - f"SELECT * FROM read_parquet([{paths_str}], union_by_name=True)" - ) + query = f"SELECT * FROM read_parquet([{paths_str}], union_by_name=True)" if sql: if sql.upper().startswith("SELECT"): @@ -633,9 +629,7 @@ def get_columns(path: Path) -> set[tuple[str, str]]: if not add_dv: return base - geocode_cols = [ - col[0] for col in base.description if is_geocode_column(col[0]) - ] + geocode_cols = [col[0] for col in base.description if is_geocode_column(col[0])] if not geocode_cols: return base diff --git a/pysus/api/dadosgov/models.py b/pysus/api/dadosgov/models.py index bbe1d654..dab3d286 100644 --- a/pysus/api/dadosgov/models.py +++ b/pysus/api/dadosgov/models.py @@ -30,13 +30,9 @@ def _dedup_entries( if m: stem = filename[: m.start()] fmt = m.group(1).lower() - grouped.setdefault(stem, []).append( - (fmt, filename, recurso, metadata) - ) + grouped.setdefault(stem, []).append((fmt, filename, recurso, metadata)) else: - grouped.setdefault(filename, []).append( - ("", filename, recurso, metadata) - ) + grouped.setdefault(filename, []).append(("", filename, recurso, metadata)) result: list[tuple[str, Any, dict]] = [] for _, items in grouped.items(): @@ -210,7 +206,7 @@ async def _download( """Download the file to a local path.""" if not output: output = CACHEPATH / self.name - return await self.client._download_file(self, output, callback=callback) + return await self.client.download(self, output, callback=callback) async def fetch_size(self) -> int: """Fetch the remote file size and update the local record. @@ -249,9 +245,7 @@ class Group(BaseRemoteGroup): """A group of files within a dataset.""" record: ConjuntoDados - _formatter: Callable[[str], dict[str, Any]] | None = PrivateAttr( - default=None - ) + _formatter: Callable[[str], dict[str, Any]] | None = PrivateAttr(default=None) def __init__( self, @@ -319,9 +313,7 @@ async def _fetch_files(self) -> list[BaseRemoteFile]: """Build File objects from the underlying resources.""" entries: list[tuple[str, Any, dict]] = [] for recurso in self.record.resources: - filename = ( - recurso.file_name or recurso.url.split("/")[-1].split("?")[0] - ) + filename = recurso.file_name or recurso.url.split("/")[-1].split("?")[0] if filename.lower().endswith(".pdf") or filename.startswith("get_"): continue metadata = {} diff --git a/pysus/api/ducklake/catalog/adapters.py b/pysus/api/ducklake/catalog/adapters.py new file mode 100644 index 00000000..eb16883b --- /dev/null +++ b/pysus/api/ducklake/catalog/adapters.py @@ -0,0 +1,176 @@ +from abc import ABC +from pathlib import Path + +import httpx +from anyio import to_thread +from pydantic import BaseModel, SecretStr +from sqlalchemy.engine import Engine +from sqlalchemy import create_engine +from sqlalchemy.pool import StaticPool +from sqlalchemy.orm import sessionmaker, Session + +from pysus import CACHEPATH +from pysus.api import types +from pysus.api.ducklake.functional import download_s3, upload_s3 + + +class DuckLakeCredentials(BaseModel): + access_key: SecretStr + secret_key: SecretStr + + +class BaseAdapter(ABC): + cache_dir: Path = Path(CACHEPATH) / "ducklake" + db_local: Path + db_remote: Path + + def __init__( + self, engine=None, credentials: DuckLakeCredentials | None = None, **data + ) -> None: + self._engine = engine + self._session_factory = None + self.cache_dir.mkdir(parents=True, exist_ok=True) + self.credentials = credentials + + @property + def remote_url(self) -> str: + return f"https://{types.S3_ENDPOINT}/{types.S3_BUCKET}/{self.db_remote}" + + def get_session(self) -> Session: + if not self._session_factory: + raise RuntimeError("Database engine not initialized. Call connect() first.") + return self._session_factory() + + async def connect(self, force: bool = False) -> None: + if self._engine and not force: + if not self._session_factory: + self._session_factory = sessionmaker(bind=self._engine) + return + + await self._download_catalog( + self.db_local, + str(self.db_remote), + ) + self._engine = await to_thread.run_sync(self.setup_engine) + self._session_factory = sessionmaker(bind=self._engine) + + def setup_engine( + self, access_key: str | None = None, secret_key: str | None = None + ) -> Engine: + engine: Engine = create_engine( + f"duckdb:///{self.db_local}", + poolclass=StaticPool, + ) + + with engine.connect() as conn: + conn.exec_driver_sql("INSTALL ducklake; LOAD ducklake;") + + has_pysus = conn.exec_driver_sql( + "SELECT 1 FROM information_schema.schemata WHERE schema_name = 'pysus'" + ).fetchone() + + if has_pysus: + conn.exec_driver_sql("SET search_path='pysus,main';") + else: + conn.exec_driver_sql("SET search_path='main';") + + s3_cfg = { + "s3_endpoint": types.S3_ENDPOINT, + "s3_region": types.S3_REGION, + "s3_url_style": "path", + "s3_use_ssl": "true", + } + + if access_key and secret_key: + s3_cfg["s3_access_key_id"] = access_key + s3_cfg["s3_secret_access_key"] = secret_key + + for key, value in s3_cfg.items(): + conn.exec_driver_sql(f"SET {key}='{value}'") + + conn.commit() + + return engine + + async def _download_catalog(self, local_path: Path, remote_path: str) -> None: + url = f"https://{types.S3_ENDPOINT}/{types.S3_BUCKET}/{remote_path}" + + if local_path.exists(): + try: + local_size = local_path.stat().st_size + except OSError: + local_size = -1 + else: + local_size = -1 + + async with httpx.AsyncClient(follow_redirects=True) as client: + try: + head = await client.head(url) + head.raise_for_status() + remote_size = int(head.headers.get("content-length", 0)) + except Exception: + remote_size = 0 + + if remote_size == local_size: + return + + access_key = ( + self.credentials.access_key.get_secret_value() if self.credentials else None + ) + secret_key = ( + self.credentials.secret_key.get_secret_value() if self.credentials else None + ) + + await download_s3( + remote_path=remote_path, + local_path=local_path, + access_key=access_key, + secret_key=secret_key, + ) + + async def _upload_catalog(self) -> None: + if not self.credentials: + raise PermissionError( + "Admin credentials required to upload catalog.", + ) + + if not self.db_local.exists(): + raise FileNotFoundError("catalog file not found") + + await upload_s3( + local_path=self.db_local, + remote_path=str(self.db_remote), + access_key=self.credentials.access_key.get_secret_value(), + secret_key=self.credentials.secret_key.get_secret_value(), + ) + + async def close(self, update: bool = False) -> None: + if update: + await self._upload_catalog() + + if self._engine: + await to_thread.run_sync(self._engine.dispose) + self._engine = None + self._session_factory = None + + +class CatalogAdapter(BaseAdapter): + def __init__(self, engine=None, **data) -> None: + super().__init__(engine=engine, **data) + self.db_local: Path = self.cache_dir / "catalog.duckdb" + self.db_remote: str = "public/catalog.duckdb" + + +class DatasetAdapter(BaseAdapter): + def __init__(self, name: str, engine=None, **data) -> None: + super().__init__(engine=engine, **data) + self.dataset_name: str = name + self.db_local: Path = self.cache_dir / f"catalog_{name}.duckdb" + self.db_remote: str = f"datasets/catalog_{name}.duckdb" + + +class ColumnsAdapter(BaseAdapter): + def __init__(self, engine=None, **data) -> None: + super().__init__(engine=engine, **data) + self.db_local: Path = self.cache_dir / "columns.duckdb" + self.db_remote: str = "public/columns.duckdb" diff --git a/pysus/api/ducklake/catalog/columns.py b/pysus/api/ducklake/catalog/columns.py deleted file mode 100644 index b7cd3751..00000000 --- a/pysus/api/ducklake/catalog/columns.py +++ /dev/null @@ -1,7235 +0,0 @@ -"""Catalog column definitions extracted from catalog.db. - -Maps every column name to a dict of {dataset_name: description}. -""" - -ABAND = {"pni": ""} - -ABDOMINAL = {"sinan": ""} - -ABRANDAD = {"cnes": ""} - -AB_ANOACOM = {"sia": ""} - -AB_DTCIRG2 = {"sia": ""} - -AB_DTCIRUR = {"sia": ""} - -AB_IMC = {"sia": ""} - -AB_MESACOM = {"sia": ""} - -AB_NUMAIH = {"sia": ""} - -AB_NUMAIH2 = {"sia": ""} - -AB_PONTBAR = {"sia": ""} - -AB_PRCAIH2 = {"sia": ""} - -AB_PRCAIH3 = {"sia": ""} - -AB_PRCAIH4 = {"sia": ""} - -AB_PRCAIH5 = {"sia": ""} - -AB_PRCAIH6 = {"sia": ""} - -AB_PROCAIH = {"sia": ""} - -AB_TABBARR = {"sia": ""} - -AB_T_PRC2 = {"sia": ""} - -AB_T_PRC3 = {"sia": ""} - -AB_T_PRC4 = {"sia": ""} - -AB_T_PRC5 = {"sia": ""} - -AB_T_PRC6 = {"sia": ""} - -ACF_ARTDIA = {"sia": ""} - -ACF_DUPLEX = {"sia": ""} - -ACF_FLEBIT = {"sia": ""} - -ACF_FREMIT = {"sia": ""} - -ACF_HEMATO = {"sia": ""} - -ACF_PREFAV = {"sia": ""} - -ACF_PULSO = {"sia": ""} - -ACF_USOCAT = {"sia": ""} - -ACF_VEIAVI = {"sia": ""} - -ACF_VEIDIA = {"sia": ""} - -ACIDO_PEPT = {"sinan": ""} - -ACIDTRAB = {"sim": ""} - -ACONDIC = {"sinan": ""} - -ACUPUNTURA = {"sinan": ""} - -AEROFOBIA = {"sinan": ""} - -AFASTAMENT = {"sinan": ""} - -AFAST_DESG = {"sinan": ""} - -AFAST_RISC = {"sinan": ""} - -AFAST_TRAB = {"sinan": ""} - -AFIRMATIVO = {"sinan": ""} - -AGENTE = {"sinan": ""} - -AGENTE_1 = {"sinan": ""} - -AGENTE_2 = {"sinan": ""} - -AGENTE_3 = {"sinan": ""} - -AGENTE_DES = {"sinan": ""} - -AGENTE_ET0 = {"sinan": ""} - -AGENTE_ET1 = {"sinan": ""} - -AGENTE_ET2 = {"sinan": ""} - -AGENTE_ET3 = {"sinan": ""} - -AGENTE_ETI = {"sinan": ""} - -AGENTE_OUT = {"sinan": ""} - -AGENTE_TOX = {"sinan": ""} - -AGHBE = {"sinan": ""} - -AGHBS = {"sinan": ""} - -AGITACAO = {"sinan": ""} - -AGRAVAIDS = {"sinan": ""} - -AGRAVALCOO = {"sinan": ""} - -AGRAVDIABE = {"sinan": ""} - -AGRAVDOENC = {"sinan": ""} - -AGRAVDROGA = {"sinan": ""} - -AGRAVOUTDE = {"sinan": ""} - -AGRAVOUTRA = {"sinan": ""} - -AGRAVO_DES = {"sinan": ""} - -AGRAVTABAC = {"sinan": ""} - -AGRESSIVI = {"sinan": ""} - -AGUA_ALIME = {"sinan": ""} - -AG_AMEACA = {"sinan": ""} - -AG_CORTE = {"sinan": ""} - -AG_ENFOR = {"sinan": ""} - -AG_ENVEN = {"sinan": ""} - -AG_ESPEC = {"sinan": ""} - -AG_FOGO = {"sinan": ""} - -AG_FORCA = {"sinan": ""} - -AG_OBJETO = {"sinan": ""} - -AG_OUTROS = {"sinan": ""} - -AG_QUENTE = {"sinan": ""} - -AIH = {"sih": ""} - -ALCATRAO = {"sinan": ""} - -ALCOOL = {"sinan": ""} - -ALIMENTO_C = {"sinan": ""} - -ALRM_ABDOM = {"sinan": ""} - -ALRM_HEMAT = {"sinan": ""} - -ALRM_HEPAT = {"sinan": ""} - -ALRM_HIPOT = {"sinan": ""} - -ALRM_LETAR = {"sinan": ""} - -ALRM_LIQ = {"sinan": ""} - -ALRM_PLAQ = {"sinan": ""} - -ALRM_SANG = {"sinan": ""} - -ALRM_VOM = {"sinan": ""} - -ALTCAUSA = {"sim": ""} - -ALVARA = {"cnes": ""} - -AMALARIA = {"sinan": ""} - -AMBIENTE = {"sinan": ""} - -AMB_NSUS = {"cnes": ""} - -AMB_SUS = {"cnes": ""} - -AMINA = {"sinan": ""} - -AMOS_OUT = {"sinan": ""} - -AMOS_PCR = {"sinan": ""} - -AMPICILINA = {"sinan": ""} - -AMPOLAS = {"sinan": ""} - -AMP_ACEVAS = {"sia": ""} - -AMP_ALBUMI = {"sia": ""} - -AMP_CARACT = {"sia": ""} - -AMP_DTCLI = {"sia": ""} - -AMP_DTINI = {"sia": ""} - -AMP_FOSFOR = {"sia": ""} - -AMP_HB = {"sia": ""} - -AMP_HBSAG = {"sia": ""} - -AMP_HCV = {"sia": ""} - -AMP_HIV = {"sia": ""} - -AMP_INTERC = {"sia": ""} - -AMP_KTVSEM = {"sia": ""} - -AMP_MAISNE = {"sia": ""} - -AMP_PTH = {"sia": ""} - -AMP_SEAPTO = {"sia": ""} - -AMP_SEPERI = {"sia": ""} - -AMP_SITINI = {"sia": ""} - -AMP_SITTRA = {"sia": ""} - -AMP_TRU = {"sia": ""} - -AM_ALTURA = {"sia": ""} - -AM_GESTANT = {"sia": ""} - -AM_PESO = {"sia": ""} - -AM_QTDTRAN = {"sia": ""} - -AM_SANGUE = {"sinan": ""} - -AM_TRANSPL = {"sia": ""} - -ANIMAL = {"sinan": ""} - -ANIM_ESP = {"sinan": ""} - -ANI_ARANHA = {"sinan": ""} - -ANI_LAGART = {"sinan": ""} - -ANI_SERPEN = {"sinan": ""} - -ANI_TIPO_1 = {"sinan": ""} - -ANO = { - "ibge": "", - "pni": "", - "sih": "", - "sinan": "", -} - -ANOMES = {"pni": ""} - -ANOREXIA = {"sinan": ""} - -ANO_CMPT = { - "ciha": "", - "sih": "", -} - -ANO_DT_SIN = {"sinan": ""} - -ANO_NASC = {"sinan": ""} - -ANTDTTRANS = {"sinan": ""} - -ANTEC_POS = {"sinan": ""} - -ANTEC_PRE = {"sinan": ""} - -ANTIBIOTIC = {"sinan": ""} - -ANTIB_DES = {"sinan": ""} - -ANTIHAVIGM = {"sinan": ""} - -ANTIHBCIGM = {"sinan": ""} - -ANTIHBE = {"sinan": ""} - -ANTIHBS = {"sinan": ""} - -ANTIHCV = {"sinan": ""} - -ANTIHDV = {"sinan": ""} - -ANTIHDVIGM = {"sinan": ""} - -ANTIHEVIGM = {"sinan": ""} - -ANTI_HBS = {"sinan": ""} - -ANTI_HCV = {"sinan": ""} - -ANTI_HIV = {"sinan": ""} - -ANTI_RAB = {"sinan": ""} - -ANTMUNTRAN = {"sinan": ""} - -ANTRELSE_N = {"sinan": ""} - -ANTSIFIL_N = {"sinan": ""} - -ANTTRANS_M = {"sinan": ""} - -ANTUFTRANS = {"sinan": ""} - -ANT_30_DIA = {"sinan": ""} - -ANT_AC = {"sinan": ""} - -ANT_ACIDEN = {"sinan": ""} - -ANT_AIDS = {"sinan": ""} - -ANT_ANEMIA = {"sinan": ""} - -ANT_ANIMAI = {"sinan": ""} - -ANT_ARAGEM = {"sinan": ""} - -ANT_ARRANH = {"sinan": ""} - -ANT_ARRUMO = {"sinan": ""} - -ANT_ASTERI = {"sinan": ""} - -ANT_BC = {"sinan": ""} - -ANT_BCG = {"sinan": ""} - -ANT_CABECA = {"sinan": ""} - -ANT_CANCER = {"sinan": ""} - -ANT_CANDID = {"sinan": ""} - -ANT_CAQUEX = {"sinan": ""} - -ANT_CAT_EX = {"sinan": ""} - -ANT_CB_CAI = {"sinan": ""} - -ANT_CB_CAR = {"sinan": ""} - -ANT_CB_COR = {"sinan": ""} - -ANT_CB_CRI = {"sinan": ""} - -ANT_CB_FOS = {"sinan": ""} - -ANT_CB_GRA = {"sinan": ""} - -ANT_CB_LAM = {"sinan": ""} - -ANT_CB_LAV = {"sinan": ""} - -ANT_CB_LIM = {"sinan": ""} - -ANT_CB_LIX = {"sinan": ""} - -ANT_CB_OUT = {"sinan": ""} - -ANT_CB_PLA = {"sinan": ""} - -ANT_CB_ROE = {"sinan": ""} - -ANT_CB_SIN = {"sinan": ""} - -ANT_CB_TER = {"sinan": ""} - -ANT_CHAGAS = {"sinan": ""} - -ANT_CITO = {"sinan": ""} - -ANT_COLHEI = {"sinan": ""} - -ANT_CONJ_C = {"sinan": ""} - -ANT_CONTAG = {"sinan": ""} - -ANT_CONTAT = {"sinan": ""} - -ANT_CONT_N = {"sinan": ""} - -ANT_CORTE = {"sinan": ""} - -ANT_CRIPTO = {"sinan": ""} - -ANT_CRIP_1 = {"sinan": ""} - -ANT_DERMAT = {"sinan": ""} - -ANT_DESMAT = {"sinan": ""} - -ANT_DIARRE = {"sinan": ""} - -ANT_DILACE = {"sinan": ""} - -ANT_DISFUN = {"sinan": ""} - -ANT_DOSES = {"sinan": ""} - -ANT_DOSES_ = {"sinan": ""} - -ANT_DOSE_3 = {"sinan": ""} - -ANT_DOSE_4 = {"sinan": ""} - -ANT_DOSE_5 = {"sinan": ""} - -ANT_DOSE_7 = {"sinan": ""} - -ANT_DOSE_C = {"sinan": ""} - -ANT_DOSE_T = {"sinan": ""} - -ANT_DOS_N = {"sinan": ""} - -ANT_DROGA = {"sinan": ""} - -ANT_DTULT_ = {"sinan": ""} - -ANT_DTUL_3 = {"sinan": ""} - -ANT_DTUL_4 = {"sinan": ""} - -ANT_DTUL_5 = {"sinan": ""} - -ANT_DTUL_7 = {"sinan": ""} - -ANT_DTUL_8 = {"sinan": ""} - -ANT_DTUL_C = {"sinan": ""} - -ANT_DTUL_T = {"sinan": ""} - -ANT_DT_ACI = {"sinan": ""} - -ANT_DT_EXP = {"sinan": ""} - -ANT_DT_INV = {"sinan": ""} - -ANT_DT_VAC = {"sinan": ""} - -ANT_ESOF_N = {"sinan": ""} - -ANT_EVLABO = {"sinan": ""} - -ANT_EXPOSI = {"sinan": ""} - -ANT_FEBRE = {"sinan": ""} - -ANT_HEMOLF = {"sinan": ""} - -ANT_HEMO_T = {"sinan": ""} - -ANT_HERPES = {"sinan": ""} - -ANT_HISTO = {"sinan": ""} - -ANT_HUMANO = {"sinan": ""} - -ANT_H_SIMP = {"sinan": ""} - -ANT_IDADE = {"sinan": ""} - -ANT_IMUNO = {"sinan": ""} - -ANT_INF_HO = {"sinan": ""} - -ANT_INVEST = {"sinan": ""} - -ANT_IRA = {"sinan": ""} - -ANT_ISOPOR = {"sinan": ""} - -ANT_LAMBED = {"sinan": ""} - -ANT_LAZER = {"sinan": ""} - -ANT_LEUCO = {"sinan": ""} - -ANT_LIMPEZ = {"sinan": ""} - -ANT_LINFO = {"sinan": ""} - -ANT_LINFOM = {"sinan": ""} - -ANT_LINFO_ = {"sinan": ""} - -ANT_LOCA_1 = {"sinan": ""} - -ANT_MAOS = {"sinan": ""} - -ANT_MEMBRO = {"sinan": ""} - -ANT_MEMB_1 = {"sinan": ""} - -ANT_MICRO = {"sinan": ""} - -ANT_MOAGEM = {"sinan": ""} - -ANT_MORDED = {"sinan": ""} - -ANT_MUCOSA = {"sinan": ""} - -ANT_MUNIC_ = {"sinan": ""} - -ANT_MUNI_C = {"sinan": ""} - -ANT_OCUPAC = {"sinan": ""} - -ANT_OUTR = {"sinan": ""} - -ANT_OUTRA = {"sinan": ""} - -ANT_OUTRO = {"sinan": ""} - -ANT_OUTROS = {"sinan": ""} - -ANT_OUTRO_ = {"sinan": ""} - -ANT_OUTR_D = {"sinan": ""} - -ANT_OUT_D = {"sinan": ""} - -ANT_OU_DE = {"sinan": ""} - -ANT_OU_DES = {"sinan": ""} - -ANT_PAIS = {"sinan": ""} - -ANT_PERINA = {"sinan": ""} - -ANT_PLANTI = {"sinan": ""} - -ANT_PNEUMO = {"sinan": ""} - -ANT_PRE_NA = {"sinan": ""} - -ANT_PROFUN = {"sinan": ""} - -ANT_PULMON = {"sinan": ""} - -ANT_PULM_N = {"sinan": ""} - -ANT_RACA = {"sinan": ""} - -ANT_REL_CA = {"sinan": ""} - -ANT_REL_N = {"sinan": ""} - -ANT_RETRO = {"sinan": ""} - -ANT_ROEDOR = {"sinan": ""} - -ANT_SALMO = {"sinan": ""} - -ANT_SARCOM = {"sinan": ""} - -ANT_SECUND = {"sinan": ""} - -ANT_SENTIN = {"sinan": ""} - -ANT_SUPERF = {"sinan": ""} - -ANT_TEMPO_ = {"sinan": ""} - -ANT_TIPOCO = {"sinan": ""} - -ANT_TOSSE = {"sinan": ""} - -ANT_TOXO = {"sinan": ""} - -ANT_TRANS_ = {"sinan": ""} - -ANT_TRASMI = {"sinan": ""} - -ANT_TRATAD = {"sinan": ""} - -ANT_TRAUMA = {"sinan": ""} - -ANT_TRIPLI = {"sinan": ""} - -ANT_TRONCO = {"sinan": ""} - -ANT_TUBE = {"sinan": ""} - -ANT_TUBERC = {"sinan": ""} - -ANT_T_HEMO = {"sinan": ""} - -ANT_UF = {"sinan": ""} - -ANT_UF_1 = {"sinan": ""} - -ANT_UF_2 = {"sinan": ""} - -ANT_UF_3 = {"sinan": ""} - -ANT_UF_CRI = {"sinan": ""} - -ANT_ULTI_D = {"sinan": ""} - -ANT_VACINA = {"sinan": ""} - -AN_ACEVAS = {"sia": ""} - -AN_ALBUMI = {"sia": ""} - -AN_ALTURA = {"sia": ""} - -AN_CNCDO = {"sia": ""} - -AN_DIURES = {"sia": ""} - -AN_DTPDR = {"sia": ""} - -AN_GLICOS = {"sia": ""} - -AN_HB = {"sia": ""} - -AN_HBSAG = {"sia": ""} - -AN_HCV = {"sia": ""} - -AN_HIV = {"sia": ""} - -AN_INTFIS = {"sia": ""} - -AN_PESO = {"sia": ""} - -AN_QUALI = {"sinan": ""} - -AN_QUANT = {"sinan": ""} - -AN_TRU = {"sia": ""} - -AN_ULSOAB = {"sia": ""} - -AP01CV01 = {"cnes": ""} - -AP01CV02 = {"cnes": ""} - -AP01CV03 = {"cnes": ""} - -AP01CV04 = {"cnes": ""} - -AP01CV05 = {"cnes": ""} - -AP01CV06 = {"cnes": ""} - -AP01CV07 = {"cnes": ""} - -AP02CV01 = {"cnes": ""} - -AP02CV02 = {"cnes": ""} - -AP02CV03 = {"cnes": ""} - -AP02CV04 = {"cnes": ""} - -AP02CV05 = {"cnes": ""} - -AP02CV06 = {"cnes": ""} - -AP02CV07 = {"cnes": ""} - -AP03CV01 = {"cnes": ""} - -AP03CV02 = {"cnes": ""} - -AP03CV03 = {"cnes": ""} - -AP03CV04 = {"cnes": ""} - -AP03CV05 = {"cnes": ""} - -AP03CV06 = {"cnes": ""} - -AP03CV07 = {"cnes": ""} - -AP04CV01 = {"cnes": ""} - -AP04CV02 = {"cnes": ""} - -AP04CV03 = {"cnes": ""} - -AP04CV04 = {"cnes": ""} - -AP04CV05 = {"cnes": ""} - -AP04CV06 = {"cnes": ""} - -AP04CV07 = {"cnes": ""} - -AP05CV01 = {"cnes": ""} - -AP05CV02 = {"cnes": ""} - -AP05CV03 = {"cnes": ""} - -AP05CV04 = {"cnes": ""} - -AP05CV05 = {"cnes": ""} - -AP05CV06 = {"cnes": ""} - -AP05CV07 = {"cnes": ""} - -AP06CV01 = {"cnes": ""} - -AP06CV02 = {"cnes": ""} - -AP06CV03 = {"cnes": ""} - -AP06CV04 = {"cnes": ""} - -AP06CV05 = {"cnes": ""} - -AP06CV06 = {"cnes": ""} - -AP06CV07 = {"cnes": ""} - -AP07CV01 = {"cnes": ""} - -AP07CV02 = {"cnes": ""} - -AP07CV03 = {"cnes": ""} - -AP07CV04 = {"cnes": ""} - -AP07CV05 = {"cnes": ""} - -AP07CV06 = {"cnes": ""} - -AP07CV07 = {"cnes": ""} - -APGAR1 = {"sinasc": ""} - -APGAR5 = {"sinasc": ""} - -AP_ADESAO = {"sia": ""} - -AP_ALTA = {"sia": ""} - -AP_APACAN = {"sia": ""} - -AP_APACANT = {"sia": ""} - -AP_ATV_FIS = {"sia": ""} - -AP_AUTORIZ = {"sia": ""} - -AP_CATEND = {"sia": ""} - -AP_CEPPCN = {"sia": ""} - -AP_CIDCAS = {"sia": ""} - -AP_CIDPRI = {"sia": ""} - -AP_CIDSEC = {"sia": ""} - -AP_CID_C1 = {"sia": ""} - -AP_CID_C2 = {"sia": ""} - -AP_CID_C3 = {"sia": ""} - -AP_CID_C4 = {"sia": ""} - -AP_CID_C5 = {"sia": ""} - -AP_CID_CO = {"sia": ""} - -AP_CMP = {"sia": ""} - -AP_CNPJCPF = {"sia": ""} - -AP_CNPJMNT = {"sia": ""} - -AP_CNSPCN = {"sia": ""} - -AP_CODEMI = {"sia": ""} - -AP_CODUNI = {"sia": ""} - -AP_COIDADE = {"sia": ""} - -AP_COMORB = {"sia": ""} - -AP_CONDIC = {"sia": ""} - -AP_DTAUT = {"sia": ""} - -AP_DTFIM = {"sia": ""} - -AP_DTINIC = {"sia": ""} - -AP_DTOCOR = {"sia": ""} - -AP_DTOOCOR = {"sia": ""} - -AP_DTSOLIC = {"sia": ""} - -AP_ENCERR = {"sia": ""} - -AP_ETNIA = {"sia": ""} - -AP_GESTAO = {"sia": ""} - -AP_MEDICAM = {"sia": ""} - -AP_MNDIF = {"sia": ""} - -AP_MN_IND = {"sia": ""} - -AP_MOTSAI = {"sia": ""} - -AP_MUNPCN = {"sia": ""} - -AP_MVM = {"sia": ""} - -AP_NATJUR = {"sia": ""} - -AP_NUIDADE = {"sia": ""} - -AP_OBITO = {"sia": ""} - -AP_PERMAN = {"sia": ""} - -AP_POLIVIT = {"sia": ""} - -AP_PRIPAL = {"sia": ""} - -AP_RACACOR = {"sia": ""} - -AP_REG_PES = {"sia": ""} - -AP_SEXO = {"sia": ""} - -AP_TIPPRE = {"sia": ""} - -AP_TPAPAC = {"sia": ""} - -AP_TPATEN = {"sia": ""} - -AP_TPATEND = {"sia": ""} - -AP_TPPRE = {"sia": ""} - -AP_TPUPS = {"sia": ""} - -AP_TRANSF = {"sia": ""} - -AP_UFDIF = {"sia": ""} - -AP_UFMUN = {"sia": ""} - -AP_UFNACIO = {"sia": ""} - -AP_UNISOL = {"sia": ""} - -AP_VL_AP = {"sia": ""} - -AQ_CID10 = {"sia": ""} - -AQ_CIDINI1 = {"sia": ""} - -AQ_CIDINI2 = {"sia": ""} - -AQ_CIDINI3 = {"sia": ""} - -AQ_CONTTR = {"sia": ""} - -AQ_DTIDEN = {"sia": ""} - -AQ_DTINI1 = {"sia": ""} - -AQ_DTINI2 = {"sia": ""} - -AQ_DTINI3 = {"sia": ""} - -AQ_DTINTR = {"sia": ""} - -AQ_ESQU_P1 = {"sia": ""} - -AQ_ESQU_P2 = {"sia": ""} - -AQ_ESTADI = {"sia": ""} - -AQ_GRAHIS = {"sia": ""} - -AQ_LINFIN = {"sia": ""} - -AQ_MED01 = {"sia": ""} - -AQ_MED02 = {"sia": ""} - -AQ_MED03 = {"sia": ""} - -AQ_MED04 = {"sia": ""} - -AQ_MED05 = {"sia": ""} - -AQ_MED06 = {"sia": ""} - -AQ_MED07 = {"sia": ""} - -AQ_MED08 = {"sia": ""} - -AQ_MED09 = {"sia": ""} - -AQ_MED10 = {"sia": ""} - -AQ_TOTMAU = {"sia": ""} - -AQ_TOTMPL = {"sia": ""} - -AQ_TRANTE = {"sia": ""} - -AREA = {"sinasc": ""} - -AREARES = {"sim": ""} - -ARMAZ_FT = {"cnes": ""} - -ARRANHAO = {"sinan": ""} - -ARRITMIAS = {"sinan": ""} - -ARTEI = {"sinan": ""} - -ARTEM = {"sinan": ""} - -ARTEMI = {"sinan": ""} - -ARTESU = {"sinan": ""} - -ARTRALGIA = {"sinan": ""} - -ARTRITE = {"sinan": ""} - -AR_CID10 = {"sia": ""} - -AR_CIDINI1 = {"sia": ""} - -AR_CIDINI2 = {"sia": ""} - -AR_CIDINI3 = {"sia": ""} - -AR_CIDTR1 = {"sia": ""} - -AR_CIDTR2 = {"sia": ""} - -AR_CIDTR3 = {"sia": ""} - -AR_CONTTR = {"sia": ""} - -AR_DTIDEN = {"sia": ""} - -AR_DTINI1 = {"sia": ""} - -AR_DTINI2 = {"sia": ""} - -AR_DTINI3 = {"sia": ""} - -AR_DTINTR = {"sia": ""} - -AR_ESTADI = {"sia": ""} - -AR_FIMAR1 = {"sia": ""} - -AR_FIMAR2 = {"sia": ""} - -AR_FIMAR3 = {"sia": ""} - -AR_FINALI = {"sia": ""} - -AR_GRAHIS = {"sia": ""} - -AR_INIAR1 = {"sia": ""} - -AR_INIAR2 = {"sia": ""} - -AR_INIAR3 = {"sia": ""} - -AR_LINFIN = {"sia": ""} - -AR_NUMC1 = {"sia": ""} - -AR_NUMC2 = {"sia": ""} - -AR_NUMC3 = {"sia": ""} - -AR_SMRD = {"sia": ""} - -AR_TRANTE = {"sia": ""} - -ASBESTO = {"sinan": ""} - -ASCITE = {"sinan": ""} - -ASMA = {"sinan": ""} - -ASSENTAD = {"cnes": ""} - -ASSINTOM = {"sinan": ""} - -ASSINTOMA = {"sinan": ""} - -ASSINTOMAT = {"sinan": ""} - -ASSISTMED = {"sim": ""} - -ASSIST_SOC = {"sinan": ""} - -ASTENIA = {"sinan": ""} - -ATD_ACEVAS = {"sia": ""} - -ATD_ALBUMI = {"sia": ""} - -ATD_CARACT = {"sia": ""} - -ATD_DTCLI = {"sia": ""} - -ATD_DTPDR = {"sia": ""} - -ATD_FOSFOR = {"sia": ""} - -ATD_HB = {"sia": ""} - -ATD_HBSAG = {"sia": ""} - -ATD_HCV = {"sia": ""} - -ATD_HIV = {"sia": ""} - -ATD_INTERC = {"sia": ""} - -ATD_KTVSEM = {"sia": ""} - -ATD_MAISNE = {"sia": ""} - -ATD_PTH = {"sia": ""} - -ATD_SEAPTO = {"sia": ""} - -ATD_SEPERI = {"sia": ""} - -ATD_SITINI = {"sia": ""} - -ATD_SITTRA = {"sia": ""} - -ATD_TRU = {"sia": ""} - -ATENDAMB = {"cnes": ""} - -ATENDE_MED = {"sinan": ""} - -ATENDHOS = {"cnes": ""} - -ATENDIMENT = {"sinan": ""} - -ATEND_MULH = {"sinan": ""} - -ATEND_PR = {"cnes": ""} - -ATESTADO = {"sim": ""} - -ATESTANTE = {"sim": ""} - -ATE_DT_ALT = {"sinan": ""} - -ATE_DT_INT = {"sinan": ""} - -ATE_HIPOTE = {"sinan": ""} - -ATE_HOSP = {"sinan": ""} - -ATE_HOSPIT = {"sinan": ""} - -ATE_INTERN = {"sinan": ""} - -ATE_MUNICI = {"sinan": ""} - -ATE_UF = {"sinan": ""} - -ATE_UF_HOS = {"sinan": ""} - -ATE_UF_INT = {"sinan": ""} - -ATIVIDAD = {"cnes": ""} - -ATIVIDA_1 = {"sinan": ""} - -ATIVIDA_2 = {"sinan": ""} - -ATIVIDA_3 = {"sinan": ""} - -AT_ATIVIDA = {"sinan": ""} - -AT_LAMINA = {"sinan": ""} - -AT_SINTOMA = {"sinan": ""} - -AUDITIVA = {"sinan": ""} - -AUD_JUST = {"sih": ""} - -AUMENTO = {"sinan": ""} - -AUTORIZ = {"sia": ""} - -AUTOR_ALCO = {"sinan": ""} - -AUTOR_SEXO = {"sinan": ""} - -AUTO_IMUNE = {"sinan": ""} - -AVALIA_N = {"sinan": ""} - -AVAL_ATU_N = {"sinan": ""} - -AVENTAL = {"sinan": ""} - -AV_ACRED = {"cnes": ""} - -AV_PNASS = {"cnes": ""} - -AZT3TC = {"sinan": ""} - -AZT3TC_IND = {"sinan": ""} - -AZT3TC_NFV = {"sinan": ""} - -BACILOSCOP = {"sinan": ""} - -BACILOSC_1 = {"sinan": ""} - -BACILOSC_2 = {"sinan": ""} - -BACILOSC_3 = {"sinan": ""} - -BACILOSC_4 = {"sinan": ""} - -BACILOSC_5 = {"sinan": ""} - -BACILOSC_6 = {"sinan": ""} - -BACILOSC_E = {"sinan": ""} - -BACILOSC_O = {"sinan": ""} - -BACILOS_E2 = {"sinan": ""} - -BACO = {"sinan": ""} - -BACTERIA = {"sinan": ""} - -BAC_APOS_6 = {"sinan": ""} - -BAIRES = {"sim": ""} - -BAIRRO_MAE = {"sinasc": ""} - -BANCOSANGU = {"sinan": ""} - -BENEF_GOV = {"sinan": ""} - -BENZENO = {"sinan": ""} - -BERILIO = {"sinan": ""} - -BIOPSIA = {"sinan": ""} - -BIOSSEG = {"sinan": ""} - -BLOCOPER = {"cnes": ""} - -BLOQUEIO = {"sinan": ""} - -BOTA = {"sinan": ""} - -BOVINO = {"sinan": ""} - -BUSCA_ATIV = {"sinan": ""} - -CABECA = {"sinan": ""} - -CADMIO = {"sinan": ""} - -CALAFRIO = {"sinan": ""} - -CANCER = {"sinan": ""} - -CAO_GATO = {"sinan": ""} - -CAPES = {"sinan": ""} - -CAPIVARA = {"sinan": ""} - -CARACTER = {"cnes": ""} - -CARDIOPATI = {"sinan": ""} - -CARRAPATO = {"sinan": ""} - -CARTORIO = { - "sim": "", - "sinasc": "", -} - -CARVAO = {"sinan": ""} - -CAR_INT = { - "ciha": "", - "sih": "", -} - -CASO = {"sinan": ""} - -CASO_ISOLA = {"sinan": ""} - -CAT = {"sinan": ""} - -CATARATA = {"sinan": ""} - -CATEND = {"sia": ""} - -CAUSABAS = {"sim": ""} - -CAUSABAS_O = {"sim": ""} - -CAUSAMAT = {"sim": ""} - -CBO = {"cnes": ""} - -CBOPROF = {"sia": ""} - -CBOR = {"sih": ""} - -CBOUNICO = {"cnes": ""} - -CB_PRE = {"sim": ""} - -CD_OUTRO = {"sinan": ""} - -CEFALEIA = {"sinan": ""} - -CENTRCIR = {"cnes": ""} - -CENTRNEO = {"cnes": ""} - -CENTROBS = {"cnes": ""} - -CEP = {"sih": ""} - -CGC_CONSOR = {"ciha": ""} - -CGC_HOSP = { - "ciha": "", - "sih": "", -} - -CGC_MANT = {"sih": ""} - -CHAGOMA = {"sinan": ""} - -CHOQUE = {"sinan": ""} - -CICL_VID = {"sinan": ""} - -CIDASSOC = {"sia": ""} - -CIDPRI = {"sia": ""} - -CID_ACID = {"sinan": ""} - -CID_ASSO = {"sih": ""} - -CID_LESAO = {"sinan": ""} - -CID_MORTE = {"sih": ""} - -CID_NOTIF = {"sih": ""} - -CIRCOBITO = {"sim": ""} - -CIRCUNSTAN = {"sinan": ""} - -CIRCUN_DES = {"sinan": ""} - -CIRC_LESAO = {"sinan": ""} - -CIRURGIA = {"sim": ""} - -CIRURGICO = {"sinan": ""} - -CLASAVAL = {"cnes": ""} - -CLASSATUAL = {"sinan": ""} - -CLASSI_FIN = {"sinan": ""} - -CLASSOPERA = {"sinan": ""} - -CLASS_SR = {"cnes": ""} - -CLAS_FORMA = {"sinan": ""} - -CLAS_TIPO_ = {"sinan": ""} - -CLA_ME_ASS = {"sinan": ""} - -CLA_ME_BAC = {"sinan": ""} - -CLA_ME_ETI = {"sinan": ""} - -CLA_SOROGR = {"sinan": ""} - -CLA_TIPO_N = {"sinan": ""} - -CLICDCCA_N = {"sinan": ""} - -CLIENTEL = {"cnes": ""} - -CLINC_CHIK = {"sinan": ""} - -CLIND = {"sinan": ""} - -CLINDI = {"sinan": ""} - -CLI_ABAULA = {"sinan": ""} - -CLI_ABDOMI = {"sinan": ""} - -CLI_AGUDA = {"sinan": ""} - -CLI_AMIGDA = {"sinan": ""} - -CLI_ANEMIA = {"sinan": ""} - -CLI_ANGUST = {"sinan": ""} - -CLI_AQ_D_N = {"sinan": ""} - -CLI_AQ_E_N = {"sinan": ""} - -CLI_ARRITM = {"sinan": ""} - -CLI_ASCEND = {"sinan": ""} - -CLI_ASSIME = {"sinan": ""} - -CLI_ASTENI = {"sinan": ""} - -CLI_A_FMID = {"sinan": ""} - -CLI_A_FMIE = {"sinan": ""} - -CLI_A_FMSD = {"sinan": ""} - -CLI_A_FMSE = {"sinan": ""} - -CLI_A_SMID = {"sinan": ""} - -CLI_A_SMIE = {"sinan": ""} - -CLI_A_SMSD = {"sinan": ""} - -CLI_A_SMSE = {"sinan": ""} - -CLI_A_S_FA = {"sinan": ""} - -CLI_A_TMID = {"sinan": ""} - -CLI_A_TMIE = {"sinan": ""} - -CLI_A_TMSD = {"sinan": ""} - -CLI_A_TMSE = {"sinan": ""} - -CLI_A_T_CE = {"sinan": ""} - -CLI_A_T_FA = {"sinan": ""} - -CLI_BICD_N = {"sinan": ""} - -CLI_BICE_N = {"sinan": ""} - -CLI_BRUDZ = {"sinan": ""} - -CLI_CANDIA = {"sinan": ""} - -CLI_CARDIA = {"sinan": ""} - -CLI_CAVIDA = {"sinan": ""} - -CLI_CDCCRE = {"sinan": ""} - -CLI_CDCLIH = {"sinan": ""} - -CLI_CDC_CI = {"sinan": ""} - -CLI_CDC_CR = {"sinan": ""} - -CLI_CDC_EN = {"sinan": ""} - -CLI_CDC_GE = {"sinan": ""} - -CLI_CDC_HE = {"sinan": ""} - -CLI_CDC_HI = {"sinan": ""} - -CLI_CDC_IN = {"sinan": ""} - -CLI_CDC_IS = {"sinan": ""} - -CLI_CDC_LE = {"sinan": ""} - -CLI_CDC_LI = {"sinan": ""} - -CLI_CDC_ME = {"sinan": ""} - -CLI_CDC_MI = {"sinan": ""} - -CLI_CDC_PC = {"sinan": ""} - -CLI_CDC_PN = {"sinan": ""} - -CLI_CDC_SA = {"sinan": ""} - -CLI_CDC_SI = {"sinan": ""} - -CLI_CDC_SK = {"sinan": ""} - -CLI_CDC_TO = {"sinan": ""} - -CLI_CEFALE = {"sinan": ""} - -CLI_CERVIC = {"sinan": ""} - -CLI_CHOQUE = {"sinan": ""} - -CLI_CICATR = {"sinan": ""} - -CLI_COMA = {"sinan": ""} - -CLI_CONDUT = {"sinan": ""} - -CLI_CONGES = {"sinan": ""} - -CLI_CONJUN = {"sinan": ""} - -CLI_CONTAT = {"sinan": ""} - -CLI_CONVUL = {"sinan": ""} - -CLI_CON_ES = {"sinan": ""} - -CLI_CORDAO = {"sinan": ""} - -CLI_CO_HIV = {"sinan": ""} - -CLI_CRONIC = {"sinan": ""} - -CLI_CUTANE = {"sinan": ""} - -CLI_CUT_DI = {"sinan": ""} - -CLI_DERMA = {"sinan": ""} - -CLI_DESCEN = {"sinan": ""} - -CLI_DESC_O = {"sinan": ""} - -CLI_DIARRE = {"sinan": ""} - -CLI_DISPNE = {"sinan": ""} - -CLI_DISSEM = {"sinan": ""} - -CLI_DOR = {"sinan": ""} - -CLI_DORES = {"sinan": ""} - -CLI_DT = {"sinan": ""} - -CLI_DT_ATE = {"sinan": ""} - -CLI_DT_EXA = {"sinan": ""} - -CLI_EDEMA = {"sinan": ""} - -CLI_EDEMAG = {"sinan": ""} - -CLI_EQUIMO = {"sinan": ""} - -CLI_ESPECI = {"sinan": ""} - -CLI_ESPLEN = {"sinan": ""} - -CLI_EXT_D = {"sinan": ""} - -CLI_EXT_E = {"sinan": ""} - -CLI_FACE = {"sinan": ""} - -CLI_FARING = {"sinan": ""} - -CLI_FEBRE = {"sinan": ""} - -CLI_FLACID = {"sinan": ""} - -CLI_FLE_D = {"sinan": ""} - -CLI_FLE_E = {"sinan": ""} - -CLI_F_MID = {"sinan": ""} - -CLI_F_MIE = {"sinan": ""} - -CLI_F_MSD = {"sinan": ""} - -CLI_F_MSE = {"sinan": ""} - -CLI_GARGAN = {"sinan": ""} - -CLI_H = {"sinan": ""} - -CLI_HEMO = {"sinan": ""} - -CLI_HEMOPU = {"sinan": ""} - -CLI_HEMORR = {"sinan": ""} - -CLI_HEPATI = {"sinan": ""} - -CLI_HEPATO = {"sinan": ""} - -CLI_HERPEG = {"sinan": ""} - -CLI_HERPES = {"sinan": ""} - -CLI_HIPOTE = {"sinan": ""} - -CLI_H_DESC = {"sinan": ""} - -CLI_ICTERI = {"sinan": ""} - -CLI_INFCIT = {"sinan": ""} - -CLI_INJECA = {"sinan": ""} - -CLI_KERNIG = {"sinan": ""} - -CLI_LARING = {"sinan": ""} - -CLI_LEIOMI = {"sinan": ""} - -CLI_LINFA = {"sinan": ""} - -CLI_LINFO = {"sinan": ""} - -CLI_LOCAL = {"sinan": ""} - -CLI_LOCAL_ = {"sinan": ""} - -CLI_LOCA_1 = {"sinan": ""} - -CLI_LOMBAR = {"sinan": ""} - -CLI_MENING = {"sinan": ""} - -CLI_MIALGI = {"sinan": ""} - -CLI_MIAL_D = {"sinan": ""} - -CLI_MIAL_G = {"sinan": ""} - -CLI_MIOCAR = {"sinan": ""} - -CLI_MIOLIT = {"sinan": ""} - -CLI_MUCOSA = {"sinan": ""} - -CLI_MUNICI = {"sinan": ""} - -CLI_NECROS = {"sinan": ""} - -CLI_NEFRIT = {"sinan": ""} - -CLI_NEFRO = {"sinan": ""} - -CLI_NEURO = {"sinan": ""} - -CLI_NEUROL = {"sinan": ""} - -CLI_NOCAR = {"sinan": ""} - -CLI_NUCA = {"sinan": ""} - -CLI_OBSTIP = {"sinan": ""} - -CLI_ORGAOS = {"sinan": ""} - -CLI_OSTEO = {"sinan": ""} - -CLI_OTITE = {"sinan": ""} - -CLI_OTRDES = {"sinan": ""} - -CLI_OUTRAS = {"sinan": ""} - -CLI_OUTRO = {"sinan": ""} - -CLI_OUTROS = {"sinan": ""} - -CLI_OUTR_2 = {"sinan": ""} - -CLI_OUTR_3 = {"sinan": ""} - -CLI_OUT_D = {"sinan": ""} - -CLI_PALATO = {"sinan": ""} - -CLI_PALIDE = {"sinan": ""} - -CLI_PANTUR = {"sinan": ""} - -CLI_PARALB = {"sinan": ""} - -CLI_PARALM = {"sinan": ""} - -CLI_PARALP = {"sinan": ""} - -CLI_PAROTI = {"sinan": ""} - -CLI_PATD_N = {"sinan": ""} - -CLI_PATE_N = {"sinan": ""} - -CLI_PELE = {"sinan": ""} - -CLI_PESCOC = {"sinan": ""} - -CLI_PETEQU = {"sinan": ""} - -CLI_PROGRE = {"sinan": ""} - -CLI_PROST = {"sinan": ""} - -CLI_PROSTR = {"sinan": ""} - -CLI_PSEUDO = {"sinan": ""} - -CLI_PULMAO = {"sinan": ""} - -CLI_RENAL = {"sinan": ""} - -CLI_RESPI = {"sinan": ""} - -CLI_RESPIR = {"sinan": ""} - -CLI_RIGIDE = {"sinan": ""} - -CLI_RINITE = {"sinan": ""} - -CLI_RINORR = {"sinan": ""} - -CLI_SINTOM = {"sinan": ""} - -CLI_TEMPER = {"sinan": ""} - -CLI_TEMPO_ = {"sinan": ""} - -CLI_TONTUR = {"sinan": ""} - -CLI_TORACI = {"sinan": ""} - -CLI_TOSSE = {"sinan": ""} - -CLI_TOX1M = {"sinan": ""} - -CLI_TRAQUE = {"sinan": ""} - -CLI_TRID_N = {"sinan": ""} - -CLI_TRIE_N = {"sinan": ""} - -CLI_TUBERC = {"sinan": ""} - -CLI_TUPULM = {"sinan": ""} - -CLI_VAGAIS = {"sinan": ""} - -CLI_VARICE = {"sinan": ""} - -CLI_VOMITO = {"sinan": ""} - -CLORAFEN = {"sinan": ""} - -CLOROQ = {"sinan": ""} - -CLOROQI = {"sinan": ""} - -CMPT = {"sih": ""} - -CMPT_FIM = {"cnes": ""} - -CMPT_INI = {"cnes": ""} - -CNAE = {"sinan": ""} - -CNAER = {"sih": ""} - -CNAE_PRIN = {"sinan": ""} - -CNES = { - "ciha": "", - "cnes": "", - "sih": "", -} - -CNESTERC = {"cnes": ""} - -CNES_ESF = {"sia": ""} - -CNES_EXEC = {"sia": ""} - -CNPJCPF = {"sia": ""} - -CNPJMNT = {"sia": ""} - -CNPJ_CC = {"sia": ""} - -CNPJ_MAN = {"cnes": ""} - -CNPJ_MANT = {"sih": ""} - -CNSPROF = {"sia": ""} - -CNS_ADM = {"cnes": ""} - -CNS_CONC = {"cnes": ""} - -CNS_CRES = {"cnes": ""} - -CNS_FNUC = {"cnes": ""} - -CNS_HMTL = {"cnes": ""} - -CNS_HMTR = {"cnes": ""} - -CNS_MRAD = {"cnes": ""} - -CNS_NEFR = {"cnes": ""} - -CNS_OCLIN = {"cnes": ""} - -CNS_OPED = {"cnes": ""} - -CNS_PAC = {"sia": ""} - -CNS_PROF = {"cnes": ""} - -CNS_RTEC = {"cnes": ""} - -COAGTOXMA1 = {"sinan": ""} - -COAGTOXMA2 = {"sinan": ""} - -COAGTOXMA3 = {"sinan": ""} - -COBERT = {"pni": ""} - -COBRANCA = { - "ciha": "", - "sih": "", -} - -COB_ESF = {"sia": ""} - -CODANOMAL = {"sinasc": ""} - -CODBAINASC = {"sinasc": ""} - -CODBAIOCOR = {"sim": ""} - -CODBAIRES = { - "sim": "", - "sinasc": "", -} - -CODCART = { - "sim": "", - "sinasc": "", -} - -CODEQUIP = {"cnes": ""} - -CODESTAB = { - "sim": "", - "sinasc": "", -} - -CODIFICADO = {"sim": ""} - -CODIGO = { - "sim": "", - "sinasc": "", -} - -CODINST = {"sinasc": ""} - -CODISINF = {"sinan": ""} - -CODLEITO = {"cnes": ""} - -CODMUNCART = { - "sim": "", - "sinasc": "", -} - -CODMUNNASC = {"sinasc": ""} - -CODMUNNATU = { - "sim": "", - "sinasc": "", -} - -CODMUNOCOR = {"sim": ""} - -CODMUNRES = { - "sim": "", - "sinasc": "", -} - -CODOCUPMAE = {"sinasc": ""} - -CODPAISRES = {"sinasc": ""} - -CODUFMUN = {"cnes": ""} - -CODUFNATU = {"sinasc": ""} - -CODUNI = {"sia": ""} - -COD_ARQ = {"sih": ""} - -COD_CEP = {"cnes": ""} - -COD_IDADE = { - "ciha": "", - "sih": "", -} - -COD_IR = {"cnes": ""} - -COD_MUN_HO = {"sinan": ""} - -COD_SEG = {"sih": ""} - -COD_UF_HOS = {"sinan": ""} - -COLETAMARC = {"sinan": ""} - -COLETIVA = {"sinan": ""} - -COLETRES = {"cnes": ""} - -COLET_COMU = {"sinan": ""} - -COMA = {"sinan": ""} - -COMISS01 = {"cnes": ""} - -COMISS02 = {"cnes": ""} - -COMISS03 = {"cnes": ""} - -COMISS04 = {"cnes": ""} - -COMISS05 = {"cnes": ""} - -COMISS06 = {"cnes": ""} - -COMISS07 = {"cnes": ""} - -COMISS08 = {"cnes": ""} - -COMISS09 = {"cnes": ""} - -COMISS10 = {"cnes": ""} - -COMISS11 = {"cnes": ""} - -COMISS12 = {"cnes": ""} - -COMISSAO = {"cnes": ""} - -COMPET = {"sih": ""} - -COMPETEN = {"cnes": ""} - -COMPLEX = { - "sia": "", - "sih": "", -} - -COMPLICA = {"sinan": ""} - -COMP_OUT = {"sinan": ""} - -COMP_OUT_D = {"sinan": ""} - -COMUNHOSP = {"sinan": ""} - -COMUNINF = {"sinan": ""} - -COMUNSVOIM = {"sim": ""} - -COM_APUTAC = {"sinan": ""} - -COM_CHOQUE = {"sinan": ""} - -COM_COMPOR = {"sinan": ""} - -COM_DEFICT = {"sinan": ""} - -COM_EDEMA = {"sinan": ""} - -COM_LOC = {"sinan": ""} - -COM_NECROS = {"sinan": ""} - -COM_PEST = {"sinan": ""} - -COM_RENAL = {"sinan": ""} - -COM_SECUND = {"sinan": ""} - -COM_SEPTIC = {"sinan": ""} - -COM_SISTEM = {"sinan": ""} - -CONDIC = {"sia": ""} - -CONDIC_ANI = {"sinan": ""} - -CONDUTA = {"sinan": ""} - -CONDUTA_DE = {"sinan": ""} - -CONDUT_DES = {"sinan": ""} - -CONFIRMA = {"sinan": ""} - -CONFIRMAD = {"sinan": ""} - -CONFPESO = {"sinasc": ""} - -CONF_INF_M = {"sinan": ""} - -CONF_INF_U = {"sinan": ""} - -CONF_MAS = {"cnes": ""} - -CONJUNTVIT = {"sinan": ""} - -CONSELHO = {"cnes": ""} - -CONSPRENAT = {"sinasc": ""} - -CONSTIPA = {"sinan": ""} - -CONSULTAS = {"sinasc": ""} - -CONS_ABORT = {"sinan": ""} - -CONS_COMP = {"sinan": ""} - -CONS_DST = {"sinan": ""} - -CONS_ESPEC = {"sinan": ""} - -CONS_ESTRE = {"sinan": ""} - -CONS_GRAV = {"sinan": ""} - -CONS_IDO = {"sinan": ""} - -CONS_MENT = {"sinan": ""} - -CONS_OUTR = {"sinan": ""} - -CONS_SUIC = {"sinan": ""} - -CONS_TUTEL = {"sinan": ""} - -CONT = {"sih": ""} - -CONTADOR = { - "sim": "", - "sinasc": "", -} - -CONTATO = {"sinan": ""} - -CONTEXAM = {"sinan": ""} - -CONTRACEP1 = {"sih": ""} - -CONTRACEP2 = {"sih": ""} - -CONTRATE = {"cnes": ""} - -CONTRATM = {"cnes": ""} - -CONTREG = {"sinan": ""} - -CONTROLE = {"sinan": ""} - -CONTSRVU = {"cnes": ""} - -CONT_OUT = {"sinan": ""} - -CONVULSAO = {"sinan": ""} - -CON_ALIMEN = {"sinan": ""} - -CON_AMBIEN = {"sinan": ""} - -CON_AMB_DE = {"sinan": ""} - -CON_ANIMAI = {"sinan": ""} - -CON_AREA = {"sinan": ""} - -CON_AUTOPS = {"sinan": ""} - -CON_AUTO_M = {"sinan": ""} - -CON_AUTO_U = {"sinan": ""} - -CON_CLASSI = {"sinan": ""} - -CON_CLASS_ = {"sinan": ""} - -CON_CLAS_E = {"sinan": ""} - -CON_CONFIR = {"sinan": ""} - -CON_CRITER = {"sinan": ""} - -CON_DESCAR = {"sinan": ""} - -CON_DIAGES = {"sinan": ""} - -CON_DIAGNO = {"sinan": ""} - -CON_DIAG_D = {"sinan": ""} - -CON_DOENCA = {"sinan": ""} - -CON_DT_ENC = {"sinan": ""} - -CON_DT_OBI = {"sinan": ""} - -CON_ENCHEN = {"sinan": ""} - -CON_ENTULH = {"sinan": ""} - -CON_ESGOTO = {"sinan": ""} - -CON_EVOLUC = {"sinan": ""} - -CON_FHD = {"sinan": ""} - -CON_FORMA = {"sinan": ""} - -CON_GRAVID = {"sinan": ""} - -CON_IMPORT = {"sinan": ""} - -CON_INFECC = {"sinan": ""} - -CON_INF_BA = {"sinan": ""} - -CON_INF_DI = {"sinan": ""} - -CON_INF_MU = {"sinan": ""} - -CON_INF_OU = {"sinan": ""} - -CON_INF_PA = {"sinan": ""} - -CON_INF_UF = {"sinan": ""} - -CON_LOCAL = {"sinan": ""} - -CON_LOCAL2 = {"sinan": ""} - -CON_LOCALI = {"sinan": ""} - -CON_MUNICI = {"sinan": ""} - -CON_OUTRA = {"sinan": ""} - -CON_PAIS = {"sinan": ""} - -CON_PROVAV = {"sinan": ""} - -CON_RIO = {"sinan": ""} - -CON_ROEDOR = {"sinan": ""} - -CON_SOROTE = {"sinan": ""} - -CON_TERREN = {"sinan": ""} - -CON_TRIAT = {"sinan": ""} - -CON_UF = {"sinan": ""} - -COPAISINF = {"sinan": ""} - -COPRO_D_1 = {"sinan": ""} - -COPRO_D_2 = {"sinan": ""} - -COPRO_D_3 = {"sinan": ""} - -COPRO_R1 = {"sinan": ""} - -COPRO_R2 = {"sinan": ""} - -COPRO_R3 = {"sinan": ""} - -CORRACA = {"ibge": ""} - -COUFHOSP = {"sinan": ""} - -COUFINF = {"sinan": ""} - -COUNIDINF = {"sinan": ""} - -CO_AGENC = {"cnes": ""} - -CO_BANCO = {"cnes": ""} - -CO_CIDPRIM = {"sia": ""} - -CO_CIDSEC = {"sia": ""} - -CO_ERRO = {"sih": ""} - -CO_FOCAL = {"sinan": ""} - -CO_INE = {"sia": ""} - -CO_MUN_EX2 = {"sinan": ""} - -CO_MUN_EX3 = {"sinan": ""} - -CO_MUN_EXP = {"sinan": ""} - -CO_MUN_R1 = {"sinan": ""} - -CO_MUN_R2 = {"sinan": ""} - -CO_MUN_R3 = {"sinan": ""} - -CO_MUN_R4 = {"sinan": ""} - -CO_PAIS_1 = {"sinan": ""} - -CO_PAIS_2 = {"sinan": ""} - -CO_PAIS_3 = {"sinan": ""} - -CO_RISCO = {"sinan": ""} - -CO_UF_1 = {"sinan": ""} - -CO_UF_2 = {"sinan": ""} - -CO_UF_3 = {"sinan": ""} - -CO_UF_DES1 = {"sinan": ""} - -CO_UF_DES2 = {"sinan": ""} - -CO_UF_DES3 = {"sinan": ""} - -CO_UF_EX2 = {"sinan": ""} - -CO_UF_EX3 = {"sinan": ""} - -CO_UF_EXP = {"sinan": ""} - -CO_UF_R1 = {"sinan": ""} - -CO_UF_R2 = {"sinan": ""} - -CO_UF_R3 = {"sinan": ""} - -CO_UF_R4 = {"sinan": ""} - -CPFUNICO = {"cnes": ""} - -CPF_AUT = {"sih": ""} - -CPF_CNPJ = {"cnes": ""} - -CPF_PROF = {"cnes": ""} - -CPF_UNICO = {"cnes": ""} - -CRITERIO = {"sinan": ""} - -CRITICA = { - "sim": "", - "sinasc": "", -} - -CRI_1000 = {"sinan": ""} - -CRI_1500 = {"sinan": ""} - -CRI_500 = {"sinan": ""} - -CRM = {"sim": ""} - -CROMO = {"sinan": ""} - -CRSOCOR = {"sim": ""} - -CRSRES = {"sim": ""} - -CRS_MAE = {"sinasc": ""} - -CRS_OCOR = {"sinasc": ""} - -CS_ABDOMEN = {"sinan": ""} - -CS_ABDOMIN = {"sinan": ""} - -CS_ANALISE = {"sinan": ""} - -CS_ANTIB = {"sinan": ""} - -CS_ANTIBIO = {"sinan": ""} - -CS_ANTIB_T = {"sinan": ""} - -CS_APNEIA = {"sinan": ""} - -CS_ASSINTO = {"sinan": ""} - -CS_ATEND_N = {"sinan": ""} - -CS_BUSCAAT = {"sinan": ""} - -CS_CADASTR = {"sinan": ""} - -CS_CAIMBRA = {"sinan": ""} - -CS_CHOQUE = {"sinan": ""} - -CS_CHORO = {"sinan": ""} - -CS_CIANOSE = {"sinan": ""} - -CS_COBERTU = {"sinan": ""} - -CS_COLETA = {"sinan": ""} - -CS_CRISE = {"sinan": ""} - -CS_CRISES = {"sinan": ""} - -CS_CULTURA = {"sinan": ""} - -CS_DESCART = {"sinan": ""} - -CS_DESIT = {"sinan": ""} - -CS_DESITRA = {"sinan": ""} - -CS_DESNUTR = {"sinan": ""} - -CS_DIARRE = {"sinan": ""} - -CS_DIVULGA = {"sinan": ""} - -CS_DOR = {"sinan": ""} - -CS_ENCEFAL = {"sinan": ""} - -CS_ESCOLAR = {"sinan": ""} - -CS_ESCOL_N = {"sinan": ""} - -CS_FEBRE = {"sinan": ""} - -CS_FLXRET = {"sinan": ""} - -CS_FONTE = {"sinan": ""} - -CS_FREQUEN = {"sinan": ""} - -CS_GESTANT = {"sinan": ""} - -CS_HOSPITA = {"sinan": ""} - -CS_INF_COT = {"sinan": ""} - -CS_INQUERI = {"sinan": ""} - -CS_LIQUOR = {"sinan": ""} - -CS_LOCAL = {"sinan": ""} - -CS_MAMAR = {"sinan": ""} - -CS_MATERIA = {"sinan": ""} - -CS_MEMBROS = {"sinan": ""} - -CS_MENING = {"sinan": ""} - -CS_MUCO = {"sinan": ""} - -CS_NASCIDO = {"sinan": ""} - -CS_NEG_ESP = {"sinan": ""} - -CS_NUCA = {"sinan": ""} - -CS_OPISTOT = {"sinan": ""} - -CS_ORIENTA = {"sinan": ""} - -CS_ORIGEM = {"sinan": ""} - -CS_OTITE = {"sinan": ""} - -CS_OUTRAS = {"sinan": ""} - -CS_OUTROS = {"sinan": ""} - -CS_OUT_COM = {"sinan": ""} - -CS_OUT_SIN = {"sinan": ""} - -CS_PNEUMON = {"sinan": ""} - -CS_POSITIV = {"sinan": ""} - -CS_RACA = {"sinan": ""} - -CS_REIDRAT = {"sinan": ""} - -CS_RESULTA = {"sinan": ""} - -CS_RISO = {"sinan": ""} - -CS_SANGUE = {"sinan": ""} - -CS_SECRECA = {"sinan": ""} - -CS_SEXO = {"sinan": ""} - -CS_SIN_OUT = {"sinan": ""} - -CS_SUGOU = {"sinan": ""} - -CS_SUSPEIT = {"sinan": ""} - -CS_TEMP37 = {"sinan": ""} - -CS_TEMP_38 = {"sinan": ""} - -CS_TIPO = {"sinan": ""} - -CS_TOSSE_E = {"sinan": ""} - -CS_TOSSE_P = {"sinan": ""} - -CS_TRANS = {"sinan": ""} - -CS_TRISMO = {"sinan": ""} - -CS_URINA = {"sinan": ""} - -CS_VACINA = {"sinan": ""} - -CS_VACINAC = {"sinan": ""} - -CS_VACINAL = {"sinan": ""} - -CS_VACTETA = {"sinan": ""} - -CS_VAC_N = {"sinan": ""} - -CS_VOMITO = {"sinan": ""} - -CS_VOMITOS = {"sinan": ""} - -CS_ZONA = {"sinan": ""} - -CULTURA_ES = {"sinan": ""} - -CULTURA_OU = {"sinan": ""} - -C_CORREN = {"cnes": ""} - -C_D = {"sinan": ""} - -C_M = {"sinan": ""} - -DATANASC = {"sim": ""} - -DATAOBITO = {"sim": ""} - -DATAREG = {"sim": ""} - -DATA_CART = {"sinasc": ""} - -DATA_NASC = {"sinasc": ""} - -DE15A39ANO = {"sinan": ""} - -DE5A14ANOS = {"sinan": ""} - -DEFEN_PUBL = {"sinan": ""} - -DEF_AUDITI = {"sinan": ""} - -DEF_DIAGNO = {"sinan": ""} - -DEF_ESPEC = {"sinan": ""} - -DEF_FISICA = {"sinan": ""} - -DEF_MENTAL = {"sinan": ""} - -DEF_OUT = {"sinan": ""} - -DEF_TRANS = {"sinan": ""} - -DEF_VISUAL = {"sinan": ""} - -DEIONIZA = {"cnes": ""} - -DELEG = {"sinan": ""} - -DELEG_CRIA = {"sinan": ""} - -DELEG_IDOS = {"sinan": ""} - -DELEG_MULH = {"sinan": ""} - -DENCRIREND = {"ibge": ""} - -DENDESOCUP = {"ibge": ""} - -DENGUE = {"sinan": ""} - -DENRENDA = {"ibge": ""} - -DENTARIO = {"sinan": ""} - -DENTRABINF = {"ibge": ""} - -DESCSEGM = {"cnes": ""} - -DESMATA_N = {"sinan": ""} - -DESTINOPAC = {"sia": ""} - -DEXAME = {"sinan": ""} - -DG_OUT_N = {"sinan": ""} - -DIABETES = {"sinan": ""} - -DIAGNO_LAB = {"sinan": ""} - -DIAGSEC1 = {"sih": ""} - -DIAGSEC2 = {"sih": ""} - -DIAGSEC3 = {"sih": ""} - -DIAGSEC4 = {"sih": ""} - -DIAGSEC5 = {"sih": ""} - -DIAGSEC6 = {"sih": ""} - -DIAGSEC7 = {"sih": ""} - -DIAGSEC8 = {"sih": ""} - -DIAGSEC9 = {"sih": ""} - -DIAG_CONF = {"sinan": ""} - -DIAG_DESCA = {"sinan": ""} - -DIAG_ESP = {"sinan": ""} - -DIAG_MAE = {"sinan": ""} - -DIAG_PARA = {"sinan": ""} - -DIAG_PAR_N = {"sinan": ""} - -DIAG_PRINC = { - "ciha": "", - "sih": "", -} - -DIAG_SEC = {"sih": ""} - -DIAG_SECUN = { - "ciha": "", - "sih": "", -} - -DIALISE = {"cnes": ""} - -DIARREIA = {"sinan": ""} - -DIAR_ACOM = {"sih": ""} - -DIAS = {"sinan": ""} - -DIAS_PERM = { - "ciha": "", - "sih": "", -} - -DIFDATA = { - "sim": "", - "sinasc": "", -} - -DIFER = {"pni": ""} - -DILACERANT = {"sinan": ""} - -DINTERNA = {"sinan": ""} - -DIR_HUMAN = {"sinan": ""} - -DISFAGIA = {"sinan": ""} - -DISTRADM = {"cnes": ""} - -DISTRSAN = {"cnes": ""} - -DOENCA_TRA = {"sinan": ""} - -DOMICILI = {"sinan": ""} - -DOR = {"sinan": ""} - -DORMIU_N = {"sinan": ""} - -DOR_COSTAS = {"sinan": ""} - -DOR_RETRO = {"sinan": ""} - -DOSAGEM = {"sinan": ""} - -DOSE = { - "pni": "", - "sinan": "", -} - -DOSE1 = {"pni": ""} - -DOSEN = {"pni": ""} - -DOSES = {"sinan": ""} - -DOSES_A = {"sinan": ""} - -DOSE_RECEB = {"sinan": ""} - -DOXOCI = {"sinan": ""} - -DROGA = {"sinan": ""} - -DROGAS = {"sinan": ""} - -DSALIMENTO = {"sinan": ""} - -DSCARDIOP = {"sinan": ""} - -DSCAUSALIM = {"sinan": ""} - -DSFONTE = {"sinan": ""} - -DSMOTIVO = {"sinan": ""} - -DSTITULO1 = {"sinan": ""} - -DSTRAESQUE = {"sinan": ""} - -DS_ALI1 = {"sinan": ""} - -DS_ALI1OUT = {"sinan": ""} - -DS_ALI2 = {"sinan": ""} - -DS_ALI2OUT = {"sinan": ""} - -DS_ESQUEMA = {"sinan": ""} - -DS_FIM_GES = {"sinan": ""} - -DS_FORMA = {"sinan": ""} - -DS_F_OUTRO = {"sinan": ""} - -DS_INDUS = {"sinan": ""} - -DS_INF_LOC = {"sinan": ""} - -DS_INF_OUT = {"sinan": ""} - -DS_INGEST = {"sinan": ""} - -DS_INI_GES = {"sinan": ""} - -DS_LOCAL1 = {"sinan": ""} - -DS_LOCAL2 = {"sinan": ""} - -DS_MUN_1 = {"sinan": ""} - -DS_MUN_2 = {"sinan": ""} - -DS_MUN_3 = {"sinan": ""} - -DS_OUTRO = {"sinan": ""} - -DS_OUTROSI = {"sinan": ""} - -DS_OUTR_LO = {"sinan": ""} - -DS_OUT_AMB = {"sinan": ""} - -DS_PARES = {"sinan": ""} - -DS_RESU_OU = {"sinan": ""} - -DS_TRANS1 = {"sinan": ""} - -DS_TRANS2 = {"sinan": ""} - -DS_TRANS3 = {"sinan": ""} - -DS_TRANS_1 = {"sinan": ""} - -DS_TRANS_2 = {"sinan": ""} - -DS_TRAT = {"sinan": ""} - -DTALTA = {"sinan": ""} - -DTALTA_N = {"sinan": ""} - -DTATEND = {"sinan": ""} - -DTATESTADO = {"sim": ""} - -DTCADASTRO = { - "sim": "", - "sinasc": "", -} - -DTCADINF = {"sim": ""} - -DTCADINV = {"sim": ""} - -DTCONCASO = {"sim": ""} - -DTCONFIRMA = {"sinan": ""} - -DTCONINV = {"sim": ""} - -DTDECLARAC = {"sinasc": ""} - -DTDIASINAC = {"sinan": ""} - -DTELETRO = {"sinan": ""} - -DTFEZESCOL = {"sinan": ""} - -DTIMUNO = {"sinan": ""} - -DTINICTRAT = {"sinan": ""} - -DTINTERNA = {"sinan": ""} - -DTINVESTIG = {"sim": ""} - -DTISOLA = {"sinan": ""} - -DTMICRO1 = {"sinan": ""} - -DTMICRO2 = {"sinan": ""} - -DTMUDESQ = {"sinan": ""} - -DTNASC = { - "sia": "", - "sim": "", - "sinasc": "", -} - -DTNASCMAE = {"sinasc": ""} - -DTOBITO = {"sim": ""} - -DTPORTAR = {"cnes": ""} - -DTPRICONS = {"sinan": ""} - -DTRAPIDO1 = {"sinan": ""} - -DTRATA = {"sinan": ""} - -DTRECEBIM = { - "sim": "", - "sinasc": "", -} - -DTRECORIG = { - "sim": "", - "sinasc": "", -} - -DTRECORIGA = { - "sim": "", - "sinasc": "", -} - -DTREGCART = { - "sim": "", - "sinasc": "", -} - -DTS1 = {"sinan": ""} - -DTS2 = {"sinan": ""} - -DTSORO = {"sinan": ""} - -DTSOROCOL = {"sinan": ""} - -DTSUSPEIC = {"sinan": ""} - -DTTESTE1 = {"sinan": ""} - -DTTRANSDM = {"sinan": ""} - -DTTRANSFU = {"sinan": ""} - -DTTRANSRM = {"sinan": ""} - -DTTRANSRS = {"sinan": ""} - -DTTRANSSE = {"sinan": ""} - -DTTRANSSM = {"sinan": ""} - -DTTRANSUS = {"sinan": ""} - -DTTRAT = {"sinan": ""} - -DTTRIAGEM = {"sinan": ""} - -DTULTCOMP = {"sinan": ""} - -DTULTMENST = {"sinasc": ""} - -DT_1VAC = {"sinan": ""} - -DT_1_DOSE = {"sinan": ""} - -DT_2VAC = {"sinan": ""} - -DT_2_DOSE = {"sinan": ""} - -DT_3_DOSE = {"sinan": ""} - -DT_ACID = {"sinan": ""} - -DT_ACIDENT = {"sinan": ""} - -DT_ACRED = {"cnes": ""} - -DT_ADM_ANT = {"sinan": ""} - -DT_ALI1COL = {"sinan": ""} - -DT_ALI2COL = {"sinan": ""} - -DT_ALRM = {"sinan": ""} - -DT_APLI_SO = {"sinan": ""} - -DT_ATEND = { - "ciha": "", - "sia": "", -} - -DT_ATENDE = {"sinan": ""} - -DT_ATENDIM = {"sinan": ""} - -DT_ATIVA = {"cnes": ""} - -DT_ATUAL = {"cnes": ""} - -DT_CATARRA = {"sinan": ""} - -DT_CHIK_S1 = {"sinan": ""} - -DT_CHIK_S2 = {"sinan": ""} - -DT_CHOQUE = {"sinan": ""} - -DT_COL1 = {"sinan": ""} - -DT_COL2 = {"sinan": ""} - -DT_COL3 = {"sinan": ""} - -DT_COLETA = {"sinan": ""} - -DT_COLOUT = {"sinan": ""} - -DT_COL_1 = {"sinan": ""} - -DT_COL_2 = {"sinan": ""} - -DT_COL_DIR = {"sinan": ""} - -DT_COL_HE2 = {"sinan": ""} - -DT_COL_HEM = {"sinan": ""} - -DT_COL_IGM = {"sinan": ""} - -DT_COL_IND = {"sinan": ""} - -DT_COL_PL2 = {"sinan": ""} - -DT_COL_PLQ = {"sinan": ""} - -DT_COL_S1 = {"sinan": ""} - -DT_COL_S2 = {"sinan": ""} - -DT_CONFIRM = {"sinan": ""} - -DT_COPRO = {"sinan": ""} - -DT_COPRO1 = {"sinan": ""} - -DT_COPRO2 = {"sinan": ""} - -DT_COPRO3 = {"sinan": ""} - -DT_DESAT = {"cnes": ""} - -DT_DESC1 = {"sinan": ""} - -DT_DESC2 = {"sinan": ""} - -DT_DESC3 = {"sinan": ""} - -DT_DESLC1 = {"sinan": ""} - -DT_DESLC2 = {"sinan": ""} - -DT_DESLC3 = {"sinan": ""} - -DT_DIAG = {"sinan": ""} - -DT_DIGITA = {"sinan": ""} - -DT_DOSE = {"sinan": ""} - -DT_DOSE_1 = {"sinan": ""} - -DT_DOSE_2 = {"sinan": ""} - -DT_DOSE_3 = {"sinan": ""} - -DT_DOSE_4 = {"sinan": ""} - -DT_DOSE_5 = {"sinan": ""} - -DT_DOSE_N = {"sinan": ""} - -DT_ENCERRA = {"sinan": ""} - -DT_ENVIO = {"sinan": ""} - -DT_EVOLUC = {"sinan": ""} - -DT_EXPED = {"cnes": ""} - -DT_EXPO = {"sinan": ""} - -DT_FEBRE = {"sinan": ""} - -DT_FEZES = {"sinan": ""} - -DT_FIM = {"sia": ""} - -DT_GRAV = {"sinan": ""} - -DT_HEMO1 = {"sinan": ""} - -DT_HEMO2 = {"sinan": ""} - -DT_HEMO3 = {"sinan": ""} - -DT_INICIO = {"sia": ""} - -DT_INICIO_ = {"sinan": ""} - -DT_INIC_TR = {"sinan": ""} - -DT_INI_EPI = {"sinan": ""} - -DT_INTER = {"sih": ""} - -DT_INTERNA = {"sinan": ""} - -DT_INVEST = {"sinan": ""} - -DT_LIQUOR = {"sinan": ""} - -DT_MOTCOB = {"sia": ""} - -DT_MUDANCA = {"sinan": ""} - -DT_NASC = {"sinan": ""} - -DT_NOTIFIC = {"sinan": ""} - -DT_NOTI_AT = {"sinan": ""} - -DT_NS1 = {"sinan": ""} - -DT_OBITO = {"sinan": ""} - -DT_OCOR = {"sinan": ""} - -DT_OUTR1 = {"sinan": ""} - -DT_OUTR2 = {"sinan": ""} - -DT_OUTR3 = {"sinan": ""} - -DT_PCR = {"sinan": ""} - -DT_PCR_1 = {"sinan": ""} - -DT_PCR_2 = {"sinan": ""} - -DT_PCR_3 = {"sinan": ""} - -DT_PNASS = {"cnes": ""} - -DT_PRNT = {"sinan": ""} - -DT_PROCESS = {"sia": ""} - -DT_PUBLE = {"cnes": ""} - -DT_PUBLM = {"cnes": ""} - -DT_RAPIDO = {"sinan": ""} - -DT_REFORCO = {"sinan": ""} - -DT_RESU3 = {"sinan": ""} - -DT_RISCO1 = {"sinan": ""} - -DT_RISCO2 = {"sinan": ""} - -DT_RISCO3 = {"sinan": ""} - -DT_RISCO4 = {"sinan": ""} - -DT_RTPCR = {"sinan": ""} - -DT_R_TRA = {"sinan": ""} - -DT_S1 = {"sinan": ""} - -DT_S2 = {"sinan": ""} - -DT_SAIDA = { - "ciha": "", - "sih": "", -} - -DT_SIN_PRI = {"sinan": ""} - -DT_SORO = {"sinan": ""} - -DT_SORO1 = {"sinan": ""} - -DT_SORO2 = {"sinan": ""} - -DT_SOROR1 = {"sinan": ""} - -DT_SOROR2 = {"sinan": ""} - -DT_TRANSDM = {"sinan": ""} - -DT_TRANSRM = {"sinan": ""} - -DT_TRANSRS = {"sinan": ""} - -DT_TRANSSE = {"sinan": ""} - -DT_TRANSSM = {"sinan": ""} - -DT_TRANSUS = {"sinan": ""} - -DT_TRIA_11 = {"sinan": ""} - -DT_TRISMO = {"sinan": ""} - -DT_TRNASRM = {"sinan": ""} - -DT_TRNASRS = {"sinan": ""} - -DT_TR_RAB = {"sinan": ""} - -DT_ULT_DOS = {"sinan": ""} - -DT_URO = {"sinan": ""} - -DT_URO2 = {"sinan": ""} - -DT_URO3 = {"sinan": ""} - -DT_VAC1 = {"sinan": ""} - -DT_VACINA = {"sinan": ""} - -DT_VAC_1 = {"sinan": ""} - -DT_VAC_2 = {"sinan": ""} - -DT_VAC_3 = {"sinan": ""} - -DT_VAC_4 = {"sinan": ""} - -DT_VAC_5 = {"sinan": ""} - -DT_VAC_ULT = {"sinan": ""} - -DT_VENCIM = {"sinan": ""} - -DT_VIRAL = {"sinan": ""} - -DT_VOP = {"sinan": ""} - -DURACAO = {"sinan": ""} - -D_DIAR = {"sinan": ""} - -D_VOMITO = {"sinan": ""} - -ECG = {"sinan": ""} - -ECG_RESULT = {"sinan": ""} - -EDEMA = {"sinan": ""} - -ELISA = {"sinan": ""} - -ELISA1 = {"sinan": ""} - -ELISA2 = {"sinan": ""} - -ELI_IGG_S1 = {"sinan": ""} - -ELI_IGG_S2 = {"sinan": ""} - -ELI_IGM_S1 = {"sinan": ""} - -ELI_IGM_S2 = {"sinan": ""} - -EMAGRA = {"sinan": ""} - -ENCAMINHA = {"sinan": ""} - -ENC_ABRIGO = {"sinan": ""} - -ENC_CREAS = {"sinan": ""} - -ENC_DEAM = {"sinan": ""} - -ENC_DELEG = {"sinan": ""} - -ENC_DPCA = {"sinan": ""} - -ENC_ESPEC = {"sinan": ""} - -ENC_IML = {"sinan": ""} - -ENC_MPU = {"sinan": ""} - -ENC_MULHER = {"sinan": ""} - -ENC_OUTR = {"sinan": ""} - -ENC_SAUDE = {"sinan": ""} - -ENC_SENTIN = {"sinan": ""} - -ENC_TUTELA = {"sinan": ""} - -ENC_VARA = {"sinan": ""} - -ENDEMICO = {"sinan": ""} - -ENDRES = {"sinasc": ""} - -ENTERO = {"sinan": ""} - -ENTO_ANIMA = {"sinan": ""} - -ENTO_CAO = {"sinan": ""} - -ENTO_CAPTU = {"sinan": ""} - -ENTO_EQUIN = {"sinan": ""} - -ENTO_EXIST = {"sinan": ""} - -ENTO_EXI_1 = {"sinan": ""} - -ENTO_EXI_2 = {"sinan": ""} - -ENTO_EXI_3 = {"sinan": ""} - -ENTO_EXI_4 = {"sinan": ""} - -ENTO_EXTRA = {"sinan": ""} - -ENTO_FLEBO = {"sinan": ""} - -ENTO_INSET = {"sinan": ""} - -ENTO_INTRA = {"sinan": ""} - -ENTO_LOCAL = {"sinan": ""} - -ENTO_OUTRO = {"sinan": ""} - -ENTO_PERID = {"sinan": ""} - -ENTO_PROXI = {"sinan": ""} - -ENTO_TRANS = {"sinan": ""} - -ENTRADA = {"sinan": ""} - -EPICUTA = {"sinan": ""} - -EPISTAXE = {"sinan": ""} - -EPIS_RACIO = {"sinan": ""} - -EPI_PESTE = {"sinan": ""} - -EQBRALTA = {"cnes": ""} - -EQBRBAIX = {"cnes": ""} - -EQBRMEDI = {"cnes": ""} - -EQDOSCLI = {"cnes": ""} - -EQFONSEL = {"cnes": ""} - -EQSISPLN = {"cnes": ""} - -EQUINOS = {"sinan": ""} - -EQ_MAREA = {"cnes": ""} - -EQ_MINDI = {"cnes": ""} - -ESC = {"sim": ""} - -ESC2010 = {"sim": ""} - -ESCFALAGR1 = {"sim": ""} - -ESCMAE = { - "sim": "", - "sinasc": "", -} - -ESCMAE2010 = { - "sim": "", - "sinasc": "", -} - -ESCMAEAGR1 = { - "sim": "", - "sinasc": "", -} - -ESCOLA = {"cnes": ""} - -ESCOLARID = {"ibge": ""} - -ESCOLMAE = {"sinan": ""} - -ESCOLMAE_N = {"sinan": ""} - -ESC_MAE_N = {"sinan": ""} - -ESFERA_A = {"cnes": ""} - -ESPEC = { - "ciha": "", - "sih": "", -} - -ESPECIE = {"sinan": ""} - -ESPECIE_N = {"sinan": ""} - -ESPECIFICO = {"sinan": ""} - -ESPLENO = {"sinan": ""} - -ESPLENOM = {"sinan": ""} - -ESP_OUT = {"sinan": ""} - -ESQ_ATU_N = {"sinan": ""} - -ESQ_INI_N = {"sinan": ""} - -ESTABDESCR = {"sim": ""} - -ESTAB_OCOR = {"sinasc": ""} - -ESTCIV = {"sim": ""} - -ESTCIVIL = {"sim": ""} - -ESTCIVMAE = {"sinasc": ""} - -ESTREPTOMI = {"sinan": ""} - -ETAMBUTOL = {"sinan": ""} - -ETIOL_OUTR = {"sinan": ""} - -ETIONAMIDA = {"sinan": ""} - -ETNIA = { - "sia": "", - "sih": "", - "sim": "", - "sinasc": "", -} - -EVIDENCIA = {"sinan": ""} - -EVOLUCAO = {"sinan": ""} - -EVOL_AFAST = {"sinan": ""} - -EVOR1_DT_R = {"sinan": ""} - -EVOR_A_MID = {"sinan": ""} - -EVOR_A_MIE = {"sinan": ""} - -EVOR_A_MSD = {"sinan": ""} - -EVOR_A_MSE = {"sinan": ""} - -EVOR_DT_RE = {"sinan": ""} - -EVOR_F_MID = {"sinan": ""} - -EVOR_F_MIE = {"sinan": ""} - -EVOR_F_MSD = {"sinan": ""} - -EVOR_F_MSE = {"sinan": ""} - -EVOR_RC_ED = {"sinan": ""} - -EVOR_RC_EE = {"sinan": ""} - -EVOR_RC_FD = {"sinan": ""} - -EVOR_RC_FE = {"sinan": ""} - -EVOR_S_FAC = {"sinan": ""} - -EVOR_S_MID = {"sinan": ""} - -EVOR_S_MIE = {"sinan": ""} - -EVOR_S_MSD = {"sinan": ""} - -EVOR_S_MSE = {"sinan": ""} - -EVO_DIAG = {"sinan": ""} - -EVO_DIAG_N = {"sinan": ""} - -EVO_DT_OBI = {"sinan": ""} - -EVO_OUTR = {"sinan": ""} - -EXAME = { - "sim": "", - "sinan": "", -} - -EXANTEMA = {"sinan": ""} - -EXPDIFDATA = {"sim": ""} - -EXPO_N = {"sinan": ""} - -EXTRAPU1_N = {"sinan": ""} - -EXTRAPU2_N = {"sinan": ""} - -EXTRAPUL_O = {"sinan": ""} - -FACIAL = {"sinan": ""} - -FAEC_TP = {"sih": ""} - -FALA = {"sinan": ""} - -FALENCIA = {"sinan": ""} - -FC_CONTATO = {"sinan": ""} - -FC_CONT_DE = {"sinan": ""} - -FEBRE = {"sinan": ""} - -FEN_HEMORR = {"sinan": ""} - -FERIMENTO = {"sinan": ""} - -FERIMENT_N = {"sinan": ""} - -FEZES = {"sinan": ""} - -FIGADO = {"sinan": ""} - -FILHMORT = {"sim": ""} - -FILHVIVOS = {"sim": ""} - -FIL_ABORT = {"sinasc": ""} - -FIL_MORTOS = {"sinasc": ""} - -FIL_VIVOS = {"sinasc": ""} - -FIM = {"sia": ""} - -FIM_ANIMAL = {"sinan": ""} - -FINANC = {"sih": ""} - -FISCALIZA = {"sinan": ""} - -FLOGISTICO = {"sinan": ""} - -FLUXO_AERE = {"sinan": ""} - -FLXRECEBI = {"sinan": ""} - -FOI_MATA = {"sinan": ""} - -FONTE = { - "ciha": "", - "sim": "", - "sinan": "", -} - -FONTEINV = {"sim": ""} - -FONTES = {"sim": ""} - -FONTESINF = {"sim": ""} - -FONTE_ORC = {"sih": ""} - -FONTINFO = {"sim": ""} - -FORMA = {"sinan": ""} - -FORMACLINI = {"sinan": ""} - -FORMA_CO = {"sinan": ""} - -FORMA_TF = {"sinan": ""} - -FORMA_TI = {"sinan": ""} - -FORMA_TS = {"sinan": ""} - -FORMA_TT = {"sinan": ""} - -FO_ANT_HBC = {"sinan": ""} - -FO_ANT_HCV = {"sinan": ""} - -FO_ANT_HIV = {"sinan": ""} - -FO_HBSAG = {"sinan": ""} - -FRAQUEZA = {"sinan": ""} - -FUMA = {"sinan": ""} - -FXETARIA = {"ibge": ""} - -FX_ETARIA = {"pni": ""} - -F_AREIA = {"cnes": ""} - -F_CARVAO = {"cnes": ""} - -GANGLIOS = {"sinan": ""} - -GASES = {"sinan": ""} - -GENGIVO = {"sinan": ""} - -GENOT_G = {"sinan": ""} - -GENOT_P = {"sinan": ""} - -GEN_VHC = {"sinan": ""} - -GESPRG1E = {"cnes": ""} - -GESPRG1M = {"cnes": ""} - -GESPRG2E = {"cnes": ""} - -GESPRG2M = {"cnes": ""} - -GESPRG3E = {"cnes": ""} - -GESPRG3M = {"cnes": ""} - -GESPRG4E = {"cnes": ""} - -GESPRG4M = {"cnes": ""} - -GESPRG5E = {"cnes": ""} - -GESPRG5M = {"cnes": ""} - -GESPRG6E = {"cnes": ""} - -GESPRG6M = {"cnes": ""} - -GESTACAO = { - "sim": "", - "sinasc": "", -} - -GESTANTE = {"sinan": ""} - -GESTAO = { - "ciha": "", - "sia": "", - "sih": "", -} - -GESTOR_COD = {"sih": ""} - -GESTOR_CPF = {"sih": ""} - -GESTOR_DT = {"sih": ""} - -GESTOR_TP = {"sih": ""} - -GESTRISCO = {"sih": ""} - -GLAUCOMA = {"sinan": ""} - -GRAVIDEZ = { - "sim": "", - "sinasc": "", -} - -GRAV_AST = {"sinan": ""} - -GRAV_CONSC = {"sinan": ""} - -GRAV_CONV = {"sinan": ""} - -GRAV_ENCH = {"sinan": ""} - -GRAV_EXTRE = {"sinan": ""} - -GRAV_HEMAT = {"sinan": ""} - -GRAV_HIPOT = {"sinan": ""} - -GRAV_INSUF = {"sinan": ""} - -GRAV_MELEN = {"sinan": ""} - -GRAV_METRO = {"sinan": ""} - -GRAV_MIOC = {"sinan": ""} - -GRAV_ORGAO = {"sinan": ""} - -GRAV_PULSO = {"sinan": ""} - -GRAV_SANG = {"sinan": ""} - -GRAV_TAQUI = {"sinan": ""} - -G_D = {"sinan": ""} - -G_M = {"sinan": ""} - -HANSENIASE = {"sinan": ""} - -HAV = {"sinan": ""} - -HA_PAUSA = {"sinan": ""} - -HBC_TOTAL = {"sinan": ""} - -HBSAG = {"sinan": ""} - -HBV = {"sinan": ""} - -HCV = {"sinan": ""} - -HDV = {"sinan": ""} - -HEMATOLOG = {"sinan": ""} - -HEMATURA = {"sinan": ""} - -HEMA_MAIOR = {"sinan": ""} - -HEMA_MENOR = {"sinan": ""} - -HEMO = {"sinan": ""} - -HEMOCULT = {"sinan": ""} - -HEMODIALIS = {"sinan": ""} - -HEMORRAG = {"sinan": ""} - -HEMORRAGI = {"sinan": ""} - -HEMOTERA = {"cnes": ""} - -HEMO_D_1 = {"sinan": ""} - -HEMO_D_2 = {"sinan": ""} - -HEMO_D_3 = {"sinan": ""} - -HEMO_IGG = {"sinan": ""} - -HEMO_IGM = {"sinan": ""} - -HEMO_R1 = {"sinan": ""} - -HEMO_R2 = {"sinan": ""} - -HEMO_R3 = {"sinan": ""} - -HEM_IGG_S1 = {"sinan": ""} - -HEM_IGG_S2 = {"sinan": ""} - -HEM_IGM_S1 = {"sinan": ""} - -HEM_IGM_S2 = {"sinan": ""} - -HEPAESPLE = {"sinan": ""} - -HEPATITA = {"sinan": ""} - -HEPATITB = {"sinan": ""} - -HEPATITE_N = {"sinan": ""} - -HEPATO = {"sinan": ""} - -HEPATOME = {"sinan": ""} - -HEPATOPAT = {"sinan": ""} - -HEPA_ESP = {"sinan": ""} - -HERBIV_DES = {"sinan": ""} - -HEV = {"sinan": ""} - -HIDROCARBO = {"sinan": ""} - -HIDROFOBI = {"sinan": ""} - -HIPEREMIA = {"sinan": ""} - -HIPERTEN = {"sinan": ""} - -HIPERTENSA = {"sinan": ""} - -HIPOREXIA = {"sinan": ""} - -HIPOTENSAO = {"sinan": ""} - -HISTOLOG_N = {"sinan": ""} - -HISTOPA = {"sinan": ""} - -HISTOPATO = {"sinan": ""} - -HISTOPATOL = {"sinan": ""} - -HISTOPA_N = {"sinan": ""} - -HISTORIA = {"sinan": ""} - -HIV = {"sinan": ""} - -HOMONIMO = { - "ciha": "", - "sih": "", -} - -HORAHOSP = {"cnes": ""} - -HORANASC = {"sinasc": ""} - -HORAOBITO = {"sim": ""} - -HORAOUTR = {"cnes": ""} - -HORA_ACID = {"sinan": ""} - -HORA_AMB = {"cnes": ""} - -HORA_JOR = {"sinan": ""} - -HORA_OCOR = {"sinan": ""} - -HORMONIO = {"sinan": ""} - -HOSPITAL = {"sinan": ""} - -HOSPITALIZ = {"sinan": ""} - -HOSP_NSUS = {"cnes": ""} - -HOSP_SUS = {"cnes": ""} - -ICTERICIA = {"sinan": ""} - -IDADE = { - "ciha": "", - "ibge": "", - "sih": "", - "sim": "", -} - -IDADEMAE = { - "sim": "", - "sinan": "", - "sinasc": "", -} - -IDADEMAX = {"sia": ""} - -IDADEMIN = {"sia": ""} - -IDADEPAC = {"sia": ""} - -IDADEPAI = {"sinasc": ""} - -IDADE_MAE = { - "sinan": "", - "sinasc": "", -} - -IDANOMAL = {"sinasc": ""} - -IDENT = {"sih": ""} - -IDENT_GEN = {"sinan": ""} - -IDENT_MICR = {"sinan": ""} - -IDEQUIPE = {"cnes": ""} - -ID_AGRAVO = {"sinan": ""} - -ID_AREA = {"cnes": ""} - -ID_ARTRALG = {"sinan": ""} - -ID_CNS_SUS = {"sinan": ""} - -ID_CONJUNT = {"sinan": ""} - -ID_CORIZA = {"sinan": ""} - -ID_DG_DES = {"sinan": ""} - -ID_DG_NOT = {"sinan": ""} - -ID_DT_RESI = {"sinan": ""} - -ID_ETIOLOG = {"sinan": ""} - -ID_EV_NOT = {"sinan": ""} - -ID_GANGLIO = {"sinan": ""} - -ID_HOSPIT = {"sinan": ""} - -ID_LIQUOR = {"sinan": ""} - -ID_MN_OCOR = {"sinan": ""} - -ID_MN_RESI = {"sinan": ""} - -ID_MUNICIP = {"sinan": ""} - -ID_MUNIC_2 = {"sinan": ""} - -ID_MUNIC_A = {"sinan": ""} - -ID_MUNI_AT = {"sinan": ""} - -ID_MUNI_RE = {"sinan": ""} - -ID_NOTIFIC = {"sinan": ""} - -ID_OCUPACA = {"sinan": ""} - -ID_OCUPA_N = {"sinan": ""} - -ID_OCUP_MA = {"sinan": ""} - -ID_PAIS = {"sinan": ""} - -ID_REGIONA = {"sinan": ""} - -ID_RETRO = {"sinan": ""} - -ID_RE_IGG = {"sinan": ""} - -ID_RE_IGG_ = {"sinan": ""} - -ID_RE_IGM = {"sinan": ""} - -ID_RE_IGM_ = {"sinan": ""} - -ID_RE_IG_1 = {"sinan": ""} - -ID_RE_IG_2 = {"sinan": ""} - -ID_RG_RESI = {"sinan": ""} - -ID_S1_IGG = {"sinan": ""} - -ID_S1_IGG_ = {"sinan": ""} - -ID_S1_IGM = {"sinan": ""} - -ID_S1_IGM_ = {"sinan": ""} - -ID_S1_IG_1 = {"sinan": ""} - -ID_S1_IG_2 = {"sinan": ""} - -ID_S2_IGG = {"sinan": ""} - -ID_S2_IGG_ = {"sinan": ""} - -ID_S2_IGM = {"sinan": ""} - -ID_S2_IGM_ = {"sinan": ""} - -ID_S2_IG_1 = {"sinan": ""} - -ID_S2_IG_2 = {"sinan": ""} - -ID_SANGUE = {"sinan": ""} - -ID_SECRECA = {"sinan": ""} - -ID_SEGM = {"cnes": ""} - -ID_TOSSE = {"sinan": ""} - -ID_UNIDADE = {"sinan": ""} - -ID_UNID_AT = {"sinan": ""} - -ID_URINA = {"sinan": ""} - -IFI = {"sinan": ""} - -IGG_S1 = {"sinan": ""} - -IGG_S2 = {"sinan": ""} - -IGG_T2 = {"sinan": ""} - -IGM_S1 = {"sinan": ""} - -IGM_S2 = {"sinan": ""} - -IGM_T1 = {"sinan": ""} - -IMPLANTA = {"sinan": ""} - -IMUNO = { - "pni": "", - "sinan": "", -} - -IMUNOH = {"sinan": ""} - -IMUNOHIST = {"sinan": ""} - -IMUNOH_N = {"sinan": ""} - -IMUNO_DIRE = {"sinan": ""} - -IMUNO_INDI = {"sinan": ""} - -IMU_HEP_B = {"sinan": ""} - -IMU_IGG_S1 = {"sinan": ""} - -IMU_IGG_S2 = {"sinan": ""} - -IMU_IGM_S1 = {"sinan": ""} - -IMU_IGM_S2 = {"sinan": ""} - -INAL_CRACK = {"sinan": ""} - -INDIGENA = {"cnes": ""} - -INDIVIDUAL = {"sinan": ""} - -IND_NSUS = {"cnes": ""} - -IND_SUS = {"cnes": ""} - -IND_VDRL = {"sih": ""} - -INESPECIF = {"sinan": ""} - -INFAN_JUV = {"sinan": ""} - -INFECCIOSO = {"sinan": ""} - -INFEHOSP = {"sih": ""} - -INFERIORES = {"sinan": ""} - -INFILTRA = {"sinan": ""} - -INICIO = {"sia": ""} - -INJETAVEIS = {"sinan": ""} - -INSC_PN = {"sih": ""} - -INSTITUCIO = {"sinan": ""} - -INSTRMAE = {"sim": ""} - -INSTRPAI = {"sim": ""} - -INSTRU = {"sih": ""} - -INSTRUCAO = {"sim": ""} - -INSTR_MAE = {"sinasc": ""} - -INSUFICIEN = {"sinan": ""} - -INTOX_CHUM = {"sinan": ""} - -INTOX_MERC = {"sinan": ""} - -INTOX_META = {"sinan": ""} - -INT_TEMPO = {"sinan": ""} - -IN_AIDS = {"sinan": ""} - -IN_TP_VAL = {"sih": ""} - -IN_VINCULA = {"sinan": ""} - -IONIZANTES = {"sinan": ""} - -ISOLAMENTO = {"sinan": ""} - -ISONIAZIDA = {"sinan": ""} - -KOTELCHUCK = {"sinasc": ""} - -LABC_DT = {"sinan": ""} - -LABC_DT_1 = {"sinan": ""} - -LABC_DT_2 = {"sinan": ""} - -LABC_EVIDE = {"sinan": ""} - -LABC_IGG = {"sinan": ""} - -LABC_LIQUO = {"sinan": ""} - -LABC_LIQ_1 = {"sinan": ""} - -LABC_SANGU = {"sinan": ""} - -LABC_TITUL = {"sinan": ""} - -LABC_TIT_1 = {"sinan": ""} - -LABC_TIT_2 = {"sinan": ""} - -LAB_AGLIQU = {"sinan": ""} - -LAB_AGSANG = {"sinan": ""} - -LAB_ASPECT = {"sinan": ""} - -LAB_ATIPIC = {"sinan": ""} - -LAB_BCESCA = {"sinan": ""} - -LAB_BCLESA = {"sinan": ""} - -LAB_BCLIQU = {"sinan": ""} - -LAB_BCSANG = {"sinan": ""} - -LAB_BD = {"sinan": ""} - -LAB_BI = {"sinan": ""} - -LAB_BILATE = {"sinan": ""} - -LAB_BT = {"sinan": ""} - -LAB_CELEBR = {"sinan": ""} - -LAB_CILIQU = {"sinan": ""} - -LAB_CISANG = {"sinan": ""} - -LAB_CLOR = {"sinan": ""} - -LAB_COLHEU = {"sinan": ""} - -LAB_CONF = {"sinan": ""} - -LAB_CONFIR = {"sinan": ""} - -LAB_CON_F = {"sinan": ""} - -LAB_CREATI = {"sinan": ""} - -LAB_CTESCA = {"sinan": ""} - -LAB_CTLESA = {"sinan": ""} - -LAB_CTLIQU = {"sinan": ""} - -LAB_CTSANG = {"sinan": ""} - -LAB_CULTUR = {"sinan": ""} - -LAB_DATA_C = {"sinan": ""} - -LAB_DERRAM = {"sinan": ""} - -LAB_DIFUSO = {"sinan": ""} - -LAB_DT3 = {"sinan": ""} - -LAB_DTPUNC = {"sinan": ""} - -LAB_DT_1 = {"sinan": ""} - -LAB_DT_2 = {"sinan": ""} - -LAB_DT_3 = {"sinan": ""} - -LAB_DT_C1 = {"sinan": ""} - -LAB_DT_CEN = {"sinan": ""} - -LAB_DT_E_1 = {"sinan": ""} - -LAB_DT_F1 = {"sinan": ""} - -LAB_DT_L_1 = {"sinan": ""} - -LAB_DT_L_2 = {"sinan": ""} - -LAB_DT_NLE = {"sinan": ""} - -LAB_DT_R1 = {"sinan": ""} - -LAB_DT_RE1 = {"sinan": ""} - -LAB_ELIS_1 = {"sinan": ""} - -LAB_ELIS_2 = {"sinan": ""} - -LAB_EOSI = {"sinan": ""} - -LAB_ESFR = {"sinan": ""} - -LAB_E_D_1 = {"sinan": ""} - -LAB_GLICO = {"sinan": ""} - -LAB_HEMA = {"sinan": ""} - -LAB_HEMATO = {"sinan": ""} - -LAB_HEMA_N = {"sinan": ""} - -LAB_HEMO = {"sinan": ""} - -LAB_HISTOP = {"sinan": ""} - -LAB_IGG = {"sinan": ""} - -LAB_IGG_R = {"sinan": ""} - -LAB_IGM = {"sinan": ""} - -LAB_IGM_R = {"sinan": ""} - -LAB_IMUNO = {"sinan": ""} - -LAB_INTEST = {"sinan": ""} - -LAB_IRM = {"sinan": ""} - -LAB_ISFEZE = {"sinan": ""} - -LAB_ISLIQU = {"sinan": ""} - -LAB_LEUCO = {"sinan": ""} - -LAB_LEUC_N = {"sinan": ""} - -LAB_LINFO = {"sinan": ""} - -LAB_LOCAL = {"sinan": ""} - -LAB_L_CEL1 = {"sinan": ""} - -LAB_L_CEL2 = {"sinan": ""} - -LAB_L_CL1 = {"sinan": ""} - -LAB_L_CL2 = {"sinan": ""} - -LAB_L_C_DE = {"sinan": ""} - -LAB_L_GLI1 = {"sinan": ""} - -LAB_L_GLI2 = {"sinan": ""} - -LAB_L_LIN1 = {"sinan": ""} - -LAB_L_LIN2 = {"sinan": ""} - -LAB_L_OUT = {"sinan": ""} - -LAB_L_PRO1 = {"sinan": ""} - -LAB_L_PRO2 = {"sinan": ""} - -LAB_L_S_DE = {"sinan": ""} - -LAB_MACRO = {"sinan": ""} - -LAB_MATE_N = {"sinan": ""} - -LAB_MEDULA = {"sinan": ""} - -LAB_METODO = {"sinan": ""} - -LAB_MET_D = {"sinan": ""} - -LAB_MICRO = {"sinan": ""} - -LAB_MICRON = {"sinan": ""} - -LAB_MICR_1 = {"sinan": ""} - -LAB_MICR_2 = {"sinan": ""} - -LAB_MONO = {"sinan": ""} - -LAB_NEUTRO = {"sinan": ""} - -LAB_OUTRO = {"sinan": ""} - -LAB_OUT_D = {"sinan": ""} - -LAB_OUT_E = {"sinan": ""} - -LAB_PARASI = {"sinan": ""} - -LAB_PARTO = {"sinan": ""} - -LAB_PCESCA = {"sinan": ""} - -LAB_PCLESA = {"sinan": ""} - -LAB_PCLIQU = {"sinan": ""} - -LAB_PCR_1 = {"sinan": ""} - -LAB_PCR_2 = {"sinan": ""} - -LAB_PCR_3 = {"sinan": ""} - -LAB_PCSANG = {"sinan": ""} - -LAB_PLAQUE = {"sinan": ""} - -LAB_POTASS = {"sinan": ""} - -LAB_PROD1 = {"sinan": ""} - -LAB_PROD2 = {"sinan": ""} - -LAB_PROT = {"sinan": ""} - -LAB_PROVAS = {"sinan": ""} - -LAB_PUNCAO = {"sinan": ""} - -LAB_Q_F = {"sinan": ""} - -LAB_RADIOL = {"sinan": ""} - -LAB_REALIZ = {"sinan": ""} - -LAB_RESULT = {"sinan": ""} - -LAB_RES_B = {"sinan": ""} - -LAB_RES_F1 = {"sinan": ""} - -LAB_RES_F2 = {"sinan": ""} - -LAB_RES_F3 = {"sinan": ""} - -LAB_RTPCR = {"sinan": ""} - -LAB_R_1 = {"sinan": ""} - -LAB_R_2 = {"sinan": ""} - -LAB_SORO = {"sinan": ""} - -LAB_SOROAG = {"sinan": ""} - -LAB_SOR_DE = {"sinan": ""} - -LAB_S_1 = {"sinan": ""} - -LAB_S_2 = {"sinan": ""} - -LAB_S_3 = {"sinan": ""} - -LAB_S_4 = {"sinan": ""} - -LAB_S_5 = {"sinan": ""} - -LAB_TGO = {"sinan": ""} - -LAB_TGO_D = {"sinan": ""} - -LAB_TGP = {"sinan": ""} - -LAB_TGP_D = {"sinan": ""} - -LAB_TITU_2 = {"sinan": ""} - -LAB_TRIAGE = {"sinan": ""} - -LAB_TROMBO = {"sinan": ""} - -LAB_UF = {"sinan": ""} - -LAB_UREIA = {"sinan": ""} - -LAB_VACINA = {"sinan": ""} - -LAB_VAC_DE = {"sinan": ""} - -LACO = {"sinan": ""} - -LACO_N = {"sinan": ""} - -LAMBEDURA = {"sinan": ""} - -LAVOURA = {"sinan": ""} - -LEITE = {"sinan": ""} - -LEITHOSP = {"cnes": ""} - -LESAO = {"sinan": ""} - -LESAO_CORP = {"sinan": ""} - -LESAO_DES = {"sinan": ""} - -LESAO_ESPE = {"sinan": ""} - -LESAO_NAT = {"sinan": ""} - -LESOES = {"sinan": ""} - -LES_AUTOP = {"sinan": ""} - -LEUCOPENIA = {"sinan": ""} - -LIMITA_MOV = {"sinan": ""} - -LINFADENO = {"sinan": ""} - -LINHAA = {"sim": ""} - -LINHAB = {"sim": ""} - -LINHAC = {"sim": ""} - -LINHAD = {"sim": ""} - -LINHAII = {"sim": ""} - -LOCACID = {"sim": ""} - -LOCAL_ACID = {"sinan": ""} - -LOCAL_ESPE = {"sinan": ""} - -LOCAL_OCOR = { - "sinan": "", - "sinasc": "", -} - -LOCA_MID_N = {"sinan": ""} - -LOCA_MIE_N = {"sinan": ""} - -LOCA_MSD_N = {"sinan": ""} - -LOCA_MSE_N = {"sinan": ""} - -LOCNASC = {"sinasc": ""} - -LOCOCOR = {"sim": ""} - -LOC_EXPO = {"sinan": ""} - -LOC_EXP_DE = {"sinan": ""} - -LOC_INF = {"sinan": ""} - -LOC_REALIZ = {"sia": ""} - -LOTE1 = {"sinan": ""} - -LOTE2 = {"sinan": ""} - -LOTE_VAC = {"sinan": ""} - -LUVA = {"sinan": ""} - -MAECHAGA = {"sinan": ""} - -MAIS_6HS = {"sinan": ""} - -MAIS_TRAB = {"sinan": ""} - -MANIFESTA = {"sinan": ""} - -MANIPULA = {"sinan": ""} - -MANI_HEMOR = {"sinan": ""} - -MAOS_N = {"sinan": ""} - -MAPORTAR = {"cnes": ""} - -MAQ_OUTR = {"cnes": ""} - -MAQ_PROP = {"cnes": ""} - -MARCA_UCI = {"sih": ""} - -MARCA_UTI = {"sih": ""} - -MASCARA = {"sinan": ""} - -MATBIOLOGI = {"sinan": ""} - -MATERIAL = {"sinan": ""} - -MAT_ORG = {"sinan": ""} - -MAT_ORG_DE = {"sinan": ""} - -MAX_INC = {"sinan": ""} - -MAX_ST_INC = {"sinan": ""} - -MCLI_LOCAL = {"sinan": ""} - -MCLI_SIST = {"sinan": ""} - -MEDICA = {"sinan": ""} - -MEDICAMENT = {"sinan": ""} - -MED_BLOQUE = {"sinan": ""} - -MED_CASO_S = {"sinan": ""} - -MED_CONTR = {"sinan": ""} - -MED_DT_EVO = {"sinan": ""} - -MED_DT_QUI = {"sinan": ""} - -MED_IDEN_C = {"sinan": ""} - -MED_MATERI = {"sinan": ""} - -MED_NUCOMU = {"sinan": ""} - -MED_OUTRO = {"sinan": ""} - -MED_PREVEN = {"sinan": ""} - -MED_QUAN_C = {"sinan": ""} - -MED_QUAN_M = {"sinan": ""} - -MED_QUAN_P = {"sinan": ""} - -MED_QUIMIO = {"sinan": ""} - -MEFLOQ = {"sinan": ""} - -MENINGO = {"sinan": ""} - -MENINGOE = {"sinan": ""} - -MENOR_5ANO = {"sinan": ""} - -MENOS_MOV = {"sinan": ""} - -MENTAL = {"sinan": ""} - -MES = { - "pni": "", - "sih": "", -} - -MESPRENAT = {"sinasc": ""} - -MES_CMPT = { - "ciha": "", - "sih": "", -} - -METAL = {"sinan": ""} - -METRO = {"sinan": ""} - -MIALGIA = {"sinan": ""} - -MICRO1_S1 = {"sinan": ""} - -MICRO1_S_2 = {"sinan": ""} - -MICRO1_T_1 = {"sinan": ""} - -MICRO1_T_2 = {"sinan": ""} - -MICRO2_S1 = {"sinan": ""} - -MICRO2_S_2 = {"sinan": ""} - -MICRO2_T_1 = {"sinan": ""} - -MICRO2_T_2 = {"sinan": ""} - -MICROCEFA = {"sinan": ""} - -MICRO_HEMA = {"sinan": ""} - -MICR_REG = {"cnes": ""} - -MIGRADO_W = {"sinan": ""} - -MINTERNA = {"sinan": ""} - -MIN_ACID = {"sinan": ""} - -MIN_JOR = {"sinan": ""} - -MIOCARDI = {"sinan": ""} - -MNDIF = {"sia": ""} - -MN_IND = {"sia": ""} - -MOAGEM_N = {"sinan": ""} - -MODALIDADE = {"ciha": ""} - -MODODETECT = {"sinan": ""} - -MODOENTR = {"sinan": ""} - -MORDEDURA = {"sinan": ""} - -MORTE = { - "ciha": "", - "sih": "", -} - -MORTEPARTO = {"sim": ""} - -MOTDESAT = {"cnes": ""} - -MOT_COB = {"sia": ""} - -MPU = {"sinan": ""} - -MTRANSFU = {"sinan": ""} - -MUCOSA = {"sinan": ""} - -MUDA_TRAB = {"sinan": ""} - -MUNCOD = {"ibge": ""} - -MUNIC = {"pni": ""} - -MUNICIPIO = {"sinan": ""} - -MUNIC_LOC = {"sih": ""} - -MUNIC_MOV = { - "ciha": "", - "sih": "", -} - -MUNIC_RES = { - "ciha": "", - "ibge": "", - "sih": "", -} - -MUNIOCOR = {"sim": ""} - -MUNIRES = {"sim": ""} - -MUNIRESAT = {"sinan": ""} - -MUNI_MAE = {"sinasc": ""} - -MUNI_OCOR = {"sinasc": ""} - -MUNPAC = {"sia": ""} - -MUN_1 = {"sinan": ""} - -MUN_2 = {"sinan": ""} - -MUN_3 = {"sinan": ""} - -MUN_ACID = {"sinan": ""} - -MUN_ATENDE = {"sinan": ""} - -MUN_DES1 = {"sinan": ""} - -MUN_DES2 = {"sinan": ""} - -MUN_DES3 = {"sinan": ""} - -MUN_EMP = {"sinan": ""} - -MUN_HOSP = {"sinan": ""} - -MUN_ING = {"sinan": ""} - -MUN_MOV = {"sih": ""} - -MUN_PRE_NA = {"sinan": ""} - -MUN_RES = {"sih": ""} - -MUN_TRANSF = {"sinan": ""} - -MUSCULAR = {"sinan": ""} - -NACIONAL = { - "ciha": "", - "sih": "", -} - -NACION_PAC = {"sia": ""} - -NAO_IONIZA = {"sinan": ""} - -NASC = { - "ciha": "", - "sih": "", -} - -NATURAL = {"sim": ""} - -NATURALMAE = {"sinasc": ""} - -NATUREZA = { - "ciha": "", - "cnes": "", - "sih": "", -} - -NAT_JUR = { - "cnes": "", - "sia": "", - "sih": "", -} - -NAUSEA = {"sinan": ""} - -NAUSEAS = {"sinan": ""} - -NDUPLIC = {"sinan": ""} - -NDUPLIC_N = {"sinan": ""} - -NECROPSIA = {"sim": ""} - -NECROSE = {"sinan": ""} - -NENHUM = {"sinan": ""} - -NEOPLASICO = {"sinan": ""} - -NERVOSAFET = {"sinan": ""} - -NIQUEL = {"sinan": ""} - -NIVATE_A = {"cnes": ""} - -NIVATE_H = {"cnes": ""} - -NIV_DEP = {"cnes": ""} - -NIV_HIER = {"cnes": ""} - -NM_ANTIBIO = {"sinan": ""} - -NM_MUNIC_H = {"sinan": ""} - -NM_MUN_HOS = {"sinan": ""} - -NM_OUT_COM = {"sinan": ""} - -NM_OUT_SIN = {"sinan": ""} - -NM_SIN_OUT = {"sinan": ""} - -NOCOLINF = {"sinan": ""} - -NOMEAREA = {"cnes": ""} - -NOMEFANT = {"sih": ""} - -NOMEPROF = {"cnes": ""} - -NOME_BACT = {"sinan": ""} - -NOME_EQP = {"cnes": ""} - -NOME_PARAS = {"sinan": ""} - -NOME_VIRUS = {"sinan": ""} - -NOPROPIN = {"sinan": ""} - -NOVO = {"sinasc": ""} - -NO_ATENOUT = {"sinan": ""} - -NO_COBOUTR = {"sinan": ""} - -NO_OUPARTO = {"sinan": ""} - -NO_OUTRAS = {"sinan": ""} - -NU10_19_N = {"sinan": ""} - -NU1_4_F_NU = {"sinan": ""} - -NU5_9_F_NU = {"sinan": ""} - -NUATEND = {"sinan": ""} - -NUCONSOME = {"sinan": ""} - -NUDIASINF = {"sim": ""} - -NUDIASOBCO = {"sim": ""} - -NUDIASOBIN = {"sim": ""} - -NULEITOS = {"cnes": ""} - -NUMCRIPOB = {"ibge": ""} - -NUMCRIPOBX = {"ibge": ""} - -NUMDESOCUP = {"ibge": ""} - -NUMERODN = { - "sim": "", - "sinasc": "", -} - -NUMERODV = {"sinasc": ""} - -NUMEROLOTE = { - "sim": "", - "sinasc": "", -} - -NUMEXPORT = {"sim": ""} - -NUMPOBRES = {"ibge": ""} - -NUMPOBRESX = {"ibge": ""} - -NUMREGCART = { - "sim": "", - "sinasc": "", -} - -NUMRENDA = {"ibge": ""} - -NUMTRABINF = {"ibge": ""} - -NUM_CON_N = {"sinan": ""} - -NUM_DOSES = {"sinan": ""} - -NUM_ENVOLV = {"sinan": ""} - -NUM_EXPORT = {"sinasc": ""} - -NUM_FILHOS = {"sih": ""} - -NUM_PROC = {"sih": ""} - -NUTEMPO = {"sinan": ""} - -NUTEMPORIS = {"sinan": ""} - -NU_10_19 = {"sinan": ""} - -NU_10_19IG = {"sinan": ""} - -NU_10_19_M = {"sinan": ""} - -NU_1_4_IGN = {"sinan": ""} - -NU_1_4_NU = {"sinan": ""} - -NU_1_4_TOT = {"sinan": ""} - -NU_1_F_NU = {"sinan": ""} - -NU_1_IGN = {"sinan": ""} - -NU_1_M_NU = {"sinan": ""} - -NU_1_TOT_N = {"sinan": ""} - -NU_20_49 = {"sinan": ""} - -NU_20_49IG = {"sinan": ""} - -NU_20_49_F = {"sinan": ""} - -NU_20_49_N = {"sinan": ""} - -NU_50_F_NU = {"sinan": ""} - -NU_50_IGN = {"sinan": ""} - -NU_50_M_NU = {"sinan": ""} - -NU_50_TOT = {"sinan": ""} - -NU_5_9_IGN = {"sinan": ""} - -NU_5_9_NU = {"sinan": ""} - -NU_5_9_TOT = {"sinan": ""} - -NU_ABDOM_N = {"sinan": ""} - -NU_AFAST = {"sinan": ""} - -NU_AMPOLAS = {"sinan": ""} - -NU_AMPOL_1 = {"sinan": ""} - -NU_AMPOL_3 = {"sinan": ""} - -NU_AMPOL_4 = {"sinan": ""} - -NU_AMPOL_6 = {"sinan": ""} - -NU_AMPOL_8 = {"sinan": ""} - -NU_AMPOL_9 = {"sinan": ""} - -NU_AMPO_5 = {"sinan": ""} - -NU_AMPO_7 = {"sinan": ""} - -NU_ANO = {"sinan": ""} - -NU_A_ALIM = {"sinan": ""} - -NU_A_CLINI = {"sinan": ""} - -NU_A_NUM_1 = {"sinan": ""} - -NU_A_NUM_2 = {"sinan": ""} - -NU_A_NUM_3 = {"sinan": ""} - -NU_CASO = {"sinan": ""} - -NU_CASOEXA = {"sinan": ""} - -NU_CASOPOS = {"sinan": ""} - -NU_CEFAL_N = {"sinan": ""} - -NU_CELULA = {"sinan": ""} - -NU_CLI_NUM = {"sinan": ""} - -NU_COMU_EX = {"sinan": ""} - -NU_CONTATO = {"sinan": ""} - -NU_DIARR_N = {"sinan": ""} - -NU_DOSE = {"sinan": ""} - -NU_ENTR = {"sinan": ""} - -NU_ENT_DOE = {"sinan": ""} - -NU_FEBRE_N = {"sinan": ""} - -NU_F_TOT = {"sinan": ""} - -NU_F_TOT_N = {"sinan": ""} - -NU_GESTA = {"sinan": ""} - -NU_IDADE = {"sinan": ""} - -NU_IDADE_N = {"sinan": ""} - -NU_IGN_NU = {"sinan": ""} - -NU_IGRA_NU = {"sinan": ""} - -NU_IG_F_NU = {"sinan": ""} - -NU_IG_IGN = {"sinan": ""} - -NU_INCUB_M = {"sinan": ""} - -NU_INC_ME = {"sinan": ""} - -NU_LESOES = {"sinan": ""} - -NU_LOTE = {"sinan": ""} - -NU_LOTE_H = {"sinan": ""} - -NU_LOTE_I = {"sinan": ""} - -NU_LOTE_IA = {"sinan": ""} - -NU_LOTE_V = {"sinan": ""} - -NU_NAUSE_P = {"sinan": ""} - -NU_NEURO_N = {"sinan": ""} - -NU_NOTIFIC = {"sinan": ""} - -NU_NUM_2 = {"sinan": ""} - -NU_NUM_3 = {"sinan": ""} - -NU_OBITO = {"sinan": ""} - -NU_OUTRO_N = {"sinan": ""} - -NU_PA_TOT = {"sia": ""} - -NU_PROTEI = {"sinan": ""} - -NU_RESU_3 = {"sinan": ""} - -NU_SEMA_EP = {"sinan": ""} - -NU_TOT = {"sinan": ""} - -NU_TOT_HOS = {"sinan": ""} - -NU_TOT_IGN = {"sinan": ""} - -NU_TO_F_NU = {"sinan": ""} - -NU_TRAB = {"sinan": ""} - -NU_VOMTO_N = {"sinan": ""} - -NU_VPA_TOT = {"sia": ""} - -N_AIH = {"sih": ""} - -N_DIAR = {"sinan": ""} - -N_VOMITO = {"sinan": ""} - -OBITOFE1 = {"sim": ""} - -OBITOFE2 = {"sim": ""} - -OBITOGRAV = {"sim": ""} - -OBITOPARTO = {"sim": ""} - -OBITOPUERP = {"sim": ""} - -OBSERVACAO = {"sinan": ""} - -OCULOS = {"sinan": ""} - -OCUP = {"sim": ""} - -OCUPACAO = { - "sim": "", - "sinan": "", -} - -OCUPACIO = {"sinan": ""} - -OCUPMAE = {"sim": ""} - -OCUPPAI = {"sim": ""} - -OLEOS = {"sinan": ""} - -OLIGURIA = {"sinan": ""} - -ORAL = {"sinan": ""} - -ORGEXPED = {"cnes": ""} - -ORIENT_SEX = {"sinan": ""} - -ORIGEM = { - "sim": "", - "sinan": "", - "sinasc": "", -} - -ORIGEM_PAC = {"sia": ""} - -ORTV1050 = {"cnes": ""} - -ORV50150 = {"cnes": ""} - -OSMOSE_R = {"cnes": ""} - -OSSEA = {"sinan": ""} - -OUTRAS = {"sinan": ""} - -OUTRAS_DES = {"sinan": ""} - -OUTRA_ATIV = {"sinan": ""} - -OUTRA_DST = {"sinan": ""} - -OUTRO = {"sinan": ""} - -OUTROANI = {"sinan": ""} - -OUTROS = {"sinan": ""} - -OUTROS_DES = {"sinan": ""} - -OUTROS_ESP = {"sinan": ""} - -OUTROS_M = {"sinan": ""} - -OUTROS_M_D = {"sinan": ""} - -OUTRO_ARV = {"sinan": ""} - -OUTRO_DES = {"sinan": ""} - -OUTRO_DOE = {"sinan": ""} - -OUTRO_ESP = {"sinan": ""} - -OUTRO_EX = {"sinan": ""} - -OUTRO_EXP = {"sinan": ""} - -OUTRO_S = {"sinan": ""} - -OUTRO_SIN = {"sinan": ""} - -OUTRO_S_D = {"sinan": ""} - -OUTR_ATI_D = {"sinan": ""} - -OUTR_D1 = {"sinan": ""} - -OUTR_D2 = {"sinan": ""} - -OUTR_D3 = {"sinan": ""} - -OUTR_R1 = {"sinan": ""} - -OUTR_R2 = {"sinan": ""} - -OUTR_R3 = {"sinan": ""} - -OUT_AGENTE = {"sinan": ""} - -OUT_AGRAVO = {"sinan": ""} - -OUT_ARV_ES = {"sinan": ""} - -OUT_CONTAT = {"sinan": ""} - -OUT_DOE_DE = {"sinan": ""} - -OUT_EXAME = {"sinan": ""} - -OUT_EXP_DE = {"sinan": ""} - -OUT_MEDIC = {"sinan": ""} - -OUT_TRAT = {"cnes": ""} - -OUT_VEZES = {"sinan": ""} - -OUT_VINCUL = {"sinan": ""} - -OUT_VIRUS = {"sinan": ""} - -OV150500 = {"cnes": ""} - -PAIS_EXP = {"sinan": ""} - -PALIDEZ = {"sinan": ""} - -PALQ_MAIOR = {"sinan": ""} - -PARALISIA = {"sinan": ""} - -PARASITA = {"sinan": ""} - -PARASITO = {"sinan": ""} - -PARESTESI = {"sinan": ""} - -PARIDADE = {"sinasc": ""} - -PARTO = { - "sim": "", - "sinasc": "", -} - -PART_CORP1 = {"sinan": ""} - -PART_CORP2 = {"sinan": ""} - -PART_CORP3 = {"sinan": ""} - -PAR_ANTIDU = {"sinan": ""} - -PAR_DT_PAR = {"sinan": ""} - -PAR_EVOLUC = {"sinan": ""} - -PAR_INICPR = {"sinan": ""} - -PAR_TIPO = {"sinan": ""} - -PAR_UFPART = {"sinan": ""} - -PA_ALTA = {"sia": ""} - -PA_AUTORIZ = {"sia": ""} - -PA_CATEND = {"sia": ""} - -PA_CBOCOD = {"sia": ""} - -PA_CID = {"sia": ""} - -PA_CIDCAS = {"sia": ""} - -PA_CIDPRI = {"sia": ""} - -PA_CIDSEC = {"sia": ""} - -PA_CLASS_S = {"sia": ""} - -PA_CMP = {"sia": ""} - -PA_CNPJCPF = {"sia": ""} - -PA_CNPJMNT = {"sia": ""} - -PA_CNPJ_CC = {"sia": ""} - -PA_CNSMED = {"sia": ""} - -PA_CODESP = {"sia": ""} - -PA_CODOCO = {"sia": ""} - -PA_CODPRO = {"sia": ""} - -PA_CODUNI = {"sia": ""} - -PA_CONDIC = {"sia": ""} - -PA_DATPR = {"sia": ""} - -PA_DATREF = {"sia": ""} - -PA_DES1 = {"sinan": ""} - -PA_DES2 = {"sinan": ""} - -PA_DES3 = {"sinan": ""} - -PA_DIF_VAL = {"sia": ""} - -PA_DOCORIG = {"sia": ""} - -PA_ENCERR = {"sia": ""} - -PA_EQUIPE = {"sia": ""} - -PA_ETNIA = {"sia": ""} - -PA_FLER = {"sia": ""} - -PA_FLIDADE = {"sia": ""} - -PA_FLQT = {"sia": ""} - -PA_FNTORC = {"sia": ""} - -PA_FXETAR = {"sia": ""} - -PA_GESTAO = {"sia": ""} - -PA_IDADE = {"sia": ""} - -PA_INCOUT = {"sia": ""} - -PA_INCURG = {"sia": ""} - -PA_INDICA = {"sia": ""} - -PA_INE = {"sia": ""} - -PA_MNDIF = {"sia": ""} - -PA_MN_IND = {"sia": ""} - -PA_MORFOL = {"sia": ""} - -PA_MOTSAI = {"sia": ""} - -PA_MUNAT = {"sia": ""} - -PA_MUNPCN = {"sia": ""} - -PA_MVM = {"sia": ""} - -PA_NAT_JUR = {"sia": ""} - -PA_NH = {"sia": ""} - -PA_NIVCPL = {"sia": ""} - -PA_NUMAPA = {"sia": ""} - -PA_OBITO = {"sia": ""} - -PA_PERMAN = {"sia": ""} - -PA_PROC_ID = {"sia": ""} - -PA_QTDAPR = {"sia": ""} - -PA_QTDPRO = {"sia": ""} - -PA_RACACOR = {"sia": ""} - -PA_RCB = {"sia": ""} - -PA_RCBDF = {"sia": ""} - -PA_REGCT = {"sia": ""} - -PA_SEXO = {"sia": ""} - -PA_SRV = {"sia": ""} - -PA_SRV_C = {"sia": ""} - -PA_SUBFIN = {"sia": ""} - -PA_TIPATE = {"sia": ""} - -PA_TIPPRE = {"sia": ""} - -PA_TIPPRO = {"sia": ""} - -PA_TPFIN = {"sia": ""} - -PA_TPUPS = {"sia": ""} - -PA_TP_EQP = {"sia": ""} - -PA_TRANSF = {"sia": ""} - -PA_UFDIF = {"sia": ""} - -PA_UFMUN = {"sia": ""} - -PA_VALAPR = {"sia": ""} - -PA_VALPRO = {"sia": ""} - -PA_VL_CF = {"sia": ""} - -PA_VL_CL = {"sia": ""} - -PA_VL_INC = {"sia": ""} - -PCRUZ = {"sinan": ""} - -PELE_INTEG = {"sinan": ""} - -PELE_NAO_I = {"sinan": ""} - -PEN_ANAL = {"sinan": ""} - -PEN_ORAL = {"sinan": ""} - -PEN_VAGINA = {"sinan": ""} - -PERCUTANEA = {"sinan": ""} - -PERFURA = {"sinan": ""} - -PERICARDI = {"sinan": ""} - -PERIODO = {"sinan": ""} - -PERMANEN = {"sia": ""} - -PES = {"sinan": ""} - -PESCOU_N = {"sinan": ""} - -PESO = { - "sim": "", - "sinan": "", - "sinasc": "", -} - -PESONASC = {"sim": ""} - -PETEQUIAS = {"sinan": ""} - -PETEQUIA_N = {"sinan": ""} - -PF_PJ = {"cnes": ""} - -PIRAZINAMI = {"sinan": ""} - -PLANJ_RD = {"cnes": ""} - -PLAQ_MENOR = {"sinan": ""} - -PLASMATICO = {"sinan": ""} - -PLEURAL = {"sinan": ""} - -PMALARIA = {"sinan": ""} - -PMM = {"sinan": ""} - -POEIRAS = {"sinan": ""} - -POE_ABRASI = {"sinan": ""} - -POE_MISTA = {"sinan": ""} - -POE_ORGANI = {"sinan": ""} - -POLIADENO = {"sinan": ""} - -POP = {"pni": ""} - -POPALFAB = {"ibge": ""} - -POPDEPEND = {"ibge": ""} - -POPGERAL = {"cnes": ""} - -POPNALFAB = {"ibge": ""} - -POPTOT = {"ibge": ""} - -POPULACAO = {"ibge": ""} - -POP_IMIG = {"sinan": ""} - -POP_LIBER = {"sinan": ""} - -POP_RUA = {"sinan": ""} - -POP_SAUDE = {"sinan": ""} - -PORTARIA = {"cnes": ""} - -POS_EXPOS = {"sinan": ""} - -PREFIXODN = {"sinasc": ""} - -PREMIOS = {"sinan": ""} - -PRESENCA = {"sinan": ""} - -PRE_ANTRET = {"sinan": ""} - -PRE_DT_RET = {"sinan": ""} - -PRE_EXPOS = {"sinan": ""} - -PRE_MUNIPA = {"sinan": ""} - -PRE_MUNIRE = {"sinan": ""} - -PRE_NATAL = {"sinasc": ""} - -PRE_PRENAT = {"sinan": ""} - -PRE_UFREL = {"sinan": ""} - -PRIMAQ = {"sinan": ""} - -PROC_ABORT = {"sinan": ""} - -PROC_CONTR = {"sinan": ""} - -PROC_DST = {"sinan": ""} - -PROC_HEPB = {"sinan": ""} - -PROC_HIV = {"sinan": ""} - -PROC_ID = {"sia": ""} - -PROC_REA = { - "ciha": "", - "sih": "", -} - -PROC_SANG = {"sinan": ""} - -PROC_SEMEN = {"sinan": ""} - -PROC_SOLIC = {"sih": ""} - -PROC_VAGIN = {"sinan": ""} - -PROFNSUS = {"cnes": ""} - -PROFUNDO = {"sinan": ""} - -PROF_SUS = {"cnes": ""} - -PRONASCI = {"cnes": ""} - -PROSTACAO = {"sinan": ""} - -PROVA_BIOL = {"sinan": ""} - -PSICO_FARM = {"sinan": ""} - -PTRANSFU = {"sinan": ""} - -PULSO = {"sinan": ""} - -PURPURA = {"sinan": ""} - -PUSUARIO = {"sinan": ""} - -P_ATIVO_1 = {"sinan": ""} - -P_ATIVO_2 = {"sinan": ""} - -P_ATIVO_3 = {"sinan": ""} - -QTDATE = {"sia": ""} - -QTDFILMORT = { - "sim": "", - "sinasc": "", -} - -QTDFILVIVO = { - "sim": "", - "sinasc": "", -} - -QTDGESTANT = {"sinasc": ""} - -QTDPARTCES = {"sinasc": ""} - -QTDPARTNOR = {"sinasc": ""} - -QTDPCN = {"sia": ""} - -QTINST01 = {"cnes": ""} - -QTINST02 = {"cnes": ""} - -QTINST03 = {"cnes": ""} - -QTINST04 = {"cnes": ""} - -QTINST05 = {"cnes": ""} - -QTINST06 = {"cnes": ""} - -QTINST07 = {"cnes": ""} - -QTINST08 = {"cnes": ""} - -QTINST09 = {"cnes": ""} - -QTINST10 = {"cnes": ""} - -QTINST11 = {"cnes": ""} - -QTINST12 = {"cnes": ""} - -QTINST13 = {"cnes": ""} - -QTINST14 = {"cnes": ""} - -QTINST15 = {"cnes": ""} - -QTINST16 = {"cnes": ""} - -QTINST17 = {"cnes": ""} - -QTINST18 = {"cnes": ""} - -QTINST19 = {"cnes": ""} - -QTINST20 = {"cnes": ""} - -QTINST21 = {"cnes": ""} - -QTINST22 = {"cnes": ""} - -QTINST23 = {"cnes": ""} - -QTINST24 = {"cnes": ""} - -QTINST25 = {"cnes": ""} - -QTINST26 = {"cnes": ""} - -QTINST27 = {"cnes": ""} - -QTINST28 = {"cnes": ""} - -QTINST29 = {"cnes": ""} - -QTINST30 = {"cnes": ""} - -QTINST31 = {"cnes": ""} - -QTINST32 = {"cnes": ""} - -QTINST33 = {"cnes": ""} - -QTINST34 = {"cnes": ""} - -QTINST35 = {"cnes": ""} - -QTINST36 = {"cnes": ""} - -QTINST37 = {"cnes": ""} - -QTLEIT05 = {"cnes": ""} - -QTLEIT06 = {"cnes": ""} - -QTLEIT07 = {"cnes": ""} - -QTLEIT08 = {"cnes": ""} - -QTLEIT09 = {"cnes": ""} - -QTLEIT19 = {"cnes": ""} - -QTLEIT20 = {"cnes": ""} - -QTLEIT21 = {"cnes": ""} - -QTLEIT22 = {"cnes": ""} - -QTLEIT23 = {"cnes": ""} - -QTLEIT32 = {"cnes": ""} - -QTLEIT34 = {"cnes": ""} - -QTLEIT38 = {"cnes": ""} - -QTLEIT39 = {"cnes": ""} - -QTLEIT40 = {"cnes": ""} - -QTLEITP1 = {"cnes": ""} - -QTLEITP2 = {"cnes": ""} - -QTLEITP3 = {"cnes": ""} - -QT_AGIPL = {"cnes": ""} - -QT_AGLTN = {"cnes": ""} - -QT_APRES = {"sia": ""} - -QT_APROV = {"sia": ""} - -QT_CADRE = {"cnes": ""} - -QT_CAPFL = {"cnes": ""} - -QT_CENRE = {"cnes": ""} - -QT_CONRA = {"cnes": ""} - -QT_CONTR = {"cnes": ""} - -QT_DIARIAS = {"sih": ""} - -QT_DOSE = {"pni": ""} - -QT_EXIST = {"cnes": ""} - -QT_EXTPL = {"cnes": ""} - -QT_FRE18 = {"cnes": ""} - -QT_FRE30 = {"cnes": ""} - -QT_IRRHE = {"cnes": ""} - -QT_MAQAF = {"cnes": ""} - -QT_NSUS = {"cnes": ""} - -QT_PROC = {"ciha": ""} - -QT_REFAS = {"cnes": ""} - -QT_REFRE = {"cnes": ""} - -QT_REFSA = {"cnes": ""} - -QT_SELAD = {"cnes": ""} - -QT_SUS = {"cnes": ""} - -QT_TOTAL_C = {"sinan": ""} - -QT_USO = {"cnes": ""} - -QUANTID = {"sinan": ""} - -QUANTOS = {"sinan": ""} - -QUAN_COMUN = {"sinan": ""} - -QUAN_POSIT = {"sinan": ""} - -QUILOMBO = {"cnes": ""} - -QUIMRADI = {"cnes": ""} - -QUININO = {"sinan": ""} - -QUININOI = {"sinan": ""} - -QUINOLONA = {"sinan": ""} - -RACACOR = { - "sia": "", - "sim": "", - "sinasc": "", -} - -RACACORMAE = {"sinasc": ""} - -RACACORN = {"sinasc": ""} - -RACACOR_RN = {"sinasc": ""} - -RACA_COR = {"sih": ""} - -RACA_MAE = {"sinan": ""} - -RACCOR = {"sinasc": ""} - -RAIOX = {"sinan": ""} - -RAIOX_TORA = {"sinan": ""} - -RAI_RESULT = {"sinan": ""} - -RAZAO = {"sih": ""} - -REACAO_SOR = {"sinan": ""} - -REACAO_VAC = {"sinan": ""} - -RECEMNASC = {"sinan": ""} - -RECEM_NASC = {"sinan": ""} - -RECUSA_QUI = {"sinan": ""} - -REDE_EDUCA = {"sinan": ""} - -REDE_SAU = {"sinan": ""} - -REFR_AQD_N = {"sinan": ""} - -REFR_AQE_N = {"sinan": ""} - -REFR_BID_N = {"sinan": ""} - -REFR_BIE_N = {"sinan": ""} - -REFR_PAD_N = {"sinan": ""} - -REFR_PAE_N = {"sinan": ""} - -REFR_TRD_N = {"sinan": ""} - -REFR_TRE_N = {"sinan": ""} - -REGCT = {"sih": ""} - -REGIME = {"sinan": ""} - -REGISTRO = { - "cnes": "", - "sim": "", -} - -REGSAUDE = {"cnes": ""} - -REL_CAT = {"sinan": ""} - -REL_CONHEC = {"sinan": ""} - -REL_CONJ = {"sinan": ""} - -REL_CUIDA = {"sinan": ""} - -REL_DESCO = {"sinan": ""} - -REL_ESPEC = {"sinan": ""} - -REL_EXCON = {"sinan": ""} - -REL_EXNAM = {"sinan": ""} - -REL_FILHO = {"sinan": ""} - -REL_INST = {"sinan": ""} - -REL_IRMAO = {"sinan": ""} - -REL_MAD = {"sinan": ""} - -REL_MAE = {"sinan": ""} - -REL_NAMO = {"sinan": ""} - -REL_OUTROS = {"sinan": ""} - -REL_PAD = {"sinan": ""} - -REL_PAI = {"sinan": ""} - -REL_PATRAO = {"sinan": ""} - -REL_POL = {"sinan": ""} - -REL_PROPRI = {"sinan": ""} - -REL_SEXUAL = {"sinan": ""} - -REL_TRAB = {"sinan": ""} - -REMESSA = {"sih": ""} - -RENAL = {"sinan": ""} - -REPETITIVO = {"sinan": ""} - -RESALIM1 = {"sinan": ""} - -RESALIMOUT = {"sinan": ""} - -RESPIRATO = {"sinan": ""} - -RESULT = {"sinan": ""} - -RESUL_HIS = {"sinan": ""} - -RESUL_NS1 = {"sinan": ""} - -RESUL_OUT = {"sinan": ""} - -RESUL_PCR = {"sinan": ""} - -RESUL_PCR_ = {"sinan": ""} - -RESUL_PRNT = {"sinan": ""} - -RESUL_SORO = {"sinan": ""} - -RESUL_VIRA = {"sinan": ""} - -RESUL_VI_N = {"sinan": ""} - -RES_BIOL = {"cnes": ""} - -RES_CHIKS1 = {"sinan": ""} - -RES_CHIKS2 = {"sinan": ""} - -RES_COMU = {"cnes": ""} - -RES_HBSAG = {"sinan": ""} - -RES_HIST = {"sinan": ""} - -RES_IMUNO = {"sinan": ""} - -RES_ISOL = {"sinan": ""} - -RES_PCR = {"sinan": ""} - -RES_QUIM = {"cnes": ""} - -RES_RADI = {"cnes": ""} - -RETAR_PM = {"sinan": ""} - -RETENCAO = {"cnes": ""} - -RETINOPA = {"sinan": ""} - -RE_ANTIHBC = {"sinan": ""} - -RE_ANTIHCV = {"sinan": ""} - -RIFAMPICIN = {"sinan": ""} - -ROEDOR_N = {"sinan": ""} - -ROTA_R = {"sinan": ""} - -RUBRICA = {"sih": ""} - -RUIDO_OUT = {"sinan": ""} - -RUI_OUTDES = {"sinan": ""} - -S1_IGG = {"sinan": ""} - -S1_IGM = {"sinan": ""} - -S1_TIT1 = {"sinan": ""} - -S2_IGG = {"sinan": ""} - -S2_IGM = {"sinan": ""} - -S2_TIT1 = {"sinan": ""} - -S3_IGG = {"sinan": ""} - -S3_IGM = {"sinan": ""} - -SALA_MOL = {"cnes": ""} - -SANG = {"sinan": ""} - -SANGRAM = {"sinan": ""} - -SANGUE = {"sinan": ""} - -SEMAGESTAC = { - "sim": "", - "sinasc": "", -} - -SEMANGEST = {"sim": ""} - -SEMIPLEN = {"sih": ""} - -SEM_ACID = {"sinan": ""} - -SEM_DIAG = {"sinan": ""} - -SEM_NOT = {"sinan": ""} - -SEM_PRI = {"sinan": ""} - -SEM_QUIMIO = {"sinan": ""} - -SENSIBILI = {"sinan": ""} - -SEQUENCIA = {"sih": ""} - -SEQ_AIH5 = {"sih": ""} - -SERAP01P = {"cnes": ""} - -SERAP01T = {"cnes": ""} - -SERAP02P = {"cnes": ""} - -SERAP02T = {"cnes": ""} - -SERAP03P = {"cnes": ""} - -SERAP03T = {"cnes": ""} - -SERAP04P = {"cnes": ""} - -SERAP04T = {"cnes": ""} - -SERAP05P = {"cnes": ""} - -SERAP05T = {"cnes": ""} - -SERAP06P = {"cnes": ""} - -SERAP06T = {"cnes": ""} - -SERAP07P = {"cnes": ""} - -SERAP07T = {"cnes": ""} - -SERAP08P = {"cnes": ""} - -SERAP08T = {"cnes": ""} - -SERAP09P = {"cnes": ""} - -SERAP09T = {"cnes": ""} - -SERAP10P = {"cnes": ""} - -SERAP10T = {"cnes": ""} - -SERAP11P = {"cnes": ""} - -SERAP11T = {"cnes": ""} - -SERAPOIO = {"cnes": ""} - -SERIESCFAL = {"sim": ""} - -SERIESCMAE = { - "sim": "", - "sinasc": "", -} - -SERV_CLA = {"sih": ""} - -SERV_ESP = {"cnes": ""} - -SEXO = { - "ciha": "", - "ibge": "", - "sih": "", - "sim": "", - "sinasc": "", -} - -SEXOPAC = {"sia": ""} - -SEXUAL = {"sinan": ""} - -SEX_ASSEDI = {"sinan": ""} - -SEX_ESPEC = {"sinan": ""} - -SEX_ESTUPR = {"sinan": ""} - -SEX_EXPLO = {"sinan": ""} - -SEX_OUTRO = {"sinan": ""} - -SEX_PORNO = {"sinan": ""} - -SEX_PUDOR = {"sinan": ""} - -SGRUPHAB = {"cnes": ""} - -SG_UF = {"sinan": ""} - -SG_UF_2 = {"sinan": ""} - -SG_UF_AT = {"sinan": ""} - -SG_UF_INTE = {"sinan": ""} - -SG_UF_NOT = {"sinan": ""} - -SG_UF_OCOR = {"sinan": ""} - -SILICA = {"sinan": ""} - -SIMUL_RD = {"cnes": ""} - -SINAIS = {"sinan": ""} - -SINAIS_ICC = {"sinan": ""} - -SINTOMATIC = {"sinan": ""} - -SINTO_DES = {"sinan": ""} - -SIN_GANG = {"sinan": ""} - -SIN_OUT = {"sinan": ""} - -SIN_OUTR_E = {"sinan": ""} - -SIN_PULM = {"sinan": ""} - -SIS_JUST = {"sih": ""} - -SITUACAO = {"ibge": ""} - -SITUA_12_M = {"sinan": ""} - -SITUA_9_M = {"sinan": ""} - -SITUA_ENCE = {"sinan": ""} - -SIT_CONJUG = {"sinan": ""} - -SIT_RUA = {"sia": ""} - -SIT_TRAB = {"sinan": ""} - -SOLVENTE = {"sinan": ""} - -SORO1 = {"sinan": ""} - -SORO2 = {"sinan": ""} - -SOROTIPO = {"sinan": ""} - -SOUTROS = {"sinan": ""} - -SP_AA = {"sih": ""} - -SP_ATOPROF = {"sih": ""} - -SP_CGCHOSP = {"sih": ""} - -SP_CIDPRI = {"sih": ""} - -SP_CIDSEC = {"sih": ""} - -SP_CNES = {"sih": ""} - -SP_COMPLEX = {"sih": ""} - -SP_CO_FAEC = {"sih": ""} - -SP_CPFCGC = {"sih": ""} - -SP_DES_HOS = {"sih": ""} - -SP_DES_PAC = {"sih": ""} - -SP_DTINTER = {"sih": ""} - -SP_DTSAIDA = {"sih": ""} - -SP_FINANC = {"sih": ""} - -SP_GESTOR = {"sih": ""} - -SP_MM = {"sih": ""} - -SP_M_HOSP = {"sih": ""} - -SP_M_PAC = {"sih": ""} - -SP_NAIH = {"sih": ""} - -SP_NF = {"sih": ""} - -SP_NUM_PR = {"sih": ""} - -SP_PF_CBO = {"sih": ""} - -SP_PF_DOC = {"sih": ""} - -SP_PJ_DOC = {"sih": ""} - -SP_PROCREA = {"sih": ""} - -SP_PTSP = {"sih": ""} - -SP_PTSP_NF = {"sih": ""} - -SP_QTD_ATO = {"sih": ""} - -SP_QT_PROC = {"sih": ""} - -SP_TIPO = {"sih": ""} - -SP_TP_ATO = {"sih": ""} - -SP_UF = {"sih": ""} - -SP_U_AIH = {"sih": ""} - -SP_VALATO = {"sih": ""} - -SRVUNICO = {"cnes": ""} - -STALIMENTO = {"sinan": ""} - -STANTIBIO = {"sinan": ""} - -STANTIBOTU = {"sinan": ""} - -STAVALIA = {"sinan": ""} - -STBOCA = {"sinan": ""} - -STBROMATO = {"sinan": ""} - -STBULBAR = {"sinan": ""} - -STCARDIACA = {"sinan": ""} - -STCASEIRA = {"sinan": ""} - -STCEFALEIA = {"sinan": ""} - -STCESPARTO = {"sinasc": ""} - -STCLINICA = {"sinan": ""} - -STCODIFICA = {"sim": ""} - -STCOMA = {"sinan": ""} - -STCOMERCIO = {"sinan": ""} - -STCONSTIPA = {"sinan": ""} - -STCURA1 = {"sinan": ""} - -STCURA2 = {"sinan": ""} - -STCURA3 = {"sinan": ""} - -STDESCENDE = {"sinan": ""} - -STDIARREIA = {"sinan": ""} - -STDIPLOPIA = {"sinan": ""} - -STDISARTRI = {"sinan": ""} - -STDISFAGIA = {"sinan": ""} - -STDISFONIA = {"sinan": ""} - -STDISPNEIA = {"sinan": ""} - -STDNEPIDEM = {"sinasc": ""} - -STDNNOVA = {"sinasc": ""} - -STDOEPIDEM = {"sim": ""} - -STDOMICILI = {"sinan": ""} - -STDONOVA = {"sim": ""} - -STELETRO = {"sinan": ""} - -STESCOLA = {"sinan": ""} - -STEXPALIM = {"sinan": ""} - -STFACIAL = {"sinan": ""} - -STFEBRE = {"sinan": ""} - -STFERIMENT = {"sinan": ""} - -STFESTA = {"sinan": ""} - -STFEZESMAT = {"sinan": ""} - -STFEZESRES = {"sinan": ""} - -STFLACIDEZ = {"sinan": ""} - -STHOSPITAL = {"sinan": ""} - -STMEMINF = {"sinan": ""} - -STMEMSUP = {"sinan": ""} - -STMIDRIASE = {"sinan": ""} - -STNAUSEA = {"sinan": ""} - -STOFTALMO = {"sinan": ""} - -STOUTROLOC = {"sinan": ""} - -STOUTROSIN = {"sinan": ""} - -STOUTROTRA = {"sinan": ""} - -STPARESTES = {"sinan": ""} - -STPTOSE = {"sinan": ""} - -STRESPIRA = {"sinan": ""} - -STRESS = {"sinan": ""} - -STRESTAURA = {"sinan": ""} - -STRESULTA = {"sinan": ""} - -STSENSIVEL = {"sinan": ""} - -STSIMETRIC = {"sinan": ""} - -STSORO = {"sinan": ""} - -STSOROMAT = {"sinan": ""} - -STSORORES = {"sinan": ""} - -STTONTURA = {"sinan": ""} - -STTRABALHO = {"sinan": ""} - -STTRABPART = {"sinasc": ""} - -STVENTILA = {"sinan": ""} - -STVISAO = {"sinan": ""} - -STVOMITO = {"sinan": ""} - -ST_ALI1COL = {"sinan": ""} - -ST_ALI2COL = {"sinan": ""} - -ST_ALI2RES = {"sinan": ""} - -ST_ALIMEN = {"sinan": ""} - -ST_A_CLINI = {"sinan": ""} - -ST_BLOQ = {"sih": ""} - -ST_F_OUTRO = {"sinan": ""} - -ST_IMPRO = {"sinan": ""} - -ST_IMPRO_ = {"sinan": ""} - -ST_INAD = {"sinan": ""} - -ST_INCUB_M = {"sinan": ""} - -ST_INC_ME = {"sinan": ""} - -ST_MANIP = {"sinan": ""} - -ST_MOT_BLO = {"sih": ""} - -ST_SITUAC = {"sih": ""} - -SUBFIN = {"sia": ""} - -SUDORESE = {"sinan": ""} - -SUGE_VINCU = {"sinan": ""} - -SULFA = {"sinan": ""} - -SUPERFICIA = {"sinan": ""} - -SUPERIORES = {"sinan": ""} - -SURTO = {"sinan": ""} - -SUSPEITOS = {"sinan": ""} - -S_ACELL6 = {"cnes": ""} - -S_AFERES = {"cnes": ""} - -S_ALCOME = {"cnes": ""} - -S_ALSEME = {"cnes": ""} - -S_ARMAZE = {"cnes": ""} - -S_BIOMOL = {"cnes": ""} - -S_COLETA = {"cnes": ""} - -S_CONTRQ = {"cnes": ""} - -S_CPFLUX = {"cnes": ""} - -S_DISTRI = {"cnes": ""} - -S_DPAC = {"cnes": ""} - -S_DPI = {"cnes": ""} - -S_ESTOQU = {"cnes": ""} - -S_HBSAGN = {"cnes": ""} - -S_HBSAGP = {"cnes": ""} - -S_HEMOST = {"cnes": ""} - -S_IMUNFE = {"cnes": ""} - -S_IMUNOH = {"cnes": ""} - -S_PREEST = {"cnes": ""} - -S_PREPAR = {"cnes": ""} - -S_PRETRA = {"cnes": ""} - -S_PROCES = {"cnes": ""} - -S_QCDURA = {"cnes": ""} - -S_QLDURA = {"cnes": ""} - -S_REAGN = {"cnes": ""} - -S_REAGP = {"cnes": ""} - -S_RECEPC = {"cnes": ""} - -S_REHCV = {"cnes": ""} - -S_SGDOAD = {"cnes": ""} - -S_SIMULA = {"cnes": ""} - -S_SOROLO = {"cnes": ""} - -S_TRANSF = {"cnes": ""} - -S_TRICLI = {"cnes": ""} - -S_TRIHMT = {"cnes": ""} - -TAREFAS = {"sinan": ""} - -TATU_PIER = {"sinan": ""} - -TECIDOS = {"sinan": ""} - -TECNICA = {"sinan": ""} - -TEMPO = {"sinan": ""} - -TEMPO_FUMA = {"sinan": ""} - -TERCEIRIZA = {"sinan": ""} - -TERCEIRO = {"cnes": ""} - -TESTE_TUBE = {"sinan": ""} - -TEST_MOLEC = {"sinan": ""} - -TEST_SENSI = {"sinan": ""} - -TETRAC = {"sinan": ""} - -TIFICA = {"sinan": ""} - -TIPEQUIP = {"cnes": ""} - -TIPOACID = {"sim": ""} - -TIPOBITO = {"sim": ""} - -TIPOGRAV = {"sim": ""} - -TIPOPARTO = {"sim": ""} - -TIPOSEGM = {"cnes": ""} - -TIPOVIOL = {"sim": ""} - -TIPO_ACID = {"sinan": ""} - -TIPO_EQP = {"cnes": ""} - -TIPO_GRAV = {"sinasc": ""} - -TIPO_INVES = {"sinan": ""} - -TIPO_LEITE = {"sinan": ""} - -TIPO_PARTO = {"sinasc": ""} - -TIPPRE = {"sia": ""} - -TIPPRE = {"sia": ""} - -TIP_DIARRE = {"sinan": ""} - -TIP_SORO = {"sinan": ""} - -TIREOIDITE = {"sinan": ""} - -TIT_IGG_S1 = {"sinan": ""} - -TIT_IGG_S2 = {"sinan": ""} - -TIT_IGM_S1 = {"sinan": ""} - -TIT_IGM_S2 = {"sinan": ""} - -TOMOGRAFIA = {"sinan": ""} - -TONR_CER_N = {"sinan": ""} - -TONR_FAC_N = {"sinan": ""} - -TONR_MID_N = {"sinan": ""} - -TONR_MIE_N = {"sinan": ""} - -TONR_MSD_N = {"sinan": ""} - -TONR_MSE_N = {"sinan": ""} - -TONTURA = {"sinan": ""} - -TOSSE = {"sinan": ""} - -TOT_PT_SP = {"sih": ""} - -TPALTA_N = {"sinan": ""} - -TPAPRESENT = {"sinasc": ""} - -TPASSINA = {"sim": ""} - -TPATENDE = {"sinan": ""} - -TPAUTOCTO = {"sinan": ""} - -TPBOTULISM = {"sinan": ""} - -TPBROMATO = {"sinan": ""} - -TPCLINICA = {"sinan": ""} - -TPCONFIRMA = {"sinan": ""} - -TPDISEC1 = {"sih": ""} - -TPDISEC2 = {"sih": ""} - -TPDISEC3 = {"sih": ""} - -TPDISEC4 = {"sih": ""} - -TPDISEC5 = {"sih": ""} - -TPDISEC6 = {"sih": ""} - -TPDISEC7 = {"sih": ""} - -TPDISEC8 = {"sih": ""} - -TPDISEC9 = {"sih": ""} - -TPDOCRESP = {"sinasc": ""} - -TPESQPAR = {"sinan": ""} - -TPESQUEMA = {"sinan": ""} - -TPEVIDENCI = {"sinan": ""} - -TPEXANTE = {"sinan": ""} - -TPEXP = {"sinan": ""} - -TPFEZESTOX = {"sinan": ""} - -TPFIN = {"sia": ""} - -TPFUNCRESP = {"sinasc": ""} - -TPGESTAO = {"cnes": ""} - -TPIDADEPAC = {"sia": ""} - -TPMETESTIM = {"sinasc": ""} - -TPMORTEOCO = {"sim": ""} - -TPMOTPARC = {"sinan": ""} - -TPNASCASSI = {"sinasc": ""} - -TPNEURO = {"sinan": ""} - -TPNIVELINV = {"sim": ""} - -TPOBITOCOR = {"sim": ""} - -TPPOS = {"sim": ""} - -TPRAPIDO1 = {"sinan": ""} - -TPRAPIDO2 = {"sinan": ""} - -TPRAPIDO3 = {"sinan": ""} - -TPRESGINFO = {"sim": ""} - -TPROBSON = {"sinasc": ""} - -TPRUIDO = {"sinan": ""} - -TPSOROTOX = {"sinan": ""} - -TPTEMPO = {"sinan": ""} - -TPTEMPORIS = {"sinan": ""} - -TPTESTE1 = {"sinan": ""} - -TPUNINOT = {"sinan": ""} - -TPUPS = {"sia": ""} - -TP_ACIDENT = {"sinan": ""} - -TP_AFAST = {"sinan": ""} - -TP_ALI1TOX = {"sinan": ""} - -TP_ALI2TO = {"sinan": ""} - -TP_AMB_OCO = {"sinan": ""} - -TP_ANALISE = {"sinan": ""} - -TP_CAUSA = {"sinan": ""} - -TP_CAUSOUT = {"sinan": ""} - -TP_COLOUT = {"sinan": ""} - -TP_DESAT = {"cnes": ""} - -TP_DROGA = {"sia": ""} - -TP_IDENTFI = {"sinan": ""} - -TP_INDIRET = {"sinan": ""} - -TP_LEITO = {"cnes": ""} - -TP_LIQUOR = {"sinan": ""} - -TP_LOCAL = {"sinan": ""} - -TP_LOCALLE = {"sinan": ""} - -TP_MOTORA = {"sinan": ""} - -TP_NOT = {"sinan": ""} - -TP_ORIGEM = {"sinan": ""} - -TP_PREST = {"cnes": ""} - -TP_PROFILA = {"sinan": ""} - -TP_PRO_PRE = {"sinan": ""} - -TP_REPETE = {"sinan": ""} - -TP_SENSITI = {"sinan": ""} - -TP_SISTEMA = {"sinan": ""} - -TP_SOROHCV = {"sinan": ""} - -TP_TEMP_FU = {"sinan": ""} - -TP_TOXOUTR = {"sinan": ""} - -TP_UNID = {"cnes": ""} - -TP_VACINA = {"sinan": ""} - -TP_ZN_OCO = {"sinan": ""} - -TRAB_DESC = {"sinan": ""} - -TRAB_DOE = {"sinan": ""} - -TRANSF = {"sinan": ""} - -TRANSFU = {"sinan": ""} - -TRANSFUSAO = {"sinan": ""} - -TRANSPLA = {"sinan": ""} - -TRANSPO_N = {"sinan": ""} - -TRAN_COMP = {"sinan": ""} - -TRAN_MENT = {"sinan": ""} - -TRATADO = {"sinan": ""} - -TRATAM = {"sinan": ""} - -TRATAMENTO = {"sinan": ""} - -TRATANAO = {"sinan": ""} - -TRATPARC = {"sinan": ""} - -TRATSUP_AT = {"sinan": ""} - -TRAT_ATUAL = {"sinan": ""} - -TRAT_SUPER = {"sinan": ""} - -TRA_AMPOLA = {"sinan": ""} - -TRA_ANTIBI = {"sinan": ""} - -TRA_ANTIGO = {"sinan": ""} - -TRA_ANTIVI = {"sinan": ""} - -TRA_CLASSI = {"sinan": ""} - -TRA_CORTIC = {"sinan": ""} - -TRA_CPAP = {"sinan": ""} - -TRA_DATA_A = {"sinan": ""} - -TRA_DATA_S = {"sinan": ""} - -TRA_DIAG_C = {"sinan": ""} - -TRA_DIAG_T = {"sinan": ""} - -TRA_DOSE = {"sinan": ""} - -TRA_DROGA_ = {"sinan": ""} - -TRA_DT = {"sinan": ""} - -TRA_DT_ALT = {"sinan": ""} - -TRA_DT_INT = {"sinan": ""} - -TRA_ESPECI = {"sinan": ""} - -TRA_ESQUEM = {"sinan": ""} - -TRA_ESQU_1 = {"sinan": ""} - -TRA_HOSP = {"sinan": ""} - -TRA_INDI_N = {"sinan": ""} - -TRA_INFILT = {"sinan": ""} - -TRA_INFI_1 = {"sinan": ""} - -TRA_INTERR = {"sinan": ""} - -TRA_MECANI = {"sinan": ""} - -TRA_MOTIVO = {"sinan": ""} - -TRA_MUNICI = {"sinan": ""} - -TRA_NUM_PA = {"sinan": ""} - -TRA_OUTRA_ = {"sinan": ""} - -TRA_OUTR_N = {"sinan": ""} - -TRA_PESO = {"sinan": ""} - -TRA_QTD_SO = {"sinan": ""} - -TRA_SORO = {"sinan": ""} - -TRA_TRATAM = {"sinan": ""} - -TRA_UF = {"sinan": ""} - -TRA_VASOAT = {"sinan": ""} - -TREINA_MIL = {"sinan": ""} - -TRESMAIS = {"sinan": ""} - -TRONCO = {"sinan": ""} - -TUBE = {"sinan": ""} - -TURNO_AT = {"cnes": ""} - -T_FEBRE = {"sinan": ""} - -UF = { - "pni": "", - "sinan": "", -} - -UFATUAL = {"sinan": ""} - -UFCOD = {"ibge": ""} - -UFDIF = {"sia": ""} - -UFINFORM = { - "sim": "", - "sinasc": "", -} - -UFINTERNA = {"sinan": ""} - -UFMUN = {"sia": ""} - -UFMUNRES = {"cnes": ""} - -UFRESAT = {"sinan": ""} - -UFTRANSFU = {"sinan": ""} - -UF_ACID = {"sinan": ""} - -UF_ATENDE = {"sinan": ""} - -UF_EMP = {"sinan": ""} - -UF_H = {"sinan": ""} - -UF_HOSP = {"sinan": ""} - -UF_HOSPITA = {"sinan": ""} - -UF_ING = {"sinan": ""} - -UF_PRE_NAT = {"sinan": ""} - -UF_RES = {"sih": ""} - -UF_TRANSF = {"sinan": ""} - -UF_ZI = {"sih": ""} - -UNI_ATENDE = {"sinan": ""} - -UN_COBAL = {"cnes": ""} - -URGEMERG = {"cnes": ""} - -URINA = {"sinan": ""} - -URO_D = {"sinan": ""} - -URO_D_2 = {"sinan": ""} - -URO_D_3 = {"sinan": ""} - -URO_R1 = {"sinan": ""} - -URO_R2 = {"sinan": ""} - -URO_R3 = {"sinan": ""} - -US_ORTP = {"sih": ""} - -US_RN = {"sih": ""} - -US_SADT = {"sih": ""} - -US_SANGUE = {"sih": ""} - -US_SH = {"sih": ""} - -US_SP = {"sih": ""} - -US_TOT = {"sih": ""} - -UTILIZACAO = {"sinan": ""} - -UTIL_DESC = {"sinan": ""} - -UTI_INT_AL = {"sih": ""} - -UTI_INT_AN = {"sih": ""} - -UTI_INT_IN = {"sih": ""} - -UTI_INT_TO = { - "ciha": "", - "sih": "", -} - -UTI_MES_AL = {"sih": ""} - -UTI_MES_AN = {"sih": ""} - -UTI_MES_IN = {"sih": ""} - -UTI_MES_TO = { - "ciha": "", - "sih": "", -} - -UTI_TOTAL = {"sih": ""} - -UTRANSFU = {"sinan": ""} - -VACINA = {"sinan": ""} - -VACINACAO = {"sinan": ""} - -VACINAD = {"sinan": ""} - -VACINADO = {"sinan": ""} - -VACINADUPL = {"sinan": ""} - -VACINARUBE = {"sinan": ""} - -VAC_HEP_B = {"sinan": ""} - -VAL_ACOMP = {"sih": ""} - -VAL_OBSANG = {"sih": ""} - -VAL_ORTP = {"sih": ""} - -VAL_PED1AC = {"sih": ""} - -VAL_RN = {"sih": ""} - -VAL_SADT = {"sih": ""} - -VAL_SADTSR = {"sih": ""} - -VAL_SANG = {"sih": ""} - -VAL_SANGUE = {"sih": ""} - -VAL_SH = {"sih": ""} - -VAL_SH_FED = {"sih": ""} - -VAL_SH_GES = {"sih": ""} - -VAL_SP = {"sih": ""} - -VAL_SP_FED = {"sih": ""} - -VAL_SP_GES = {"sih": ""} - -VAL_TOT = {"sih": ""} - -VAL_TRANSP = {"sih": ""} - -VAL_UCI = {"sih": ""} - -VAL_UTI = {"sih": ""} - -VARIA_VIR = {"sinan": ""} - -VERSAOSCB = {"sim": ""} - -VERSAOSIST = { - "sim": "", - "sinasc": "", -} - -VIA_1 = {"sinan": ""} - -VIA_2 = {"sinan": ""} - -VIA_3 = {"sinan": ""} - -VINCPREV = {"sih": ""} - -VINCULAC = {"cnes": ""} - -VINCULO = {"sinan": ""} - -VINCUL_A = {"cnes": ""} - -VINCUL_C = {"cnes": ""} - -VINCUL_N = {"cnes": ""} - -VINC_ESP = {"sinan": ""} - -VINC_OUT = {"sinan": ""} - -VINC_SUS = {"cnes": ""} - -VIOL_ESPEC = {"sinan": ""} - -VIOL_FINAN = {"sinan": ""} - -VIOL_FISIC = {"sinan": ""} - -VIOL_INFAN = {"sinan": ""} - -VIOL_LEGAL = {"sinan": ""} - -VIOL_MOTIV = {"sinan": ""} - -VIOL_NEGLI = {"sinan": ""} - -VIOL_OUTR = {"sinan": ""} - -VIOL_PSICO = {"sinan": ""} - -VIOL_SEXU = {"sinan": ""} - -VIOL_TORT = {"sinan": ""} - -VIOL_TRAF = {"sinan": ""} - -VL_APRES = {"sia": ""} - -VL_APROV = {"sia": ""} - -VOMITO = {"sinan": ""} - -VOMITOS = {"sinan": ""} - -VOP_VORH = {"sinan": ""} - -XENODIAG = {"sinan": ""} - -ZONA = {"sinan": ""} - -ZUMBIDO = {"sinan": ""} - -agravaids = {"sinan": ""} - -agravalcoo = {"sinan": ""} - -agravdiabe = {"sinan": ""} - -agravdoenc = {"sinan": ""} - -agravdroga = {"sinan": ""} - -agravoutra = {"sinan": ""} - -agravtabac = {"sinan": ""} - -ant_anemia = {"sinan": ""} - -ant_asteri = {"sinan": ""} - -ant_candid = {"sinan": ""} - -ant_caquex = {"sinan": ""} - -ant_contag = {"sinan": ""} - -ant_dermat = {"sinan": ""} - -ant_diarre = {"sinan": ""} - -ant_disfun = {"sinan": ""} - -ant_droga = {"sinan": ""} - -ant_esof_n = {"sinan": ""} - -ant_febre = {"sinan": ""} - -ant_herpes = {"sinan": ""} - -ant_linfo = {"sinan": ""} - -ant_pneumo = {"sinan": ""} - -ant_pulmon = {"sinan": ""} - -ant_rel_ca = {"sinan": ""} - -ant_tosse = {"sinan": ""} - -ant_toxo = {"sinan": ""} - -ant_trasmi = {"sinan": ""} - -ant_tuberc = {"sinan": ""} - -antrelse_n = {"sinan": ""} - -antsifil_n = {"sinan": ""} - -aval_atu_n = {"sinan": ""} - -avalia_n = {"sinan": ""} - -bacilosc_1 = {"sinan": ""} - -bacilosc_2 = {"sinan": ""} - -bacilosc_3 = {"sinan": ""} - -bacilosc_4 = {"sinan": ""} - -bacilosc_5 = {"sinan": ""} - -bacilosc_6 = {"sinan": ""} - -bacilosco = {"sinan": ""} - -cancro_mole = {"sinan": ""} - -caract_genomica = {"sinan": ""} - -clado = {"sinan": ""} - -clamidea = {"sinan": ""} - -classatual = {"sinan": ""} - -classi_fin = {"sinan": ""} - -classopera = {"sinan": ""} - -co_uf_res = {"sinan": ""} - -comp_sexual = {"sinan": ""} - -contador = { - "sim": "", - "sinasc": "", -} - -contag_cd4 = {"sinan": ""} - -contat_animal = {"sinan": ""} - -contexam = {"sinan": ""} - -contreg = {"sinan": ""} - -criterio = {"sinan": ""} - -cs_escol_n = {"sinan": ""} - -cs_gestant = {"sinan": ""} - -cs_raca = {"sinan": ""} - -cs_sexo = {"sinan": ""} - -cs_zona = {"sinan": ""} - -cultura_es = {"sinan": ""} - -data_vacina = {"sinan": ""} - -def_diagno = {"sinan": ""} - -dip = {"sinan": ""} - -doenca_tra1 = {"sinan": ""} - -donovanose = {"sinan": ""} - -dose_receb = {"sinan": ""} - -dt_coleta = {"sinan": ""} - -dt_diag = {"sinan": ""} - -dt_encerra = {"sinan": ""} - -dt_evolucao = {"sinan": ""} - -dt_inic_tr = {"sinan": ""} - -dt_interna = {"sinan": ""} - -dt_nasc = {"sinan": ""} - -dt_noti_at = {"sinan": ""} - -dt_notific = {"sinan": ""} - -dt_obito = {"sinan": ""} - -dt_sin_pri = {"sinan": ""} - -dtalta_n = {"sinan": ""} - -dtinictrat = {"sinan": ""} - -dtultcomp = {"sinan": ""} - -esq_atu_n = {"sinan": ""} - -esq_ini_n = {"sinan": ""} - -estrangeiro = {"sinan": ""} - -evolucao = {"sinan": ""} - -forma = {"sinan": ""} - -formaclini = {"sinan": ""} - -gonorreia = {"sinan": ""} - -herpes_genital = {"sinan": ""} - -histopatol = {"sinan": ""} - -hiv = {"sinan": ""} - -hospital = {"sinan": ""} - -hpv = {"sinan": ""} - -htlv = {"sinan": ""} - -id_agravo = {"sinan": ""} - -id_mn_resi = {"sinan": ""} - -id_municip = {"sinan": ""} - -id_regiona = {"sinan": ""} - -id_rg_resi = {"sinan": ""} - -id_unidade = {"sinan": ""} - -ident_genero = {"sinan": ""} - -ist_ativa = {"sinan": ""} - -lab_triage = {"sinan": ""} - -labc_igg = {"sinan": ""} - -linfogranuloma = {"sinan": ""} - -local_cont = {"sinan": ""} - -met_lab = {"sinan": ""} - -mododetect = {"sinan": ""} - -modoentr = {"sinan": ""} - -mycoplasma_genital = {"sinan": ""} - -name = {"sinan": ""} - -nervosafet = {"sinan": ""} - -nu_ano = {"sinan": ""} - -nu_idade_n = {"sinan": ""} - -nu_lesoes = {"sinan": ""} - -orienta_sexual = {"sinan": ""} - -outro_des = {"sinan": ""} - -owner_org = {"sinan": ""} - -pac_imunossup = {"sinan": ""} - -pop_liber = {"sinan": ""} - -profile = {"sinan": ""} - -profis_saude = {"sinan": ""} - -raiox_tora = {"sinan": ""} - -resources = {"sinan": ""} - -resultado_exa_lab = {"sinan": ""} - -sg_uf = {"sinan": ""} - -sg_uf_not = {"sinan": ""} - -sifilis = {"sinan": ""} - -sintoma = {"sinan": ""} - -situa_ence = {"sinan": ""} - -test_molec = {"sinan": ""} - -test_sensi = {"sinan": ""} - -title = {"sinan": ""} - -tp_amost = {"sinan": ""} - -tpalta_n = {"sinan": ""} - -tpesquema = {"sinan": ""} - -tra_esquem = {"sinan": ""} - -transm = {"sinan": ""} - -tratamento = {"sinan": ""} - -tratamento_mpox = {"sinan": ""} - -tratparc = {"sinan": ""} - -tratsup_at = {"sinan": ""} - -trichomomas_vaginals = {"sinan": ""} - -uti = {"sinan": ""} - -vacina = {"sinan": ""} - -verruga_genital = {"sinan": ""} - -vinculo_epi = {"sinan": ""} diff --git a/pysus/api/ducklake/catalog/orm/columns.py b/pysus/api/ducklake/catalog/orm/columns.py new file mode 100644 index 00000000..3df18200 --- /dev/null +++ b/pysus/api/ducklake/catalog/orm/columns.py @@ -0,0 +1,22 @@ +from sqlalchemy.orm import DeclarativeBase +from sqlalchemy import Column, Integer, Sequence, String, Boolean, Index + + +class ColumnsBase(DeclarativeBase): + pass + + +class ColumnDefinition(ColumnsBase): + __tablename__ = "dataset_columns" + + id = Column(Integer, Sequence("columns_id_seq", schema="pysus"), primary_key=True) + dataset_id = Column(Integer, nullable=False, index=True) + name = Column(String, nullable=False) + type = Column(String, nullable=False) + description = Column(String, nullable=True) + nullable = Column(Boolean, nullable=False, default=True) + + __table_args__ = ( + Index("ix_columns_dataset_name", "dataset_id", "name"), + {"schema": "pysus"}, + ) diff --git a/pysus/api/ducklake/catalog/orm/dataset.py b/pysus/api/ducklake/catalog/orm/dataset.py index 687799ce..fb096f50 100644 --- a/pysus/api/ducklake/catalog/orm/dataset.py +++ b/pysus/api/ducklake/catalog/orm/dataset.py @@ -1,310 +1,76 @@ -"""Per-dataset catalog ORM models — stored in ``catalog_.db``. - -Defines tables for groups, files, and columns within a single dataset. -""" - from datetime import datetime from typing import Optional - +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship from sqlalchemy import ( - BigInteger, - Boolean, Column, - DateTime, - ForeignKey, - Index, Integer, Sequence, String, + ForeignKey, + BigInteger, + Index, + DateTime, Table, ) -from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship -class Base(DeclarativeBase): - """Base class for per-dataset catalog ORM models.""" - +class DatasetBase(DeclarativeBase): pass file_columns = Table( "file_columns", - Base.metadata, - Column( - "file_id", - Integer, - ForeignKey("pysus.files.id"), - primary_key=True, - ), - Column( - "column_id", - Integer, - ForeignKey("pysus.dataset_columns.id"), - primary_key=True, - ), + DatasetBase.metadata, + Column("file_id", Integer, ForeignKey("pysus.files.id"), primary_key=True), + Column("column_id", Integer, primary_key=True), schema="pysus", ) -class Dataset(Base): - """ORM model for the datasets table, representing a dataset collection. - - Parameters - ---------- - id : int, optional - Primary key (auto-generated by sequence). - name : str - Unique short name for the dataset. - long_name : str - Human-readable full name. - description : str, optional - Optional description of the dataset contents. - """ - - __tablename__ = "datasets" - __table_args__: tuple = ({"schema": "pysus"},) - - id = Column( - Integer, - Sequence("datasets_id_seq", schema="pysus"), - primary_key=True, - ) - name = Column(String, nullable=False, unique=True, index=True) - long_name = Column(String, nullable=False) - description = Column(String, nullable=True) - - groups = relationship( - "Group", - back_populates="dataset", - cascade="all, delete-orphan", - ) - files = relationship( - "File", - back_populates="dataset", - cascade="all, delete-orphan", - ) - columns = relationship( - "ColumnDefinition", - back_populates="dataset", - cascade="all, delete-orphan", - ) - - -class ColumnDefinition(Base): - """ORM model for dataset column metadata. - - Parameters - ---------- - id : int, optional - Primary key (auto-generated by sequence). - dataset_id : int - Foreign key referencing the parent dataset. - name : str - Column name. - type : str - Column data type string. - description : str, optional - Optional description of the column. - nullable : bool, optional - Whether the column allows null values. - """ - - __tablename__ = "dataset_columns" - __table_args__: tuple = ({"schema": "pysus"},) - - id = Column( - Integer, - Sequence("columns_id_seq", schema="pysus"), - primary_key=True, - ) - dataset_id = Column( - Integer, - ForeignKey("pysus.datasets.id"), - nullable=False, - index=True, - ) - name = Column(String, nullable=False) - type = Column(String, nullable=False) - description = Column(String, nullable=True) - nullable = Column(Boolean, nullable=False, default=True) - - dataset = relationship("Dataset", back_populates="columns") - files = relationship( - "File", - secondary=file_columns, - back_populates="columns", - ) - +class Group(DatasetBase): + __tablename__ = "dataset_groups" __table_args__ = ( - Index("ix_columns_dataset_name", "dataset_id", "name"), + Index("ix_groups_dataset_name", "dataset_id", "name"), {"schema": "pysus"}, ) - -class Group(Base): - """ORM model for dataset groups, grouping related files within a dataset. - - Parameters - ---------- - id : int, optional - Primary key (auto-generated by sequence). - name : str - Short name for the group. - dataset_id : int - Foreign key referencing the parent dataset. - long_name : str - Human-readable full name. - description : str, optional - Optional description of the group contents. - """ - - __tablename__ = "dataset_groups" - __table_args__: tuple = ({"schema": "pysus"},) - - id = Column( - Integer, - Sequence("groups_id_seq", schema="pysus"), - primary_key=True, - ) + id = Column(Integer, Sequence("groups_id_seq", schema="pysus"), primary_key=True) name = Column(String, nullable=False) - dataset_id = Column( - Integer, - ForeignKey("pysus.datasets.id"), - nullable=False, - index=True, - ) + dataset_id = Column(Integer, nullable=False, index=True) long_name = Column(String, nullable=False) description = Column(String, nullable=True) - dataset = relationship( - "Dataset", - back_populates="groups", - ) - files = relationship( - "File", - back_populates="group", - cascade="all, delete-orphan", - ) + files = relationship("File", back_populates="group", cascade="all, delete-orphan") + +class File(DatasetBase): + __tablename__ = "files" __table_args__ = ( - Index("ix_groups_dataset_name", "dataset_id", "name"), + Index("ix_files_dataset_group", "dataset_id", "group_id"), + Index("ix_files_temporal", "year", "month"), + Index("ix_files_lookup", "dataset_id", "group_id", "year", "month", "state"), {"schema": "pysus"}, ) - -class File(Base): - """ORM model for the files table, representing individual data files. - - Parameters - ---------- - id : int, optional - Primary key (auto-generated by sequence). - dataset_id : int - Foreign key referencing the parent dataset. - group_id : int, optional - Foreign key referencing the parent group. - path : str - Object storage path to the file. - size : int - File size in bytes. - rows : int - Number of rows in the file. - type : str, optional - File type identifier. - modified : datetime - Timestamp of the last known modification. - origin_modified : datetime, optional - Original modification timestamp from the source. - origin_size : int - Original file size in bytes. - origin_path : str - Original source path of the file. - sha256 : str, optional - SHA-256 hex digest for integrity verification. - year : int, optional - Data year associated with the file. - month : int, optional - Data month associated with the file. - state : str, optional - Two-letter state code associated with the file. - """ - - __tablename__ = "files" - __table_args__: tuple = ({"schema": "pysus"},) - id: Mapped[int] = mapped_column( - Integer, - Sequence("files_id_seq", schema="pysus"), - primary_key=True, - ) - dataset_id: Mapped[int] = mapped_column( - Integer, ForeignKey("pysus.datasets.id"), nullable=False, index=True + Integer, Sequence("files_id_seq", schema="pysus"), primary_key=True ) + dataset_id: Mapped[int] = mapped_column(Integer, nullable=False, index=True) group_id: Mapped[int | None] = mapped_column( - Integer, - ForeignKey("pysus.dataset_groups.id"), - nullable=True, - index=True, + Integer, ForeignKey("pysus.dataset_groups.id"), nullable=True, index=True ) - path: Mapped[str] = mapped_column(String, nullable=False, unique=True) size: Mapped[int] = mapped_column(BigInteger, nullable=False) rows: Mapped[int] = mapped_column(Integer, nullable=False) type: Mapped[str] = mapped_column(String, nullable=True) modified: Mapped[datetime] = mapped_column(DateTime, nullable=False) - origin_modified: Mapped[datetime | None] = mapped_column( - DateTime, - nullable=True, - ) + origin_modified: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) origin_size: Mapped[int] = mapped_column(BigInteger, nullable=False) origin_path: Mapped[str] = mapped_column(String, nullable=False) - sha256: Mapped[str | None] = mapped_column( - String(64), - nullable=True, - index=True, - ) - - year: Mapped[int | None] = mapped_column( - Integer, - nullable=True, - index=True, - ) - month: Mapped[int | None] = mapped_column( - Integer, - nullable=True, - index=True, - ) - state: Mapped[str | None] = mapped_column( - String(2), - nullable=True, - index=True, - ) + sha256: Mapped[str | None] = mapped_column(String(64), nullable=True, index=True) + year: Mapped[int | None] = mapped_column(Integer, nullable=True, index=True) + month: Mapped[int | None] = mapped_column(Integer, nullable=True, index=True) + state: Mapped[str | None] = mapped_column(String(2), nullable=True, index=True) - dataset: Mapped["Dataset"] = relationship( - "Dataset", - back_populates="files", - ) - group: Mapped[Optional["Group"]] = relationship( - "Group", - back_populates="files", - ) - columns: Mapped[list["ColumnDefinition"]] = relationship( - "ColumnDefinition", - secondary=file_columns, - back_populates="files", - cascade="all, delete", - ) + group: Mapped[Optional["Group"]] = relationship("Group", back_populates="files") - __table_args__ = ( - Index("ix_files_dataset_group", "dataset_id", "group_id"), - Index("ix_files_temporal", "year", "month"), - Index( - "ix_files_lookup", - "dataset_id", - "group_id", - "year", - "month", - "state", - ), - {"schema": "pysus"}, - ) diff --git a/pysus/api/ducklake/catalog/orm/default.py b/pysus/api/ducklake/catalog/orm/default.py index bd412080..4de0a24f 100644 --- a/pysus/api/ducklake/catalog/orm/default.py +++ b/pysus/api/ducklake/catalog/orm/default.py @@ -41,3 +41,6 @@ class Dataset(Base): name = Column(String, nullable=False, unique=True, index=True) long_name = Column(String, nullable=False) description = Column(String, nullable=True) + + def __repr__(self): + return self.name diff --git a/pysus/api/ducklake/catalog/parsers.py b/pysus/api/ducklake/catalog/parsers.py deleted file mode 100644 index e69de29b..00000000 diff --git a/pysus/api/ducklake/client.py b/pysus/api/ducklake/client.py index f7339569..ee16231c 100644 --- a/pysus/api/ducklake/client.py +++ b/pysus/api/ducklake/client.py @@ -6,417 +6,112 @@ from collections.abc import Callable from pathlib import Path -from typing import Any -import boto3 -import httpx -from anyio import sleep, to_thread -from botocore.config import Config -from pydantic import BaseModel, PrivateAttr, SecretStr -from pysus import CACHEPATH -from pysus.api.models import BaseRemoteClient, BaseRemoteFile +from anyio import to_thread +from pydantic import SecretStr, PrivateAttr +from pysus.api.models import BaseRemoteClient from pysus.api.types import DUCKLAKE -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker -from sqlalchemy.pool import StaticPool from .catalog.orm.default import Dataset +from .catalog.adapters import DatasetAdapter, CatalogAdapter from .models import DuckDataset, File - - -class DuckLakeCredentials(BaseModel): - """Credentials for authenticating with the S3-compatible object storage. - - Parameters - ---------- - access_key : SecretStr - The S3 access key ID. - secret_key : SecretStr - The S3 secret access key. - """ - - access_key: SecretStr - secret_key: SecretStr +from .catalog.adapters import DuckLakeCredentials +from .functional import download_s3 class DuckLake(BaseRemoteClient): - """Client for the DuckLake S3-based public health dataset catalog. - - Parameters - ---------- - endpoint : str, optional - S3-compatible object storage endpoint. - region : str, optional - Storage region name. - bucket : str, optional - Bucket name containing the catalog. - credentials : DuckLakeCredentials, optional - Credentials for authenticated S3 operations. - """ - - endpoint: str = "nbg1.your-objectstorage.com" - region: str = "nbg1" - bucket: str = "pysus" credentials: DuckLakeCredentials | None = None - - _s3_client: Any = PrivateAttr(default=None) - _Session: Any = PrivateAttr(default=None) - _datasets: list = PrivateAttr(default_factory=list) + _datasets: list[DuckDataset] = PrivateAttr(default_factory=list) def __init__(self, engine=None, **data) -> None: - """Initialize the DuckLake client. - - Parameters - ---------- - engine : object, optional - Pre-configured SQLAlchemy engine for the discovery catalog. - ``**data`` - Fields passed to the Pydantic base model. - """ super().__init__(**data) - self._engine = engine - self._cache_dir: Path = Path(CACHEPATH) / "ducklake" - self._cache_dir.mkdir(parents=True, exist_ok=True) - self._catalog_local: Path = self._cache_dir / "catalog.duckdb" - self._catalog_remote: str = "public/catalog.duckdb" + self.catalog_adap = CatalogAdapter( + engine=engine, + credentials=self.credentials, + ) @property def name(self) -> str: - """Return the short name of this client. - - Returns - ------- - str - The client short name. - """ return DUCKLAKE @property def long_name(self) -> str: - """Return the human-readable name of this client. - - Returns - ------- - str - The client display name. - """ return "PySUS s3 Client" @property def description(self) -> str: - """Return a description of this client. - - Returns - ------- - str - A description string (currently empty). - """ - return "" # TODO: - - @property - def catalog_path(self) -> Path: - """Return the local path to the discovery catalog database. - - Returns - ------- - Path - Filesystem path to the local discovery catalog file. - """ - return self._catalog_local - - @property - def _catalog_url(self) -> str: - """Return the remote URL of the discovery catalog.""" - return f"https://{self.endpoint}/{self.bucket}/{self._catalog_remote}" - - @property - def _is_authenticated(self) -> bool: - """Return whether the client has credentials configured.""" - return self.credentials is not None + return "" async def datasets(self, **kwargs) -> list[DuckDataset]: - """Return all datasets from the catalog as DuckDataset instances. - - Parameters - ---------- - ``**kwargs`` - Additional filter arguments (currently unused). - - Returns - ------- - list[DuckDataset] - List of all datasets in the catalog. - """ - if not self._Session: - await self.connect() + await self.catalog_adap.connect() def _fetch(): - with self._Session() as session: + with self.catalog_adap.get_session() as session: results = session.query(Dataset).all() session.expunge_all() return results records = await to_thread.run_sync(_fetch) - return [DuckDataset(record=rec, client=self) for rec in records] - async def login( - self, - access_key: str | None = None, - secret_key: str | None = None, - **kwargs, - ) -> None: - """Authenticate with S3 credentials and reconnect to the catalog. - - Parameters - ---------- - access_key : str, optional - S3 access key ID. If omitted, credentials are cleared. - secret_key : str, optional - S3 secret access key. If omitted, credentials are cleared. - ``**kwargs`` - Additional arguments (currently unused). - """ - if access_key and secret_key: - self.credentials = DuckLakeCredentials( - access_key=SecretStr(access_key), - secret_key=SecretStr(secret_key), + duck_datasets: list[DuckDataset] = [] + for rec in records: + dataset_adapter = DatasetAdapter( + name=str(rec.name), credentials=self.credentials ) - else: - self.credentials = None - - await self.connect(force=True) - - if self._is_authenticated: - self._s3_client = await to_thread.run_sync( - self._get_s3_client, + duck_datasets.append( + DuckDataset(record=rec, client=self, adapter=dataset_adapter) ) - def _setup_engine(self, local_path: Path | None = None): - """Create and configure a DuckDB engine with S3 settings. + self._datasets = duck_datasets + return duck_datasets - Parameters - ---------- - local_path : Path, optional - Path to the catalog database file. - Defaults to the discovery catalog. - """ - if local_path is None: - local_path = self._catalog_local - engine = create_engine( - f"duckdb:///{local_path}", - poolclass=StaticPool, + async def login( + self, + access_key: str, + secret_key: str, + **kwargs, + ) -> None: + self.credentials = DuckLakeCredentials( + access_key=SecretStr(access_key), + secret_key=SecretStr(secret_key), ) - - with engine.connect() as conn: - conn.exec_driver_sql("INSTALL ducklake; LOAD ducklake;") - - has_pysus = conn.exec_driver_sql( - "SELECT 1 FROM information_schema.schemata" - " WHERE schema_name = 'pysus'" - ).fetchone() - - if has_pysus: - conn.exec_driver_sql("SET search_path='pysus,main';") - else: - conn.exec_driver_sql("SET search_path='main';") - - s3_cfg = { - "s3_endpoint": self.endpoint, - "s3_region": self.region, - "s3_url_style": "path", - "s3_use_ssl": "true", - } - - if self.credentials and self._is_authenticated: - s3_cfg["s3_access_key_id"] = ( - self.credentials.access_key.get_secret_value() - ) - s3_cfg["s3_secret_access_key"] = ( - self.credentials.secret_key.get_secret_value() - ) - - for key, value in s3_cfg.items(): - conn.exec_driver_sql(f"SET {key}='{value}'") - - conn.commit() - - return engine + self.catalog_adap.credentials = self.credentials + await self.catalog_adap.connect(force=True) async def connect(self, force: bool = False) -> None: - """Connect to the discovery catalog, downloading first if needed. - - Parameters - ---------- - force : bool, optional - Whether to re-download and re-connect even if already connected. - """ - if self._engine and not force: - if not self._Session: - self._Session = sessionmaker(bind=self._engine) - return - - await self._download_catalog( - self._catalog_local, - self._catalog_remote, - ) - self._engine = await to_thread.run_sync(self._setup_engine) - self._Session = sessionmaker(bind=self._engine) + await self.catalog_adap.connect(force=force) async def close(self, update_catalog: bool = False) -> None: - """Close all datasets and dispose the discovery engine. - - Parameters - ---------- - update_catalog : bool, optional - Whether to upload all per-dataset catalogs before closing. - Requires authenticated credentials. - """ - if update_catalog: - await self._upload_catalog() - - datasets: list["DuckDataset"] = list(self._datasets) - for ds in datasets: + for ds in self._datasets: await ds.close(update_catalog=update_catalog) - self._datasets.clear() - - if self._engine: - await to_thread.run_sync(self._engine.dispose) - self._engine = None - self._Session = None - self._s3_client = None - async def _download( - self, - remote_path: str, - local_path: Path, - *, - callback: Callable[[int, int], None] | None = None, - ) -> None: - """Download *remote_path* to *local_path* with streaming and retries. - - Parameters - ---------- - remote_path : str - Object key within the bucket. - local_path : Path - Local destination path. - callback : Callable[[int, int], None], optional - Progress callback receiving ``(downloaded, total)`` bytes. - """ - url = f"https://{self.endpoint}/{self.bucket}/{remote_path}" - max_retries = 5 - - for attempt in range(max_retries): - try: - async with httpx.AsyncClient(follow_redirects=True) as client: - async with client.stream("GET", url) as r: - r.raise_for_status() - total = int(r.headers.get("Content-Length", 0)) - downloaded = 0 - with open(local_path, "wb") as f: - async for chunk in r.aiter_bytes( - chunk_size=1024 * 1024, - ): - await to_thread.run_sync(f.write, chunk) - downloaded += len(chunk) - if callback: - callback(downloaded, total) - return - except OSError as e: - if attempt < max_retries - 1: - await sleep(1) - else: - raise e - - async def _download_catalog( - self, local_path: Path, remote_path: str - ) -> None: - """Download a catalog database from remote storage with retries. - - Parameters - ---------- - local_path : Path - Local destination path for the catalog file. - remote_path : str - Remote object key within the bucket. - """ - url = f"https://{self.endpoint}/{self.bucket}/{remote_path}" - - if local_path.exists(): - try: - local_size = local_path.stat().st_size - except OSError: - local_size = -1 - else: - local_size = -1 - - async with httpx.AsyncClient(follow_redirects=True) as client: - try: - head = await client.head(url) - head.raise_for_status() - remote_size = int(head.headers.get("content-length", 0)) - except Exception: # noqa: B902 - remote_size = 0 - - if remote_size == local_size: - return - - await self._download(remote_path, local_path) + await self.catalog_adap.close(update=update_catalog) + self._datasets.clear() - async def _download_file( + async def download( self, - file: BaseRemoteFile, + file: File, output: Path, callback: Callable[[int, int], None] | None = None, ) -> Path: - """Download a single file from object storage to the local path.""" if not isinstance(file, File): raise ValueError("FTP File was not properly instantiated") - await self._download(file.record.path, output, callback=callback) - return output - - def _get_s3_client(self): - """Create and return a boto3 S3 client for the configured endpoint.""" - if not self.credentials: - raise ConnectionError("S3 Credentials not found") - return boto3.client( - "s3", - endpoint_url=f"https://{self.endpoint}", - aws_access_key_id=self.credentials.access_key.get_secret_value(), - aws_secret_access_key=( - self.credentials.secret_key.get_secret_value() - ), - region_name=self.region, - config=Config(signature_version="s3v4"), + access_key = ( + self.credentials.access_key.get_secret_value() if self.credentials else None + ) + secret_key = ( + self.credentials.secret_key.get_secret_value() if self.credentials else None ) - async def _upload_catalog(self) -> None: - """Upload all per-dataset catalogs to remote storage. - - Requires authenticated credentials. - """ - if not self.credentials: - raise PermissionError( - "Admin credentials required to upload catalog.", - ) - - datasets = await self.datasets() - for ds in datasets: - if not ds._catalog_local.exists(): - continue - - _local = str(ds._catalog_local) - _name = ds._catalog_name - - def _upload(local=_local, name=_name): - self._s3_client.upload_file( - local, - self.bucket, - name, - ) - - await to_thread.run_sync(_upload) + await download_s3( + remote_path=file.record.path, + local_path=output, + access_key=access_key, + secret_key=secret_key, + callback=callback, + ) + return output DuckDataset.model_rebuild(_types_namespace={"DuckLake": DuckLake}) diff --git a/pysus/api/ducklake/functional.py b/pysus/api/ducklake/functional.py new file mode 100644 index 00000000..d13d8001 --- /dev/null +++ b/pysus/api/ducklake/functional.py @@ -0,0 +1,179 @@ +from pathlib import Path +from typing import Callable + +from anyio import sleep, to_thread +import httpx +import boto3 +from botocore.config import Config +from botocore import UNSIGNED + +from pysus.api import types + + +async def download_http( + remote_path: str, + local_path: Path, + callback: Callable[[int, int], None] | None = None, +) -> None: + """Download *remote_path* to *local_path* with HTTP streaming and retries. + + Parameters + ---------- + remote_path : str + Object key within the bucket. + local_path : Path + Local destination path. + callback : Callable[[int, int], None], optional + Progress callback receiving ``(downloaded, total)`` bytes. + """ + url = f"https://{types.S3_ENDPOINT}/{types.S3_BUCKET}/{remote_path}" + max_retries = 5 + + for attempt in range(max_retries): + try: + async with httpx.AsyncClient(follow_redirects=True) as client: + async with client.stream("GET", url) as r: + r.raise_for_status() + total = int(r.headers.get("Content-Length", 0)) + downloaded = 0 + with open(local_path, "wb") as f: + async for chunk in r.aiter_bytes(chunk_size=1024 * 1024): + await to_thread.run_sync(f.write, chunk) + downloaded += len(chunk) + if callback: + callback(downloaded, total) + return + except OSError as e: + if attempt < max_retries - 1: + await sleep(1) + else: + raise e + + +async def download_s3( + remote_path: str, + local_path: Path, + access_key: str | None = None, + secret_key: str | None = None, + callback: Callable[[int, int], None] | None = None, +) -> None: + """Download *remote_path* to *local_path* using boto3 with optional credentials. + + Parameters + ---------- + remote_path : str + Object key within the bucket. + local_path : Path + Local destination path. + access_key : str, optional + S3 access key ID. + secret_key : str, optional + S3 secret access key. + callback : Callable[[int, int], None], optional + Progress callback receiving ``(downloaded, total)`` bytes. + """ + max_retries = 5 + + def _get_client_args(): + args: dict = { + "service_name": "s3", + "endpoint_url": f"https://{types.S3_ENDPOINT}", + "region_name": types.S3_REGION, + } + if access_key and secret_key: + args["aws_access_key_id"] = access_key + args["aws_secret_access_key"] = secret_key + args["config"] = Config(signature_version="s3v4") + else: + args["config"] = Config(signature_version=UNSIGNED) + return args + + def _get_total_size(client_args) -> int: + try: + client = boto3.client(**client_args) + meta = client.head_object(Bucket=types.S3_BUCKET, Key=remote_path) + return int(meta.get("ContentLength", 0)) + except Exception: + return 0 + + def _download(client_args, total_size: int): + client = boto3.client(**client_args) + downloaded = 0 + + def boto_callback(bytes_amount): + nonlocal downloaded + downloaded += bytes_amount + if callback: + callback(downloaded, total_size) + + client.download_file( + Bucket=types.S3_BUCKET, + Key=remote_path, + Filename=str(local_path), + Callback=boto_callback if callback else None, + ) + + for attempt in range(max_retries): + try: + client_args = _get_client_args() + total_size = await to_thread.run_sync(_get_total_size, client_args) + await to_thread.run_sync(_download, client_args, total_size) + return + except Exception as e: + if attempt < max_retries - 1: + await sleep(1) + else: + raise e + + +async def upload_s3( + local_path: Path, + remote_path: str, + access_key: str, + secret_key: str, + callback: Callable[[int, int], None] | None = None, +) -> None: + max_retries = 5 + + def _get_client_args(): + args: dict = { + "service_name": "s3", + "endpoint_url": f"https://{types.S3_ENDPOINT}", + "region_name": types.S3_REGION, + } + if access_key and secret_key: + args["aws_access_key_id"] = access_key + args["aws_secret_access_key"] = secret_key + args["config"] = Config(signature_version="s3v4") + else: + args["config"] = Config(signature_version=UNSIGNED) + return args + + def _upload(client_args, total_size: int): + client = boto3.client(**client_args) + uploaded = 0 + + def boto_callback(bytes_amount): + nonlocal uploaded + uploaded += bytes_amount + if callback: + callback(uploaded, total_size) + + client.upload_file( + Filename=str(local_path), + Bucket=types.S3_BUCKET, + Key=remote_path, + Callback=boto_callback if callback else None, + ) + + for attempt in range(max_retries): + try: + client_args = _get_client_args() + total_size = local_path.stat().st_size + await to_thread.run_sync(_upload, client_args, total_size) + return + except Exception as e: + if attempt < max_retries - 1: + await sleep(1) + else: + raise e diff --git a/pysus/api/ducklake/models.py b/pysus/api/ducklake/models.py index c9c4d3e5..449cf635 100644 --- a/pysus/api/ducklake/models.py +++ b/pysus/api/ducklake/models.py @@ -13,11 +13,14 @@ from anyio import to_thread from pydantic import Field, PrivateAttr from pysus import CACHEPATH -from pysus.api.ducklake.catalog.orm.dataset import Dataset -from pysus.api.ducklake.catalog.orm.dataset import File as CatalogFile -from pysus.api.ducklake.catalog.orm.dataset import Group +from .catalog.adapters import DatasetAdapter +from .catalog.orm.default import Dataset +from .catalog.orm.dataset import ( + File as CatalogFile, + Group, +) from pysus.api.models import BaseRemoteDataset, BaseRemoteFile, BaseRemoteGroup -from sqlalchemy.orm import contains_eager, joinedload, sessionmaker +from sqlalchemy import select, orm if TYPE_CHECKING: # pragma: no cover from .client import DuckLake @@ -127,7 +130,7 @@ async def _download( if not output: output = CACHEPATH / self.name - return await self.client._download_file( + return await self.client.download( self, output, callback=callback, @@ -161,148 +164,39 @@ def _calculate(): class DuckDataset(BaseRemoteDataset): - """A dataset from the DuckLake catalog, containing groups and files. - - Each dataset manages its own DuckDB engine connected to a - per-dataset catalog file (``catalog_.db``). - - Parameters - ---------- - record : Dataset - The underlying ORM record. - client : BaseRemoteClient - The parent client instance. - """ - record: Dataset = Field(exclude=True) client: "DuckLake" = Field(exclude=True) - - _engine: Any = PrivateAttr(default=None) - _Session: Any = PrivateAttr(default=None) + adapter: DatasetAdapter = Field(exclude=True) def __init__(self, **data) -> None: super().__init__(**data) - self._cache_dir: Path = Path(CACHEPATH) / "ducklake" - self._cache_dir.mkdir(parents=True, exist_ok=True) - self._catalog_name: str = f"catalog_{self.record.name.lower()}.duckdb" - self._catalog_local: Path = self._cache_dir / self._catalog_name def __repr__(self) -> str: - """Return a string representation of the dataset. - - Returns - ------- - str - The uppercased dataset name. - """ return self.name.upper() @property def name(self) -> str: - """Return the short name of the dataset. - - Returns - ------- - str - The dataset short name. - """ - return self.record.name # type: ignore + return str(self.record.name) @property def long_name(self) -> str: - """Return the human-readable name of the dataset. - - Returns - ------- - str - The dataset display name, falling back to the short name. - """ - return "" # TODO: + return "" @property def description(self) -> str: - """Return the description of the dataset. - - Returns - ------- - str - The dataset description, or an empty string if unavailable. - """ - return "" # TODO: - - @property - def catalog_path(self) -> Path: - """Return the local path to the downloaded catalog database. - - Returns - ------- - Path - Filesystem path to the local catalog database file. - """ - return self._catalog_local + return "" async def connect( self, force: bool = False, - callback: Callable[[int, int], None] | None = None, ) -> None: - """Connect to the catalog, downloading it first if necessary. - - Parameters - ---------- - force : bool, optional - Whether to re-download and re-connect even if already connected. - """ - if self._engine and not force: - if not self._Session: - self._Session = sessionmaker(bind=self._engine) - return - if self not in self.client._datasets: self.client._datasets.append(self) - await self.client._download( - f"public/{self._catalog_name}", - self._catalog_local, - callback=callback, - ) - self._engine = await to_thread.run_sync( - lambda: self.client._setup_engine(self._catalog_local) - ) - self._Session = sessionmaker(bind=self._engine) + await self.adapter.connect(force=force) async def close(self, update_catalog: bool = False): - """Dispose the engine, optionally uploading the per-dataset catalog. - - Parameters - ---------- - update_catalog : bool, optional - Whether to upload the per-dataset catalog to remote storage. - Requires the parent client to be authenticated. - """ - if self._engine: - await to_thread.run_sync(self._engine.dispose) - self._engine = None - self._Session = None - - if update_catalog and self.client._is_authenticated: - await self._upload_catalog() - - async def _upload_catalog(self): - """Upload the per-dataset catalog to remote storage.""" - if not self.client.credentials: - raise PermissionError( - "Admin credentials required to upload catalog.", - ) - - def _upload(): - self.client._s3_client.upload_file( - str(self._catalog_local), - self.client.bucket, - f"catalog_{self.record.name.lower()}.duckdb", - ) - - await to_thread.run_sync(_upload) + await self.adapter.close(update=update_catalog) async def query( self, @@ -311,72 +205,58 @@ async def query( year: int | None = None, month: int | None = None, ) -> list[File]: - """Filter files in this dataset's catalog by group, state, year, month. - - Parameters - ---------- - group : str, optional - Group name pattern to filter by (case-insensitive ILIKE). - state : str, optional - Two-letter state code to filter by. - year : int, optional - Year to filter by. - month : int, optional - Month to filter by. - - Returns - ------- - list[File] - List of matching file objects. - """ - if not self._Session: - await self.connect() + await self.adapter.connect() def _query() -> list[CatalogFile]: - with self._Session() as session: - q = session.query(CatalogFile).options( - joinedload(CatalogFile.group), - joinedload(CatalogFile.dataset), + with self.adapter.get_session() as session: + stmt = ( + select(CatalogFile) + .filter(CatalogFile.dataset_id == self.record.id) + .options( + orm.joinedload(CatalogFile.group), + ) ) if group: - q = ( - q.join(CatalogFile.group) - .options(contains_eager(CatalogFile.group)) + stmt = ( + stmt.join(CatalogFile.group) + .options(orm.contains_eager(CatalogFile.group)) .filter(Group.name.ilike(group)) ) if state: - q = q.filter(CatalogFile.state == state.upper()) + stmt = stmt.filter(CatalogFile.state == state.upper()) if year: - q = q.filter(CatalogFile.year == year) + stmt = stmt.filter(CatalogFile.year == year) if month: - q = q.filter(CatalogFile.month == month) - results = q.all() + stmt = stmt.filter(CatalogFile.month == month) + + results = session.scalars(stmt).all() session.expunge_all() - return results + return list(results) records: list[CatalogFile] = await to_thread.run_sync(_query) return [File(record=r, dataset=self) for r in records] async def _fetch_content(self) -> list[Union["DuckGroup", File]]: - """Fetch groups and files belonging to this dataset.""" - if not self._Session: - await self.connect() + await self.adapter.connect() def _fetch(): - with self._Session() as session: - dataset = ( - session.query(Dataset) - .options( - joinedload(Dataset.groups).joinedload(Group.files), - joinedload(Dataset.files), - ) - .filter(Dataset.name == self.record.name) - .first() + with self.adapter.get_session() as session: + stmt = ( + select(Group) + .options(orm.joinedload(Group.files)) + .filter(Group.dataset_id == self.record.id) ) - if not dataset: - return [], [] + groups = session.scalars(stmt).all() + + ungrouped = session.scalars( + select(CatalogFile).filter( + CatalogFile.dataset_id == self.record.id, + CatalogFile.group_id.is_(None), + ) + ).all() + session.expunge_all() - return dataset.groups, dataset.files + return list(groups), list(ungrouped) groups, files = await to_thread.run_sync(_fetch) @@ -386,15 +266,7 @@ def _fetch(): items.extend([DuckGroup(record=g, dataset=self) for g in groups]) if files: - items.extend( - [ - File( - record=f, - dataset=self, - ) - for f in files - ] - ) + items.extend([File(record=f, dataset=self) for f in files]) return items diff --git a/pysus/api/ftp/models.py b/pysus/api/ftp/models.py index 88edb1a3..8731bc7a 100644 --- a/pysus/api/ftp/models.py +++ b/pysus/api/ftp/models.py @@ -148,7 +148,7 @@ async def _download( cache_dir.mkdir(parents=True, exist_ok=True) output = cache_dir / self.basename - return await self.client._download_file(self, output, callback) + return await self.client.download(self, output, callback) class Directory: diff --git a/pysus/api/models.py b/pysus/api/models.py index 9f0c0967..d93ed59f 100644 --- a/pysus/api/models.py +++ b/pysus/api/models.py @@ -520,7 +520,7 @@ async def datasets(self, **kwargs) -> list: """Return a list of available datasets matching *kwargs*.""" @abstractmethod - async def _download_file( + async def download( self, file: BaseRemoteFile, output: Path, diff --git a/pysus/api/types.py b/pysus/api/types.py index 2e3708a8..14d37015 100644 --- a/pysus/api/types.py +++ b/pysus/api/types.py @@ -3,6 +3,21 @@ from pydantic import AfterValidator +def _validate_s3_endpoint(v: str) -> str: + assert v == "nbg1.your-objectstorage.com" + return v + + +def _validate_s3_region(v: str) -> str: + assert v == "nbg1" + return v + + +def _validate_s3_bucket(v: str) -> str: + assert v == "pysus" + return v + + def _validate_origin(v: str) -> str: valid = (FTP, DADOSGOV, DUCKLAKE) assert v in valid, f"Invalid origin: {v!r}" @@ -93,6 +108,12 @@ def _validate_state(v: str) -> str: DADOSGOV: Annotated[str, AfterValidator(_validate_origin)] = "DadosGov" DUCKLAKE: Annotated[str, AfterValidator(_validate_origin)] = "DuckLake" +S3_ENDPOINT: Annotated[str, AfterValidator(_validate_s3_endpoint)] = ( + "nbg1.your-objectstorage.com" +) +S3_REGION: Annotated[str, AfterValidator(_validate_s3_region)] = "nbg1" +S3_BUCKET: Annotated[str, AfterValidator(_validate_s3_bucket)] = "pysus" + VARCHAR: Annotated[str, AfterValidator(_validate_column_type)] = "VARCHAR" INTEGER: Annotated[str, AfterValidator(_validate_column_type)] = "INTEGER" BIGINT: Annotated[str, AfterValidator(_validate_column_type)] = "BIGINT" diff --git a/pysus/tests/api/ducklake/test_client.py b/pysus/tests/api/ducklake/test_client.py index e50a6b05..cf045025 100644 --- a/pysus/tests/api/ducklake/test_client.py +++ b/pysus/tests/api/ducklake/test_client.py @@ -40,16 +40,12 @@ async def test_description(self): async def test_ducklake_catalog_path(self, tmp_path): with patch("pysus.api.ducklake.client.CACHEPATH", tmp_path): client = DuckLake() - assert ( - client.catalog_path == tmp_path / "ducklake" / "catalog.duckdb" - ) + assert client.catalog_path == tmp_path / "ducklake" / "catalog.duckdb" @pytest.mark.asyncio async def test_ducklake_catalog_url(self): client = DuckLake() - expected = ( - "https://nbg1.your-objectstorage.com/pysus/public/catalog.duckdb" - ) + expected = "https://nbg1.your-objectstorage.com/pysus/public/catalog.duckdb" assert client._catalog_url == expected @pytest.mark.asyncio @@ -136,9 +132,7 @@ async def test_upload_catalog_requires_auth(self): class TestDuckLakeDatasets: @pytest.mark.asyncio - async def test_datasets_creates_session_and_returns_duckdatasets( - self, tmp_path - ): + async def test_datasets_creates_session_and_returns_duckdatasets(self, tmp_path): with patch("pysus.api.ducklake.client.CACHEPATH", tmp_path): client = DuckLake() @@ -177,9 +171,7 @@ async def test_datasets_connects_if_no_session(self, tmp_path): async def _connect(*args, **kwargs): client._Session = MagicMock(return_value=mock_session) - with patch.object( - DuckLake, "connect", new=AsyncMock(side_effect=_connect) - ): + with patch.object(DuckLake, "connect", new=AsyncMock(side_effect=_connect)): def run_sync(fn, *args, **kwargs): return fn() @@ -205,9 +197,7 @@ def test_setup_engine_has_pysus_schema(self): result = client._setup_engine() calls = [str(c) for c in mock_conn.exec_driver_sql.call_args_list] - assert any( - "SET search_path" in c and "pysus,main" in c for c in calls - ) + assert any("SET search_path" in c and "pysus,main" in c for c in calls) assert result is mock_engine def test_setup_engine_no_pysus_schema(self): @@ -236,19 +226,13 @@ def test_setup_engine_with_credentials(self): mock_conn.exec_driver_sql().fetchone.return_value = None client = DuckLake( - credentials=DuckLakeCredentials( - access_key="ak", secret_key="sk" - ) + credentials=DuckLakeCredentials(access_key="ak", secret_key="sk") ) client._setup_engine() calls = [str(c) for c in mock_conn.exec_driver_sql.call_args_list] - s3_access = any( - "s3_access_key_id" in c and "ak" in c for c in calls - ) - s3_secret = any( - "s3_secret_access_key" in c and "sk" in c for c in calls - ) + s3_access = any("s3_access_key_id" in c and "ak" in c for c in calls) + s3_secret = any("s3_secret_access_key" in c and "sk" in c for c in calls) assert s3_access assert s3_secret @@ -288,9 +272,7 @@ def run_sync(fn, *args, **kwargs): "pysus.api.ducklake.client.to_thread.run_sync", side_effect=run_sync, ): - with patch.object( - client, "_setup_engine", return_value=MagicMock() - ): + with patch.object(client, "_setup_engine", return_value=MagicMock()): await client.connect() mock_dl.assert_awaited_once_with( client._catalog_local, @@ -320,9 +302,7 @@ async def __anext__(self): "pysus.api.ducklake.client.httpx.AsyncClient", return_value=mock_client, ) - sleep_patcher = patch( - "pysus.api.ducklake.client.sleep", new_callable=AsyncMock - ) + sleep_patcher = patch("pysus.api.ducklake.client.sleep", new_callable=AsyncMock) first_stream_cm = MagicMock() first_resp = MagicMock() @@ -345,7 +325,7 @@ async def success_iter(): mock_client.stream.side_effect = [first_stream_cm, second_stream_cm] with httpx_patcher, sleep_patcher as mock_sleep: - await client._download(remote_path, local_path) + await client.download(remote_path, local_path) assert local_path.exists() assert local_path.read_bytes() == b"data" @@ -371,9 +351,7 @@ async def __anext__(self): "pysus.api.ducklake.client.httpx.AsyncClient", return_value=mock_client, ) - sleep_patcher = patch( - "pysus.api.ducklake.client.sleep", new_callable=AsyncMock - ) + sleep_patcher = patch("pysus.api.ducklake.client.sleep", new_callable=AsyncMock) stream_cm = MagicMock() resp = MagicMock() @@ -386,7 +364,7 @@ async def __anext__(self): with httpx_patcher, sleep_patcher as mock_sleep: with pytest.raises(OSError, match="Connection dropped"): - await client._download(remote_path, local_path) + await client.download(remote_path, local_path) assert mock_client.stream.call_count == 5 assert mock_sleep.await_count == 4 @@ -420,7 +398,7 @@ async def success_iter(): "pysus.api.ducklake.client.httpx.AsyncClient", return_value=mock_client, ): - await client._download(remote_path, local_path, callback=callback) + await client.download(remote_path, local_path, callback=callback) callback.assert_any_call(5, 10) callback.assert_any_call(10, 10) @@ -578,12 +556,8 @@ class TestDuckLakeDownloadFile: @pytest.mark.asyncio async def test_download_file_invalid_type_raises(self): client = DuckLake() - with pytest.raises( - ValueError, match="FTP File was not properly instantiated" - ): - await client._download_file( - "not-a-file", Path("/tmp/test") - ) # type: ignore + with pytest.raises(ValueError, match="FTP File was not properly instantiated"): + await client.download("not-a-file", Path("/tmp/test")) # type: ignore @pytest.mark.asyncio async def test_download_file_valid(self, tmp_path): @@ -604,7 +578,7 @@ async def test_download_file_valid(self, tmp_path): output = tmp_path / "output.csv" with patch.object(client, "_download") as mock_dl: - result = await client._download_file(f, output) + result = await client.download(f, output) mock_dl.assert_awaited_once_with(record.path, output, callback=None) assert result == output @@ -623,9 +597,7 @@ async def test_upload_catalog_with_datasets(self, tmp_path): ds._catalog_local = local_db ds._catalog_name = "catalog_test.duckdb" - with patch.object( - DuckLake, "datasets", new=AsyncMock(return_value=[ds]) - ): + with patch.object(DuckLake, "datasets", new=AsyncMock(return_value=[ds])): await client._upload_catalog() client._s3_client.upload_file.assert_called_once_with( str(local_db), client.bucket, ds._catalog_name @@ -643,8 +615,6 @@ async def test_upload_catalog_skips_missing_local(self, tmp_path): ds._catalog_local = nonexistent ds._catalog_name = "catalog_test.duckdb" - with patch.object( - DuckLake, "datasets", new=AsyncMock(return_value=[ds]) - ): + with patch.object(DuckLake, "datasets", new=AsyncMock(return_value=[ds])): await client._upload_catalog() client._s3_client.upload_file.assert_not_called()