10 de agosto de 2026

Neoplasia Maligna dos Ossos e Cartilagens Articulares no SNS (2000–2024)

por Paulo Tavares

Análise dos episódios de internamento e ambulatório com diagnóstico de neoplasia maligna dos ossos e cartilagens articulares (ICD-9: 170.x; ICD-10: C40.x e C41.x) nos hospitais do SNS português entre 2000 e 2024, cobrindo 31 150 episódios e cerca de 999 óbitos intra-hospitalares. O relatório examina a distribuição anual de doentes distintos por hospital, o perfil demográfico por idade e sexo, e a mortalidade intra-hospitalar, evidenciando a forte concentração em centros de referência e a diferença marcante de mortalidade entre hospitais especializados e periféricos.

Neoplasia Maligna dos Ossos e Cartilagens Articulares no SNS (2000–2024)

Este relatório analisa os episódios hospitalares com diagnóstico de neoplasia maligna dos ossos e cartilagens articulares registados nos hospitais do Serviço Nacional de Saúde português ao longo de 25 anos. O grupo compreende os sarcomas ósseos primários (como o osteossarcoma e o sarcoma de Ewing) e as neoplasias ósseas de outras localizações, incluindo casos com componente metastático. Os códigos utilizados são: ICD-9-CM: 170.x; ICD-10-CM: C40.x (membros) e C41.x (outras localizações e não especificadas).

31 150
Total de episódios (2000–2024)
Ambos os sexos; diagnóstico em qualquer posição (d1–d10); exclui IDs sentinela
999
Óbitos intra-hospitalares
Taxa de mortalidade global de 3,2% — igual em ambos os sexos
35 anos
Idade mediana à admissão
Masculino: 33 anos · Feminino: 38 anos

Distribuição Anual — Doentes Distintos a Nível Nacional

A série arranca em 2000 com apenas 40 doentes identificados, reflexo da cobertura ainda muito parcial do sistema de linkage de utentes nos primeiros anos (até 26% de episódios sem identificação em 2000). Em 2007 verifica-se um salto estrutural — com a entrada das linhas ambulatórias no extracto — que não deve ser interpretado como aumento real da incidência. A partir de 2007 a série estabiliza numa trajectória crescente, de cerca de 300 doentes distintos para um patamar de 400–450/ano na segunda metade da série, com pico em 2019 (446 doentes). O ano de 2020 regista uma quebra atribuível ao impacto da pandemia de COVID-19 sobre a actividade hospitalar electiva.

Doentes distintos com neoplasia óssea por ano — SNS Portugal

Fonte: BDMH/ACSS 2000–2024. ⚠️ Série com rupturas: 2000–2006 subavaliado (linkage parcial); 2007 salto estrutural (entrada ambulatórios); 2020 impacto COVID-19.

Perfil Demográfico — Idade e Sexo

Os homens representam a maioria dos episódios (17 924 vs. 13 226 nas mulheres, ou seja, cerca de 58% do total) e são admitidos em média dois anos mais cedo (mediana de 33 anos nos homens vs. 38 anos nas mulheres). Este padrão reflecte a maior incidência masculina dos sarcomas ósseos primários, nomeadamente o osteossarcoma e o sarcoma de Ewing.

O grupo etário com maior volume de episódios é o dos 10–19 anos, com 7 922 episódios no total (4 653 masculinos e 3 269 femininos) — o que é clinicamente consistente com o pico de incidência dos sarcomas ósseos na adolescência, período de crescimento ósseo acelerado.

Episódios por grupo etário e sexo (2000–2024)

Fonte: BDMH/ACSS. Inclui todos os episódios com diagnóstico 170.x/C40.x/C41.x em qualquer posição.

Mortalidade Intra-Hospitalar por Idade e Sexo

A mortalidade intra-hospitalar apresenta um gradiente etário muito marcado: é quase nula nos grupos mais jovens (0,2–0,9% até aos 19 anos) e escala de forma acelerada a partir dos 50 anos, atingindo 14,4% nas mulheres com 80 ou mais anos e 13,7% nos homens da mesma faixa. Esta inflexão aos 50 anos marca clinicamente a transição entre neoplasias ósseas primárias (jovens, com maior potencial de tratamento curativo) e neoplasias metastáticas (idosos, com prognóstico muito mais reservado — metástases de cancros da mama, próstata e pulmão).

