Correção Operadora Unimed Cascavel

This commit is contained in:
Gabriel 2026-10-05 08:49:57 -03:00
parent 201bc4eff4
commit 013e77a99e
3 changed files with 15 additions and 3 deletions

View File

@ -429,3 +429,9 @@ Correções de interface apontadas pela revisão de interface de 30/09/2026, só
- **CSS**: algarismos de largura fixa (`tabular-nums`) nas colunas de valor, nos totais e nos contadores do resumo; `overflow-wrap: anywhere` nas observações; `overscroll-behavior: contain` no modal de Cadastro de Regras, na área rolável das tabelas e na lista do combobox; `flex-wrap` nas opções de origem da planilha.
Por que as células de valor não têm `inputmode="decimal"`: no teclado virtual de celular (principalmente iOS), esse modo pode não oferecer "-" e "+", que as células aceitam para expressões ("15,30-15"). Os campos de limite/percentual do cadastro de regras, que não aceitam expressão, ficaram com ele.
### Rodada 138 — Unimed Oeste do Paraná (4709): mensalidade lida como coparticipação
Na importação da empresa **1883 (Plantiagro)**, competência 08/2026, a ferramenta trouxe só coparticipação. A fatura dessa empresa é emitida pela ACISMI (São Miguel do Iguaçu), não pela ACIME (Medianeira) do arquivo-modelo do parser, e descreve a mensalidade como "MENSALIDADE UNIMED" em vez de "CONVENIO UNIMED". `_eh_mensalidade()` (`operadoras/unimed_oeste_pr/saude.py`) só aceitava o segundo prefixo, então toda linha de mensalidade caía no "qualquer outra coisa é coparticipação", somada junto com a coparticipação real de cada pessoa.
Corrigido aceitando também o prefixo "MENSALIDADE UNIMED". Validado contra o arquivo real: 20 beneficiários de mensalidade (R$ 6.544,54) e 8 de coparticipação ("CO-PARTICIPACAO UNIMED", R$ 895,84), somando R$ 7.440,38, igual ao "Total Faturados" impresso. Cada beneficiário tem duas linhas "MENSALIDADE UNIMED" com o mesmo prestador (ex.: R$ 387,99 + R$ 38,80, a segunda sempre cerca de 10% da primeira); as duas entram como mensalidade e são somadas, conferindo com o "Total Beneficiário". A importação feita antes da correção precisa ser refeita.

View File

@ -17,7 +17,7 @@ portal_api/planos_saude/
├── unimed/saude.py Unimed Saúde — CSV (mensalidade+coparticipação no mesmo arquivo) **ou** 2 PDFs separados (um por tipo), detectados automaticamente pelo conteúdo; mensalidade por nome, coparticipação por CPF (ver "Múltiplos arquivos de operadora" abaixo)
├── itamed/saude.py Itamed Saúde (PDF via pdfplumber, mensalidade+coparticipação, casamento por nome)
├── dental_uni/odonto_mensalidade.py Dental Uni Odonto (PDF via pdfplumber, só mensalidade, casamento por nome)
├── unimed_oeste_pr/saude.py Unimed Oeste do Paraná (PDF via pdfplumber, mensalidade+coparticipação por texto da descrição, casamento por nome)
├── unimed_oeste_pr/saude.py Unimed Oeste do Paraná (PDF via pdfplumber, mensalidade+coparticipação por texto da descrição — "CONVENIO UNIMED"/"MENSALIDADE UNIMED" é mensalidade, o resto coparticipação, ver rodada 138 em `CHANGELOG.md` desta pasta —, casamento por nome)
├── bradesco/saude.py Bradesco Saúde (PDF **sem texto selecionável** — OCR via `docling`, mensalidade+coparticipação, casamento por nome)
├── bradesco/odonto_mensalidade.py Bradesco Dental/Bradesaude Odonto — 3759 (PDF via pdfplumber, mensalidade+coparticipação, casamento por nome, ver nota abaixo)
├── amil/odonto_mensalidade.py Amil Odonto — 3758 e 898, dois cadastros da mesma operadora no Questor (PDF via pdfplumber **ou** Excel via openpyxl — detectado pela extensão do arquivo, ver nota abaixo —, só mensalidade, casamento por CPF)

View File

@ -90,8 +90,14 @@ def _eh_mensalidade(descricao: str) -> bool:
"""Regra confirmada com o usuário: só "Convenio Unimed" é mensalidade —
tudo o mais (Taxa Administrativa, Aditivo, Coparticipação) é
coparticipação, mesmo quando aparece dentro do mesmo bloco/Nro. do
Convênio."""
return descricao.strip().upper().startswith("CONVENIO UNIMED")
Convênio.
A fatura emitida pela ACISMI (São Miguel do Iguaçu, empresa 1883,
competência 08/2026) descreve a mensalidade como "MENSALIDADE UNIMED"
em vez de "CONVENIO UNIMED"; sem aceitar esse prefixo, toda a
mensalidade desse layout caía como coparticipação."""
texto = descricao.strip().upper()
return texto.startswith("CONVENIO UNIMED") or texto.startswith("MENSALIDADE UNIMED")
class UnimedOestePrSaude(OperadoraParser):