Remove arquivos desnecessarios e atualiza gitignore

- Remove boilerplate Vite (react.svg, vite.svg, README.md generico)
- Remove componente CalculoDetalhado nao utilizado
- Remove log de auditoria do versionamento
- Adiciona backend/logs/ e *.csv ao gitignore
This commit is contained in:
Frederico Castro
2025-12-13 09:56:36 -03:00
parent 36e01f895f
commit c91a2e931f
7 changed files with 2 additions and 655 deletions

2
.gitignore vendored
View File

@@ -27,4 +27,6 @@ node_modules/
.vscode/
.idea/
*.log
*.csv
backend/logs/
.cache/

View File

@@ -1,62 +0,0 @@
id,pos_db,pos_calc,total_db,total_calc,delta,comp_a_db,comp_a_calc,comp_b_db,comp_b_calc,comp_c_db,comp_c_calc,comp_d_db,comp_d_calc,obs
12932,1,,775.0,775,0.0,270.0,270,135.0,135,190.0,190,180.0,180,
6370,2,,770.0,770,0.0,290.0,290,110.0,110,190.0,190,180.0,180,
536531,3,,770.0,770,0.0,300.0,300,100.0,100,190.0,190,180.0,180,
8127,4,,760.0,760,0.0,250.0,250,140.0,140,190.0,190,180.0,180,
509974,5,,760.0,760,0.0,230.0,230,160.0,160,190.0,190,180.0,180,
5420,6,,750.0,750,0.0,240.0,240,140.0,140,190.0,190,180.0,180,
7268,7,,750.0,750,0.0,270.0,270,160.0,160,190.0,190,130.0,130,
7825,8,,750.0,750,0.0,250.0,250,130.0,130,190.0,190,180.0,180,
14527,9,,750.0,750,0.0,240.0,240,140.0,140,190.0,190,180.0,180,
5843,10,,740.0,740,0.0,300.0,300,90.0,90,190.0,190,160.0,160,
5439,11,,735.0,735,0.0,250.0,250,100.0,100,215.0,215,170.0,170,
6392,12,,735.0,735,0.0,240.0,240,125.0,125,190.0,190,180.0,180,
510948,13,,735.0,735,0.0,280.0,280,110.0,110,215.0,215,130.0,130,
6273,14,,725.0,725,0.0,300.0,300,155.0,155,190.0,190,80.0,80,
22484,15,,725.0,725,0.0,220.0,220,110.0,110,215.0,215,180.0,180,
16,16,,720.0,720,0.0,220.0,220,130.0,130,190.0,190,180.0,180,
11353,17,,720.0,720,0.0,210.0,210,115.0,115,215.0,215,180.0,180,
15100,18,,720.0,720,0.0,240.0,240,110.0,110,190.0,190,180.0,180,
17385,19,,720.0,720,0.0,310.0,310,100.0,100,230.0,230,80.0,80,
510371,20,,720.0,720,0.0,200.0,200,125.0,125,215.0,215,180.0,180,
147706,100000,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147709,100001,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147711,100002,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147714,100003,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147722,100004,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147723,100005,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147730,100006,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147732,100007,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147733,100008,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147738,100009,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147739,100010,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147741,100011,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147744,100012,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147749,100013,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147753,100014,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147754,100015,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147756,100016,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147761,100017,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147768,100018,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147770,100019,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
147771,100020,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4864134,350215,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4862416,350214,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4862410,350213,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4862407,350212,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4860839,350211,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4860812,350210,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4860796,350209,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4860722,350208,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4860591,350207,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859353,350206,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859351,350205,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859325,350204,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859322,350203,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859100,350202,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859026,350201,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4859022,350200,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4858994,350199,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4858399,350198,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4858398,350197,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
4857410,350196,,0.0,0,0.0,0.0,0,0.0,0,0.0,0,0.0,0,
1 id pos_db pos_calc total_db total_calc delta comp_a_db comp_a_calc comp_b_db comp_b_calc comp_c_db comp_c_calc comp_d_db comp_d_calc obs
2 12932 1 775.0 775 0.0 270.0 270 135.0 135 190.0 190 180.0 180
3 6370 2 770.0 770 0.0 290.0 290 110.0 110 190.0 190 180.0 180
4 536531 3 770.0 770 0.0 300.0 300 100.0 100 190.0 190 180.0 180
5 8127 4 760.0 760 0.0 250.0 250 140.0 140 190.0 190 180.0 180
6 509974 5 760.0 760 0.0 230.0 230 160.0 160 190.0 190 180.0 180
7 5420 6 750.0 750 0.0 240.0 240 140.0 140 190.0 190 180.0 180
8 7268 7 750.0 750 0.0 270.0 270 160.0 160 190.0 190 130.0 130
9 7825 8 750.0 750 0.0 250.0 250 130.0 130 190.0 190 180.0 180
10 14527 9 750.0 750 0.0 240.0 240 140.0 140 190.0 190 180.0 180
11 5843 10 740.0 740 0.0 300.0 300 90.0 90 190.0 190 160.0 160
12 5439 11 735.0 735 0.0 250.0 250 100.0 100 215.0 215 170.0 170
13 6392 12 735.0 735 0.0 240.0 240 125.0 125 190.0 190 180.0 180
14 510948 13 735.0 735 0.0 280.0 280 110.0 110 215.0 215 130.0 130
15 6273 14 725.0 725 0.0 300.0 300 155.0 155 190.0 190 80.0 80
16 22484 15 725.0 725 0.0 220.0 220 110.0 110 215.0 215 180.0 180
17 16 16 720.0 720 0.0 220.0 220 130.0 130 190.0 190 180.0 180
18 11353 17 720.0 720 0.0 210.0 210 115.0 115 215.0 215 180.0 180
19 15100 18 720.0 720 0.0 240.0 240 110.0 110 190.0 190 180.0 180
20 17385 19 720.0 720 0.0 310.0 310 100.0 100 230.0 230 80.0 80
21 510371 20 720.0 720 0.0 200.0 200 125.0 125 215.0 215 180.0 180
22 147706 100000 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
23 147709 100001 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
24 147711 100002 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
25 147714 100003 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
26 147722 100004 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
27 147723 100005 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
28 147730 100006 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
29 147732 100007 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
30 147733 100008 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
31 147738 100009 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
32 147739 100010 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
33 147741 100011 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
34 147744 100012 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
35 147749 100013 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
36 147753 100014 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
37 147754 100015 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
38 147756 100016 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
39 147761 100017 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
40 147768 100018 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
41 147770 100019 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
42 147771 100020 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
43 4864134 350215 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
44 4862416 350214 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
45 4862410 350213 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
46 4862407 350212 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
47 4860839 350211 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
48 4860812 350210 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
49 4860796 350209 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
50 4860722 350208 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
51 4860591 350207 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
52 4859353 350206 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
53 4859351 350205 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
54 4859325 350204 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
55 4859322 350203 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
56 4859100 350202 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
57 4859026 350201 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
58 4859022 350200 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
59 4858994 350199 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
60 4858399 350198 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
61 4858398 350197 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0
62 4857410 350196 0.0 0 0.0 0.0 0 0.0 0 0.0 0 0.0 0