Nos grupos acima dos 60 anos, os homens apresentam mortalidade sistematicamente superior às mulheres: 5,6% vs. 4,5% (60–69 anos), 9,4% vs. 6,8% (70–79 anos). Esta diferença é provavelmente explicada pela maior carga de metástases ósseas de carcinoma da próstata nos homens idosos.

Taxa de mortalidade intra-hospitalar por grupo etário e sexo (%)

Fonte: BDMH/ACSS 2000–2024. Mortalidade intra-hospitalar = alta com destino 'falecido' (dsp=20).

Mortalidade Intra-Hospitalar por Ano e Sexo (2007–2024)

Considerando apenas o período com série estável (a partir de 2007), a taxa de mortalidade intra-hospitalar oscila entre 1,5% e 5,1% para ambos os sexos, sem tendência de redução clara ao longo do tempo. O ano de 2015 destaca-se pelo valor mais elevado em ambos os sexos (5,1% feminino; 4,6% masculino), sem explicação estrutural evidente nos dados disponíveis. Os homens tendem a ter mortalidade ligeiramente superior, embora a diferença não seja sistemática em todos os anos.

Taxa de mortalidade intra-hospitalar por ano e sexo — 2007–2024 (%)

Fonte: BDMH/ACSS. Série restrita a 2007–2024 por cobertura parcial anterior. 2020: impacto COVID-19.

Mortalidade Intra-Hospitalar por Hospital

O dado mais saliente de toda a análise é a diferença abissal de mortalidade entre centros de referência e hospitais periféricos. Os grandes centros oncológicos e universitários apresentam taxas entre 1,3% e 2,9%, enquanto alguns hospitais de menor dimensão registam valores que vão de 10% a mais de 36%.

Nota interpretativa essencial: esta diferença reflecte fundamentalmente um efeito de selecção de case-mix, e não necessariamente diferenças de qualidade de cuidados. Os centros de referência tratam maioritariamente doentes em tratamento activo (quimioterapia, cirurgia de sarcomas), enquanto os hospitais periféricos recebem sobretudo doentes com doença avançada ou metastática que não foram referenciados, ou que se apresentaram em fase terminal. A mortalidade elevada na periferia é, em larga medida, o resultado desta composição diferente de doentes.

Taxa de mortalidade intra-hospitalar por hospital — 2000–2024 (%)

Fonte: BDMH/ACSS. Apenas hospitais com ≥ 30 episódios no período. Ordenado da maior para a menor taxa. A diferença reflecte principalmente case-mix distinto, não qualidade de cuidados.

Mortalidade intra-hospitalar por hospital — detalhes (≥ 30 episódios, 2000–2024)
HospitalEpisódiosÓbitosMortalidade (%)
ULS Cova da Beira762836,8
ULS Estuário do Tejo552036,4
ULS Região de Aveiro581932,8
ULS Baixo Alentejo912830,8
ULS do Algarve3664712,8
ULS da Lezíria1291410,9
ULS São José461347,4
ULS Santa Maria1848542,9
ULS de Braga646162,5
IPO Porto58981121,9
IPO Lisboa4131741,8
ULS Santo António3076531,7
ULS de Coimbra81271121,4
ULS Arco Ribeirinho1882271,4
ULS São João1752221,3

Ordenado da maior para a menor taxa de mortalidade. Hospitais com < 5 óbitos: valor suprimido.

Evolução da Mortalidade nos Principais Centros (por período)

Analisando três períodos distintos nos hospitais com maior volume, destaca-se a trajectória da ULS Santa Maria, que reduziu a sua taxa de mortalidade de 7,7% (pré-2007) para 5,9% (2007–2016) e depois para 1,8% em 2017–2024, alinhando-se com os demais grandes centros. Em sentido contrário, a ULS do Algarve regista um agravamento marcado entre períodos (9,5% → 23,4%), embora o volume de episódios seja reduzido e o case-mix provavelmente distinto. O IPO Porto apresenta uma subida moderada da mortalidade no período mais recente (1,9% → 2,6%), enquanto a ULS Santo António melhora (2,1% → 1,5%).

