\documentclass[a4paper]{ohjptdoku}

\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{fancyhdr}
\usepackage{verbatim}
\usepackage{longtable}
\usepackage{array}
\usepackage{float}

\IfFileExists{tikz}
{
\usepackage[x11names, rgb]{xcolor}
\usepackage{tikz}
\usetikzlibrary{snakes,arrows,decorations,shapes,shadows,calc}
}
{
}

% Kuvatekstit eri fontilla
\usepackage[hang,bf]{caption}
\renewcommand{\captionfont}{\it\small}

% Kuvat keskitetyksi
\let\oldfigure\figure
\renewcommand{\figure}[1][1]{\oldfigure[#1]\centering}

% Otsikot hieman pienemmäksi
\usepackage[tiny, compact]{titlesec}
\titleformat*{\section}{\sffamily\bfseries\large}
\titleformat*{\subsection}{\sffamily\bfseries}
\titleformat*{\subsubsection}{\sffamily}
\titleformat{\chapter}[hang] %
{\normalfont\Large\bfseries\sffamily}{\thechapter.}{20pt}{\Large} %
[\vspace{-3pt}\titlerule]
\titlespacing{\chapter}{-2ex}{-6ex}{*4}

% Sisällysluetteloon tasot vain sectioniin asti
\setcounter{tocdepth}{1}

%% Pari muotoilukomentoa
% \nappi{Lisää tehtävä}, eli kaikki käyttöliittymäelementit
% \newcommand{\nappi}[1]{\emph{''#1''}}
\newcommand{\nappi}[1]{\textbf{#1}}

% \ilmoitus{Toiminto epäonnistui!}, eli kaikki virheilmoitukset yms.
\newcommand{\ilmoitus}[1]{\emph{''#1''}}

% Lista jossa otsikot reunassa:
% \begin{reunaotsikot}
% \kohta{foobar} tekstiä
% \end{reunaotsikot}
\newcommand{\kohta}[1]{\item[\small\bf#1\hfill]}
\newenvironment{reunaotsikot}{%
\begin{list}{}{\leftmargin=6em \labelwidth=5em} }{%
\end{list}%
}

% \luokka{Asiakas}, eli luokkien nimet
\newcommand{\luokka}[1]{\textbf{#1}}

\pagestyle{prjdoku}

\begin{document}
\pdfbookmark{Alkusivu}{Alkusivu}

% Vähennetään ylenpalttista tavutusta
\hyphenpenalty=5000
\tolerance=2000

% PNG-kuvien oletuskoko pienemmäksi
\pdfimageresolution=150

\makeatletter
% Estetään sivunvaihto ennen lähdeluetteloa
\renewenvironment{thebibliography}[1]
     {\list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\makeatother

\author{Petteri Aimonen} % Vastuuhenkilö
\title{Toiminnallinen määrittely}

% Automaattisesti päivittyvä päivämäärä, kannattaa ehkä muuttaa
% jossain vaiheessa kiinteäksi
\date{\today}
\versio{1.1}

\maketitle

\pagenumbering{arabic}
\setcounter{page}{2} % Asetetaan sivunumerointi alkamaan sivulta kaksi

\chapter*{Versiohistoria}
\pdfbookmark{Versiohistoria}{Versiohistoria}
% Yksittäisiä muokkauksia ei varmaan kannata kirjata versiohistoriaan,
% ennemminkin sitten kun on jotain melko valmista.
\begin{longtable}{lllp{0.6\textwidth} }
\textbf{Versio:} & \textbf{Pvm:} & \textbf{Tekijä:} & 
\textbf{Kuvaus:} \\
\hline
\endhead
0.9 & 28.10.2009 & Petteri & Dokumenttipohja otettu käyttöön \\
r542 & 29.10.2009 & Petteri & Lisätty käyttötapaus Huoltopyynnön kirjaaminen liitteisiin \\
r543 & 30.10.2009 &  & Yhdessä tehtyjä muutoksia \\
r561 & 31.10.2009 & Petteri & Kirjoitettu kirjautumistoiminnot. Pari käyttöliittymäkuvaa. Lisää käyttöliittymäkuvia. \\
r567 & 02.11.2009 & Petteri & Asiakkaan tietojen tarkastelu. Asiakkaan poistaminen. \\
r569 & 02.11.2009 & Tapio & Kohdat 3.1.6(osto) ja 3.1.7(tuote) tehty. Huoltopyynnön tarkastelu. \\
r571 & 03.11.2009 & Tapio & 4.6 huoltopyyntöjen hallinta, luku 4.7 huoltotehtävien hallinta tehty. \\
r574 & 04.11.2009 & Tapio & Käyttöliittymäkuvia lisätty. Pienieä korjauksia, huoltopyynnön merkitseminen valmiiksi. \\
r575 & 04.11.2009 & Petteri & Huoltopyyntö, huoltotehtävä. \\
r577 & 05.11.2009 & Petteri & Muutettu toimintoja esittely, toiminta, virhetilanteet -muotoon. \\
r578 & 05.11.2009 & Tapio & Muutettu toimintojen otsikoiden jakoa. \\
r580 & 06.11.2009 & Petteri & Lisätty navigointipuu yms. \\
r584 & 07.11.2009 & Petteri & Järjestelmän ilmoituksista. Juttua yläpalkista ja viittausten korjailua. Otsikkojen järjestys yhtenäiseksi. Lisää nuolia navigointipuuhun. \\
r586 & 08.11.2009 & Tapio & Lisäsin tunnistenumerot huoltopyynnön tarkastelukuvaan. Kirjoittelin kappaleeseen 6 vähän jotain. \\
r587 & 12.11.2009 & Marko & Lisäsin 3 luvun kohdat Työlaji(3.1.8) ja Työntekijä(3.1.9). \\
r592 & 14.11.2009 & Petteri & Luku 2 muokkauksia, "Yrityksen johto voi tarkastella työlistoja" mukaan navigointipuuhun. Tiivistin dokumentin yleiskuvauksen. Päivityksiä lukuun 1. Käyttötapaukset liitetty mukaan. \\
r596 & 14.11.2009 & Marko & Ensimmäinen versio työlistoista (4.8). Päivitystä lukuun 4.8. Lisäsin kappaleisiin 4.8 ja 4.9 liittyvät käyttöliittymäkuvat. \\
r597 & 15.11.2009 & Petteri & Navigointipuun päivitys laskutuksen osalta. \\
r598 & 15.11.2009 & Tapio & Lisäsin huoltopyynnön valmiiksi merkitsemis ruudun takaisin huoltopyynnön muokkaukseen. \\
r610 & 15.11.2009 & Marko & Lisätty käyttöliittymäkuva laskun muokkauksesta ja poistettu tarpeeton kuva laskun luomisesta. Päivitetty lukuja 4.8 ja 4.9. Lisätty laskun muokkaus kappale. \\
r616 & 16.11.2009 & Petteri & Luokkakaaviota päivitetty. Luokkakaavion selitys. \\
r618 & 17.11.2009 & Miikka & Lasku- ja Maksusuoritus-tekstit. \\
1.0 & 17.11.2009 & Petteri & Väliversion tulostus viikkoharjoituksiin. \\
r620 & 18.11.2009 & Miikka & Hintatietojutut. \\
r621 & 18.11.2009 & Tapio & Lisää nappeja huoltopyynnön tarkastelunäkymään. \\
r622 & 29.11.2009 & Petteri & Nappien muotoilu lihavoinniksi. \\
r628 & 29.11.2009 & Tapio & Lisää sisältöä kappaleeseen 6. \\
r640 & 29.11.2009 & Marko & Käyttöliittymäkuvia linkitetty dokumenttiin. Pohjustettu kappaletta 7. Tarkennuksia kappaleeseen 4. \\
r642 & 30.11.2009 &  & Yhdessä tehtyjä muutoksia lukuihin 4-10. Lisätty ympäristökaavio, käyttötapauskaavio päivitetty. \\
r646 & 01.12.2009 & Petteri & Värikoodaus navigointipuuhun. \\
r647 & 01.12.2009 & Tapio & Asiakas-luokan taulukkoon sähköpostiosoite.
Pientä viimeistelyä neljännessä luvussa. \\
r649 & 01.12.2009 & Tapio & Laskutus käyttötapauksen päivitys. \\
r651 & 01.12.2009 & Petteri & Laajennettu luokkakaavion kuvatekstiä. Lisätty Laskunlähetys-luokka. Muotoiluja lukuun 3. \\
r652 & 01.12.2009 & Tapio & Päivitystä käyttötapauksiin. \\
r653 & 02.12.2009 & Petteri & Laskunlähetys lisätty luokkakaavioon. \\
r659 & 02.12.2009 & Marko & Muokattu laskuntarkastelu käyttöliittymäkuvaa. Viittauksia kuviin ja korjauksia kappaleeseen 4. Käyttötapaukset päivitetty vastaamaan nykyistä määrittelyä. \\
r660 & 02.12.2009 & Miikka & Kohta 4.5 tehty. \\
r661 & 02.12.2009 & Petteri & Merkitty pakolliset kentät lukuun 3. \\
r664 & 02.12.2009 & Tapio & Lisätty kuka voi muokata lisätä ja poistaa työntekijöitä. \\
r665 & 03.12.2009 & Miikka & Muutokset työaikaan liittyen. \\
r668 & 03.12.2009 & Petteri & Pientä viimeistelyä. Lisäsin yläpalkkiin Omat tiedot -linkin. \\
r670 & 03.12.2009 & Tapio & Korjattu virheellinen viittaus yms, yhden napin nimeen korjaus. \\
1.1 & 04.12.2009 & Petteri & Palautusversion tulostus. \\
\end{longtable}
\sisallys

% Itse sisältö alkaa tästä
% Sisältö kirjoitetaan kunkin otsikon jälkeen.
% Otsikkotasot: \chapter, \şection, \subsection, \subsubsection
\chapter{Johdanto}
\section{Tarkoitus ja kattavuus}
Tämä on toiminnallinen määrittely huoltotietojärjestelmästä eli \emph{HuTi}:sta.
Tarkoituksena on kuvata järjestelmän toiminnallisuus siten, että siitä voidaan
keskustella ja myöhemmin varmistaa, että kaikki sovittu toiminnallisuus on
toteutettu.

Tämä dokumentti sisältää kaiken tiedon järjestelmän toiminnallisuudesta,
mukaan lukien alustavan version käyttöliittymästä. Sen sijaan teknistä
toteutusta ei kuvata tässä määrittelyssä.

\section{Tuote}
HuTi on järjestelmä, joka tukee asiakkailta tulleiden huoltopyyntöjen käsittelyä.
HuTi toimii yrityksen palvelimella ja sitä käytetään WWW-selaimen kautta joko
yrityksen sisäverkosta tai VPN-yhteyden kautta.

\section{Määritelmät, termit ja lyhenteet}
Seuraavat sovellusalueen termit ovat määrittelyn kannalta oleellisia:
\begin{reunaotsikot}
\raggedright
\kohta{Huoltopyyntö} on yksittäinen asiakkaalta tullut yhteydenotto. Jos samassa
yhteydessä kerrotaan useasta, täysin riippumattomasta ongelmasta, kirjataan ne
kuitenkin erillisiksi huoltopyynnöiksi.

\kohta{Huoltotehtävä} on yksi osa huoltopyyntöä. Huoltotehtävällä on aina
yksi työntekijä ja yksi työlaji, josta se muodostuu.

\kohta{Vastuuhenkilö} pitää huolta huoltopyynnön suorituksen valvonnasta ja
vastaa siitä, että se suoritetaan ajallaan.
\end{reunaotsikot}

Dokumentissa käytetään seuraavia merkintöjä:
\begin{reunaotsikot}
\raggedright
\kohta{Luokkien nimet} merkitään lihavoinnilla: \luokka{Asiakas}, \luokka{Huoltopyyntö}.\\
Luokat on esitelty kohdassa \ref{tietosisalto}

\kohta{Käyttöliittymän painikkeet} merkitään lihavoinnilla: \nappi{Tallenna}

\kohta{Järjestelmän ilmoitukset} merkitään kursivoinnilla ja lainausmerkeillä:
\ilmoitus{Tallennus epäonnistui.}

\kohta{Muuttuvat osat virheilmoituksissa} merkitään kulmasulkeisiin:
\ilmoitus{<kohdan nimi> on täytettävä.}

\kohta{Dokumentin sisäiset viittaukset} ilmoitetaan kohdan numerolla
kaarisulkeissa, tai suoraan tekstin joukossa: (\ref{tietosisalto}), kuva \ref{kuva_ymparisto}.

\kohta{Viittaukset kohdan \ref{viitteet} lähteisiin} merkitään hakasuluissa
olevalla lyhenteellä, mahdollisesti myös kohdan numeron kanssa:
\cite{dokpohj}, \cite[1.4]{asvaat}.
\end{reunaotsikot}

\section{Viitteet}
\label{viitteet}
\nocite{*}
\begin{thebibliography}{abcdef}
% Tekstistä viitataan komennolla \cite{asvaat}
\bibitem[dokpohj]{dokpohj}
  Toiminnallinen määrittely - dokumenttipohja, 22.9.2009, versio 2.6.
\bibitem[asvaat]{asvaat}
  HuTi - Huoltotietokanta - asiakasvaatimukset, 28.9.2009, versio 1.1.
\end{thebibliography}

\section{Yleiskatsaus dokumenttiin}
Määrittelydokumentin rakenne on dokumenttipohjan mukainen \cite{dokpohj}.

Luvussa 2 kuvataan järjestelmän toiminta yleisellä tasolla,
luku 3 käsittelee järjestelmän tietosisältöä ja luvussa 4 määritellään
järjestelmän toiminnot.

Luvut 5, 6 ja 7 käsittelevät yhteyksiä muihin järjestelmiin, muita vaatimuksia
ja suunnittelurajoitteita.

Luvuissa 8, 9 ja 10 on tietoja suunnitteluprosessista,
eli esillä olleita ratkaisuja, jatkokehitysajatuksia ja avoimia asioita.

\chapter{Yleiskuvaus}
Huoltotietokanta (HuTi) on tietokonejärjestelmä, jonka tarkoitus on pitää
kirjaa huoltoyritykselle tulleista toimeksiannoista, niihin liittyvistä
toimenpiteistä sekä laskutuksesta.

\section{Ympäristö}
\label{ymparisto}
\begin{figure}[!h]
\includegraphics{ymparistokaavio.pdf}
\caption{Havainnollistava kuva huoltotietojärjestelmän toimintaympäristöstä}
\label{kuva_ymparisto}
\end{figure}
HuTia käytetään www-selaimen kautta. Itse sovellus toimii yrityksen palvelimella,
jonka varmuuskopioinnista on huolehdittu erikseen. Järjestelmän toimintaympäristöä
on havainnollistettu kuvassa \ref{kuva_ymparisto}.

\section{Toiminta}
\begin{figure}[!h]
\includegraphics[scale=0.9]{kayttotapauskaavio.pdf}
\caption{Huoltotietojärjestelmän käyttötapauskaavio.}
\label{kuva_ktkaavio}
\end{figure}

HuTin päätoimintoja ovat huoltopyyntöjen käsittely sekä tätä tukevien tietojen
hallinta. Järjestelmään voidaan kirjata huoltopyyntöjen ja niihin liittyvien
huoltotehtävien lisäksi tiedot asiakkaista, laskuista, työntekijöistä ja
hintatiedoista.

Järjestelmän tärkeimmät käyttötapaukset on esitetty kuvassa \ref{kuva_ktkaavio}.
Käyttötapaukset on jaoteltu asiakaspalvelu-, johto-, vastuuhenkilö- ja
huoltotyöntekijärooleihin, mutta yhdellä työntekijällä voi olla myös useita
rooleja.

\emph{Asiakaspalvelun} tehtävänä on vastaanottaa asiakkaiden yhteydenotot ja kirjata
ne järjestelmään huoltopyynnöiksi, sekä hoitaa valmiiden pyyntöjen laskutus.
Tässä yhteydessä asiakaspalvelu voi myös lisätä, muokata ja poistaa asiakkaiden
tietoja järjestelmästä.

\emph{Yrityksen johto} hoitaa työntekijöiden lisäämisen ja poistamisen järjestelmästä,
sekä tarvittaessa huoltotehtävän siirron työntekijältä toiselle \cite[2.11]{asvaat}.
Päätösten teon tueksi johtajat voivat myös tarkastella kaikkia huoltopyyntöjä,
asiakkaita, maksuhistoriaa ja työntekijöiden työlistoja.

\emph{Vastuuhenkilöksi} merkitty työntekijä voidaan nimittää vastuuseen yksittäisestä
huoltopyynnöstä. Vastuuhenkilön tehtävänä on jakaa pyyntö joukkoon huoltotehtäviä,
jotka annetaan huoltotyöntekijöille suoritettavaksi, sekä merkitä huoltopyyntö
valmiiksi kun kaikki tehtävät on tehty \cite[2.13]{asvaat}.

\emph{Huoltotyöntekijä} pystyy muokkaamaan hänelle osoitettuja huoltotehtäviä.
Suoritettuaan tehtävän loppuun, huoltotyöntekijä merkitsee sen muokkausnäkymässä
(\ref{pyynnonmuokkaaminen}) valmiiksi.

\section{Käyttäjät}
Vain yrityksen työntekijöillä on käyttäjätunnus järjestelmään. Monta käyttäjää
voi käyttää järjestelmää yhtäaikaisesti, ja esimerkiksi yhtäaikaiseen tietojen
muokkaamiseen on varauduttu. Järjestelmä ei tarvitse muuta ylläpitoa kuin
tietojen päivityksen, minkä hoitaa yrityksen johto tai asiakaspalvelu.

Järjestelmän on tarkoitus olla niin helppokäyttöinen, että sitä pystyy käyttämään
kahden tunnin koulutuksella \cite[1.3]{asvaat}. Toisaalta perustaidot tietokoneen
käytöstä ja kokemusta vastaavista www-sovelluksista, kuten esimerkiksi
webmailista, on oltava ennestään. Tämä vaatimus on kohtuullinen, koska kyseessä
on kuitenkin tietokonehuolto.

HuTin käyttö on keskeinen osa työntekijöiden päivittäistä rutiinia, joten
käytettävyys on projektissa olennaista.

\section{Yleiset rajoitteet}
Järjestelmän tiedot ovat luottamuksellisia \cite[1.2]{asvaat}, mutta toisaalta
sitä käytetään vain yrityksen sisäverkosta. Tietoturvallisuuteen on siksi
panostettava, mutta mahdolliset hyökkäykset jäävät harvinaisiksi eikä
korjauspäivitysten nopeus ole kovin kriittinen.

Koska HuTin tietoja tarvitaan jatkuvasti, tulisi järjestelmän olla aina saatavilla.
Järjestelmä kannattaa varmistaa toiselle, identtiselle palvelimelle, jolloin
ongelmien yhteydessä on aina olemassa varajärjestelmä.

\section{Oletukset ja riippuvuudet}
Käyttäjän selaimen oletetaan tukevan \emph{JavaScript}-kieltä, jota käytetään
mm. hakutoiminnoissa ja joissakin ilmoituksissa. Tarvittaessa järjestelmää pitää
pystyä käyttämään myös ilman \emph{JavaScript}-tukea, mutta käytettävyys ei
tällöin ole yhtä hyvä.

Järjestelmän tietomäärä on melko pieni (ks. kapasiteettivaatimukset kohta \ref{kapasiteetti}),
joten palvelinohjelmistoiksi sopivat esimerkiksi ilmaiset \emph{Apache} ja
\emph{MySQL}.

% Nämä pari pidempää lukua ovat erillisissä tiedostoissa
\input{luku3_tietosisalto.tex}
\input{luku4_toiminnot.tex}

\chapter{Ulkoiset liittymät}
\section{Laitteistoliittymät}
Käyttöliittymä ja tulostustoiminnot perustuvat Internet-selaimessa ja käyttöjärjestelmässä olevaan laitteistotukeen. Palvelinkoneella on tarvittavat laitteet varmuuskopioinnin
järjestämistä varten.

\section{Ohjelmistoliittymät}
HuTi rakennetaan valmiiden tietokanta- ja www-palvelinohjelmistojen päälle
(\ref{ymparisto}). Järjestelmä liittyy lisäksi sähköpostipalvelimeen ja
varmuuskopiointijärjestelmään.

\section{Tietoliikenneliittymät}
Järjestelmän käyttö perustuu olemassa olevaan verkkoyhteyteen.
Verkkoyhteydessä käytetään HTTPS-protokollaa. Protokolla on toteutettu www-palvelinohjelmistossa
sekä www-selaimessa.

Järjestelmää voidaan käyttää VPN-laitteiden, laajakaistayhteyksien ja vastaavien HTTPS-protokollaa tukevien laitteiden kanssa.

\chapter{Muut ominaisuudet}
\section{Suorituskyky ja vasteajat}
Järjestelmän pisin sallittu vasteaika  on 5 sekuntia. Kuitenkin 90 prosentissa tapauksista vasteaika jää alle 1 sekunnin. Järjestelmää toteutettaessa varaudutaan enintään sataan yhtäaikaiseen käyttäjään.

\section{Käytettävyys, toipuminen, turvallisuus, suojaukset}
Järjestelmä saa olla esimerkiksi huoltotoimenpiteiden takia poissa käytöstä enintään 4 tuntia kuukaudessa. Järjestelmän tiedot varmuuskopioidaan automaattisesti inhimillisten virheiden ja levyrikkojen varalta kerran päivässä. 

Työntekijän on voitava olla kirjautuneena järjestelmään koko työpäivän ajan. Jos käyttäjä kuitenkin unohtaa järjestelmän päälle kirjaudutaan ulos automaattisesti 3 tunnin joutilaisuuden jälkeen. 

Järjestelmän arkaluontoisinta tietosisältöä ovat asiakkaiden henkilötiedot ja laskutustiedot. Lisäksi on tärkeää havaita mahdollinen salasanojen väärinkäyttö, mutta ne voidaan vaihtaa tarvittaessa. Kaikki työntekijät tarvitsevat pääsyn asiakkaiden henkilötietoihin, mutta laskutiedot näytetään vain yrityksen johdolle ja asiakaspalvelijoille.

Järjestelmän käyttö on suojattu HTTPS-protokollan salauksella. Lähetettäviä sähköposteja ei toistaiseksi salata, koska salaus ei ole laajasti tuettu. Palvelin on suojattava sekä fyysisesti että ohjelmistojen osalta murtautumista vastaan.

Yrityksen johto hoitaa käyttäjätunnusten jakamisen ja ylläpidon. WWW-palvelinohjelmisto pitää lokitiedostoa kaikista yhteyksistä sovellukseen.

\section{Ylläpidettävyys}
HuTin toteuttava yritys hoitaa järjestelmän muokkaamisen. Järjestelmän toteutuksessa huomioidaan ylläpidettävyys siten, ettei ominaisuuksien lisääminen myöhemmin muuta merkittävästi olemassaolevaa rakennetta.

\section{Siirrettävyys ja yhteensopivuus}
Yhteensopivuus erilaisten www-selainten suhteen otetaan huomioon noudattamalla www-standardeja. 
Palvelinosan siirrettävyys riippuu toteutustavasta, jota ei ole vielä päätetty.

\section{Käyttäjän ylläpitotoimet}
Käyttäjän ei tarvitse järjestelmän käyttämisen lisäksi tehdä mitään ylläpitotoimia. Erillinen ylläpito hoitaa järjestelmän kaatumiseen, päivittämiseen tai muuhun huoltoon liittyvät toimenpiteet.

Käyttäjällä ei ole mahdollisuutta, eikä tarvetta säätää sovelluksen asetuksia, vaan se on valmis käytettäväksi sisään kirjautumalla. Evästeet sekä JavaScript on suositeltavaa olla www-selaimen asetuksista sallittuina.

\chapter{Suunnittelurajoitteet}
\section{Standardit ja suositukset}
Järjestelmän käyttäjälle näkyvä osa noudattaa HTTPS- ja XHTML 1.0 -standardeja. Ohjelmointikieleksi valitaan jokin olemassaoleva ja toimivaksi tunnettu vaihtoehto.

\section{Laitteistorajoitteet}
Käyttäjän tietokoneen on tuettava kohdan \ref{ohjelmistorajoitteet} mukaista ohjelmistoa. Vasteaikavaatimukset täyttyvät, kun käytettävän Internet-yhteyden nopeus on vähintään 1 MBps. Laitteiston on oltava riittävän nopea selaimen käyttämistä varten.

Palvelinlaitteiston on tuettava toteutuksessa valittavia tietokanta- ja www-palvelinohjelmistoja.

\section{Ohjelmistorajoitteet}
\label{ohjelmistorajoitteet}
Järjestelmää voidaan käyttää ainakin Windows XP, Windows Vista ja Ubuntu (Linux) 9.04 - käyttöjärjestelmissä Firefox 3.5 selaimella \cite[1.5]{asvaat}.

\section{Muut rajoitteet}
Ei muita rajoitteita.

\chapter{Hylätyt ratkaisuvaihtoehdot}
Aiemmin \luokka{Huoltotehtävä}-tietueeseen liittyi \luokka{Huoltosuoritus}- ja \luokka{Huoltokustannus}-tietueita. Tästä rakenteesta luovuttiin, koska huoltotehtävillä voidaan ilmaista myös erilaiset huoltosuoritukset, joten tätä toista hierarkiatasoa ei tarvita. \luokka{Huoltosuoritus}-tietueen sisältämät kentät (toimenpiteet ja työtunnit) liitettiin suoraan \luokka{Huoltotehtävä}-tietueeseen.

Huoltokustannukset sisälsivät sekä työn hinnan että varaosat. Näiden hinta syötettiin huoltotehtävän suorituksen yhteydessä. Nykyisessä rakenteessa hinnat ovat valmiiksi järjestelmässä, ja huoltotehtävästä luodaan viittaus niihin.

\chapter{Jatkokehitysajatuksia}
Joitakin jatkokehitysajatuksia on listattu asiakasvaatimuksissa. Lisäksi seuraavia asioita on pohdittu määrittelyn laatimisen yhteydessä:
\begin{itemize}
\item Laskutuksen voisi ulkoistaa erilliselle, erityisesti laskutukseen suunnitellulle järjestelmälle. Tällöin laskujen lähetystä ja maksusuoritusten tarkastamista voidaan tehostaa.

\item Järjestelmään voidaan lisätä tuki versiohistorialle, jolloin käyttäjä pystyisi tarkastelemaan esimerkiksi huoltopyyntöjen tietoihin tehtyjä muutoksia ja vanhoja versioita niistä.

\item Järjestelmän käytettävyyttä voidaan parantaa ensimmäisen version käyttäjäkokemuksia arvioimalla. Esimerkiksi värikoodaukset tehtävien kiireellisyydessä voisivat olla hyödyllisiä.
\end{itemize}

\chapter{Vielä avoimet asiat}
\begin{itemize}
\item Toteutuskieli, http-palvelin- ja tietokantaohjelmistot päätetään järjestelmän toteutusvaiheessa.
\end{itemize}

\chapter*{Liite 1: Käyttötapaukset}
\pdfbookmark{Liite 1: Käyttötapaukset}{liite1}
\section*{Huoltopyynnön kirjaaminen}
\begin{reunaotsikot}
\kohta{Versio:} 1.2
\kohta{Tekijä:} Miikka Myllymäki
\kohta{Suorittaja:} Asiakaspalvelija
\kohta{Esiehdot:}   Asiakaspalvelija on kirjautunut järjestelmään.

\kohta{Kuvaus:}
Jos asiakas on uusi, asiakaspalvelija klikkaa yläpalkin kohtaa \nappi{Asiakaslista}. Tällöin siirrytään asiakaslistaan, 
josta asiakaspalvelija painaa \nappi{Luo uusi asiakas} -painiketta. Käyttäjälle avautuu asiakkaan lisääminen ikkuna.
Asiakaspalvelija täyttää vähintään pakolliset kentät: nimi ja puhelinnumero työaikaan. Tarvittaessa täytetään myös kentät:
katuosoite, postinumero, paikkakunta ja sähköpostiosoite. Tämän jälkeen hän painaa \nappi{Tallenna} painiketta, jolloin 
asiakkaan tiedot tallentuvat järjestelmään.

Kun asiakas on lisätty järjestelmään, asiakaspalvelija valitsee käyttöliittymän yläpalkista kohdan \nappi{Huoltopyynnöt}. 
Asiakaspalvelija klikkaa avautuvasta näkymästä painiketta \nappi{Luo uusi huoltopyyntö}. Huoltopyynnön lisäämis ikkuna avautuu.

Asiakaspalvelija valitsee asiakkaan etsintävalikosta. Asiakaspalvelija kirjoittaa mahdollisimman tarkan kuvauksen asiakkaan ongelmasta
laitetietoineen ongelman kuvauskenttään.‎  Tiedot mahdollisesta kotikäynnistä tai
laitteiden noudosta kirjataan lisätietokenttään‏.‎ ‏Asiakaspalvelija voi tarvittaessa
muuttaa automaattisesti täytettyä vastaanottoaika-kenttää.

Asiakaspalvelija valitsee etsintävalikosta pyynnölle vastuuhenkilön.  

Syötettyään tiedot asiakaspalvelija painaa nappia‎ ‏\nappi{Tallenna‎}‏,‎ ‏jolloin tiedot
tallentuvat järjestelmään ja järjestelmä palaa huoltopyyntölistaan.

\kohta{Poikkeukset:} -

\kohta{Lopputulos:} Uusi huoltopyyntö on kirjattu ja vastuuhenkilö näkee sen omasta työlistastaan.

\kohta{Muut vaatimukset:}
Käyttöliittymän pitää olla riittävän helppokäyttöinen, että kirjaaminen voidaan tehdä puhelun aikana. Lisäksi järjestelmän yleiset vasteaikavaatimukset.
\end{reunaotsikot}

\clearpage
\section*{Huoltotehtävien lisääminen}
\begin{reunaotsikot}
\kohta{Versio:} 1.2
\kohta{Tekijä:} Marko Turunen
\kohta{Suorittaja:} Vastuuhenkilö
\kohta{Esiehdot:} Vastuuhenkilö on kirjautunut järjestelmään ja hänet on valittu vastuuhenkilöksi huoltopyyntöön.
\kohta{Kuvaus:}
Vastuuhenkilö valitsee käyttöliittymän yläpalkista kohdan \nappi{Oma työlista}.
Vastuuhenkilö klikkaa listasta huoltopyyntöä, johon haluaa luoda uusia
työtehtäviä. Vastuuhenkilölle avautuu huoltopyynnön tarkastelunäkymä.

Huoltopyynnön tarkastelunäkymässä vastuuhenkilö klikkaa \nappi{Lisää huoltotehtävä}
-painiketta. Vastuuhenkilölle avautuu huoltotehtävän lisäämis näkymä.
Vastuuhenkilö täyttää tehtävän kuvauksen, valmis viimeistään -kentän ja valitsee listasta työlajin.
Vastuuhenkilö valitsee työntekijän huoltotehtävälle tarjolla olevista
työntekijöistä hakutoiminnon (\ref{hakutoiminnot}) avulla.

Lopuksi vastuuhenkilö painaa \nappi{Tallenna}-painiketta, jolloin huoltotehtävä
kirjataan järjestelmään ja työntekijälle lähetetään ilmoitus uudesta
työtehtävästä. Näkymä palautuu huoltopyynnön tarkastelunäkymään.

\kohta{Poikkeukset:} -

\kohta{Lopputulos:} Järjestelmään on luotu uusi huoltotehtävä.

\kohta{Muut vaatimukset:} Järjestelmän yleiset vasteaikavaatimukset.
\end{reunaotsikot}

\clearpage
\section*{Huoltotehtävän suorittaminen}
\begin{reunaotsikot}
\kohta{Versio:} 1.2
\kohta{Tekijä:} Petteri Aimonen
\kohta{Suorittaja:} Huoltotyöntekijä
\kohta{Esiehdot:} Työntekijä on kirjautunut järjestelmään. Huoltotehtävä on osoitettu kyseiselle työntekijälle.
\kohta{Kuvaus:}
Työntekijä valitsee käyttöliittymän yläpalkista kohdan \nappi{Oma työlista}.
Työntekijä klikkaa listasta huoltopyynnön, johon tehtävä liittyy \nappi{Tarkastele} linkkiä nähdäkseen
huoltopyynnön yksityiskohdat. Työntekijä painaa kyseisen tehtävän kohdalta
painiketta \nappi{Muokkaa}.

Työtehtävän muokkausnäkymässä työntekijä kirjoittaa vapaamuotoisesti tehdyt
toimenpiteet tekstikenttään ja työtuntien määrän numeroina toiseen kenttään.
Työntekijä voi tarvittaessa lisätä huoltotehtävään liittyviä tuotteita \nappi{Tuotteet} valikosta. Jos
tehtävä on nyt valmis, työntekijä merkitsee rastin kenttään \nappi{Huoltotehtävä on valmis}.

Syötettyään tiedot työntekijä painaa nappia \nappi{Tallenna}, jolloin tiedot
tallentuvat järjestelmään ja työntekijä palaa huoltopyynnön sivulle. [Poikkeus:
toinen käyttäjä on muokannut tehtävää]

\kohta{Poikkeukset:}
Toinen käyttäjä on muokannut tehtävää: Mikäli toinen käyttäjä tallentaa
muutokset sillä välin kun tehtävää muokataan, järjestelmä estää tietojen
tallennuksen. Järjestelmä näyttää toisen käyttäjän tallentamat tiedot,
jolloin työntekijä voi yhdistää tiedot itse syöttämiinsä. Tämän
jälkeen työntekijä painaa jälleen \nappi{Tallenna}.

\kohta{Lopputulos:}
Tiedot tehtävän suorittamisesta tallentuu huoltotehtävän yhteyteen, josta vastuuhenkilö näkee ne.

\kohta{Muut vaatimukset:}
Syötetyt tiedot eivät saa kadota poikkeustilanteiden yhteydessä. Lisäksi järjestelmän yleiset vasteaikavaatimukset.
\end{reunaotsikot}

\clearpage
\section*{Laskutus}
\begin{reunaotsikot}
\kohta{Versio:} 1.2
\kohta{Tekijä:} Tapio Linnimäki
\kohta{Suorittaja:} Asiakaspalvelija
\kohta{Esiehdot:} Asiakaspalvelija on kirjautunut sisään järjestelmään. Huoltopyyntö on syötetty järjestelmään ja merkitty valmiiksi.

\kohta{Kuvaus:}
Asiakaspalvelija valitsee käyttöliittymän yläpalkista kohdan \nappi{Huoltopyynnöt}.
Huoltopyyntölistasta hän etsii valmiin huoltopyynnön,‭ ‬jota haluaa laskuttaa.‭ 
Huoltopyynnön tarkastelunäkymästä käyttäjä valitsee laskutuksen.‭

‬Käyttäjä saa eteensä esitäytetyn laskun,‭ ‬jota hän pääsee muokkaamaan painamalla \nappi{Muokkaa} painiketta.‭
‬Lopuksi käyttäjä voi joko lähettää laskun asiakkaalle sähköpostilla tai tulostaa sen painamalla \nappi{Lähetä sähköpostina} tai \nappi{Tulosta} painiketta.
‭‭ ‬Lasku tallentuu järjestelmään.‭ Kun asiakas on maksanut laskun,‭ ‬merkitsee asiakaspalvelija laskun tarkastelusta sen maksetuksi.‭ [‬Poikkeus:‭ ‬Maksu myöhästyy‭]‬.

\kohta{Poikkeukset:}
Maksu myöhästyy:‭ ‬Jos asiakas ei ole eräpäivään mennessä maksanut laskua,‭ 
lähettää käyttäjä hänelle huomautuksen sähköpostilla tai postitse.

\kohta{Lopputulos:}‭
‬Lasku lähetetty asiakkaalle,‭ ‬merkitty maksetuksi ja tallennettu‭ järjestelmään.

\kohta{Muut vaatimukset:} Järjestelmän yleiset vasteaikavaatimukset.
\end{reunaotsikot}
\end{document}
