📦 Kohteet & Kalusto
Laitteet, työkoneet, ajoneuvot, nostoapuvälineet
- QR-koodilla merkittävät kohteet — yksilöllinen linkki id.onetrack.fi/xxxx-xxxx
- Kanban-, lista- ja karttanäkymä
- 14+ kohdetyyppiä: Laitteet, Työkalut, Ajoneuvot, Tietokoneet, Kalusteet, Työkoneet, Muu, Nostoapuväline, Putoamissuojaimet, Henkilönostimet, Työmaa, Asiakas, Projekti, Nosturi
- Sarjanumero, sijainti, vastuuhenkilö, osasto
- Kalibrointiväli ja seuraava kalibrointipäivä
- Huoltoväli ja seuraava huoltopäivä
- Takuun päättymispäivä
- Korjaushistoria ja kertyneet korjauskustannukset
- Personal / Company owner-tyyppi
- Kohteen jako käyttäjille tai osastoille
- Tarkastustyyppien hallinta
- Julkinen QR-sivu vikailmoituksineen
- GPS-jäljityslaitteet: TAT240 ja FMC800
- Kohteen kuva Cloudflare R2 -tallennuksessa
- Kohteiden joukkotuonti CSV:llä
- Kohteen liitedokumentit
✅ Laadunhallinta (QMS)
Poikkeamat, riskit, dokumentit, vuosikello
- 10 poikkeamatyyppiä: turvallisuushavainto, sisäinen poikkeama, ympäristöhavainto, asiakasreklamaatio, muu, työtapaturma, aloite, ulkoinen auditointi, sisäinen auditointi, toimittajareklamaatio
- Vakavuudet: lievä, vakava, kriittinen, positiivinen
- Työnkulku: luonnos → analyysi → tarkistus → toimenpiteet → vahvistus → suljettu
- 5-Miksi juurisyyanalyysi
- Välitön toimenpide + korjaava + ennaltaehkäisevä
- Riskimatriisi (todennäköisyys × seuraus × score)
- Kustannusarvio (EUR)
- Sairaspoissaolot päivinä + tapaturmakirjaus
- Tutkintavaihe: aloitettu, käynnissä, valmis
- Tutkintaraportin PDF-liite
- Kommentit + @-maininnat + notifikaatiot
- Liitteet (kuvat, PDF:t, äänitallenteet)
- Ääninauhoituspohjainen kirjaus + Whisper-litterointi
- Kategoriat, tagit, lähdetyypit — täysin tenanttikohtaisia
- Monen allekirjoittajan dokumenttihyväksyntä
- Dokumenttiversiot, tila-vaiheet (draft, review, approved, obsolete)
- Dokumentin voimassaoloaika + seuraava katselmus
- Osasto-, työrooli- ja käyttäjäperustaiset allekirjoittajat
- Dokumenttien kansiorakenne + kansiopolut
- CSV-tuonti historiadatalle
- Word-vienti liitekuvineen (numeroituna) — auditointivalmis
- Riskikirjasto (yhteinen riskityyppi + historiat)
- Vuosikello: lista, kalenteri ja pyörä-näkymä
- RRULE-toistuvat tapahtumat + poikkeukset
📖 Työmaapäiväkirja
YSE 1998 § 75 -mukainen dokumentointi
- Työmaaprojektit (worksite_projects) linkitettynä osastoihin
- Päivittäiset merkinnät + kuittaus-työnkulku
- Sääolosuhteet automaattisesti API:sta (aamu/päivä/ilta)
- Työvoima: työmaapäälliköt, työnjohtajat, omat, aliurakoitsijat
- Aliurakoitsijan hallinta (worksite_subcontractors)
- Työsuoritteet (mm. betonivalu, raudoitus…)
- Muutostyöt (change orders)
- Tarkastukset (inspections) mallipohjilla
- Huomautukset (remarks)
- Yleisnotet + huomioita seuraavaan päivään
- Content hash -tarkistus (muuttamattomuus todistettavissa)
- Työmaan hierarkkinen käyttöoikeushallinta
- Kuittausvirran audit-loki
- Excel- ja PDF-vienti
🛠 Huoltoraportit
Digitaaliset raportit + PDF + allekirjoitukset
- Huoltoraportin luonti — työmaan tai laitteen alle
- Perustiedot: kohteen osoite, laite, huoltokohde
- Työtoimeksianto-numero (tilausviite)
- Suorittaja + muut osallistujat
- Tehdyt toimenpiteet (rich text)
- Kuvien lisäys suoraan puhelimen kamerasta
- Digitaalinen allekirjoitus (touch/mouse)
- Automaattinen PDF-generointi (natiivi, ei riippuvuuksia)
- PDF:n sisällöissä liitekuvat numeroituna
- Muistutus seuraavasta huollosta sähköpostilla
- Raportin lukitus + purkumahdollisuus adminille
- Huoltohistoria per laite
- Cloudflare R2 -tallennus kuvile ja PDF:ille
🔧 Korjaukset (Repairs)
Vika → korjaustilaus → historia
- Vahvistetut ja odottavat vikailmoitukset
- Korjauksen luonti vikailmoituksesta
- Työvaiheet ja kustannukset
- Korjaushistoria per laite
- Korjauksen liittäminen huoltoraporttiin
- Kustannuskertymä per kohde
⚠️ Vikailmoitukset
Julkinen ja sisäinen ilmoituskanava
- Julkinen vikailmoitus QR-koodin kautta (ei kirjautumista)
- Työntekijän vikailmoitus laitteesta
- Ilmoituksen kohdennus osastolle/käyttäjälle
- Ilmoituksen kuvat ja kuvaus
- Bulk-hyväksyntä ja -hylkäys
- Automaattinen sähköposti-ilmoitus vastaanottajalle
- Automaattihyväksyntä pienille asioille
- Kytkeytyy korjaus- ja huoltotyönkulkuun
🎓 Koulutukset & Perehdytys
Koulutushistoria ja vanhenemiset
- Koulutusaineiston hallinta (adminissa)
- Vanhenemisaikojen seuranta koulutuksittain
- Vanhenemismuistutukset sähköpostilla ja push-ilmoituksena
- Käyttäjäkohtaiset koulutushistoriat
- Pakolliset koulutukset per työrooli/osasto
- Roolipohjaiset koulutusvaatimukset
- Osallistujien joukkotuonti
- Koulutustodistuksen kuva/PDF liite
🏅 Kortit ja Pätevyydet
Työturva, tulityö, EA1, nostot…
- Kategoriat: Turvallisuus, Ajoluvat, Ammatilliset, Terveys, Muut
- Työturvallisuuskortti, Tulityökortti, EA1, Nostoluvat, Trukkikortti
- Voimassaoloajat ja vanheneminen
- Sertifikaattikuvan tallennus
- Odottavat hyväksynnät (admin verifioi)
- Skannauslokitus (kortin QR skannauksesta jää tapahtuma)
- Pakolliset kortit työroolille
- Tenantille käytöstä pois otettavat korttityypit
- Yksittäisen käyttäjän tenanttikohtaiset vaatimukset
⏱ Tuntikirjaus & Tuntikirjanpito
Työaika ja urakoitsijan tunnit
- Yksinkertainen tuntikirjaus (Tuntikirjaus)
- Kittilä-mallinen tuntikirjanpito (Tuntikirjanpito)
- Ryhmä- tai yksilötilassa
- Kustannuspaikat (kategoriat)
- Osastokohtaiset asetukset (custom hours, dropdowns, mappings)
- Työsuoritteet ja hinnastot
- Alue-, työmaa- ja urakoitsijaseuranta
- Excel-vienti laskutusta varten
- Osaston avoimet tehtävät -paneeli
🎯 CRM
Asiakashallinta ja myyntiputki
- Liidiseinä-Kanban: Liidi, Kontaktoitu, Sopiva projekti, Tarjouspyyntö, Tarjous, Odottaa
- Prospektit + kontaktit + aktiviteetit
- Ryhmäliidit (jaettu näkyvyys tiimien kesken)
- Tulokset-välilehti (won/lost)
- "Tavoitettu"-merkintä ja luottamukselliset kentät
- Arvonnasta CRM:ään -integraatio yhdellä klikillä
- Sähköpostiduplikaattitarkistus
- Konvertoidut lomakevastaukset (from campaigns)
🛒 Ryhmätarjoukset (Intra)
Yritysryhmän jaetut hankinnat
- Ryhmähankintojen lista
- Osallistujien hallinta
- Better deal -dialogi (vertailu)
- Sopimusten liitteet
- Kuvat + tarjousten pdf
- Suodatus kategorioittain
📣 Yrityksen tiedotteet
Ilmoitukset ja tärkeät hälytykset
- Tyypit: tärkeä, uutinen, vinkki, juhlailmoitus
- Kohdennus osastoihin
- Kiinnittäminen (pin) etusivun modaaliksi
- Vanhenemisajat
- Luetut merkinnät per käyttäjä
- Tenanttiryhmän jakama tiedote (shared_with_group_id)
- Kuva/ikoni
🛡 Ilmoituskanava
EU 2019/1937 Whistleblower
- Nimetön by design — IP-osoitteita, evästeitä ei tallenneta
- Ilmoituksia ei tallenneta tietokantaan (yksityisyys)
- Suora sähköposti compliance-vastaanottajalle
- Kustomoitava korostusväri
- Julkinen linkki työntekijöille (ei kirjautumista)
- EU-direktiivi 2019/1937 -yhteensopiva
🎁 Arvonnat
Messu-arvonnat ja liidien keräys
- Kustomoi otsikko, kuvaus, logo, brändiväri, hero-kuva
- Slug-URL (www.onetrack.fi/taskmanager/kysely/xxx)
- Alkamis- ja päättymisajat, kiitosviesti, säännöt
- Rate-limiting + honeypot + uniikki-email tarkistus
- Automaattinen voittajien arvonta kelvollisista
- Hylkäys ja hylkäyksen syy
- QR-koodi julkiseen kyselyyn — tulostettava A4-kylttiä varten
- CSV-vienti (yleinen + luottamuksellinen)
- GDPR: yhteydenottolupa erottelu + varoitus ilman lupaa CRM-siirrossa
- CRM-integraatio: prospektiksi yhdellä klikillä
- "Powered by OneTrack" -alaviite
📁 Dokumentit
Projektidokumentit + suostumukset
- Projektidokumentit + kansiorakenne
- Latauslogitus
- Suostumusdokumentit (consent-documents)
- Käyttöehtojen hyväksyminen
- Dokumenttien joukkotuonti
- Versionhallinta
🗺 Karttanäkymä
GPS-sijainnit ja lupakartat
- OpenStreetMap-pohjainen
- Kohteiden GPS-sijainnit reaaliaikaisesti
- Suodatus tyypeittäin
- Lupakartta (rakennuslupa-alue)
- Käyttäjä- ja työmaakartat
📅 Vuosikello
Toistuvat tapahtumat ja katselmukset
- Kalenteri-, lista- ja pyörä-näkymä
- RRULE-toistuvuudet (päivittäin, viikoittain, kuukausittain, vuosittain)
- Poikkeuksien hallinta
- Osasto- ja käyttäjätaso
- Kalenterit toimiston ja työmaan käyttöön
👋 Onboarding
Uuden käyttäjän perehdytys
- Ohjattu wizard-kokemus
- Pakollisten korttien haku ensimmäisenä
- OnboardingGuard estää pääsyn ennen loppuun
- Räätälöitävät pakolliset kentät
- Pakollisten koulutusten pyytäminen
👥 Käyttäjien hallinta
Roolit ja käyttöoikeudet
- Järjestelmäroolit: Superadmin, Admin, Työmaapäällikkö, Työnjohtaja, Työntekijä
- Työroolit (job_roles) tenanttikohtaisesti
- Osastojen jäsenet
- Käyttöoikeuksien hierarkia
- Yksittäisen käyttäjän permission-yliajo
- Tiimin jäsenten lisäys
- Alihenkilöiden uudelleenosoittaminen roolimuutoksissa
- Käyttäjän monta osastoa
- Käyttäjän tarkka certification-status
⚙️ Admin Dashboard
Keskitetty hallinta 17 osiolla
- Käyttäjät + Roolit + Työroolit
- Koulutukset + Kortit + odottavat sertifikaatit
- Mallipohjat (raportti/lomake)
- Osastot + osastovastuut
- Tiedotteet + luetut merkinnät
- Tuntikirjaus-asetukset + osastokohtainen konfig
- Työmaapäiväkirja-hallinta + hierarkkiset oikeudet
- InfoTV-näkymän hallinta (osastojen tilanne)
- QMS-hallinta + import wizardit + reports
- Dokumenttien hallinta
- Tehtävät (standalone tasks)
- Laskutus (tenants)
- CRM-hallinta
- Asetukset (15 osiota)
- Superadmin (tenantien hallinta)
🎛 Asetukset (Admin-sivupalkki)
15 asetuspaneelia
- Sähköposti-ilmoitukset (koostesähköpostit)
- Vikailmoitukset
- Onboarding ja pakolliset kentät
- AI-tilastot
- Laskutus
- Kohdetyypit
- Tarkastustyypit
- Muistutukset
- Vastuualueet
- Ulkoiset linkit
- Integraatiot
- Julkinen sivu (branding)
- Ilmoituskanava
- Arvonnat
- Push-ilmoitukset (VAPID)
⚡ Superadmin
Tenanttien hallinta
- Tenantit — luonti, muokkaus, poisto
- Tenanttiryhmät (konsernit)
- Laskutus per tenantti
- Tenantin laskutushistoria
- Superadmin-käyttöoikeuksien yliajo
- AI-tilastot per tenantti + budjettivalvonta
- Käyttökustannukset
🤖 Tekoäly (AI)
Chat, litterointi, tunnistus
- Chat-avustaja (FloatingChatBubble) — jokainen sivu
- QMS Voice Recorder + Whisper AI -litterointi
- Automaattinen kuvien tunnistus
- Automaattinen QR-tunnistus (kohteet)
- AI-tilastot + kustannusseuranta
- AI-käytön budjettivalvonta per tenantti
🔌 Integraatiot
Toiminnanohjaus ja API
- Easoft-integraatio (per tenantti)
- Osastojen synkronointi Easoft-projekteista
- Työtuntien push Easoftiin (tulossa)
- OpenStreetMap Nominatim (geokoodaus)
- OpenStreetMap tile-server (kartta)
- Cloudflare R2 (kuvat, PDF:t) EU-serveri
- OpenAI API (Whisper, chat)
- REST API (avoin arkkitehtuuri, CSRF-suojattu)
📊 Raportointi
Analyysit ja Excel-viennit
- Työtuntiraportit työntekijöittäin
- Tehtäväkategoria-raportit
- Kohteiden käyttöasteet
- Poikkeamien trendit
- QMS-reports (audit-katselmusta varten)
- Osaston avoimet tehtävät
- Excel-vienti kaikista listoista (natiivi XLSX)
- CSV-tuonti historiadatalle
- Automaattinen kuukausilaskutus
🛠 Alusta
Teknologia ja turvallisuus
- PHP 8.2 + MariaDB + React (Create React App)
- Monitenanttisuus (tenant per row)
- CSRF-suojaus X-CSRF-Token -headerilla
- VAPID Push Notifications (natiivi)
- Service Worker + PWA (asennettavuus, offline-cache)
- Cloudflare R2 -tallennus (EU) AWS Sig v4
- Natiivi XLSX-generointi (ei PhpSpreadsheetä)
- Natiivi PDF-generointi (huoltoraportit)
- Cron-tehtävät: koulutusten vanheneminen, laitteiden muistutukset, laskujen generointi, hyväksyntäkoosteet
- Automaattinen varmuuskopiointi (päivittäinen)
- Git-versionhallinta koodille
- GDPR-yhteensopiva
- EU 2019/1937 -yhteensopivuus ilmoituskanavalle
- ISO 27001 -matka menossa
📱 Käyttöliittymä
Mobiili, PWA, ilmoitukset
- Mobiili-first responsiivinen (murtokohta 700px, 1024px)
- Bottom-nav 7 slottia + Skannaa-hero-nappi
- Kustomoitavat pikavalinnat homelle
- Käytettävissä pöytäkoneella, tabletilla ja puhelimella
- PWA (Progressive Web App) — asennettavuus kotinäytölle
- Web push -ilmoitukset (VAPID)
- Offline-tuki kriittisille toiminnoille
- Hash-perustainen deep-linking
- Mobiili back-swipe -tuki modaaleihin (popstate)
- QR-koodin skannaus kameralla
🌐 Julkiset sivut
Toimivat ilman kirjautumista
- Kohteen julkinen QR-sivu (id.onetrack.fi/xxxx-xxxx)
- Julkinen vikailmoitus laitteesta
- Kohteen palautusviesti (jos löytyi)
- Arvontasivut (kysely/<slug>)
- Ilmoituskanava (nimetön EU 2019/1937 -sivu)
- Kaikki julkiset sivut voi brändätä per tenantti