LOG Center logo
LOG Center3e Peloton NWT

LOG CENTER V9 • 3E PELOTON NWT

Zelfstandige veldlogistiek • aanvraag voor morgen • deadline 15:00 • WhatsApp • printarchief

🛡️ Operationeel LOG Center – V9

Aanvragen voor morgen • WOL blijft voor alle leerlingen van toepassing • aanvullingen apart • geen automatische verzending

📋 Controle vóór 15:00

Vul de aanvraag in om de controles te zien.

📦 Levering & tekorten

🗓️ Herinneringen per oefening

13:30 / 14:30 / 14:45 Europe/Amsterdam. Alleen gekozen dagen; importeer dit bestand in de telefoonagenda en controleer de meldingen.

🗃️ Veilig overzetten

Voor overdracht tussen telefoon en laptop: eerst op beide apparaten een back-up maken. Conflicten worden niet stilzwijgend overschreven.

De browseropslag is geen gegarandeerd permanent archief. Maak na elke oefendag een PDF en JSON-back-up.

WhatsApp-voorbeeld (live)

Controleer vóór verzenden altijd de aantallen, ontvanger en leverdatum.

📱 LOG Snelstart – 3e Peloton

Veldinvoer voor morgen · WOL blijft van toepassing · aanvullende behoefte apart

Deadline voor de LOG-aanvraag: 15:00 Nederlandse tijd
0Open aanvragen
0Leveringen te controleren
0Aanvragen voor morgen

Controleer en verzend zelf via WhatsApp. Status en verzend-DTG worden niet automatisch als verzonden gemarkeerd.

⚡ Snelle LOG-aanvraag – morgen

Water en aanvullende vegetarische/halal maaltijden. WOL-pakketten blijven voor alle leerlingen gelden. Wijzigingen hieronder worden direct in de volledige aanvraag gezet.

Concept – nog niet verzonden.

Na werkelijk verzenden: registreer de verzend-DTG in het volledige formulier. Kopiëren of delen markeert niets automatisch als verzonden.

Militaire datumtijdgroep (DTG)

De DTG wordt automatisch vastgelegd bij het aanmaken van een aanvraag. De werkelijke verzend- en ontvangst-DTG registreer je pas nadat die handelingen hebben plaatsgevonden.

Opbouw: DDHHMMZ MMM YY
DD = dag (2 cijfers) · HHMM = tijd in 24-uursnotatie · Z = positie voor de tijdzoneletter · MMM = Engelse maandafkorting · YY = jaar (2 cijfers).
071430ANOV26 = 7 november 2026, 14:30 uur, Alfa-tijd (UTC+1, Nederlandse wintertijd). In de zomertijd wordt de letter B gebruikt.

Nederland: A = wintertijd (UTC+1), B = zomertijd (UTC+2). Z = UTC. Gebruik voor formele verzending de afgesproken tijdzone en controleer de apparaatklok. De DTG wordt altijd berekend voor Europe/Amsterdam, ook als de telefoon of laptop op een andere tijdzone staat. Controleer wel de klok van het apparaat.

Controle DTG-notatie.

Nieuwe aanvraag / wijzigen

Alle leerlingen behouden hun WOL-pakket. Vegetarisch en halal zijn aanvullingen, geen vervanging. Controleer zelf de behoeften en hoeveelheden.

Personeel per groep

Totaal: 0 personen. Gebruik groepsaantallen óf een totaal; bij beide volgt een controle.

Dagelijkse aanvulling

Verzending en bewijs

Ontvangst, tekorten en uitgifte

Vul na levering in wat werkelijk is ontvangen. Tekorten worden automatisch berekend. Dit is een registratie, geen automatische ontvangstbevestiging.

Nog geen ontvangen aantallen ingevoerd.

WhatsApp – nette aanvraag

Bekijk de tekst voordat je deze kopieert. Je verzendt zelf via WhatsApp; een kopie geldt niet als verzendbewijs.

Controle vóór verzending

De controle is een hulpmiddel; verifieer de daadwerkelijke aantallen, leverlocatie en afgesproken ontvangstwijze.

Vul de aanvraag in om controles te zien.

De waternorm van 3 liter is uitsluitend een aanpasbare rekenwaarde, geen operationele richtlijn. Werkelijke behoefte hangt af van activiteit, weer en voorschriften.

