KENNIS IN VERBINDING / ANALYSE 03.10.2026
TRACEERBAARHEID

integrations.md

Feitelijke analyse op 3 oktober 2026. Codebevindingen zijn geen garantie voor foutloos of daadwerkelijk gebruikt runtimegedrag.

← Alle bronnen

Kaarten en externe integraties

Google Maps

CONFIRMED in components/GeneralComponents/Map/GoogleMap.js:

  • @react-google-maps/api: GoogleMap, DirectionsRenderer, useJsApiLoader. Browser laadt Google-script met sleutel uit services/map/google; sleutelwaarden zijn niet in dit rapport opgenomen.
  • Invoer from/to met lat/lng, afkomstig uit LMF from/to of stop.coords. Leverancier/HUB hebben losse latitude/longitude; klantlocatie gebruikt lat_lng gesplitst op ;.
  • Met from én to: Google DirectionsService.route({origin:'lat,lng', destination:'lat,lng', travelMode:DRIVING}); resultaat naar DirectionsRenderer. De routegeometrie komt dus van Google, niet uit een LMF-polylineveld.
  • Centrum is gemiddelde van beide coördinaten, of to; zoom 11; container 90vw × 30vh.
  • Zonder from: custom Marker. Marker.js rendert een absoluut gepositioneerde styled div met PickupPointOnMap.png; lat/lng-props worden niet gebruikt als Google Marker-position. Dit is een midden-icoon bij gecentreerde kaart, geen aangetoonde geografische markerlaag.
  • Geen eigen polyline-, waypoint-, meerstopsoptimalisatie-, geocoding- of drag/drop-stopvolgorde in de actieve application sources. Meegebundelde libraryklassen voor Polyline/Geocoder bewijzen geen applicatiegebruik.
  • Kaartinteractie is standaard Google Map + render; Marker accepteert onClick maar de onderzochte map geeft die niet mee. Detailpagina's hebben apart een navigatielink.
  • calculateRoute heeft geen lokale try/catch; useEffect hangt alleen van isLoaded af, niet from/to. Wijzigende props kunnen dus een oude route laten staan. Geen expliciete afhandeling van ongeldige coördinaten of API-quota gevonden.

De Apache /map-handler (Map.pm) proxyt het Google JavaScript-script via LWP en zet queryparameters door, met server-side geconfigureerde sleutel. De geverifieerde React-kaart gebruikt useJsApiLoader rechtstreeks; geen call naar deze proxy gevonden. Geen kaart-API aangeroepen tijdens onderzoek.

Routeplanners en navigatie

| Product/pad | Data/authenticatie | Resultaat/afhandeling | Koppeling | |---|---|---|---| | Google Directions JS | origin/destination-coördinaten, DRIVING; browsersleutel | routes-object → DirectionsRenderer; geen lokale catch | GoogleMapCustom in supplier/customer/logistics-detail | | Google Maps-navigatielink | https://www.google.com/maps/dir/?api=1&destination=<lat>,<lng>&dir_action=navigate; geen LMF-token in link | opent extern, geen resultaat terug | HubDeliveries, SupplierDeliveryDetail, LogisticDeliveryDetail, LogisticsStopDetail | | Waze-navigatielink | https://waze.com/ul?ll=<lat>,<lng>&navigate=yes | opent extern; geen callback/opgeslagen plan | zelfde schermen, Redux navigator / backend navigator | | Keana tracking | POST auth/token met servercredentials, daarna Bearer GET delivery/id/tracking/id | JSON history; exception bij HTTP-fout; verwerkt orderstatus/ETA/ATA | LMF.keana_webhook; geen Reactplannercomponent | | route_plan | JSON route_id/route_date/stops; LMF Bearer | slaat customer.sequence in route_lokatie op; 400/403/405/409/422/500-code in JSON | leverancier/product van aanleverende planner UNCLEAR | | RoutePlanImporter | JSON payload en DBH; projecttoegang | gedateerd plan + stops + bronkoppelingen, geen netwerk | aanwezig maar niet in huidig endpoint aangesloten |

