TL;DR
Geostaketstämpling är en av de mest översålda funktionerna i fältservicesystem. Den ärliga versionen är mindre än säljpratet och mer användbar än den låter: läs positionen i det ögonblick knappen trycks, skicka den med posten, låt servern jämföra den med uppdragets adress, och spara beviset bredvid slutsatsen. Här är varje del, inklusive de två ställen där rätt svar är att inte spara något.
Det som inte går att bygga
En webbapp installerad på hemskärmen på iOS får ingen position i bakgrunden. Det finns ingen bakgrundspositionering för webbappar på den plattformen. Det är ingen brist i en produkt; det är plattformen, och den gäller alla webbappar lika.
Alltså: appen stämplar inte in personalen av sig själv när de kommer fram. Den kan inte det. Den som säljer er det i en webbapp säljer er något som inte kommer att fungera, eller säljer er en native app med en batterikostnad de inte nämnt, eller säljer er en dosa i fordonet, vilket är en annan produkt till ett annat pris och med ett annat samtal med personalen.
Vi säger hellre det högt än att ni upptäcker det i vecka tre.
Vad som går, exakt
När montören trycker på stämpla in ber appen telefonen om en enda läsning. Hög noggrannhet begärd, ingen cachad position accepterad, åtta sekunder att svara.
Sedan en detalj värd att känna till, eftersom det är den sortens sak som avgör om knappen fungerar en tisdagsmorgon: vissa Android-versioner anropar aldrig någon av återanropsfunktionerna när platstjänsterna är avstängda. Inget fel, ingen framgång — ingenting. Därför finns en andra timeout en halv sekund efter den första, och klockan startar oavsett.
Vilket är designprincipen under alltihop: positionen håller aldrig arbetet som gisslan.
En nekad behörighet, en telefon inomhus, ett dött GPS-chip, en montör som avvisar dialogrutan — inget av det är ett skäl att hindra någon från att börja sin dag. Varje misslyckande blir ingen läsning, klockan går ändå, och posten registreras som saknande position i stället för som havande en felaktig.
Noggrannheten avrundas uppåt, aldrig nedåt
Telefonen rapporterar en radie den tror att läsningen är god till. Det talet avrundas uppåt innan det skickas.
Att påstå att en läsning är bättre än telefonen säger skulle placera någon utanför ett staket hon stod innanför. En meters falsk precision här kostar ett gräl med en anställd, och den anställde har rätt.
Servern avgör, inte telefonen
Läsningen följer med posten. Jämförelsen sker på servern, mot arbetsorderns arbetsadress — som bär koordinater och en staketradie mellan 10 och 5000 meter.
Avståndet räknas med en ekvirektangulär approximation i stället för en storcirkelberäkning. Över ett staket på några tiotals meter ligger skillnaden långt under GPS-noggrannheten, och det här körs vid varje instämpling.
Den rapporterade noggrannheten får räknas till montörens fördel: en telefon som säger "inom 30 meter", stående 40 meter utanför, är förmodligen där. Staketet vidgas med den noggrannhet telefonen själv angav, det snävas inte in av den.
Att göra det här på servern i stället för i appen handlar inte om förtroende för montören. Det handlar om att telefonen inte känner till kundens staketradie, att staketet kan redigeras i efterhand, och att en bedömning som räknats fram på en enhet är en bedömning som inte går att återskapa senare.
Okänt är inte utanför
Det här är den viktigaste raden i hela funktionen, och den är ett ord.
När det inte finns någon läsning, eller uppdraget saknar arbetsadress, eller adressen saknar koordinater eller radie, sparas bedömningen som okänd. Inte som utanför.
"Ingen position" och "förmodligen någon annanstans" är inte samma mening. Att spara den andra när man bara vet den första lägger en anklagelse på en rad på grundval av ett fält kontoret aldrig fyllde i — och den raden kommer att läsas månader senare av någon som inte var där, i ett samtal om någons lön.
Skillnaden har en praktisk följd att planera för: tills ni lagt koordinater och radie på era återkommande adresser sparar varje instämpling en okänd bedömning. Det är korrekt beteende och det är också en att-göra-lista.
Beviset bredvid slutsatsen
Vad som sparas per post: koordinaterna telefonen gav, noggrannheten den angav, om läsningen kom från GPS eller var en manuell post, och separat geostaketbedömningen.
Rålästningen sparas bredvid bedömningen i stället för i stället för den, eftersom en tvist månader senare behöver beviset och inte vår slutsats om det. Var staketradien fel, eller adressen geokodad till fel sida av en innergård, finns koordinaterna kvar och frågan kan tas om. En sparad ja/nej-flagga utan något bakom sig går inte att argumentera mot, vilket låter som en funktion och är motsatsen.
Samma princip löper genom hela tidrapporten: en post som knappats in från kontoret registreras som inknappad, inte tyst utklädd till en stämpling.
Två saker att säga till personalen innan ni slår på det
Det här är en fråga om övervakning på arbetsplatsen och att behandla den som en rent teknisk fråga är hur det går fel.
Vad som läses, och när. En läsning, i trycket ögonblick, två gånger om dagen. Inte löpande, inte under körning, inte när appen är stängd — plattformen tillåter inte ens det sista. Det finns ingen livekarta över var bilarna är, eftersom det inte finns någon löpande position att rita en av.
Vad det är till för. Bedömningen besvarar en fråga — skedde instämplingen på jobbet — och den finns eftersom alternativet är kundens ord mot lagets. En registrerad position är lika ofta det som bevisar att någon var där som det som bevisar att hon inte var det.
Säg båda före första passet, inte efter första frågan.
Var det ligger i nivåerna
Position på tidposter ingår i mellan- och toppnivån, inte i ingångsnivån. Ingångsnivån har schema, arbetsorder, tidrapportering, fältappen och fakturaunderlaget; positionsstämpling och löpande avtal börjar på mellannivån.
Att sätta upp det så att bedömningarna betyder något
Fyra steg, och det första är det mesta av arbetet.
Lägg koordinater på de adresser ni besöker mer än en gång. En kundadress håller gata, postnummer, ort, koordinater, staketradie och tillträdesanteckningar. Utan koordinater finns inget staket och varje instämpling där sparar en okänd bedömning, korrekt och oanvändbart.
Välj en radie vidare än ni tror. Systemets minimum är 10 meter och maximum 5000. Tio är nästan aldrig rätt. En telefon inomhus i en trappuppgång, eller på en gård mellan två hus, rapporterar en position tiotals meter fel med en noggrannhet därefter. En radie på 100 till 200 meter för en vanlig adress fångar det fall ni bryr er om — en instämpling hemifrån, eller från förra kunden — utan att producera en ström av falska bedömningar på folk som står på rätt plats.
Knyt instämplingen till uppdraget. Staketet hör till arbetsorderns arbetsadress. En instämpling utan uppdrag har ingen adress att jämföras mot och därmed ingen bedömning, hur bra läsningen än var.
Läs de okända som en att-göra-lista, inte som en misstanke. De första veckorna kommer de flesta av dem att betyda "den här adressen saknar koordinater än". Det är en registervårdsskuld, och att behandla den som något annat är hur ni förlorar lagets goodwill första månaden.
Sammanfattningen, i ett stycke
Position vid trycket, skickad med posten, bedömd av servern mot en adress ni underhåller, sparad med sitt bevis, och aldrig tillåten att hindra någon från att arbeta. Ingen bakgrundsspårning, ingen automatisk ankomst, ingen livekarta över fordon. Det täcker det mesta av värdet i det som brukar säljas, och det är något som faktiskt finns.