Aanvragenarchief

Aanvragen blijven in deze browser op dit apparaat. Maak geregeld een JSON-back-up. De laptop en telefoon synchroniseren niet automatisch.

NummerBenodigdVersieStatusActie

🗂 Oefenarchief – gezamenlijk afdrukken

Selecteer een oefening en druk alle opgeslagen aanvragen uit, inclusief aanvraagnummer, DTG, versies, leveringen en bewijsverwijzingen. Gebruik de JSON-back-up om het digitale archief volledig te bewaren.

Selecteer een oefening of druk alle aanvragen af.

Bewijsstukken & correcties

Voeg een screenshot van de verzonden WhatsApp-aanvraag of ontvangstbevestiging toe. Dit wordt bij de opgeslagen aanvraag en in de JSON-back-up bewaard. Maximaal 350 KB per afbeelding; gebruik geen onnodige persoonsgegevens.

Nog geen afbeelding toegevoegd.

Sla de aanvraag op na het toevoegen van bewijs. Voor archivering: exporteer een JSON-back-up en druk de aanvraag af als PDF. Een screenshot alleen bewijst niet dat een bericht is aangekomen.

Herinnering vóór 15:00 (Nederlandse tijd)

Voorgestelde telefoonmeldingen: 13:30, 14:30 en 14:45. Deze app kan niet zelfstandig betrouwbare meldingen op een gesloten telefoon afleveren. Stel telefoonherinneringen apart in.

Importeer het .ics-bestand op je telefoon. De herinneringen gebruiken Europe/Amsterdam (zomer- en wintertijd); ze zijn dagelijks, verwijder of pauzeer ze buiten veldoefeningen. Controleer of jouw agenda de meldingen overneemt.