View File

@@ -1,16 +0,0 @@
# React + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
## Expanding the ESLint configuration
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -1,295 +0,0 @@
.calculo-detalhado {
margin-top: 1.5rem;
padding-top: 1.5rem;
border-top: 1px dashed var(--stroke);
}
.calculo-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.25rem;
}
.calculo-header h3 {
font-size: 0.9rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--text);
margin: 0;
}
.calculo-total {
font-size: 0.85rem;
color: var(--muted);
}
.calculo-total strong {
font-size: 1.2rem;
background: linear-gradient(120deg, var(--accent), var(--accent-2));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.componentes-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
}
.componente-card {
background: rgba(255, 255, 255, 0.03);
border: 1px solid var(--stroke);
border-radius: 12px;
overflow: hidden;
transition: all 200ms ease;
cursor: pointer;
}
.componente-card:hover {
border-color: rgba(255, 255, 255, 0.15);
transform: translateY(-2px);
}
.componente-card.ativo {
border-color: rgba(79, 70, 229, 0.4);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
}
.componente-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem 1rem;
color: white;
}
.componente-info {
display: flex;
align-items: center;
gap: 0.5rem;
}
.componente-letra {
width: 24px;
height: 24px;
display: grid;
place-items: center;
background: rgba(255, 255, 255, 0.2);
border-radius: 6px;
font-weight: 700;
font-size: 0.8rem;
}
.componente-nome {
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.componente-pontos {
display: flex;
align-items: baseline;
}
.pontos-valor {
font-size: 1.3rem;
font-weight: 800;
}
.pontos-max {
font-size: 0.75rem;
opacity: 0.7;
}
.componente-barra-container {
position: relative;
height: 4px;
background: rgba(255, 255, 255, 0.1);
}
.componente-barra {
height: 100%;
transition: width 500ms ease;
}
.teto-badge {
position: absolute;
right: 4px;
top: -18px;
font-size: 0.6rem;
font-weight: 700;
padding: 2px 6px;
background: var(--success);
color: white;
border-radius: 4px;
letter-spacing: 0.5px;
}
.componente-desc {
padding: 0.75rem 1rem 0.5rem;
font-size: 0.75rem;
color: var(--muted);
margin: 0;
line-height: 1.4;
}
.componente-toggle {
padding: 0.5rem 1rem 0.75rem;
font-size: 0.7rem;
color: var(--accent-2);
text-transform: uppercase;
letter-spacing: 0.5px;
font-weight: 600;
}
.componente-detalhes {
padding: 0 1rem 0.75rem;
display: flex;
flex-direction: column;
gap: 0.75rem;
animation: slideDown 200ms ease;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.detalhe-item {
background: rgba(0, 0, 0, 0.2);
border-radius: 8px;
padding: 0.65rem 0.75rem;
}
.detalhe-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.4rem;
}
.detalhe-label {
font-size: 0.72rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text);
}
.detalhe-valor {
font-size: 0.9rem;
font-weight: 700;
}
.detalhe-barra-container {
height: 3px;
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
overflow: hidden;
margin-bottom: 0.5rem;
}
.detalhe-barra {
height: 100%;
border-radius: 2px;
transition: width 400ms ease;
}
.detalhe-formula {
font-size: 0.72rem;
color: var(--text);
font-family: 'SF Mono', 'Fira Code', monospace;
background: rgba(255, 255, 255, 0.05);
padding: 0.35rem 0.5rem;
border-radius: 4px;
margin-bottom: 0.35rem;
}
.detalhe-explicacao {
font-size: 0.68rem;
color: var(--muted);
line-height: 1.4;
}
.formula-resumo {
margin-top: 1.25rem;
padding: 1rem;
background: rgba(255, 255, 255, 0.03);
border: 1px solid var(--stroke);
border-radius: 10px;
}
.formula-linha {
display: flex;
align-items: center;
justify-content: center;
gap: 0.75rem;
flex-wrap: wrap;
}
.formula-comp {
font-size: 0.85rem;
font-weight: 600;
padding: 0.35rem 0.65rem;
background: rgba(255, 255, 255, 0.05);
border-radius: 6px;
}
.formula-op {
font-size: 1rem;
color: var(--muted);
font-weight: 300;
}
.formula-total {
font-size: 1.4rem;
font-weight: 800;
background: linear-gradient(120deg, var(--accent), var(--accent-2));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
padding: 0.25rem 0.75rem;
border: 2px solid rgba(79, 70, 229, 0.4);
border-radius: 8px;
}
@media (max-width: 1100px) {
.componentes-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 640px) {
.componentes-grid {
grid-template-columns: 1fr;
}
.calculo-header {
flex-direction: column;
align-items: flex-start;
gap: 0.5rem;
}
.formula-linha {
gap: 0.5rem;
}
.formula-comp {
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
}
.formula-total {
font-size: 1.1rem;
}
}

