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:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -27,4 +27,6 @@ node_modules/
|
||||
.vscode/
|
||||
.idea/
|
||||
*.log
|
||||
*.csv
|
||||
backend/logs/
|
||||
.cache/
|
||||
|
||||
@@ -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,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.
|
||||
@@ -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 |
@@ -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 |
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user