';const w=window.open('','_blank');if(!w){el('bundleStatus').textContent='Pop-up geblokkeerd. Sta pop-ups toe voor deze afdruk.';return}w.document.open();w.document.write(html);w.document.close();el('bundleStatus').textContent=records.length+' aanvraag/aanvragen voorbereid voor afdruk. Kies Afdrukken / Opslaan als PDF in het nieuwe venster.';w.focus();setTimeout(()=>w.print(),450);} const v8OldNewRecord=newRecord;newRecord=function(){v8OldNewRecord();mainToFast()}; const v8OldPut=put;put=function(x){v8OldPut(x);mainToFast()}; const v8OldSave=saveRecord;saveRecord=function(){fastToMain();v8OldSave();refreshBundleSelect();fastStatusUpdate()}; const v8OldRenderArchive=renderArchive;renderArchive=function(){v8OldRenderArchive();refreshBundleSelect()}; document.addEventListener('input',e=>{if(e.target&&FIELDS.includes(e.target.id)&&!e.target.id.startsWith('fast'))mainToFast()}); document.addEventListener('DOMContentLoaded',()=>{mainToFast();refreshBundleSelect()}); // V9: additive operations. Existing V8 archive format retained. function v9Number(n){const v=Number(n);return Number.isFinite(v)&&v>=0?v:0} function v9Current(){return values()} function v9Total(x){return x.manualTotal!==''?v9Number(x.manualTotal):['alpha','bravo','charlie'].reduce((n,k)=>n+v9Number(x[k]),0)} function v9WhatsApp(x,correction=false){ const total=v9Total(x), date=x.needed||'NOG INVULLEN'; return ['*LOG AANVRAAG – 3E PELOTON NWT*',correction?'*CORRECTIE / GEWIJZIGDE AANVRAAG*':'*AANVRAAG VOOR VOLGENDE DAG*', 'Aanvraag: '+(x.number||'-')+' • V'+(x.version||1),'DTG: '+(x.created||'-'),'Benodigd op: '+date, 'Oefening / locatie: '+(x.exercise||'Nog in te vullen'),'', '*STERKTE*', 'Alpha: '+v9Number(x.alpha)+' | Bravo: '+v9Number(x.bravo)+' | Charlie: '+v9Number(x.charlie), 'Totaal: '+total,'', '*AANVULLENDE BEHOEFTE*', 'Water: '+v9Number(x.water)+' liter','Vegetarische aanvulling: '+v9Number(x.vega), 'Halal aanvulling: '+v9Number(x.halal),'Overige dieet-aanvullingen: '+v9Number(x.otherCount), x.dietNotes?'Bijzonderheden: '+x.dietNotes:'',x.extras?'Overig / materieel: '+x.extras:'', '', '*WOL-pakketten blijven voor alle leerlingen van toepassing.*', 'Graag leverbaarheid en ontvangst van deze aanvraag bevestigen.'].filter(v=>v!==undefined&&v!=='').join('\n'); } function v9Checks(x){let warnings=[];const total=v9Total(x),group=['alpha','bravo','charlie'].reduce((a,k)=>a+v9Number(x[k]),0); if(!x.needed)warnings.push('Benodigde datum ontbreekt'); if(!x.recipient)warnings.push('Ontvanger WhatsApp ontbreekt'); if(!x.exercise)warnings.push('Oefening / locatie ontbreekt'); if(total<=0)warnings.push('Personeelssterkte is niet ingevuld'); if(x.manualTotal!==''&&group>0&&total!==group)warnings.push('Groepstotaal verschilt van pelotonstotaal'); if(v9Number(x.water)===0&&v9Number(x.vega)===0&&v9Number(x.halal)===0&&v9Number(x.otherCount)===0&&!x.extras)warnings.push('Geen logistieke behoefte opgegeven'); for(const k of ['alpha','bravo','charlie','manualTotal','water','vega','halal','otherCount'])if(x[k]!==''&&(!Number.isFinite(Number(x[k]))||Number(x[k])<0||(['alpha','bravo','charlie','manualTotal','vega','halal','otherCount'].includes(k)&&!Number.isInteger(Number(x[k])))))warnings.push('Ongeldig aantal bij '+k); if(x.sentDTG&&!x.evidence&&!archive.find(a=>a.number===x.number)?.proof)warnings.push('Verzendbewijs ontbreekt (aanbevolen)'); return warnings; } function v9Refresh(){try{const x=v9Current();const warns=v9Checks(x);el('v9Checklist').innerHTML=warns.length?''+warns.length+' aandachtspunt(en)':'✓ Aanvraagvelden gecontroleerd; controleer zelf de inhoud.'; el('v9Preview').textContent=v9WhatsApp(x);const parts=[['Water (liter)','water','receivedWater'],['Vegetarisch','vega','receivedVega'],['Halal','halal','receivedHalal'],['Overig','otherCount','receivedOther']]; el('v9Delivery').innerHTML=parts.map(([name,asked,received])=>{const a=v9Number(x[asked]),r=x[received]===''?'—':v9Number(x[received]),short=x[received]===''?'nog niet geregistreerd':Math.max(0,a-r);return '

'+esc(name)+': gevraagd '+a+', ontvangen '+r+', tekort '+short+'

