Correção de regras operadora Unimed PR

This commit is contained in:
Gabriel 2026-08-26 17:20:58 -03:00
parent ac65418835
commit 788aefbd47
10 changed files with 5531 additions and 2 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,701 @@
%PDF-1.1
1 0 obj
<<
/Creator (Developer 2000)
/CreatorDate (
/Author (Oracle Reports)
/Producer (Oracle PDF driver)
/Title (F105_201977086_975.pdf)
>>
endobj
5 0 obj
<</Length 6 0 R>>
stream
q
0.00 0.00 612.00 792.00 re W n
q
2.24 661.44 600.00 10.48 re W n
BT
2.24 665.56 TD
/F0 8.00 Tf
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
3.04 707.60 TD
/F0 8.00 Tf
(Competencia: 9/2026 Tipo Pessoa: Juridica Faixa de Títulos: 201977086 a 201977086 Faixa de Contratante: 0-0 a 9999999-999) Tj
0.00 -14.24 TD
(Faixa de Plano: 0 a 9999 Data Faturamento: 01/09/2026 Faixa de Produto: 0 a 9999 Emite Matricula : SIM) Tj
-1.56 -101.08 TD
(Familia) Tj
0.00 -8.52 TD
(--------) Tj
55.16 8.52 TD
(Benef.) Tj
0.00 -8.52 TD
(-------------) Tj
68.20 8.52 TD
(Nome) Tj
0.00 -8.52 TD
(----------------------) Tj
217.16 8.52 TD
(Parc) Tj
0.00 -8.52 TD
(----) Tj
-293.72 19.08 TD
(D) Tj
0.00 -8.48 TD
(T) Tj
0.00 -8.52 TD
(-) Tj
463.68 7.00 TD
(Mvt) Tj
0.00 -8.48 TD
(---) Tj
20.28 8.48 TD
(FxE) Tj
0.00 -8.48 TD
(---) Tj
22.96 8.48 TD
(Comb) Tj
0.00 -8.48 TD
(----) Tj
22.36 8.48 TD
(Pla.) Tj
0.00 -8.48 TD
(----) Tj
-209.96 16.88 TD
(Id.) Tj
-4.80 -8.52 TD
( Fat) Tj
4.80 -8.52 TD
(---) Tj
50.16 17.04 TD
(Valor) Tj
-19.20 -8.52 TD
(Inscricao) Tj
-9.60 -8.52 TD
(-----------) Tj
92.72 17.04 TD
(Valor) Tj
-28.80 -8.52 TD
(Mensalidade) Tj
-9.60 -8.52 TD
(-------------) Tj
-178.40 -235.40 TD
(Total por Contratante:) Tj
146.96 0.00 TD
( 0.00) Tj
49.64 0.00 TD
( 2,912.45) Tj
-403.92 212.60 TD
(167013221760) Tj
0.00 -12.68 TD
(167016526821) Tj
0.00 -40.64 TD
(167013278835) Tj
0.00 -12.72 TD
(167013278843) Tj
0.00 -40.64 TD
(167003314790) Tj
0.00 -12.68 TD
(167003605280) Tj
0.00 -12.72 TD
(167003608832) Tj
0.00 -40.64 TD
(167003306801) Tj
65.76 172.72 TD
(GISELLY ALEXANDRE SOUZA Sem) Tj
0.00 -12.68 TD
(MARCELLO PASKULIN Sem) Tj
0.00 -40.64 TD
(KAO PEI RU Sem) Tj
0.00 -12.72 TD
(MILTON ERNESTO B AGUILAR Sem) Tj
0.00 -40.64 TD
(KAREN CHRISTINA R SAWA Sem) Tj
0.00 -12.68 TD
(JOAQUIM SAWA RENOSTO Sem) Tj
0.00 -12.72 TD
(DOUGLAS RENOSTO DE SOUZA Sem) Tj
0.00 -40.64 TD
(PAULO SERGIO PRESSE Sem) Tj
215.36 172.72 TD
( 1.00) Tj
0.00 -12.68 TD
( 1.00) Tj
0.00 -40.64 TD
( 1.00) Tj
0.00 -12.72 TD
( 1.00) Tj
0.00 -40.64 TD
( 1.00) Tj
0.00 -12.68 TD
( 1.00) Tj
0.00 -12.72 TD
( 1.00) Tj
0.00 -40.64 TD
( 1.00) Tj
31.04 172.72 TD
(34) Tj
0.00 -12.68 TD
(49) Tj
0.00 -40.64 TD
(37) Tj
0.00 -12.72 TD
(38) Tj
0.00 -40.64 TD
(32) Tj
2.40 -12.68 TD
(6) Tj
-2.40 -12.72 TD
(32) Tj
0.00 -40.64 TD
(56) Tj
42.12 172.72 TD
( 0.00) Tj
0.00 -12.68 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
0.00 -12.72 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
0.00 -12.68 TD
( 0.00) Tj
0.00 -12.72 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
59.24 172.72 TD
( 222.25) Tj
0.00 -12.68 TD
( 594.71) Tj
0.00 -40.64 TD
( 222.25) Tj
0.00 -12.72 TD
( 222.25) Tj
0.00 -40.64 TD
( 336.78) Tj
0.00 -12.68 TD
( 183.60) Tj
0.00 -12.72 TD
( 200.27) Tj
0.00 -40.64 TD
( 930.34) Tj
-423.00 172.72 TD
(T) Tj
0.00 -12.68 TD
(D) Tj
0.00 -40.64 TD
(T) Tj
0.00 -12.72 TD
(D) Tj
0.00 -40.64 TD
(T) Tj
0.00 -12.68 TD
(D) Tj
0.00 -12.72 TD
(D) Tj
0.00 -40.64 TD
(T) Tj
463.24 172.72 TD
(Inc) Tj
0.00 -12.68 TD
(Inc) Tj
0.00 -40.64 TD
(Inc) Tj
0.00 -12.72 TD
(Inc) Tj
0.00 -40.64 TD
(Inc) Tj
0.00 -12.68 TD
(Inc) Tj
0.00 -12.72 TD
(Inc) Tj
0.00 -40.64 TD
(Inc) Tj
24.20 172.72 TD
(Nao) Tj
0.00 -12.68 TD
(Nao) Tj
0.00 -40.64 TD
(Nao) Tj
0.00 -12.72 TD
(Nao) Tj
0.00 -40.64 TD
(Nao) Tj
0.00 -12.68 TD
(Nao) Tj
0.00 -12.72 TD
(Nao) Tj
0.00 -40.64 TD
(Nao) Tj
ET
q
552.36 557.40 22.24 10.36 re W n
BT
550.64 561.40 TD
(10080) Tj
ET
Q 0 g 0 G
q
552.36 544.72 22.24 10.36 re W n
BT
550.64 548.72 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 504.04 22.24 10.36 re W n
BT
550.64 508.08 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 491.36 22.24 10.36 re W n
BT
550.64 495.36 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 450.72 22.24 10.36 re W n
BT
550.64 454.72 TD
/F0 8.00 Tf
(10310) Tj
ET
Q 0 g 0 G
q
552.36 438.04 22.24 10.36 re W n
BT
550.64 442.04 TD
/F0 8.00 Tf
(10079) Tj
ET
Q 0 g 0 G
q
552.36 425.32 22.24 10.36 re W n
BT
550.64 429.32 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 384.68 22.24 10.36 re W n
BT
550.64 388.68 TD
/F0 8.00 Tf
(10079) Tj
ET
Q 0 g 0 G
BT
8.84 561.40 TD
/F0 8.00 Tf
(855905) Tj
0.00 -12.68 TD
(855905) Tj
0.00 -40.64 TD
(859112) Tj
0.00 -12.72 TD
(859112) Tj
0.00 -40.64 TD
(831994) Tj
0.00 -12.68 TD
(831994) Tj
0.00 -12.72 TD
(831994) Tj
0.00 -40.64 TD
(831940) Tj
570.40 172.72 TD
(535) Tj
0.00 -12.68 TD
(535) Tj
0.00 -40.64 TD
(535) Tj
0.00 -12.72 TD
(535) Tj
0.00 -40.64 TD
(535) Tj
0.00 -12.68 TD
(535) Tj
0.00 -12.72 TD
(535) Tj
0.00 -40.64 TD
(535) Tj
-108.16 144.60 TD
( 816.96) Tj
0.00 -53.32 TD
( 444.50) Tj
0.00 -66.04 TD
( 720.65) Tj
0.00 -40.64 TD
( 930.34) Tj
-59.24 160.00 TD
( 0.00) Tj
0.00 -53.32 TD
( 0.00) Tj
0.00 -66.04 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
-135.96 160.00 TD
(Total por Familia:) Tj
0.00 -53.32 TD
(Total por Familia:) Tj
0.00 -66.04 TD
(Total por Familia:) Tj
0.00 -40.64 TD
(Total por Familia:) Tj
-126.36 275.44 TD
(0) Tj
-42.76 0.00 TD
(5874459) Tj
-100.64 -3.04 TD
(Contratante: ) Tj
170.12 2.28 TD
(HCA EDUCACAO E PESQUISA LTDA Nome Fantasia: HCA EDUCACAO E PESQUISA LTDA) Tj
-172.48 29.80 TD
(Faixa de Contratante Responsavel:) Tj
179.36 2.24 TD
(0-0 a 9999999-999) Tj
-33.92 -48.20 TD
() Tj
-9.20 0.00 TD
() Tj
-134.19 -1.52 TD
(Contratante Responsavel:) Tj
169.72 1.52 TD
( Nome Fantasia Resp.: ) Tj
ET
q
4.52 724.36 600.00 10.48 re W n
BT
4.52 728.48 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
4.24 739.24 TD
/F0 8.00 Tf
(FATTR105/) Tj
56.28 -0.08 TD
(MATHEUS) Tj
-55.52 25.80 TD
(UNIMED DO ESTADO DO PAR) Tj
-0.76 -11.44 TD
(FATURAMENTO) Tj
ET
q
4.52 773.16 600.00 10.48 re W n
BT
4.52 777.32 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
479.32 768.76 TD
/F0 8.00 Tf
(Folha:) Tj
0.00 -12.48 TD
(Data.:) Tj
89.36 12.32 TD
( 1) Tj
-38.40 -12.32 TD
(24/08/2026) Tj
9.56 -13.44 TD
(16:56:37) Tj
-60.52 0.00 TD
(Hora.:) Tj
-269.48 25.36 TD
(BENEFICIARIOS COM FATURAMENTO NO MES) Tj
10.56 -14.16 TD
/F0 10.00 Tf
(TELEFONE SAC: 08000414554) Tj
-44.76 -13.48 TD
(SAC Deficiente Auditivo/Fala: 08006422009) Tj
53.08 -148.28 TD
/F0 8.00 Tf
(Matricula) Tj
0.00 -8.52 TD
(-------------) Tj
66.52 8.52 TD
(Dt.Incl.) Tj
0.00 -8.52 TD
(--------) Tj
2.20 -22.40 TD
(09/04/25) Tj
0.00 -12.68 TD
(09/06/25) Tj
0.00 -40.64 TD
(09/05/25) Tj
0.00 -12.72 TD
(09/05/25) Tj
0.00 -40.64 TD
(01/05/13) Tj
0.00 -12.68 TD
(01/03/20) Tj
0.00 -12.68 TD
(01/04/20) Tj
0.00 -40.68 TD
(18/10/12) Tj
-156.16 258.60 TD
/F0 10.00 Tf
(-) Tj
-1.08 -16.88 TD
(-) Tj
ET
Q 0 g 0 G
endstream
endobj
6 0 obj
7186
endobj
7 0 obj
<</Type /Font
/Name /F0
/Subtype /Type1
/Encoding /WinAnsiEncoding
/BaseFont /CourierNew
/FirstChar 24
/LastChar 255
/Widths 8 0 R
/FontDescriptor 9 0 R
>>
endobj
8 0 obj
[270 270 270 270 0 0 0 0 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 255 600 0 600 600 600 600
600 600 600 600 600 600 600 0 600 0
0 600 600 600 600 600 600 600 0 600
600 600 600 0 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 ]
endobj
9 0 obj
<<
/Type /FontDescriptor
/FontName /CourierNew
/Ascent 795
/CapHeight 735
/Descent -270
/Flags 33
/FontBBox [0 0 0 0]
/ItalicAngle 0
/StemV 0
/AvgWidth 570
/MaxWidth 600
>>
endobj
4 0 obj
<<
/Type /Page
/MediaBox [0 0 612 792]
/Parent 3 0 R
/Resources <</ProcSet [ /PDF /Text ] /Font << /F0 7 0 R >> >>
/Contents 5 0 R
/CropBox [0 0 612 792]
>>
endobj
11 0 obj
<</Length 12 0 R>>
stream
q
0.00 0.00 612.00 792.00 re W n
q
2.24 661.44 600.00 10.48 re W n
BT
2.24 665.56 TD
/F0 8.00 Tf
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
3.04 707.60 TD
/F0 8.00 Tf
(Competencia: 9/2026 Tipo Pessoa: Juridica Faixa de Títulos: 201977086 a 201977086 Faixa de Contratante: 0-0 a 9999999-999) Tj
0.00 -14.24 TD
(Faixa de Plano: 0 a 9999 Data Faturamento: 01/09/2026 Faixa de Produto: 0 a 9999 Emite Matricula : SIM) Tj
235.16 -96.52 TD
(RESUMO DO FATURAMENTO) Tj
-226.96 -22.60 TD
( Valor Valor) Tj
0.00 -8.52 TD
(Dep/Tit Nro. Insc. Inscricao Parc.Mens. Mensalidade Qt.Benef.) Tj
0.00 -8.52 TD
(------- --------- ------------ ---------- ---------------- ---------) Tj
76.80 -28.84 TD
( 0) Tj
0.00 -12.80 TD
( 0) Tj
58.80 12.80 TD
( 0.00) Tj
0.00 -12.80 TD
( 0.00) Tj
63.32 12.80 TD
( 4.00) Tj
0.00 -12.80 TD
( 4.00) Tj
73.88 12.80 TD
( 1,200.83) Tj
0.00 -12.80 TD
( 1,711.62) Tj
-256.16 12.80 TD
(DEP) Tj
0.00 -12.80 TD
(TIT) Tj
362.60 12.80 TD
( 4) Tj
0.00 -12.80 TD
( 4) Tj
-240.96 133.16 TD
(0) Tj
-42.76 0.00 TD
(5874459) Tj
-100.64 -3.04 TD
(Contratante: ) Tj
170.12 2.28 TD
(HCA EDUCACAO E PESQUISA LTDA Nome Fantasia: HCA EDUCACAO E PESQUISA LTDA) Tj
-172.48 29.80 TD
(Faixa de Contratante Responsavel:) Tj
179.36 2.24 TD
(0-0 a 9999999-999) Tj
-33.92 -48.20 TD
() Tj
-9.20 0.00 TD
() Tj
-134.19 -1.52 TD
(Contratante Responsavel:) Tj
169.72 1.52 TD
( Nome Fantasia Resp.: ) Tj
ET
q
4.52 724.36 600.00 10.48 re W n
BT
4.52 728.48 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
4.24 739.24 TD
/F0 8.00 Tf
(FATTR105/) Tj
56.28 -0.08 TD
(MATHEUS) Tj
-55.52 25.80 TD
(UNIMED DO ESTADO DO PAR) Tj
-0.76 -11.44 TD
(FATURAMENTO) Tj
ET
q
4.52 773.16 600.00 10.48 re W n
BT
4.52 777.32 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
479.32 768.76 TD
/F0 8.00 Tf
(Folha:) Tj
0.00 -12.48 TD
(Data.:) Tj
89.36 12.32 TD
( 2) Tj
-38.40 -12.32 TD
(24/08/2026) Tj
9.56 -13.44 TD
(16:56:37) Tj
-60.52 0.00 TD
(Hora.:) Tj
-269.48 25.36 TD
(BENEFICIARIOS COM FATURAMENTO NO MES) Tj
10.56 -14.16 TD
/F0 10.00 Tf
(TELEFONE SAC: 08000414554) Tj
-44.76 -13.48 TD
(SAC Deficiente Auditivo/Fala: 08006422009) Tj
-34.36 -93.32 TD
(-) Tj
-1.08 -16.88 TD
(-) Tj
ET
Q 0 g 0 G
endstream
endobj
12 0 obj
2687
endobj
10 0 obj
<<
/Type /Page
/MediaBox [0 0 612 792]
/Parent 3 0 R
/Resources <</ProcSet [ /PDF /Text ] /Font << /F0 7 0 R >> >>
/Contents 11 0 R
/CropBox [0 0 612 792]
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 3 0 R
>>
endobj
3 0 obj
<<
/Type /Pages
/Kids [
4 0 R 10 0 R ]
/Count 2
>>
endobj
xref
0 13
0000000000 65535 f
0000000010 00000 n
0000011927 00000 n
0000011982 00000 n
0000008793 00000 n
0000000168 00000 n
0000007409 00000 n
0000007432 00000 n
0000007615 00000 n
0000008590 00000 n
0000011743 00000 n
0000008975 00000 n
0000011719 00000 n
trailer
<<
/Size 13
/Root 2 0 R
/Info 1 0 R
>>
startxref
12057
%%EOF

View File

@ -0,0 +1,701 @@
%PDF-1.1
1 0 obj
<<
/Creator (Developer 2000)
/CreatorDate (
/Author (Oracle Reports)
/Producer (Oracle PDF driver)
/Title (F105_201977086_975.pdf)
>>
endobj
5 0 obj
<</Length 6 0 R>>
stream
q
0.00 0.00 612.00 792.00 re W n
q
2.24 661.44 600.00 10.48 re W n
BT
2.24 665.56 TD
/F0 8.00 Tf
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
3.04 707.60 TD
/F0 8.00 Tf
(Competencia: 9/2026 Tipo Pessoa: Juridica Faixa de Títulos: 201977086 a 201977086 Faixa de Contratante: 0-0 a 9999999-999) Tj
0.00 -14.24 TD
(Faixa de Plano: 0 a 9999 Data Faturamento: 01/09/2026 Faixa de Produto: 0 a 9999 Emite Matricula : SIM) Tj
-1.56 -101.08 TD
(Familia) Tj
0.00 -8.52 TD
(--------) Tj
55.16 8.52 TD
(Benef.) Tj
0.00 -8.52 TD
(-------------) Tj
68.20 8.52 TD
(Nome) Tj
0.00 -8.52 TD
(----------------------) Tj
217.16 8.52 TD
(Parc) Tj
0.00 -8.52 TD
(----) Tj
-293.72 19.08 TD
(D) Tj
0.00 -8.48 TD
(T) Tj
0.00 -8.52 TD
(-) Tj
463.68 7.00 TD
(Mvt) Tj
0.00 -8.48 TD
(---) Tj
20.28 8.48 TD
(FxE) Tj
0.00 -8.48 TD
(---) Tj
22.96 8.48 TD
(Comb) Tj
0.00 -8.48 TD
(----) Tj
22.36 8.48 TD
(Pla.) Tj
0.00 -8.48 TD
(----) Tj
-209.96 16.88 TD
(Id.) Tj
-4.80 -8.52 TD
( Fat) Tj
4.80 -8.52 TD
(---) Tj
50.16 17.04 TD
(Valor) Tj
-19.20 -8.52 TD
(Inscricao) Tj
-9.60 -8.52 TD
(-----------) Tj
92.72 17.04 TD
(Valor) Tj
-28.80 -8.52 TD
(Mensalidade) Tj
-9.60 -8.52 TD
(-------------) Tj
-178.40 -235.40 TD
(Total por Contratante:) Tj
146.96 0.00 TD
( 0.00) Tj
49.64 0.00 TD
( 2,912.45) Tj
-403.92 212.60 TD
(167013221760) Tj
0.00 -12.68 TD
(167016526821) Tj
0.00 -40.64 TD
(167013278835) Tj
0.00 -12.72 TD
(167013278843) Tj
0.00 -40.64 TD
(167003314790) Tj
0.00 -12.68 TD
(167003605280) Tj
0.00 -12.72 TD
(167003608832) Tj
0.00 -40.64 TD
(167003306801) Tj
65.76 172.72 TD
(GISELLY ALEXANDRE SOUZA Sem) Tj
0.00 -12.68 TD
(MARCELLO PASKULIN Sem) Tj
0.00 -40.64 TD
(KAO PEI RU Sem) Tj
0.00 -12.72 TD
(MILTON ERNESTO B AGUILAR Sem) Tj
0.00 -40.64 TD
(KAREN CHRISTINA R SAWA Sem) Tj
0.00 -12.68 TD
(JOAQUIM SAWA RENOSTO Sem) Tj
0.00 -12.72 TD
(DOUGLAS RENOSTO DE SOUZA Sem) Tj
0.00 -40.64 TD
(PAULO SERGIO PRESSE Sem) Tj
215.36 172.72 TD
( 1.00) Tj
0.00 -12.68 TD
( 1.00) Tj
0.00 -40.64 TD
( 1.00) Tj
0.00 -12.72 TD
( 1.00) Tj
0.00 -40.64 TD
( 1.00) Tj
0.00 -12.68 TD
( 1.00) Tj
0.00 -12.72 TD
( 1.00) Tj
0.00 -40.64 TD
( 1.00) Tj
31.04 172.72 TD
(34) Tj
0.00 -12.68 TD
(49) Tj
0.00 -40.64 TD
(37) Tj
0.00 -12.72 TD
(38) Tj
0.00 -40.64 TD
(32) Tj
2.40 -12.68 TD
(6) Tj
-2.40 -12.72 TD
(32) Tj
0.00 -40.64 TD
(56) Tj
42.12 172.72 TD
( 0.00) Tj
0.00 -12.68 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
0.00 -12.72 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
0.00 -12.68 TD
( 0.00) Tj
0.00 -12.72 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
59.24 172.72 TD
( 222.25) Tj
0.00 -12.68 TD
( 594.71) Tj
0.00 -40.64 TD
( 222.25) Tj
0.00 -12.72 TD
( 222.25) Tj
0.00 -40.64 TD
( 336.78) Tj
0.00 -12.68 TD
( 183.60) Tj
0.00 -12.72 TD
( 200.27) Tj
0.00 -40.64 TD
( 930.34) Tj
-423.00 172.72 TD
(T) Tj
0.00 -12.68 TD
(D) Tj
0.00 -40.64 TD
(T) Tj
0.00 -12.72 TD
(D) Tj
0.00 -40.64 TD
(T) Tj
0.00 -12.68 TD
(D) Tj
0.00 -12.72 TD
(D) Tj
0.00 -40.64 TD
(T) Tj
463.24 172.72 TD
(Inc) Tj
0.00 -12.68 TD
(Inc) Tj
0.00 -40.64 TD
(Inc) Tj
0.00 -12.72 TD
(Inc) Tj
0.00 -40.64 TD
(Inc) Tj
0.00 -12.68 TD
(Inc) Tj
0.00 -12.72 TD
(Inc) Tj
0.00 -40.64 TD
(Inc) Tj
24.20 172.72 TD
(Nao) Tj
0.00 -12.68 TD
(Nao) Tj
0.00 -40.64 TD
(Nao) Tj
0.00 -12.72 TD
(Nao) Tj
0.00 -40.64 TD
(Nao) Tj
0.00 -12.68 TD
(Nao) Tj
0.00 -12.72 TD
(Nao) Tj
0.00 -40.64 TD
(Nao) Tj
ET
q
552.36 557.40 22.24 10.36 re W n
BT
550.64 561.40 TD
(10080) Tj
ET
Q 0 g 0 G
q
552.36 544.72 22.24 10.36 re W n
BT
550.64 548.72 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 504.04 22.24 10.36 re W n
BT
550.64 508.08 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 491.36 22.24 10.36 re W n
BT
550.64 495.36 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 450.72 22.24 10.36 re W n
BT
550.64 454.72 TD
/F0 8.00 Tf
(10310) Tj
ET
Q 0 g 0 G
q
552.36 438.04 22.24 10.36 re W n
BT
550.64 442.04 TD
/F0 8.00 Tf
(10079) Tj
ET
Q 0 g 0 G
q
552.36 425.32 22.24 10.36 re W n
BT
550.64 429.32 TD
/F0 8.00 Tf
(10080) Tj
ET
Q 0 g 0 G
q
552.36 384.68 22.24 10.36 re W n
BT
550.64 388.68 TD
/F0 8.00 Tf
(10079) Tj
ET
Q 0 g 0 G
BT
8.84 561.40 TD
/F0 8.00 Tf
(855905) Tj
0.00 -12.68 TD
(855905) Tj
0.00 -40.64 TD
(859112) Tj
0.00 -12.72 TD
(859112) Tj
0.00 -40.64 TD
(831994) Tj
0.00 -12.68 TD
(831994) Tj
0.00 -12.72 TD
(831994) Tj
0.00 -40.64 TD
(831940) Tj
570.40 172.72 TD
(535) Tj
0.00 -12.68 TD
(535) Tj
0.00 -40.64 TD
(535) Tj
0.00 -12.72 TD
(535) Tj
0.00 -40.64 TD
(535) Tj
0.00 -12.68 TD
(535) Tj
0.00 -12.72 TD
(535) Tj
0.00 -40.64 TD
(535) Tj
-108.16 144.60 TD
( 816.96) Tj
0.00 -53.32 TD
( 444.50) Tj
0.00 -66.04 TD
( 720.65) Tj
0.00 -40.64 TD
( 930.34) Tj
-59.24 160.00 TD
( 0.00) Tj
0.00 -53.32 TD
( 0.00) Tj
0.00 -66.04 TD
( 0.00) Tj
0.00 -40.64 TD
( 0.00) Tj
-135.96 160.00 TD
(Total por Familia:) Tj
0.00 -53.32 TD
(Total por Familia:) Tj
0.00 -66.04 TD
(Total por Familia:) Tj
0.00 -40.64 TD
(Total por Familia:) Tj
-126.36 275.44 TD
(0) Tj
-42.76 0.00 TD
(5874459) Tj
-100.64 -3.04 TD
(Contratante: ) Tj
170.12 2.28 TD
(HCA EDUCACAO E PESQUISA LTDA Nome Fantasia: HCA EDUCACAO E PESQUISA LTDA) Tj
-172.48 29.80 TD
(Faixa de Contratante Responsavel:) Tj
179.36 2.24 TD
(0-0 a 9999999-999) Tj
-33.92 -48.20 TD
() Tj
-9.20 0.00 TD
() Tj
-134.19 -1.52 TD
(Contratante Responsavel:) Tj
169.72 1.52 TD
( Nome Fantasia Resp.: ) Tj
ET
q
4.52 724.36 600.00 10.48 re W n
BT
4.52 728.48 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
4.24 739.24 TD
/F0 8.00 Tf
(FATTR105/) Tj
56.28 -0.08 TD
(MATHEUS) Tj
-55.52 25.80 TD
(UNIMED DO ESTADO DO PAR) Tj
-0.76 -11.44 TD
(FATURAMENTO) Tj
ET
q
4.52 773.16 600.00 10.48 re W n
BT
4.52 777.32 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
479.32 768.76 TD
/F0 8.00 Tf
(Folha:) Tj
0.00 -12.48 TD
(Data.:) Tj
89.36 12.32 TD
( 1) Tj
-38.40 -12.32 TD
(24/08/2026) Tj
9.56 -13.44 TD
(16:56:37) Tj
-60.52 0.00 TD
(Hora.:) Tj
-269.48 25.36 TD
(BENEFICIARIOS COM FATURAMENTO NO MES) Tj
10.56 -14.16 TD
/F0 10.00 Tf
(TELEFONE SAC: 08000414554) Tj
-44.76 -13.48 TD
(SAC Deficiente Auditivo/Fala: 08006422009) Tj
53.08 -148.28 TD
/F0 8.00 Tf
(Matricula) Tj
0.00 -8.52 TD
(-------------) Tj
66.52 8.52 TD
(Dt.Incl.) Tj
0.00 -8.52 TD
(--------) Tj
2.20 -22.40 TD
(09/04/25) Tj
0.00 -12.68 TD
(09/06/25) Tj
0.00 -40.64 TD
(09/05/25) Tj
0.00 -12.72 TD
(09/05/25) Tj
0.00 -40.64 TD
(01/05/13) Tj
0.00 -12.68 TD
(01/03/20) Tj
0.00 -12.68 TD
(01/04/20) Tj
0.00 -40.68 TD
(18/10/12) Tj
-156.16 258.60 TD
/F0 10.00 Tf
(-) Tj
-1.08 -16.88 TD
(-) Tj
ET
Q 0 g 0 G
endstream
endobj
6 0 obj
7186
endobj
7 0 obj
<</Type /Font
/Name /F0
/Subtype /Type1
/Encoding /WinAnsiEncoding
/BaseFont /CourierNew
/FirstChar 24
/LastChar 255
/Widths 8 0 R
/FontDescriptor 9 0 R
>>
endobj
8 0 obj
[270 270 270 270 0 0 0 0 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 255 600 0 600 600 600 600
600 600 600 600 600 600 600 0 600 0
0 600 600 600 600 600 600 600 0 600
600 600 600 0 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 600 600 600 600 600 600 600 600
600 600 ]
endobj
9 0 obj
<<
/Type /FontDescriptor
/FontName /CourierNew
/Ascent 795
/CapHeight 735
/Descent -270
/Flags 33
/FontBBox [0 0 0 0]
/ItalicAngle 0
/StemV 0
/AvgWidth 570
/MaxWidth 600
>>
endobj
4 0 obj
<<
/Type /Page
/MediaBox [0 0 612 792]
/Parent 3 0 R
/Resources <</ProcSet [ /PDF /Text ] /Font << /F0 7 0 R >> >>
/Contents 5 0 R
/CropBox [0 0 612 792]
>>
endobj
11 0 obj
<</Length 12 0 R>>
stream
q
0.00 0.00 612.00 792.00 re W n
q
2.24 661.44 600.00 10.48 re W n
BT
2.24 665.56 TD
/F0 8.00 Tf
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
3.04 707.60 TD
/F0 8.00 Tf
(Competencia: 9/2026 Tipo Pessoa: Juridica Faixa de Títulos: 201977086 a 201977086 Faixa de Contratante: 0-0 a 9999999-999) Tj
0.00 -14.24 TD
(Faixa de Plano: 0 a 9999 Data Faturamento: 01/09/2026 Faixa de Produto: 0 a 9999 Emite Matricula : SIM) Tj
235.16 -96.52 TD
(RESUMO DO FATURAMENTO) Tj
-226.96 -22.60 TD
( Valor Valor) Tj
0.00 -8.52 TD
(Dep/Tit Nro. Insc. Inscricao Parc.Mens. Mensalidade Qt.Benef.) Tj
0.00 -8.52 TD
(------- --------- ------------ ---------- ---------------- ---------) Tj
76.80 -28.84 TD
( 0) Tj
0.00 -12.80 TD
( 0) Tj
58.80 12.80 TD
( 0.00) Tj
0.00 -12.80 TD
( 0.00) Tj
63.32 12.80 TD
( 4.00) Tj
0.00 -12.80 TD
( 4.00) Tj
73.88 12.80 TD
( 1,200.83) Tj
0.00 -12.80 TD
( 1,711.62) Tj
-256.16 12.80 TD
(DEP) Tj
0.00 -12.80 TD
(TIT) Tj
362.60 12.80 TD
( 4) Tj
0.00 -12.80 TD
( 4) Tj
-240.96 133.16 TD
(0) Tj
-42.76 0.00 TD
(5874459) Tj
-100.64 -3.04 TD
(Contratante: ) Tj
170.12 2.28 TD
(HCA EDUCACAO E PESQUISA LTDA Nome Fantasia: HCA EDUCACAO E PESQUISA LTDA) Tj
-172.48 29.80 TD
(Faixa de Contratante Responsavel:) Tj
179.36 2.24 TD
(0-0 a 9999999-999) Tj
-33.92 -48.20 TD
() Tj
-9.20 0.00 TD
() Tj
-134.19 -1.52 TD
(Contratante Responsavel:) Tj
169.72 1.52 TD
( Nome Fantasia Resp.: ) Tj
ET
q
4.52 724.36 600.00 10.48 re W n
BT
4.52 728.48 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
4.24 739.24 TD
/F0 8.00 Tf
(FATTR105/) Tj
56.28 -0.08 TD
(MATHEUS) Tj
-55.52 25.80 TD
(UNIMED DO ESTADO DO PAR) Tj
-0.76 -11.44 TD
(FATURAMENTO) Tj
ET
q
4.52 773.16 600.00 10.48 re W n
BT
4.52 777.32 TD
(=============================================================================================================================) Tj
ET
Q 0 g 0 G
BT
479.32 768.76 TD
/F0 8.00 Tf
(Folha:) Tj
0.00 -12.48 TD
(Data.:) Tj
89.36 12.32 TD
( 2) Tj
-38.40 -12.32 TD
(24/08/2026) Tj
9.56 -13.44 TD
(16:56:37) Tj
-60.52 0.00 TD
(Hora.:) Tj
-269.48 25.36 TD
(BENEFICIARIOS COM FATURAMENTO NO MES) Tj
10.56 -14.16 TD
/F0 10.00 Tf
(TELEFONE SAC: 08000414554) Tj
-44.76 -13.48 TD
(SAC Deficiente Auditivo/Fala: 08006422009) Tj
-34.36 -93.32 TD
(-) Tj
-1.08 -16.88 TD
(-) Tj
ET
Q 0 g 0 G
endstream
endobj
12 0 obj
2687
endobj
10 0 obj
<<
/Type /Page
/MediaBox [0 0 612 792]
/Parent 3 0 R
/Resources <</ProcSet [ /PDF /Text ] /Font << /F0 7 0 R >> >>
/Contents 11 0 R
/CropBox [0 0 612 792]
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 3 0 R
>>
endobj
3 0 obj
<<
/Type /Pages
/Kids [
4 0 R 10 0 R ]
/Count 2
>>
endobj
xref
0 13
0000000000 65535 f
0000000010 00000 n
0000011927 00000 n
0000011982 00000 n
0000008793 00000 n
0000000168 00000 n
0000007409 00000 n
0000007432 00000 n
0000007615 00000 n
0000008590 00000 n
0000011743 00000 n
0000008975 00000 n
0000011719 00000 n
trailer
<<
/Size 13
/Root 2 0 R
/Info 1 0 R
>>
startxref
12057
%%EOF

View File

@ -0,0 +1,6 @@
CODIGOEMPRESA;NOMEFUNC;CPFFUNC;CODIGOOUTEMP;DATAINICIAL;NOMEDEPENDENTE;CPFDEPENDENTE;VALOREMPRESA;VALOR;DESCRICAO
604;CASSIELLE TEIXEIRA BARBOSA PINTO;126.663.336-71;5060;01/04/2025;;;0;0;
604;GISELLY ALEXANDRE DE SOUZA;101.297.674-25;5060;01/06/2025;MARCELLO PASKULIN;909.282.530-15;0;0;
604;GISELLY ALEXANDRE DE SOUZA;101.297.674-25;5060;01/06/2025;;;0;0;
604;KAO PEI RU;066.202.519-94;5060;01/05/2025;MILTON ERNESTO BARRIOS AGUILAR;012.963.799-81;0;0;
604;KAO PEI RU;066.202.519-94;5060;01/05/2025;;;0;0;
1 CODIGOEMPRESA NOMEFUNC CPFFUNC CODIGOOUTEMP DATAINICIAL NOMEDEPENDENTE CPFDEPENDENTE VALOREMPRESA VALOR DESCRICAO
2 604 CASSIELLE TEIXEIRA BARBOSA PINTO 126.663.336-71 5060 01/04/2025 0 0
3 604 GISELLY ALEXANDRE DE SOUZA 101.297.674-25 5060 01/06/2025 MARCELLO PASKULIN 909.282.530-15 0 0
4 604 GISELLY ALEXANDRE DE SOUZA 101.297.674-25 5060 01/06/2025 0 0
5 604 KAO PEI RU 066.202.519-94 5060 01/05/2025 MILTON ERNESTO BARRIOS AGUILAR 012.963.799-81 0 0
6 604 KAO PEI RU 066.202.519-94 5060 01/05/2025 0 0

View File

@ -0,0 +1,6 @@
CODIGOEMPRESA;NOMEFUNC;CPFFUNC;CODIGOOUTEMP;DATAINICIAL;NOMEDEPENDENTE;CPFDEPENDENTE;VALOREMPRESA;VALOR;DESCRICAO
604;CASSIELLE TEIXEIRA BARBOSA PINTO;126.663.336-71;5060;01/04/2025;;;0;0;
604;GISELLY ALEXANDRE DE SOUZA;101.297.674-25;5060;01/06/2025;MARCELLO PASKULIN;909.282.530-15;0;0;
604;GISELLY ALEXANDRE DE SOUZA;101.297.674-25;5060;01/06/2025;;;0;0;
604;KAO PEI RU;066.202.519-94;5060;01/05/2025;MILTON ERNESTO BARRIOS AGUILAR;012.963.799-81;0;0;
604;KAO PEI RU;066.202.519-94;5060;01/05/2025;;;0;0;
1 CODIGOEMPRESA NOMEFUNC CPFFUNC CODIGOOUTEMP DATAINICIAL NOMEDEPENDENTE CPFDEPENDENTE VALOREMPRESA VALOR DESCRICAO
2 604 CASSIELLE TEIXEIRA BARBOSA PINTO 126.663.336-71 5060 01/04/2025 0 0
3 604 GISELLY ALEXANDRE DE SOUZA 101.297.674-25 5060 01/06/2025 MARCELLO PASKULIN 909.282.530-15 0 0
4 604 GISELLY ALEXANDRE DE SOUZA 101.297.674-25 5060 01/06/2025 0 0
5 604 KAO PEI RU 066.202.519-94 5060 01/05/2025 MILTON ERNESTO BARRIOS AGUILAR 012.963.799-81 0 0
6 604 KAO PEI RU 066.202.519-94 5060 01/05/2025 0 0

View File

@ -240,3 +240,13 @@ Usuário forneceu o PDF real do cliente Weitnauer Brasil (empresa 792 na planilh
- Validado rodando o parser e o `pipeline.processa_importacao` completo contra o arquivo real + a planilha padrão real: 15 beneficiários extraídos, R$ 437,40 no total (bate com "Total R$ 437,40" impresso no relatório); 13 casaram certo por CPF contra a planilha padrão de teste, os outros 2 (ausentes dessa planilha) foram corretamente para auditoria "CPF não encontrado" em vez de ignorados/silenciosos. - Validado rodando o parser e o `pipeline.processa_importacao` completo contra o arquivo real + a planilha padrão real: 15 beneficiários extraídos, R$ 437,40 no total (bate com "Total R$ 437,40" impresso no relatório); 13 casaram certo por CPF contra a planilha padrão de teste, os outros 2 (ausentes dessa planilha) foram corretamente para auditoria "CPF não encontrado" em vez de ignorados/silenciosos.
> Operadoras adicionadas depois desta rodada (Bradesco Dental/3759, Amil Odonto/898, SulAmérica Saúde/5775 via Ottimizza) não têm uma rodada numerada correspondente registrada em `plano.md` — o estado atual de cada uma está documentado em `CLAUDE.md` desta pasta. > Operadoras adicionadas depois desta rodada (Bradesco Dental/3759, Amil Odonto/898, SulAmérica Saúde/5775 via Ottimizza) não têm uma rodada numerada correspondente registrada em `plano.md` — o estado atual de cada uma está documentado em `CLAUDE.md` desta pasta.
### Bug real — Unimed Saúde (5060, PDF de coparticipação): grau "COMPANHEIRO" truncado não reconhecido
Usuário reportou (competência 09/2026, empresa Questor 604, arquivo "COP GERAL UNIMED.pdf") que uma família com coparticipação em titular **e** dependente ao mesmo tempo (primeiro caso real desse tipo — até então só se via titular sozinho) teve o valor todo lançado no titular. Investigado rodando `pdfplumber` contra o arquivo real: o dependente MILTON ERNESTO tinha grau "COMPANHEIRO", que a largura fixa de 10 caracteres da coluna "Grau Dep." trunca pra "COMPANHEIR" — valor ausente de `_GRAUS_DEPENDENCIA` (`operadoras/unimed/saude.py`). Sem essa entrada, a linha desse dependente não casava com `_PESSOA_COPARTICIPACAO_RE`, e o item de serviço dele (que ainda batia em `_ITEM_COPARTICIPACAO_RE`) era somado por engano no `pessoa_atual` anterior (o titular da mesma família). Corrigido acrescentando "COMPANHEIRO"/"COMPANHEIRA"/"COMPANHEIR" a `_GRAUS_DEPENDENCIA`; validado rodando `extrai()` de ponta a ponta contra o arquivo real — família R$144,35 passou a sair como titular R$134,33 + dependente R$10,02 (bate com "Total da Familia" impresso), e o total geral do arquivo (R$606,61) bateu com a soma dos "Total da Familia" das 3 famílias do documento. A importação já existente no banco (id 88) já tinha sido corrigida manualmente pelo usuário na tela de Revisão antes deste fix, então não precisou de correção retroativa.
### Bug real + melhoria — edição de célula na Revisão não refletia na hora, expressão de soma/subtração no Valor
Usuário reportou, testando a correção acima pela tela: depois de editar Valor/Valor Empresa numa linha, os contadores do topo ("com valor lançado"/"em auditoria") e a aba Alterações continuavam mostrando o estado de antes da edição, só atualizando de verdade depois de sair da importação e reabri-la. Causa: o handler de `change` das células (`importacao-plano-saude.js`) já mandava o PATCH pro servidor, mas nunca atualizava `importacaoAtual` nem chamava `renderTabs()` depois — diferente de toda outra ação da revisão (adicionar/remover linha, vincular pessoa, reverter alteração), que já recarrega a importação inteira e re-renderiza. Corrigido replicando o mesmo padrão: depois do PATCH ter sucesso, `importacaoAtual = await pidFetchImportacaoPlanoSaude(...)` seguido de `renderTabs()`.
Aproveitando a mesma conversa, usuário pediu que as células de Valor/Valor Empresa aceitem uma expressão de soma/subtração digitada direto (ex.: `"15,30-15"` pra abater R$15 do valor, sem precisar calcular fora e digitar o resultado pronto). Implementado client-side: `pidAvaliaExpressaoValorMonetario()` reconhece números em formato BR (vírgula decimal, ponto de milhar opcional) separados por `+`/`-` e, se o texto digitado for uma expressão válida (sobra zero caractere não reconhecido), substitui o campo pelo resultado já calculado antes do PATCH — um valor negativo isolado (ex.: `"-15,30"`) continua sendo só um número, não uma expressão (só conta como expressão se houver operador depois do primeiro caractere). O backend não teve nenhuma mudança — `valor`/`valor_empresa` continuam sendo `CharField` sem validação de formato, então já aceitava (e continua aceitando) qualquer string; a expressão nunca chega até lá, só o resultado.

View File

@ -47,6 +47,8 @@ Pra adicionar uma operadora nova: criar `operadoras/<nome>/<arquivo>.py` impleme
- `ImportacaoPlanoSaude`: uma execução da ferramenta — `operadora`/`nome_operadora`, `tipos_lancamento` (JSONField, lista), `custeio_por_tipo` (JSONField, `{"mensalidade": {"titular": {"modo": "empresa"|"empregado"|"especifica", "limite_valor": float|None, "percentual": float|None}, "dependente": {...}}, "coparticipacao": {...}}` — ver regra de custeio acima), `regra_empresa` (CharField, blank — chave de `planos_saude.regras_empresa.REGRAS_EMPRESA` quando "mensalidade" foi custeada por uma regra especial em vez do `custeio_por_tipo["mensalidade"]` normal, ver "Regra empresa" abaixo), `planilha_padrao` (`FileField`, mesmo padrão de validator de tamanho de `LinkFerramenta.icone`, só que 15MB em vez de 2MB — é `blank=True` desde que passou a poder vir de uma busca no Questor em vez de upload, ver "Planilha padrão via Questor (SQL)" abaixo), `competencia` (DateField, null — só preenchida quando a origem da planilha padrão foi essa busca no Questor), `status` (`revisao`/`concluida`), `criado_por`, `criado_em`/`concluida_em`. **Com histórico**: decisão explícita do usuário — cada importação fica salva (quem fez, quando, arquivos), não é um fluxo descartável. O arquivo (ou arquivos) da operadora vive num model relacionado separado, ver `ImportacaoPlanoSaudeArquivoOperadora` a seguir e "Múltiplos arquivos de operadora" abaixo. - `ImportacaoPlanoSaude`: uma execução da ferramenta — `operadora`/`nome_operadora`, `tipos_lancamento` (JSONField, lista), `custeio_por_tipo` (JSONField, `{"mensalidade": {"titular": {"modo": "empresa"|"empregado"|"especifica", "limite_valor": float|None, "percentual": float|None}, "dependente": {...}}, "coparticipacao": {...}}` — ver regra de custeio acima), `regra_empresa` (CharField, blank — chave de `planos_saude.regras_empresa.REGRAS_EMPRESA` quando "mensalidade" foi custeada por uma regra especial em vez do `custeio_por_tipo["mensalidade"]` normal, ver "Regra empresa" abaixo), `planilha_padrao` (`FileField`, mesmo padrão de validator de tamanho de `LinkFerramenta.icone`, só que 15MB em vez de 2MB — é `blank=True` desde que passou a poder vir de uma busca no Questor em vez de upload, ver "Planilha padrão via Questor (SQL)" abaixo), `competencia` (DateField, null — só preenchida quando a origem da planilha padrão foi essa busca no Questor), `status` (`revisao`/`concluida`), `criado_por`, `criado_em`/`concluida_em`. **Com histórico**: decisão explícita do usuário — cada importação fica salva (quem fez, quando, arquivos), não é um fluxo descartável. O arquivo (ou arquivos) da operadora vive num model relacionado separado, ver `ImportacaoPlanoSaudeArquivoOperadora` a seguir e "Múltiplos arquivos de operadora" abaixo.
- `ImportacaoPlanoSaudeArquivoOperadora`: um dos relatórios da operadora anexados a uma importação (FK `importacao`, `arquivo` FileField, `ordem`) — a maioria das operadoras manda só um, mas algumas (ex.: Unimed Saúde em PDF) mandam mensalidade e coparticipação em arquivos separados. Substituiu, numa rodada posterior, o antigo `FileField` único `ImportacaoPlanoSaude.arquivo_operadora` (migração em 3 passos — `0048` cria o model novo + torna o campo legado `blank=True`; `0049`, `RunPython`, cria uma linha por importação já existente reapontando pro mesmo caminho já salvo em `MEDIA_ROOT`, sem copiar bytes; `0050` remove o campo legado — mesmo padrão já usado em `IndicadorDepartamento`/`RegraCusteioPlanoSaude.codigo_empresa`). - `ImportacaoPlanoSaudeArquivoOperadora`: um dos relatórios da operadora anexados a uma importação (FK `importacao`, `arquivo` FileField, `ordem`) — a maioria das operadoras manda só um, mas algumas (ex.: Unimed Saúde em PDF) mandam mensalidade e coparticipação em arquivos separados. Substituiu, numa rodada posterior, o antigo `FileField` único `ImportacaoPlanoSaude.arquivo_operadora` (migração em 3 passos — `0048` cria o model novo + torna o campo legado `blank=True`; `0049`, `RunPython`, cria uma linha por importação já existente reapontando pro mesmo caminho já salvo em `MEDIA_ROOT`, sem copiar bytes; `0050` remove o campo legado — mesmo padrão já usado em `IndicadorDepartamento`/`RegraCusteioPlanoSaude.codigo_empresa`).
- `ImportacaoPlanoSaudeLinha`: uma linha da planilha padrão já casada com o valor do mês (espelha `LinhaSistema` campo a campo) — na tela de revisão, uma linha que já veio do processamento (upload ou Questor) só edita **Valor Empresa/Valor**; os demais campos (cadastro da pessoa) só ficam editáveis numa linha incluída manualmente via "Adicionar linha" (regra revista — nasceu como "todos os campos editáveis em qualquer linha", decisão do usuário depois de ver dados reais na tela: só uma linha nova precisa editar o cadastro, uma linha já casada não devia arriscar um cadastro certo sendo alterado por engano). Essa restrição é só de UI (`importacao-plano-saude.js`, `linhasIncluidasManualmente()` — deriva de `ImportacaoPlanoSaudeAlteracao` já carregada, sem campo novo), o backend continua aceitando PATCH em qualquer campo. `valor`/`valor_empresa` ficam como `CharField` no mesmo formato string do pipeline (`"51,69"`/`"0"`), não `DecimalField`, pra manter fidelidade 1:1 com o CSV final sem risco de arredondamento. - `ImportacaoPlanoSaudeLinha`: uma linha da planilha padrão já casada com o valor do mês (espelha `LinhaSistema` campo a campo) — na tela de revisão, uma linha que já veio do processamento (upload ou Questor) só edita **Valor Empresa/Valor**; os demais campos (cadastro da pessoa) só ficam editáveis numa linha incluída manualmente via "Adicionar linha" (regra revista — nasceu como "todos os campos editáveis em qualquer linha", decisão do usuário depois de ver dados reais na tela: só uma linha nova precisa editar o cadastro, uma linha já casada não devia arriscar um cadastro certo sendo alterado por engano). Essa restrição é só de UI (`importacao-plano-saude.js`, `linhasIncluidasManualmente()` — deriva de `ImportacaoPlanoSaudeAlteracao` já carregada, sem campo novo), o backend continua aceitando PATCH em qualquer campo. `valor`/`valor_empresa` ficam como `CharField` no mesmo formato string do pipeline (`"51,69"`/`"0"`), não `DecimalField`, pra manter fidelidade 1:1 com o CSV final sem risco de arredondamento.
- **Expressão de soma/subtração na célula** (pedido explícito do usuário): ao sair de uma célula de Valor/Valor Empresa (`change`), `pidAvaliaExpressaoValorMonetario()` (`importacao-plano-saude.js`) reconhece se o que foi digitado é uma expressão com `+`/`-` entre números em formato BR (ex.: `"15,30-15"` → `"0,30"`) e substitui o campo pelo resultado antes de mandar o PATCH — puramente client-side, o backend nunca recebe a expressão, só o valor já calculado (continua sem nenhuma validação de formato numérico nesse `CharField`, como já era). Um valor negativo digitado direto (ex.: `"-15,30"`, sem operador depois do primeiro caractere) não é tratado como expressão, continua sendo só um número negativo literal.
- **Edição de célula (Valor/Valor Empresa) refaz o fetch da importação inteira e re-renderiza** (`renderTabs()`) depois do PATCH — bug real corrigido (2026-08-26): antes disso, `importacaoAtual` só era atualizado por outras ações da revisão (adicionar/remover linha, vincular pessoa, reverter alteração), então editar uma célula deixava o resumo por tipo (contadores "linhas no total"/"com valor lançado"/"em auditoria") e a aba Alterações com o estado de antes da edição até o usuário sair e reabrir a importação do zero.
- `ImportacaoPlanoSaudeAuditoria`: espelha `ItemAuditoria` — os campos extraídos do arquivo da operadora (`motivo`/`nome`/`valor`/`detalhe`...) são read-only na tela; `resolvida`/`linha_vinculada` são a exceção, graváveis via a resolução manual (ver "Resolução manual de auditoria por nome" abaixo). `MOTIVOS_RESOLVIVEIS = ("NOME_DIVERGENTE", "NAO_CADASTRADO")` (atributo de classe) é a lista dos dois motivos "de leitura/grafia de nome" que aceitam esse fluxo — `VALOR_NEGATIVO`/`TIPO_INVALIDO` são outra categoria de problema (valor real negativo, tipo de despesa não mapeado) e não têm solução por "essa é a mesma pessoa". - `ImportacaoPlanoSaudeAuditoria`: espelha `ItemAuditoria` — os campos extraídos do arquivo da operadora (`motivo`/`nome`/`valor`/`detalhe`...) são read-only na tela; `resolvida`/`linha_vinculada` são a exceção, graváveis via a resolução manual (ver "Resolução manual de auditoria por nome" abaixo). `MOTIVOS_RESOLVIVEIS = ("NOME_DIVERGENTE", "NAO_CADASTRADO")` (atributo de classe) é a lista dos dois motivos "de leitura/grafia de nome" que aceitam esse fluxo — `VALOR_NEGATIVO`/`TIPO_INVALIDO` são outra categoria de problema (valor real negativo, tipo de despesa não mapeado) e não têm solução por "essa é a mesma pessoa".
- `ImportacaoPlanoSaudeAlteracao`: log de cada edição de campo/inclusão/exclusão de linha feita manualmente na revisão — ver seção "Alterações" abaixo. - `ImportacaoPlanoSaudeAlteracao`: log de cada edição de campo/inclusão/exclusão de linha feita manualmente na revisão — ver seção "Alterações" abaixo.
- `RegraCusteioPlanoSaude`: regra de custeio salva pra reaplicar em importações futuras (ex.: "092 - Unimed") — ver "Regras de custeio salvas" abaixo. Lista compartilhada, mesmo espírito de `LinkFerramenta`/`AcessoGeral` — o próprio model não tem FK pra nada; é `ImportacaoPlanoSaude.regra_custeio_salva` que aponta pra cá (opcional, `SET_NULL`), só como registro de qual regra (se alguma) foi aplicada pra preencher aquele formulário. - `RegraCusteioPlanoSaude`: regra de custeio salva pra reaplicar em importações futuras (ex.: "092 - Unimed") — ver "Regras de custeio salvas" abaixo. Lista compartilhada, mesmo espírito de `LinkFerramenta`/`AcessoGeral` — o próprio model não tem FK pra nada; é `ImportacaoPlanoSaude.regra_custeio_salva` que aponta pra cá (opcional, `SET_NULL`), só como registro de qual regra (se alguma) foi aplicada pra preencher aquele formulário.
@ -91,6 +93,7 @@ Até uma rodada anterior, "Arquivo da operadora" (passo 2 de "Nova Importação"
- Valores nos dois PDFs vêm em **formato americano** (ponto decimal, vírgula de milhar — ex. "6,061.74"), ao contrário do formato BR do resto do pipeline — `_valor_pdf_para_float`, função própria, separada de `_valor_para_float` (BR, só pro CSV). - Valores nos dois PDFs vêm em **formato americano** (ponto decimal, vírgula de milhar — ex. "6,061.74"), ao contrário do formato BR do resto do pipeline — `_valor_pdf_para_float`, função própria, separada de `_valor_para_float` (BR, só pro CSV).
- **`OperadoraParser` ganhou `chave_casamento_para_tipo(tipo_lancamento)`** (default: devolve `chave_casamento`, mesmo valor de sempre — método novo, backward-compatible pra todo outro parser) porque a coparticipação analítica da Unimed em PDF precisou de uma estratégia de casamento **diferente da mensalidade dentro da mesma operadora**: o "Beneficiario" desse relatório vem colado sem espaço com o nome e o grau de dependência (ex.: "0975.0167003824292ANDREIA STORMTITULAR") e o **nome sai truncado em ~13 caracteres** por largura de coluna ("ANDREIA STORMOSKI LARA" → "ANDREIA STORM") — inviabilizando casamento por nome. Como esse relatório traz CPF completo e confiável, `UnimedSaude` usa `"cpf"` só pra `tipo_lancamento="coparticipacao"` quando a origem foi esse PDF (rastreado numa flag de instância, `self._veio_de_pdf_coparticipacao`, setada em `extrai()`); mensalidade (sem CPF em nenhum dos dois formatos) continua em `"nome"`. `pipeline.processa_importacao` chama `chave_casamento_para_tipo(tipo_lancamento)` em vez do atributo fixo. - **`OperadoraParser` ganhou `chave_casamento_para_tipo(tipo_lancamento)`** (default: devolve `chave_casamento`, mesmo valor de sempre — método novo, backward-compatible pra todo outro parser) porque a coparticipação analítica da Unimed em PDF precisou de uma estratégia de casamento **diferente da mensalidade dentro da mesma operadora**: o "Beneficiario" desse relatório vem colado sem espaço com o nome e o grau de dependência (ex.: "0975.0167003824292ANDREIA STORMTITULAR") e o **nome sai truncado em ~13 caracteres** por largura de coluna ("ANDREIA STORMOSKI LARA" → "ANDREIA STORM") — inviabilizando casamento por nome. Como esse relatório traz CPF completo e confiável, `UnimedSaude` usa `"cpf"` só pra `tipo_lancamento="coparticipacao"` quando a origem foi esse PDF (rastreado numa flag de instância, `self._veio_de_pdf_coparticipacao`, setada em `extrai()`); mensalidade (sem CPF em nenhum dos dois formatos) continua em `"nome"`. `pipeline.processa_importacao` chama `chave_casamento_para_tipo(tipo_lancamento)` em vez do atributo fixo.
- **Validado contra os dois arquivos reais** (não só texto colado numa conversa — o texto que sai de um PDF colado no chat **não é** o que `pdfplumber.extract_text()` de fato produz, então não serve pra desenhar regex com confiança; só o arquivo real confirma). Bate exatamente com "Total da Familia"/"Total da Sequencia" impresso no próprio relatório (1.372,08 de coparticipação, 6.061,74 de mensalidade) e com o casamento por CPF contra a planilha padrão real da empresa — toda família presente na planilha bateu centavo a centavo; a família ausente da planilha de teste foi corretamente pra auditoria, não ignorada silenciosamente. - **Validado contra os dois arquivos reais** (não só texto colado numa conversa — o texto que sai de um PDF colado no chat **não é** o que `pdfplumber.extract_text()` de fato produz, então não serve pra desenhar regex com confiança; só o arquivo real confirma). Bate exatamente com "Total da Familia"/"Total da Sequencia" impresso no próprio relatório (1.372,08 de coparticipação, 6.061,74 de mensalidade) e com o casamento por CPF contra a planilha padrão real da empresa — toda família presente na planilha bateu centavo a centavo; a família ausente da planilha de teste foi corretamente pra auditoria, não ignorada silenciosamente.
- **Bug real corrigido (competência 09/2026, empresa Questor 604)**: `_GRAUS_DEPENDENCIA` não previa "COMPANHEIRO"/"COMPANHEIRA" — a coluna "Grau Dep." tem largura fixa de 10 caracteres, então esse grau (11 caracteres) sai truncado no relatório real como "COMPANHEIR". Sem essa entrada, a linha desse dependente não casava com `_PESSOA_COPARTICIPACAO_RE`, e o item de serviço dele (que ainda batia em `_ITEM_COPARTICIPACAO_RE`) era somado por engano no `pessoa_atual` anterior — na prática, no titular da mesma família (primeiro caso real de família com coparticipação em titular **e** dependente ao mesmo tempo; até então só se via titular sozinho). Corrigido acrescentando "COMPANHEIRO"/"COMPANHEIRA"/"COMPANHEIR" (a forma truncada, a que de fato aparece) a `_GRAUS_DEPENDENCIA`; validado rodando `extrai()` de ponta a ponta contra o arquivo real (família R$144,35 → titular R$134,33 + dependente R$10,02, batendo com "Total da Familia" impresso, e total geral do arquivo R$606,61 batendo com a soma dos "Total da Familia" das 3 famílias do documento). A importação já existente no banco (id 88, competência 09/2026) tinha sido corrigida manualmente na tela de Revisão antes deste fix (`ImportacaoPlanoSaudeAlteracao` ids 29/30) — não precisou de correção retroativa, só as importações futuras dependiam deste ajuste no parser.
## Planilha padrão via Questor (SQL) ## Planilha padrão via Questor (SQL)

View File

@ -96,6 +96,24 @@ Particularidades identificadas no PDF de coparticipação analítico (caso 2):
atendimento ("Cartao") daquela pessoa — as linhas de serviço seguintes, atendimento ("Cartao") daquela pessoa — as linhas de serviço seguintes,
até o próximo bloco ou "Total da Familia:", pertencem à mesma pessoa até o próximo bloco ou "Total da Familia:", pertencem à mesma pessoa
(parsing com estado, mesmo padrão já usado em `ItamedSaude`). (parsing com estado, mesmo padrão já usado em `ItamedSaude`).
7. **Bug real corrigido (competência 09/2026, cliente HCA Educação e
Pesquisa, empresa Questor 604)**: "COMPANHEIRO"/"COMPANHEIRA" (11
caracteres) estoura a largura fixa da coluna "Grau Dep." (10 caracteres)
e sai truncado no relatório real como "COMPANHEIR" — valor não previsto
em `_GRAUS_DEPENDENCIA`. Sem essa entrada, `_PESSOA_COPARTICIPACAO_RE`
não casava a linha desse dependente, então `pessoa_atual` não era
atualizado e o item de serviço dele (que ainda batia em
`_ITEM_COPARTICIPACAO_RE`) era somado por engano na pessoa anterior do
bloco — nesse caso, o titular da mesma família. Ex. real: família com
titular (R$ 134,33) + dependente MILTON ERNESTO (COMPANHEIRO, R$ 10,02)
saía inteira (R$ 144,35) lançada só no titular. Corrigido acrescentando
"COMPANHEIRO"/"COMPANHEIRA"/"COMPANHEIR" (a forma truncada) a
`_GRAUS_DEPENDENCIA`; validado rodando `extrai()` de ponta a ponta
contra o arquivo real — os dois passaram a sair como indivíduos
separados (R$ 134,33 e R$ 10,02, somando os R$ 144,35 de "Total da
Familia" impresso no relatório) e o total geral do arquivo (R$ 606,61)
bateu com a soma dos 3 "Total da Familia" do documento.
""" """
import csv import csv
import re import re
@ -110,7 +128,17 @@ from portal_api.planos_saude.operadoras.base import OperadoraParser
_MARCADOR_MENSALIDADE = "BENEFICIARIOS COM FATURAMENTO NO MES" _MARCADOR_MENSALIDADE = "BENEFICIARIOS COM FATURAMENTO NO MES"
_MARCADORES_COPARTICIPACAO = ("SERVIÇOS PRESTADOS", "SERVICOS PRESTADOS", "ANALITICO") _MARCADORES_COPARTICIPACAO = ("SERVIÇOS PRESTADOS", "SERVICOS PRESTADOS", "ANALITICO")
_GRAUS_DEPENDENCIA = ("TITULAR", "CONJUGE", "CÔNJUGE", r"FILHO\(A\)", r"PAI/M[ÃA]E", "AGREGADO") # "COMPANHEIRO"/"COMPANHEIRA" (11 chars) estoura a largura fixa da coluna
# "Grau Dep." (10 chars) e sai truncado como "COMPANHEIR" no relatório real
# — sem essa entrada, `_PESSOA_COPARTICIPACAO_RE` não casava a linha desse
# dependente, e o item de serviço (que ainda batia em `_ITEM_COPARTICIPACAO_RE`)
# ficava somado por engano na pessoa anterior do bloco (`pessoa_atual` não
# era atualizado). As formas completas continuam na lista por segurança,
# caso outro relatório real não trunque.
_GRAUS_DEPENDENCIA = (
"TITULAR", "CONJUGE", "CÔNJUGE", r"FILHO\(A\)", r"PAI/M[ÃA]E", "AGREGADO",
"COMPANHEIRO", "COMPANHEIRA", "COMPANHEIR",
)
_LINHA_MENSALIDADE_RE = re.compile( _LINHA_MENSALIDADE_RE = re.compile(
r"^\s*(?P<familia>\d{5,8})\s+(?P<tipo>[TD])\s+(?P<benef>\d+)\s+" r"^\s*(?P<familia>\d{5,8})\s+(?P<tipo>[TD])\s+(?P<benef>\d+)\s+"

View File

@ -47,6 +47,39 @@ const PID_IPS_CAMPOS_LINHA = [
// própria coluna da tabela de Mensalidade/Coparticipação. // própria coluna da tabela de Mensalidade/Coparticipação.
const PID_IPS_CAMPO_LABELS = Object.fromEntries(PID_IPS_CAMPOS_LINHA.map(([campo, label]) => [campo, label])); const PID_IPS_CAMPO_LABELS = Object.fromEntries(PID_IPS_CAMPOS_LINHA.map(([campo, label]) => [campo, label]));
// Só os dois campos monetários aceitam expressão de soma/subtração digitada
// na própria célula (ex.: "15,30-15" -> "0,30") — pedido explícito do
// usuário, pra abater/somar um valor sem precisar calcular o resultado à
// parte antes de digitar. Nome/CPF/data/descrição nunca passam por aqui.
const PID_IPS_CAMPOS_EXPRESSAO_VALOR = new Set(["valor_empresa", "valor"]);
// Devolve o valor calculado (formato BR, "0,30") se `texto` for uma
// expressão reconhecível de soma/subtração entre números BR (vírgula
// decimal, ponto de milhar opcional), ou `null` se não for — nesse caso o
// valor digitado segue para o servidor exatamente como está, sem alteração
// nenhuma (mesmo comportamento de antes desta função existir).
//
// Um único número com sinal de abertura (ex.: "-15,30") NÃO conta como
// expressão — só quando há pelo menos um operador +/- depois do primeiro
// caractere, senão todo valor negativo digitado direto viraria "0" (soma de
// um termo só). Qualquer caractere que sobre fora dos termos reconhecidos
// (letra, símbolo, dois operadores seguidos...) também devolve `null`, pra
// nunca "adivinhar" um cálculo a partir de um valor mal digitado.
function pidAvaliaExpressaoValorMonetario(texto) {
const raw = (texto || "").trim();
if (!raw || raw.slice(1).search(/[+-]/) === -1) return null;
const semEspacos = raw.replace(/\s+/g, "");
const termos = semEspacos.match(/[+-]?\d+(?:\.\d{3})*(?:,\d+)?/g);
if (!termos || termos.join("") !== semEspacos) return null;
const soma = termos.reduce((total, termo) => {
const sinal = termo.startsWith("-") ? -1 : 1;
const numero = termo.replace(/^[+-]/, "").replace(/\./g, "").replace(",", ".");
return total + sinal * parseFloat(numero);
}, 0);
if (!Number.isFinite(soma)) return null;
return soma === 0 ? "0" : soma.toFixed(2).replace(".", ",");
}
// Espelha ImportacaoPlanoSaudeAlteracao.TIPO_CHOICES (models.py). // Espelha ImportacaoPlanoSaudeAlteracao.TIPO_CHOICES (models.py).
const PID_IPS_ALTERACAO_TIPO_LABELS = { const PID_IPS_ALTERACAO_TIPO_LABELS = {
edicao: "Edição", edicao: "Edição",
@ -2330,9 +2363,26 @@ document.addEventListener("DOMContentLoaded", async () => {
const row = input.closest("[data-linha-id]"); const row = input.closest("[data-linha-id]");
const linhaId = Number(row.getAttribute("data-linha-id")); const linhaId = Number(row.getAttribute("data-linha-id"));
const campo = input.getAttribute("data-linha-campo"); const campo = input.getAttribute("data-linha-campo");
let valorDigitado = input.value.trim();
if (PID_IPS_CAMPOS_EXPRESSAO_VALOR.has(campo)) {
const resultado = pidAvaliaExpressaoValorMonetario(valorDigitado);
if (resultado !== null) {
valorDigitado = resultado;
input.value = resultado; // reflete o resultado calculado na própria célula, mesmo antes do refetch abaixo
}
}
try { try {
await pidAtualizarLinhaPlanoSaude(linhaId, { [campo]: input.value.trim() }); await pidAtualizarLinhaPlanoSaude(linhaId, { [campo]: valorDigitado });
// Refaz o fetch da importação inteira (não só a linha editada) —
// o PATCH da linha não devolve o resumo por tipo nem a lista de
// alterações, então sem isso o contador "com valor lançado"/"em
// auditoria" e a aba Alterações continuavam mostrando o estado de
// antes da edição até o usuário sair e voltar pra essa importação
// (bug real reportado pelo usuário — a edição só aparecia depois
// de reabrir a tela do zero).
importacaoAtual = await pidFetchImportacaoPlanoSaude(importacaoAtual.id);
reviewError.textContent = ""; reviewError.textContent = "";
renderTabs();
} catch (e) { } catch (e) {
reviewError.textContent = e.message; reviewError.textContent = e.message;
} }