Aiemmissa kirjoituksissani olen esitellyt muutamia Power Platformilla omaan (Forward Forever) käyttöön rakennettuja ratkaisuja. Hoidamme esimerkiksi tuntikirjaukset sekä laskuliitteiden generoinnin Power Platformia hyödyntäen.

Seuraavaksi olikin aika modernisoida kululaskut.

Nykyinen prosessi on suoraviivainen. Työntekijä tallentaa kuitit SharePoint-dokumenttikirjastoon. Josta ne manuaalisesti syötetään kuukausittain eteenpäin.

Rakennetaan aluksi työntekijöille miellyttävämpi tapa syöttää kuitit selitteineen oikeaan paikkaan. Kuittien määrän lisääntyessä voimme automatisoida myös niiden käsittelyn ja siirron maksujärjestelmään. Ei kuitenkaan tehdä sitä vielä.

SharePoint dokumenttikirjasto

Kuitit tallennetaan edelleen SharePoint-dokumenttikirjastoon. Lisätään kirjastoon muutama metatieto helpottamaan käsittelyä.

  • Kulun loppusumma (Total value)
  • Kuvaus (description)
  • Ostopaikka (Vendor)
  • Onko kulu maksettu jo työntekjälle (Paid)

Voimme siirtyä varsinaisen sovelluksen pariin.

Power Apps

Luodaan uusi sovellus (mobiili layout) ja lisätään siihen galleria. Galleriassa näytetään käyttäjän luomat kulut, joita ei ole vielä maksettu.

Items = Filter(Expenses, Tekijä.Email = varCurrentUser.Email And Paid = false)

VarCurrentUser on muuttuja, jonka arvo asetetaan sovelluksen käynnistyksen (App OnStart) yhteydessä.

Set(varCurrentUser, User())

Lisätään AI Builder -kontrolli, joka osaa tulkita kuitista sen sisällön (Receipt processor).

Kontrolli toimii näppärästi. Käyttäjä valitsee kuvan (Scan receipt), joko laitteen kuvakirjastosta tai ottamalla uuden valokuvan. Kuva analysoidaan, jonka jälkeen se näytetään käyttäjälle. Kuvasta näkee suoraan, mitkä osat siitä on tunnistettu.

Kuitti voi olla valokuva kuitista (jopa väärin päin) tai esim pdf-muotoinen kuitti verkkokaupasta.

Kuitin tietojen täydennys / korjaus

Kuitin skannaamisen jälkeen siirrytään tarkastamaan sen tiedot. Samalla käyttäjä täydentää kentät, jotka jäivät tyhjiksi.

Luodaan uusi näyttö (Receipt Info), jossa on SharePoint-kirjastoomme kytketty lomake. Mikäli olemme syöttämässä uutta kulua (lomakkeen tila <> FormMode.Edit), käytämme kenttien oletusarvoina AI:n parsimia arvoja.

Lomakkeen tulee olla luonnollisesti New-tilassa. Pakotetaan se siihen sivulle navigoinnin yhteydessä.

Mutta…

Haluamme tallentaa dokumenttikirjastoon myös sen kuitin. Tämäpä ei onnistu vieläkään suoraan lomakkeelta.

Teemme siis Flow’n, joka hoitaa kuitin tallennuksen.

Flow – Kuitin tallennus

Flow käynnistyy Power Appsista. Tallennetaan ensin omiin muuttujiinsa talteen PowerAppsilta saatavat arvot.

  • Tiedoston sisältö (File content)
  • Tiedoston tyyppi (File extension)
  • Otsikko (Title)
  • Kuvaus (Description)
  • Mistä ostettu (Vendor)
  • Summa (Total value)

Haetaan käyttäjän profiili, jonka jälkeen luodaan kulukirjastoon uusi tiedosto (Create file). Päivitetään heti perään luodun tiedoston metatiedot (Update file properties).

Näin tiedosto on luotu.

Jotta tieoston esikatselu toimii, tulee sillä olla oikea tiedostopääte. Flow saa tämän parametrina (FileExtension) ja se selvitetään Power Appsissa tutkimalla raa’asti tiedoston sisältöä.

If(
  Find("application/pdf",ReceiptProcessor3.OriginalImage) > 0,
    "pdf",
  Find("image/gif",ReceiptProcessor3.OriginalImage) > 0,
    "gif",
  Find("image/jpeg",ReceiptProcessor3.OriginalImage) > 0,
    "jpg",
  Find("image/png",ReceiptProcessor3.OriginalImage) > 0,
     "png",
     "unknown"
  )

Maksamattomien kulujen muokkaus

Tehdään vielä muutama viilaus, jotta käyttäjä voi muokata lisäämiään (mutta ei vielä maksettuja) kulujaan.

Lisätään pääsivun kulu-galleriasta navigointi kuitti-näytölle (Receipt Info). Pakotetaan samalla lomake muokkaus-tilaan (EditForm(frmExpense)).

Kulun tallennus tapahtuu nyt eri tavalla riippuen siitä onko kyseessä luonti vai muokkaus.

  • Uutta luodessa kutsutaan Flow’ta
  • Muokattaessa tiedot päivitetään lomakkeen avulla (SubmitForm)
If(
  frmExpense.Mode = FormMode.Edit,
    SubmitForm(frmExpense),
    Set(varReturnvalue,'PA - Add Expense'.Run(
       ReceiptProcessor3.OriginalImage,
       DataCardValue6.Text,
       inpTotalValue.Text,
       DataCardValue8.Text,
       inpVendor.Text,
       lblFileExtension.Text)
    )
  )

Kuitin näyttäminen

Käyttäjälle olisi mukava näyttää tietojen täyttämisen yhteydessä myös se lisätty kuitti. Haasteena on, että uusi kuitti voi olla joko kuva tai pdf -tiedosto.

Lisätään näytölle omat kontrollit (Image ja PdfViewer) erityyppisten tiedostojen esikatseluun. Näistä näytetään tilanteen mukaan se oikea.

Sisältö molemmissa kontrolleissa on sama.

If(frmExpense.Mode = FormMode.Edit,
     galExpences.Selected.Pikkukuva.Large, 
     ReceiptProcessor3.OriginalImage
  )

Viimeistely

Lopuksi siistitään sovelluksen ulkoasua ja vaihdetaan värit sekä fontit oikeiksi. Samalla kuitin skannaaminen eriytetään omaksi näytökseen. Näin saadaan etusivulle enemmän tilaa maksamattomille kuiteille.

Yhteenveto

Kuitin prosessointi (Receipt processor) on vielä esikatseluvaiheessa (preview). Se tunnistaa tietoja kuiteista vaihtelevalla menestyksellä. Yllättävän hyvin jokatapaukasessa.

Yleisesti saatavilla olevat (GA) AI Builder -komponentit ovat Power Platformin lisämaksullisia ominaisuuksia. Niiden käyttö edellyttää AI Builder creditejä, joita voi ostaa 5 miljoonan erissä hintaan 500$/kk.

Omassa tenatissamme on yksi Flow per user with attended RPA -lisenssi, joka sisältää 5000 AI Builder creditiä. Pian nähdään riittävätkö ne meillä kululaskujen kuittien analysointiin