'}).join(''); }catch(e){el('v9Info').textContent='Voorbeeld kon niet worden bijgewerkt: '+e.message}} async function v9CopyMessage(){const x=v9Current(),warnings=v9Checks(x);if(warnings.length&&!confirm('Er zijn '+warnings.length+' aandachtspunten. Toch WhatsApp-tekst kopiëren?'))return;const t=v9WhatsApp(x);try{await navigator.clipboard.writeText(t);el('v9Info').textContent='WhatsApp-tekst gekopieerd. Plak en verstuur zelf; registreer daarna de echte verzend-DTG.'}catch(e){const a=document.createElement('textarea');a.value=t;document.body.appendChild(a);a.select();document.execCommand('copy');a.remove();el('v9Info').textContent='Kopieerpoging gedaan. Controleer de tekst voordat je verzendt.'}} function v9Correction(){const x=v9Current(),r=archive.find(a=>a.number===x.number);if(!r){alert('Sla de aanvraag eerst op om correcties te vergelijken.');return}const prev=(r.history||[]).at(-1)?.data;if(!prev){alert('Nog geen eerdere versie aanwezig. Wijzig en sla de aanvraag op om een correctie te maken.');return}const labels={needed:'Leverdatum',alpha:'Alpha',bravo:'Bravo',charlie:'Charlie',manualTotal:'Totaal',water:'Water (liter)',vega:'Vegetarisch',halal:'Halal',otherCount:'Overig',dietNotes:'Dieetbijzonderheden',extras:'Materieel / transport',exercise:'Oefening / locatie'};const diffs=Object.keys(labels).filter(k=>String(prev[k]??'')!==String(r[k]??'')).map(k=>labels[k]+': '+(prev[k]||'0')+' → '+(r[k]||'0'));if(!diffs.length){alert('Geen inhoudelijke wijzigingen gevonden.');return}const msg='*CORRECTIE LOG 3E PELOTON*\nAanvraag: '+r.number+' • V'+r.version+'\nBenodigd op: '+r.needed+'\n*GEWIJZIGD*\n'+diffs.join('\n')+'\n\nGraag de eerdere aanvraag overeenkomstig aanpassen en bevestigen.\nWOL blijft van toepassing.';el('v9Preview').textContent=msg;el('v9Info').textContent='Correctiebericht staat in het voorbeeld. Gebruik de knop Kopieer hieronder.';navigator.clipboard?.writeText(msg).then(()=>el('v9Info').textContent='Correctiebericht gekopieerd. Verstuur zelf via WhatsApp.').catch(()=>{})} function v9Repeat(){if(!archive.length){alert('Er zijn nog geen eerdere aanvragen.');return}const r=archive.slice().sort((a,b)=>String(b.updatedAt||'').localeCompare(String(a.updatedAt||'')))[0];if(!confirm('Laatste aanvraag '+r.number+' als nieuw concept voor morgen overnemen?'))return;newRecord();for(const k of ['exercise','alpha','bravo','charlie','manualTotal','water','vega','halal','otherCount','dietNotes','extras','recipient'])el(k).value=r[k]??'';updateTotal();mainToFast();v9Refresh();el('v9Info').textContent='Vorige aanvraag overgenomen als nieuw concept. Controleer alle aantallen en sla opnieuw op.'} function v9SaveAndPrint(){saveRecord();const x=values();const r=archive.find(a=>a.number===x.number);if(r&&JSON.stringify(FIELDS.map(k=>r[k]??''))===JSON.stringify(FIELDS.map(k=>x[k]??'')))printCurrent()} function v9PrintExercise(){goTo('bundleArchive');el('v9Info').textContent='Kies hieronder de oefening of datums en druk het oefenarchief af.'} function v9Calendar(){const start=el('v9Start').value,end=el('v9End').value;if(!start||!end||end10000)throw Error('Te veel records');const map=new Map(archive.map(r=>[r.number,r]));let added=0,replaced=0,conflicts=[];for(const r of incoming){if(!r||typeof r.number!=='string'||!/^3PEL-LOG-\d{4}-\d+$/.test(r.number))continue;const old=map.get(r.number);if(!old){map.set(r.number,r);added++;continue}if(JSON.stringify(old)===JSON.stringify(r))continue;const ov=Number(old.version||1),iv=Number(r.version||1);if(iv>ov){conflicts.push(r.number+' (import V'+iv+' versus lokaal V'+ov+')');continue}if(iv===ov)conflicts.push(r.number+' (zelfde versie, andere inhoud)');} if(conflicts.length){const report='LOG 3e Peloton - IMPORTCONFLICTEN\n'+conflicts.join('\n');downloadFile('LOG_importconflicten_'+dateLocal(new Date())+'.txt',report,'text/plain');alert(conflicts.length+' conflicten gevonden. Bestaande aanvragen NIET overschreven. Een conflictenrapport is gedownload. Los dit handmatig op.');} if(added&&!confirm(added+' nieuwe aanvragen toevoegen? Bestaande aanvragen blijven onaangeroerd.'))return;const before=archive;archive=[...map.values()];if(!persist()){archive=before;return}renderArchive();alert('Import gereed: '+added+' nieuwe aanvragen. '+conflicts.length+' conflicten niet overschreven.'); }catch(err){alert('Import mislukt: '+err.message)}finally{e.target.value=''}}; const v9RenderOld=renderArchive;renderArchive=function(){v9RenderOld();v9Refresh()}; const v9PutOld=put;put=function(x){v9PutOld(x);v9Refresh()}; document.addEventListener('input',e=>{if(e.target?.id&&FIELDS.includes(e.target.id))v9Refresh()}); // Default reminder range: current Dutch exercise day, user can change it. try{el('v9Start').value=nlTomorrow();el('v9End').value=nlTomorrow()}catch(e){} v9Refresh();