NOT FOUND binnen LMF + geverifieerde React-bronnen: een externe multi-stop optimizer (bijvoorbeeld VROOM/RouteXL/GraphHopper/Route4Me), import van optimizerresultaten door deze frontend, of lokaal algoritme dat optimale stopvolgorde berekent. LMF bereidt adressen/order-/capaciteitsdata voor, leest vaste volgorde en accepteert een aangeleverde volgorde. Google berekent alleen een route tussen twee punten in de onderzochte kaartcomponent.

HubDeliveries heeft in de Waze-link delivery.latitudet in plaats van latitude; de bron bewijst de typo, niet welk effect ieder Waze-client eraan geeft.

Keana: exacte backendtrace

keana_webhook (LMF:4392) wordt door handler ook zonder LMF-login aangeroepen. In dit pad geen webhookhandtekening of gedeeld inkomend geheim aangetroffen. De callback bevat deliveryId/deliveryTrackingId. Backend maakt Keana::API met vaste base_url en credentials uit code; waarden weggelaten. Authenticate POST /logistics/api/auth/token geeft token, vervolgens GET /logistics/api/delivery/{id}/tracking/{tracking_id}.

Voor history-items: externalId → vers_order.id; stopStatus, anders deliveryStatus, anders status → order_status.name. Onbekende naam wordt overgeslagen. UPDATE vers_order.hub_status/transport_status en commit. Eerste bijbehorende pakbon wordt gezocht; INSERT leverancier_pakbon_levering met createdAt/message, vaste lmf_user=39, order_status, eta/ata/trackingCode, commit. Insertfout → rollback van die fase en success=false; orderupdate is al gecommit. Inkomende eventId wordt niet gebruikt voor deduplicatie. Token/tracking worden naar STDERR gelogd in bron; rapport kopieert deze inhoud niet.

Keana::API heeft ook get_hubs_by_postcode, get_deliveries, get_delivery, get_trip en submit_delivery. submit_delivery POST naar /logistics/api/lmf/delivery serialiseert payload.delivery. Geen aanroep hiervan vanuit LMF of andere onderzochte XLS .pm gevonden; aanwezigheid van de client is geen bewijs dat LMF routes naar Keana plant. Buitenrepo-scripts/andere clients blijven UNCLEAR.

Overige koppelingen

  • Postcode: LMF.postcode normaliseert postcode/nummer/toevoeging, kan toevoeging uit nummer splitsen; XLS::Postcode → Net::PostcodeNL::WebshopAPI.lookup. Response met adres/number/addition, errors als code=500. Geen React-call gevonden; niet hetzelfde als Maps-geocoding.
  • Connector: assignment ontvangt debtor/date/order_number/packages, download_orders exporteert status-1-orders, log slaat tekst op. Upload assortment/invoices/package_info zijn ontvangstmeldingen zonder verwerking.
  • Fotoherkenning: NewSupplierDelivery → services/supplier.base64toData → HTTPS api.lastmilefresh.nl:8000/packaging_prompt_base64, JSON base64+prompt → response gebruikt in scherm. Buiten XLSLMFHandler; de externe verwerking niet onderzocht. Globale Axios-header kan ook voor een absolute URL worden toegepast; feitelijke serverautorisatie niet vastgesteld.
  • Identiteit/branding: identify → domain of lmf_bezoeker/lmf_pagina, eventueel Base.ip_info → Geo::IPinfo. Dit is IP-geolocatie voor branding, geen afleveradresgeocoding.
  • Files: confirm_delivery schrijft photo/signature onder /mnt/storage/img/lmf/; geen externe routeplanner.
Legenda · bewijs en verbindingen

Bewijsstatus

CONFIRMED Aangetroffen in bron of catalogus; niet automatisch foutloos livegedrag.

LIKELY Gevolgtrekking met onderbouwing.

UNCLEAR Onvoldoende bewijs voor deze koppeling of werking.

NOT FOUND Niet aangetroffen binnen de onderzochte scope.

FUTURE / PROPOSED Voorstel; geen huidige functionaliteit.

Relaties

direct · Aangetroffen rechtstreekse referentie of aanroep.

derived · Afgeleid door selectie, groepering of berekening.

conditional · Alleen bij de genoemde voorwaarden of aanwezige bronverwijzing.

not active · Code/model aanwezig, niet aangesloten op het beschreven pad.

unclear · Verbinding niet vastgesteld.