Mortalidade por hospital e período — principais centros
HospitalPré-2007 (%)2007–2016 (%)2017–2024 (%)
ULS de Coimbra3,91,21,7
IPO Porto2,11,92,6
IPO Lisboa01,92
ULS Santo António1,82,11,5
ULS São João00,81,5
ULS Santa Maria7,75,91,8
ULS do Algarve12,39,523,4
ULS de Braga11,10,93,4

Pré-2007: cobertura parcial, volumes reduzidos — interpretar com cautela.

Metodologia

Fonte de dados: Base de Dados de Morbilidade Hospitalar (BDMH), ACSS — episódios de internamento e ambulatório no SNS português, 2000–2024 (38,5 milhões de episódios).

Selecção de episódios: Todos os episódios com diagnóstico de neoplasia maligna dos ossos e cartilagens articulares em qualquer posição diagnóstica (d1 a d10). Códigos utilizados: ICD-9-CM 170.x (2000–2016); ICD-10-CM C40.x e C41.x (2017–2024; alguns episódios de 2016 já em ICD-10). Episódios com identificador de utente sentinela ou nulo excluídos.

Doentes distintos: Contagem de n_ficticio_utente distintos por ano e hospital. O linkage de utentes é fraco antes de 2006 (até 26% sem identificação em 2000), pelo que os volumes de 2000–2005 estão subavaliados.

Rupturas de série: (1) 2007 — entrada das linhas ambulatórias no extracto, com salto estrutural de volume; (2) 2013 — alteração da definição de internamento; (3) 2020 — impacto da pandemia COVID-19. As comparações de volume entre períodos anteriores e posteriores a estas datas devem ser feitas com cautela.

Mortalidade intra-hospitalar: Definida como episódios com destino de alta dsp = 20 (falecido). Não inclui mortes ocorridas após a alta.

Nomes de hospital: Reflectem a estrutura organizacional de 2025 (fusões ULS aplicadas retroactivamente pela ACSS); os nomes históricos das instituições podem diferir.

Supressão de células: Células com n < 5 não são apresentadas. Hospitais com menos de 30 episódios no período total excluídos da análise por hospital.

Reprodutibilidade: consultas SQL utilizadas (4)

Total nacional de doentes distintos por ano (170/C40/C41)

WITH base AS (SELECT ano, n_ficticio_utente FROM episodes WHERE n_ficticio_utente IS NOT NULL AND n_ficticio_utente NOT IN (SELECT n_ficticio_utente FROM sentinel_patient_ids) AND ((icd_versao = '9' AND (d1 LIKE '170%' OR d2 LIKE '170%' OR d3 LIKE '170%' OR d4 LIKE '170%' OR d5 LIKE '170%' OR d6 LIKE '170%' OR d7 LIKE '170%' OR d8 LIKE '170%' OR d9 LIKE '170%' OR d10 LIKE '170%')) OR (icd_versao = '10' AND (d1 LIKE 'C40%' OR d2 LIKE 'C40%' OR d3 LIKE 'C40%' OR d4 LIKE 'C40%' OR d5 LIKE 'C40%' OR d6 LIKE 'C40%' OR d7 LIKE 'C40%' OR d8 LIKE 'C40%' OR d9 LIKE 'C40%' OR d10 LIKE 'C40%' OR d1 LIKE 'C41%' OR d2 LIKE 'C41%' OR d3 LIKE 'C41%' OR d4 LIKE 'C41%' OR d5 LIKE 'C41%' OR d6 LIKE 'C41%' OR d7 LIKE 'C41%' OR d8 LIKE 'C41%' OR d9 LIKE 'C41%' OR d10 LIKE 'C41%')))) SELECT ano, COUNT(DISTINCT n_ficticio_utente) AS doentes_distintos FROM base GROUP BY ano ORDER BY ano

