Fix localizacao prova

Signed-off-by: Rodrigo Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2025-04-23 00:12:44 -03:00
1 parent c72d4aad99
commit ecf692502f
26 files changed
+628 -76

No files matched your search

+1
View File
@@ -79,6 +79,7 @@ const router = createBrowserRouter(
<Route path="/atendimentos" element={<AtendimentosPage />} />
<Route path="/atendimentos/:id" element={<AtendimentoDetalhes />} />
<Route path="/tarefas" element={<TarefasPage />} />
<Route path="/usuarios" element={<UsuariosPage />} />
<Route path="/processos-administrativos" element={<ProtectedRoute roles={['ADVOGADO_ADMIN', 'ADVOGADO', 'ASSISTENTE']}><ProcessoAdministrativoList /></ProtectedRoute>} />
<Route path="/processos-administrativos/:id" element={<ProtectedRoute roles={['ADVOGADO_ADMIN', 'ADVOGADO', 'ASSISTENTE']}><ProcessoAdminDetalhes /></ProtectedRoute>} />
<Route path="/provas/upload" element={<ProvaUpload />} />
+10 -2
View File
@@ -17,6 +17,7 @@ import {
ShieldCheckIcon,
CurrencyDollarIcon,
CalculatorIcon,
BriefcaseIcon,
} from "@heroicons/react/24/outline";
import { Menu, Transition } from "@headlessui/react";
import api from "../../services/api";
@@ -58,8 +59,15 @@ export const MainLayout: React.FC = () => {
const menuItems = [
{ path: "/dashboard", label: "Dashboard", icon: HomeIcon },
{ path: "/processos", label: "Processos", icon: ScaleIcon },
{ path: "/processos-administrativos", label: "Proc.Adm", icon: ScaleIcon },
{
path: null,
label: "Processos",
icon: ScaleIcon,
subitems: [
{ path: "/processos", label: "Judiciais", icon: ScaleIcon },
{ path: "/processos-administrativos", label: "Proc. Admin.", icon: DocumentCheckIcon }
]
},
{
path: null,
label: "Provas",
+26 -2
View File
@@ -21,6 +21,13 @@ interface ProvaStatus {
};
ipAddress?: string;
clientPort?: string;
locationInfo?: {
latitude?: number;
longitude?: number;
};
latitude?: number;
longitude?: number;
location_permission?: string;
};
}
@@ -212,11 +219,28 @@ export function PublicProvaStatus() {
</div>
{/* Adicionar geolocalização se disponível */}
{(status.metadata?.latitude !== undefined || status.metadata?.longitude !== undefined) && (
{(
(status.metadata?.latitude !== undefined && status.metadata?.latitude !== null) ||
(status.metadata?.longitude !== undefined && status.metadata?.longitude !== null) ||
(status.metadata?.locationInfo?.latitude !== undefined && status.metadata?.locationInfo?.latitude !== null) ||
(status.metadata?.locationInfo?.longitude !== undefined && status.metadata?.locationInfo?.longitude !== null)
) && (
<div>
<p className="text-sm text-gray-500">Geolocalização</p>
<p className="text-gray-700">
Coordenadas: {status.metadata.latitude || 'N/A'}, {status.metadata.longitude || 'N/A'}
Coordenadas: {
status.metadata?.latitude !== undefined && status.metadata?.latitude !== null
? status.metadata.latitude
: status.metadata?.locationInfo?.latitude !== undefined && status.metadata?.locationInfo?.latitude !== null
? status.metadata.locationInfo.latitude
: 'N/A'
}, {
status.metadata?.longitude !== undefined && status.metadata?.longitude !== null
? status.metadata.longitude
: status.metadata?.locationInfo?.longitude !== undefined && status.metadata?.locationInfo?.longitude !== null
? status.metadata.locationInfo.longitude
: 'N/A'
}
</p>
<p className="text-xs text-gray-500">
Permissão: {status.metadata.location_permission || 'não especificada'}
+31 -27
View File
@@ -161,26 +161,6 @@ export function PublicVerificarProva() {
result.prova.dataCriacao)}
/>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<dt className="text-sm font-medium text-gray-500">IP:</dt>
<dd className="mt-1 text-base text-gray-900 break-words">
{result.verificacao?.ip ||
result.prova.metadata?.connectionInfo?.forwardedIp ||
(result.prova.metadata?.headers?.['x-forwarded-for'] ?
result.prova.metadata.headers['x-forwarded-for'].split(',')[0].trim() :
result.prova.metadata?.ipAddress) ||
'Não disponível'}
</dd>
</div>
<div>
<dt className="text-sm font-medium text-gray-500">Porta:</dt>
<dd className="mt-1 text-base text-gray-900 break-words">
{result.verificacao?.porta ||
result.prova.metadata?.clientPort ||
result.prova.metadata?.connectionInfo?.socketPort ||
'Não disponível'}
</dd>
</div>
</div>
</div>
</div>
@@ -231,14 +211,21 @@ export function PublicVerificarProva() {
}
/>
{/* Garantir exibição da porta */}
{/* Garantir exibição da porta capturada no JSON da prova */}
<DetailItem
label="Porta de Conexão"
value={
result.prova.metadata.clientPort ||
(result.prova.metadata.connectionInfo?.socketPort ?
result.prova.metadata.connectionInfo.socketPort : '61465')
}
result.prova.metadata.connectionInfo?.socketPort ||
(result.prova.metadata.userInfo?.ipAddress &&
(() => {
const ip = result.prova.metadata.userInfo.ipAddress;
const match = typeof ip === 'string' ? ip.match(/:(\d+)$/) : null;
return match ? match[1] : undefined;
})()
) ||
'Não disponível'
}
/>
{/* Adicionar família IP */}
@@ -278,11 +265,28 @@ export function PublicVerificarProva() {
/>
)}
{/* Exibir geolocalização se disponível */}
{(result.prova.metadata.latitude !== undefined || result.prova.metadata.longitude !== undefined) && (
{/* Exibir geolocalização capturada na prova */}
{(
(result.prova.metadata?.latitude !== undefined && result.prova.metadata?.latitude !== null) ||
(result.prova.metadata?.longitude !== undefined && result.prova.metadata?.longitude !== null) ||
(result.prova.metadata?.locationInfo?.latitude !== undefined && result.prova.metadata?.locationInfo?.latitude !== null) ||
(result.prova.metadata?.locationInfo?.longitude !== undefined && result.prova.metadata?.locationInfo?.longitude !== null)
) && (
<DetailItem
label="Coordenadas"
value={`${result.prova.metadata.latitude || 'N/A'}, ${result.prova.metadata.longitude || 'N/A'}`}
value={`${
result.prova.metadata?.latitude !== undefined && result.prova.metadata?.latitude !== null
? result.prova.metadata.latitude
: result.prova.metadata?.locationInfo?.latitude !== undefined && result.prova.metadata?.locationInfo?.latitude !== null
? result.prova.metadata.locationInfo.latitude
: 'N/A'
}, ${
result.prova.metadata?.longitude !== undefined && result.prova.metadata?.longitude !== null
? result.prova.metadata.longitude
: result.prova.metadata?.locationInfo?.longitude !== undefined && result.prova.metadata?.locationInfo?.longitude !== null
? result.prova.metadata.locationInfo.longitude
: 'N/A'
}`}
/>
)}
+4 -1
View File
@@ -220,7 +220,10 @@ export const VerificarProva: React.FC = () => {
Porta:
</Typography>
<Typography gutterBottom>
{prova.verificacao?.porta || prova.prova?.metadata?.clientPort || 'Não disponível'}
{prova.prova?.metadata?.clientPort ||
prova.prova?.metadata?.connectionInfo?.socketPort ||
prova.prova?.metadata?.userInfo?.ipAddress?.split(':')[1] ||
'Não disponível'}
</Typography>
</Grid>
</Grid>
+6 -6
View File
@@ -29,14 +29,14 @@ router.post('/upload', upload.array('files'), async (req, res) => {
// Metadata avançada seguindo RFC 3227
// Corrigir: priorizar latitude/longitude do frontend se vierem preenchidas
let latitude = undefined;
let longitude = undefined;
let latitude: number | undefined = undefined;
let longitude: number | undefined = undefined;
if (
req.body.latitude !== undefined && req.body.latitude !== null && req.body.latitude !== '' &&
req.body.longitude !== undefined && req.body.longitude !== null && req.body.longitude !== ''
typeof req.body.latitude !== 'undefined' && req.body.latitude !== null && req.body.latitude !== '' &&
typeof req.body.longitude !== 'undefined' && req.body.longitude !== null && req.body.longitude !== ''
) {
latitude = parseFloat(req.body.latitude);
longitude = parseFloat(req.body.longitude);
latitude = Number(req.body.latitude);
longitude = Number(req.body.longitude);
}
const metadata = {
+13 -3
View File
@@ -606,9 +606,19 @@ export class ReportGenerator {
y -= 15;
// RESTAURAR GEOLOCALIZAÇÃO - CORRIGIDA PARA EVITAR N/A
const latitude = typeof data.metadata?.latitude !== 'undefined' ? data.metadata.latitude : '-7.2035066';
const longitude = typeof data.metadata?.longitude !== 'undefined' ? data.metadata.longitude : '-48.2111972';
// Busca latitude/longitude tanto na raiz quanto em locationInfo
let latitude = 'N/A';
let longitude = 'N/A';
if (typeof data.metadata?.latitude !== 'undefined' && data.metadata?.latitude !== null) {
latitude = String(data.metadata.latitude);
} else if (typeof data.metadata?.locationInfo?.latitude !== 'undefined' && data.metadata?.locationInfo?.latitude !== null) {
latitude = String(data.metadata.locationInfo.latitude);
}
if (typeof data.metadata?.longitude !== 'undefined' && data.metadata?.longitude !== null) {
longitude = String(data.metadata.longitude);
} else if (typeof data.metadata?.locationInfo?.longitude !== 'undefined' && data.metadata?.locationInfo?.longitude !== null) {
longitude = String(data.metadata.locationInfo.longitude);
}
this.drawLabelValue(page, "Coordenadas:", `${latitude}, ${longitude}`, y, helvetica, helveticaBold);
y -= 15;