View File

@@ -1,280 +0,0 @@
import React, { useState } from 'react';
import './CalculoDetalhado.css';
const CalculoDetalhado = ({ consultor }) => {
const [componenteAtivo, setComponenteAtivo] = useState(null);
const { pontuacao } = consultor;
const toggleComponente = (comp, e) => {
e.stopPropagation();
setComponenteAtivo(componenteAtivo === comp ? null : comp);
};
const calcularProgresso = (valor, maximo) => Math.min((valor / maximo) * 100, 100);
const componentes = [
{
id: 'a',
nome: 'Coordenação CAPES',
dados: pontuacao.componente_a,
max: 450,
cor: 'var(--accent-2)',
corGradient: 'linear-gradient(135deg, #6366f1, #4f46e5)',
descricao: 'Funções de coordenação exercidas na CAPES',
detalhes: [
{
label: 'Base',
valor: pontuacao.componente_a.base,
max: 200,
formula: inferirFormulaBase(pontuacao.componente_a.base),
explicacao: 'Pontuação pelo tipo de coordenação: CA=200, CAJ=150, CAJ-MP=120, CAM=100'
},
{
label: 'Tempo',
valor: pontuacao.componente_a.tempo,
max: 100,
formula: inferirFormulaTempo(pontuacao.componente_a.tempo, pontuacao.componente_a.base),
explicacao: 'Anos completos × multiplicador (CA=10, CAJ=8, CAJ-MP=6, CAM=5)'
},
{
label: 'Áreas',
valor: pontuacao.componente_a.extras,
max: 100,
formula: pontuacao.componente_a.extras > 0 ? `${pontuacao.componente_a.extras / 20} áreas extras × 20 pts` : 'Nenhuma área adicional',
explicacao: 'Cada área adicional coordenada vale 20 pts (máx 100)'
},
{
label: 'Bônus Ativo',
valor: pontuacao.componente_a.bonus,
max: 30,
formula: pontuacao.componente_a.bonus > 0 ? `Coordenador ativo → +${pontuacao.componente_a.bonus} pts` : 'Não está ativo',
explicacao: 'Bônus por exercer função atualmente: CA=30, CAJ=20, CAJ-MP=15, CAM=10'
},
{
label: 'Retorno',
valor: pontuacao.componente_a.retorno || 0,
max: 20,
formula: (pontuacao.componente_a.retorno || 0) > 0 ? 'Retornou à função → +20 pts' : 'Sem retorno registrado',
explicacao: 'Bônus único por retornar a exercer coordenação'
}
]
},
{
id: 'b',
nome: 'Coordenação PPG',
dados: pontuacao.componente_b,
max: 180,
cor: 'var(--success)',
corGradient: 'linear-gradient(135deg, #22c55e, #16a34a)',
descricao: 'Coordenação de programas de pós-graduação',
detalhes: [
{
label: 'Base',
valor: pontuacao.componente_b.base,
max: 70,
formula: pontuacao.componente_b.base > 0 ? 'Coordenador de PPG → 70 pts' : 'Não é coordenador',
explicacao: 'Pontuação base por ser coordenador de programa'
},
{
label: 'Tempo',
valor: pontuacao.componente_b.tempo,
max: 50,
formula: pontuacao.componente_b.tempo > 0 ? `${pontuacao.componente_b.tempo / 5} anos × 5 pts` : 'Sem tempo registrado',
explicacao: 'Cada ano completo de coordenação vale 5 pts (máx 50)'
},
{
label: 'Programas',
valor: pontuacao.componente_b.extras,
max: 40,
formula: pontuacao.componente_b.extras > 0 ? `${pontuacao.componente_b.extras / 20} programas extras × 20 pts` : 'Apenas 1 programa',
explicacao: 'Cada programa adicional coordenado vale 20 pts (máx 40)'
},
{
label: 'Nota PPG',
valor: pontuacao.componente_b.bonus,
max: 20,
formula: inferirFormulaNota(pontuacao.componente_b.bonus),
explicacao: 'Maior nota CAPES: 7=20pts, 6=15pts, 5=10pts, 4=5pts, 3=0pts'
}
]
},
{
id: 'c',
nome: 'Consultoria',
dados: pontuacao.componente_c,
max: 230,
cor: 'var(--gold)',
corGradient: 'linear-gradient(135deg, #fbbf24, #f59e0b)',
descricao: 'Atuação como consultor CAPES',
detalhes: [
{
label: 'Base',
valor: pontuacao.componente_c.base,
max: 150,
formula: pontuacao.componente_c.base === 150 ? 'Consultor ativo → 150 pts' : pontuacao.componente_c.base === 100 ? 'Consultor histórico → 100 pts' : 'Não é consultor',
explicacao: 'Ativo (eventos recentes) = 150 pts, Histórico = 100 pts'
},
{
label: 'Tempo',
valor: pontuacao.componente_c.tempo,
max: 50,
formula: pontuacao.componente_c.tempo > 0 ? `${pontuacao.componente_c.tempo / 5} anos × 5 pts` : 'Sem tempo registrado',
explicacao: 'Anos desde primeiro evento × 5 pts (máx 50)'
},
{
label: 'Bônus',
valor: pontuacao.componente_c.bonus,
max: 30,
formula: inferirFormulaBonusConsultoria(pontuacao.componente_c.bonus),
explicacao: 'Continuidade (3a=5, 5a=10, 8a+=15) + Retorno (15 pts)'
}
]
},
{
id: 'd',
nome: 'Premiações',
dados: pontuacao.componente_d,
max: 180,
cor: 'var(--bronze)',
corGradient: 'linear-gradient(135deg, #fb923c, #ea580c)',
descricao: 'Premiações, avaliações e inscrições em prêmios',
detalhes: [
{
label: 'Total',
valor: pontuacao.componente_d.base,
max: 180,
formula: inferirFormulaPremiacoes(pontuacao.componente_d.base, consultor.premiacoes),
explicacao: 'Premiação=60pts, Avaliação=40pts (máx 20), Inscrição=20pts'
}
]
}
];
return (
<div className="calculo-detalhado">
<div className="calculo-header">
<h3>Detalhamento do Cálculo</h3>
<span className="calculo-total">
Total: <strong>{pontuacao.pontuacao_total}</strong> pts
</span>
</div>
<div className="componentes-grid">
{componentes.map((comp) => (
<div
key={comp.id}
className={`componente-card ${componenteAtivo === comp.id ? 'ativo' : ''}`}
onClick={(e) => toggleComponente(comp.id, e)}
>
<div className="componente-header" style={{ background: comp.corGradient }}>
<div className="componente-info">
<span className="componente-letra">{comp.id.toUpperCase()}</span>
<span className="componente-nome">{comp.nome}</span>
</div>
<div className="componente-pontos">
<span className="pontos-valor">{comp.dados.total}</span>
<span className="pontos-max">/{comp.max}</span>
</div>
</div>
<div className="componente-barra-container">
<div
className="componente-barra"
style={{
width: `${calcularProgresso(comp.dados.total, comp.max)}%`,
background: comp.corGradient
}}
/>
{comp.dados.total >= comp.max && (
<span className="teto-badge">TETO</span>
)}
</div>
<p className="componente-desc">{comp.descricao}</p>
{componenteAtivo === comp.id && (
<div className="componente-detalhes">
{comp.detalhes.map((det, idx) => (
<div key={idx} className="detalhe-item">
<div className="detalhe-header">
<span className="detalhe-label">{det.label}</span>
<span className="detalhe-valor" style={{ color: comp.cor }}>
{det.valor > 0 ? `+${det.valor}` : det.valor}
</span>
</div>
<div className="detalhe-barra-container">
<div
className="detalhe-barra"
style={{
width: `${calcularProgresso(det.valor, det.max)}%`,
background: comp.cor
}}
/>
</div>
<div className="detalhe-formula">{det.formula}</div>
<div className="detalhe-explicacao">{det.explicacao}</div>
</div>
))}
</div>
)}
<div className="componente-toggle">
{componenteAtivo === comp.id ? 'Ocultar detalhes' : 'Ver detalhes'}
</div>
</div>
))}
</div>
<div className="formula-resumo">
<div className="formula-linha">
<span className="formula-comp" style={{ color: 'var(--accent-2)' }}>A: {pontuacao.componente_a.total}</span>
<span className="formula-op">+</span>
<span className="formula-comp" style={{ color: 'var(--success)' }}>B: {pontuacao.componente_b.total}</span>
<span className="formula-op">+</span>
<span className="formula-comp" style={{ color: 'var(--gold)' }}>C: {pontuacao.componente_c.total}</span>
<span className="formula-op">+</span>
<span className="formula-comp" style={{ color: 'var(--bronze)' }}>D: {pontuacao.componente_d.total}</span>
<span className="formula-op">=</span>
<span className="formula-total">{pontuacao.pontuacao_total}</span>
</div>
</div>
</div>
);
};
function inferirFormulaBase(base) {
const tipos = { 200: 'CA', 150: 'CAJ', 120: 'CAJ-MP', 100: 'CAM' };
return tipos[base] ? `Tipo ${tipos[base]}${base} pts` : 'Sem coordenação';
}
function inferirFormulaTempo(tempo, base) {
if (tempo === 0) return 'Menos de 1 ano completo';
const mults = { 200: 10, 150: 8, 120: 6, 100: 5 };
const mult = mults[base] || 10;
const anos = Math.round(tempo / mult);
return `${anos} ano${anos > 1 ? 's' : ''} × ${mult} pts = ${tempo} pts`;
}
function inferirFormulaNota(bonus) {
const notas = { 20: '7', 15: '6', 10: '5', 5: '4', 0: '3 ou sem nota' };
return bonus > 0 ? `Nota ${notas[bonus]} → +${bonus} pts` : 'Sem nota ou nota 3';
}
function inferirFormulaBonusConsultoria(bonus) {
if (bonus === 0) return 'Sem bônus de continuidade/retorno';
if (bonus === 30) return 'Continuidade 8+ anos (15) + Retorno (15)';
if (bonus === 25) return 'Continuidade 5+ anos (10) + Retorno (15)';
if (bonus === 20) return 'Continuidade 3+ anos (5) + Retorno (15)';
if (bonus === 15) return 'Continuidade 8+ anos ou Retorno';
if (bonus === 10) return 'Continuidade 5+ anos';
if (bonus === 5) return 'Continuidade 3+ anos';
return `Bônus total: ${bonus} pts`;
}
function inferirFormulaPremiacoes(total, premiacoes) {
if (!premiacoes || premiacoes.length === 0) return 'Nenhuma premiação registrada';
const qtd = premiacoes.length;
return `${qtd} premiação${qtd > 1 ? 'ões' : ''}${total} pts`;
}
export default CalculoDetalhado;