Episódios e mortalidade por grupo etário e sexo

SELECT CASE WHEN idade < 10 THEN '00-09' WHEN idade < 20 THEN '10-19' WHEN idade < 30 THEN '20-29' WHEN idade < 40 THEN '30-39' WHEN idade < 50 THEN '40-49' WHEN idade < 60 THEN '50-59' WHEN idade < 70 THEN '60-69' WHEN idade < 80 THEN '70-79' ELSE '80+' END AS grupo_etario, CASE sexo WHEN 1 THEN 'Masculino' ELSE 'Feminino' END AS sexo_label, COUNT(*) AS episodios, SUM(CASE WHEN dsp = 20 THEN 1 ELSE 0 END) AS obitos, ROUND(100.0 * SUM(CASE WHEN dsp = 20 THEN 1 ELSE 0 END) / COUNT(*), 1) AS taxa_mort_pct FROM episodes WHERE n_ficticio_utente IS NOT NULL AND n_ficticio_utente NOT IN (SELECT n_ficticio_utente FROM sentinel_patient_ids) AND ((icd_versao = '9' AND (d1 LIKE '170%' OR d2 LIKE '170%' OR d3 LIKE '170%' OR d4 LIKE '170%' OR d5 LIKE '170%' OR d6 LIKE '170%' OR d7 LIKE '170%' OR d8 LIKE '170%' OR d9 LIKE '170%' OR d10 LIKE '170%')) OR (icd_versao = '10' AND (d1 LIKE 'C40%' OR d2 LIKE 'C40%' OR d3 LIKE 'C40%' OR d4 LIKE 'C40%' OR d5 LIKE 'C40%' OR d6 LIKE 'C40%' OR d7 LIKE 'C40%' OR d8 LIKE 'C40%' OR d9 LIKE 'C40%' OR d10 LIKE 'C40%' OR d1 LIKE 'C41%' OR d2 LIKE 'C41%' OR d3 LIKE 'C41%' OR d4 LIKE 'C41%' OR d5 LIKE 'C41%' OR d6 LIKE 'C41%' OR d7 LIKE 'C41%' OR d8 LIKE 'C41%' OR d9 LIKE 'C41%' OR d10 LIKE 'C41%'))) AND idade BETWEEN 0 AND 110 AND sexo IN (1,2) GROUP BY grupo_etario, sexo_label ORDER BY grupo_etario, sexo_label

Taxa de mortalidade anual por sexo (2007-2024)

SELECT ano, CASE sexo WHEN 1 THEN 'Masculino' ELSE 'Feminino' END AS sexo_label, COUNT(*) AS episodios, SUM(CASE WHEN dsp = 20 THEN 1 ELSE 0 END) AS obitos, ROUND(100.0 * SUM(CASE WHEN dsp = 20 THEN 1 ELSE 0 END) / COUNT(*), 1) AS taxa_mort_pct FROM episodes WHERE n_ficticio_utente IS NOT NULL AND n_ficticio_utente NOT IN (SELECT n_ficticio_utente FROM sentinel_patient_ids) AND ano >= 2007 AND sexo IN (1,2) AND ((icd_versao = '9' AND (d1 LIKE '170%' OR d2 LIKE '170%' OR d3 LIKE '170%' OR d4 LIKE '170%' OR d5 LIKE '170%' OR d6 LIKE '170%' OR d7 LIKE '170%' OR d8 LIKE '170%' OR d9 LIKE '170%' OR d10 LIKE '170%')) OR (icd_versao = '10' AND (d1 LIKE 'C40%' OR d2 LIKE 'C40%' OR d3 LIKE 'C40%' OR d4 LIKE 'C40%' OR d5 LIKE 'C40%' OR d6 LIKE 'C40%' OR d7 LIKE 'C40%' OR d8 LIKE 'C40%' OR d9 LIKE 'C40%' OR d10 LIKE 'C40%' OR d1 LIKE 'C41%' OR d2 LIKE 'C41%' OR d3 LIKE 'C41%' OR d4 LIKE 'C41%' OR d5 LIKE 'C41%' OR d6 LIKE 'C41%' OR d7 LIKE 'C41%' OR d8 LIKE 'C41%' OR d9 LIKE 'C41%' OR d10 LIKE 'C41%'))) GROUP BY ano, sexo_label ORDER BY ano, sexo_label

Mortalidade intra-hospitalar por hospital normalizado (≥30 episódios)

WITH base AS (SELECT CASE WHEN hospital ILIKE '%Coimbra%' AND (hospital ILIKE '%ULS%' OR hospital ILIKE '%Sa%de%') THEN 'ULS de Coimbra' WHEN hospital ILIKE '%Oncologia%Porto%' THEN 'IPO Porto' WHEN hospital ILIKE '%Oncologia%Lisboa%' THEN 'IPO Lisboa' WHEN hospital ILIKE '%Santa Maria%' THEN 'ULS Santa Maria' WHEN hospital ILIKE '%Santo Ant%' THEN 'ULS Santo António' WHEN hospital ILIKE '%S%o Jo%o%' THEN 'ULS São João' WHEN hospital ILIKE '%S%o Jos%' THEN 'ULS São José' WHEN hospital ILIKE '%Arco Ribeirinho%' THEN 'ULS Arco Ribeirinho' WHEN hospital ILIKE '%Algarve%' THEN 'ULS do Algarve' WHEN hospital ILIKE '%Braga%' THEN 'ULS de Braga' WHEN hospital ILIKE '%Estuário%' OR hospital ILIKE '%Estuario%' THEN 'ULS Estuário do Tejo' WHEN hospital ILIKE '%Cova da Beira%' THEN 'ULS Cova da Beira' WHEN hospital ILIKE '%Baixo Alentejo%' THEN 'ULS Baixo Alentejo' WHEN hospital ILIKE '%Lezíria%' OR hospital ILIKE '%Leziria%' THEN 'ULS da Lezíria' WHEN hospital ILIKE '%Região de Aveiro%' THEN 'ULS Região de Aveiro' END AS hosp_norm, dsp FROM episodes WHERE n_ficticio_utente IS NOT NULL AND n_ficticio_utente NOT IN (SELECT n_ficticio_utente FROM sentinel_patient_ids) AND ((icd_versao = '9' AND (d1 LIKE '170%' OR d2 LIKE '170%' OR d3 LIKE '170%' OR d4 LIKE '170%' OR d5 LIKE '170%' OR d6 LIKE '170%' OR d7 LIKE '170%' OR d8 LIKE '170%' OR d9 LIKE '170%' OR d10 LIKE '170%')) OR (icd_versao = '10' AND (d1 LIKE 'C40%' OR d2 LIKE 'C40%' OR d3 LIKE 'C40%' OR d4 LIKE 'C40%' OR d5 LIKE 'C40%' OR d6 LIKE 'C40%' OR d7 LIKE 'C40%' OR d8 LIKE 'C40%' OR d9 LIKE 'C40%' OR d10 LIKE 'C40%' OR d1 LIKE 'C41%' OR d2 LIKE 'C41%' OR d3 LIKE 'C41%' OR d4 LIKE 'C41%' OR d5 LIKE 'C41%' OR d6 LIKE 'C41%' OR d7 LIKE 'C41%' OR d8 LIKE 'C41%' OR d9 LIKE 'C41%' OR d10 LIKE 'C41%')))) SELECT hosp_norm AS hospital, COUNT(*) AS episodios, SUM(CASE WHEN dsp = 20 THEN 1 ELSE 0 END) AS obitos, ROUND(100.0 * SUM(CASE WHEN dsp = 20 THEN 1 ELSE 0 END) / COUNT(*), 1) AS taxa_mort_pct FROM base WHERE hosp_norm IS NOT NULL GROUP BY hosp_norm HAVING COUNT(*) >= 30 ORDER BY taxa_mort_pct DESC

O jornalismo independente (só) depende dos leitores.

Não dependemos de grupos económicos nem do Estado. Não fazemos fretes. Fazemos jornalismo para os leitores, mas só sobreviveremos com o seu apoio financeiro.