|
|
Rivi 3: |
Rivi 3: |
| ===R-koodi=== | | ===R-koodi=== |
|
| |
|
| <rcode name="budjetti" include="page:OpasnetBaseUtils|name:generic" variables=" | | <rcode name="budjetti" include="page:OpasnetBaseUtils|name:generic|page:Projektinhallinta|name:budjetti" variables=" |
| name:jaottelu|description:Mitkä jaottelut haluat näyttää yhteenvedossa?|type:checkbox|options:1;Projekti;2;Työpaketti;3;Vuosi;4;Laitos;5;Rahoittaja;6;Kustannuslaji|default:2;3| | | name:jaottelu|description:Mitkä jaottelut haluat näyttää yhteenvedossa?|type:checkbox|options:1;Projekti;2;Työpaketti;3;Vuosi;4;Laitos;5;Rahoittaja;6;Kustannuslaji|default:2;3| |
| category:Voit valita näytettävät yksityiskohdat ja myös rajata tarkastelusi yhteen työpakettiin tai vuoteen.| | | category:Voit valita näytettävät yksityiskohdat ja myös rajata tarkastelusi yhteen työpakettiin tai vuoteen.| |
Rivi 30: |
Rivi 30: |
| } | | } |
|
| |
|
| ####Budjettilaskenta: suunnitelluista palkka- ja muista menoista lasketaan kokonaisbudjetti.
| |
|
| |
|
| # Kehityskohteita: Otetaan vapaakenttärivejä, joiden määrä riippuu jostain vastinrivistä.
| | out <- budjettilaskenta("Op_fi2912", series_id = 4118, rahoittaja = "STM", projekti = "Tekaisu", työpaketti = "TP1", työpaketti.add = työpaketti.add, rahoittaja.add = rahoittaja.add, kustannuslaji.add = kustannuslaji.add, määrä.add = määrä.add, kuvaus.add = kuvaus.add) |
| | |
| budjettilaskenta <- function(page, laitos = "THL", vuosi = "2012", rahoittaja = "Suomen Akatemia",
| |
| projekti = "Projekti", työpaketti = "Työpaketti", työpaketti.add = "Työpaketti", vuosi.add = "2012", laitos.add =
| |
| "THL", rahoittaja.add = "Suomen Akatamia", kustannuslaji.add = "Palkka VT7", määrä.add = 0, kuvaus.add = "") {
| |
| | |
| # Haetaan budjettidata ja lisätään siihen kaikki ne sarakkeet joita taulussa ei ole.
| |
| out <- op_baseGetData("opasnet_base", page)[, -c(1,2)]
| |
| if(!"Projekti" %in% colnames(out)) {out <- cbind(out, data.frame(Projekti = projekti))}
| |
| if(!"Työpaketti" %in% colnames(out)) {out <- cbind(out, data.frame(Työpaketti = työpaketti))}
| |
| if(!"Vuosi" %in% colnames(out)) {out <- cbind(out, data.frame(Vuosi = vuosi))}
| |
| if(!"Rahoittaja" %in% colnames(out)) {out <- cbind(out, data.frame(Rahoittaja = rahoittaja))}
| |
| if(!"Laitos" %in% colnames(out)) {out <- cbind(out, data.frame(Laitos = laitos))}
| |
| | |
| # Datan kuvaus lisätään jokaisen vuoden riville.
| |
| kuvaukset <- out[out$Vuosi == "kuvaus", !colnames(out) %in% c("Result", "Vuosi")]
| |
| colnames(kuvaukset)[colnames(kuvaukset) == "Result.Text"] <- "kuvaus"
| |
| out <- merge(out, kuvaukset)
| |
| | |
| # Turhat (tyhjät) sarakkeet ja rivit poistetaan.
| |
| out <- out[out$Vuosi != "kuvaus", !colnames(out) %in% c("Result.Text", "obs.1")]
| |
|
| |
| # Sarakkeiden nimet siistitään ja määrä muutetaan faktorista numeroiksi.
| |
| colnames(out)[colnames(out) == "Result"] <- "määrä"
| |
| out$määrä <- as.numeric(as.character(out$määrä))
| |
|
| |
| # Lisätään rivi, jossa on käyttöliittymän kautta annetut tilapäisen tapahtuman tiedot.
| |
| temp <- data.frame(Projekti = projekti, Työpaketti = työpaketti.add, Vuosi = vuosi.add, Laitos = laitos.add,
| |
| Rahoittaja = rahoittaja.add, Kustannuslaji = kustannuslaji.add, määrä = määrä.add, kuvaus = kuvaus.add)
| |
| out <- rbind(out, temp)
| |
| | |
| # Haetaan ALV-prosentit ja lasketaan ne relevanteille riveille.
| |
| alv <- tidy(op_baseGetData("opasnet_base", "Op_fi2913"))
| |
| alv <- merge(out, alv) # ALV laitetaan joka riville, joille se on määritelty.
| |
| alv$määrä <- alv$määrä * alv$Result
| |
| alv$Kustannuslaji <- "ALV"
| |
| alv <- alv[colnames(out)]
| |
| out <- rbind(out, alv)
| |
| | |
| # Haetaan sivukulu- ja yleiskustannuskertoimet Opasnetistä, siistitään ja yhdistetään budjettiin.
| |
| kertoimet <- op_baseGetData("opasnet_base", "Op_fi2704")[, 3:8]
| |
| kertoimet <- reshape(kertoimet, v.names = "Result", idvar = "obs.1", timevar = "Kerroin", direction = "wide")
| |
| kertoimet <- kertoimet[, colnames(kertoimet) != "obs.1"]
| |
| colnames(kertoimet)[colnames(kertoimet)=="Result.Yleiskustannus"] <- "Yleiskustannus"
| |
| colnames(kertoimet)[colnames(kertoimet)=="Result.sivukulu"] <- "Sivukulu"
| |
| out <- merge(out, kertoimet, all.x = TRUE)
| |
| | |
| # Haetaan laitoksen vaativuusluokkien keskipalkat, siistitään ja yhdistetään budjettiin.
| |
| palkka <- op_baseGetData("opasnet_base", "Op_fi2705")[, 3:6]
| |
| colnames(palkka)[colnames(palkka)=="Result"] <- "kkpalkka"
| |
| colnames(palkka)[colnames(palkka)=="Vaativuusluokka"] <- "Kustannuslaji"
| |
| out <- merge(out, palkka, all.x=TRUE)
| |
| | |
| # Budjetissa on erikseen aktiviteetin määrä (määrä) ja yksikköhinta (kkpalkka).
| |
| # Yksikköhinta on kuukausipalkka palkoille ja euromääräisille aktiviteeteille 1.
| |
| out$kkpalkka <- ifelse(is.na(out$kkpalkka), 1, out$kkpalkka)
| |
|
| |
| # Muutetaan aktiviteetit euromääräisiksi summiksi. Entinen määrä-sarake muutetaan henkilökuukausiksi.
| |
| out$summa <- out$määrä * out$kkpalkka
| |
| colnames(out)[colnames(out)=="määrä"] <- "htkk"
| |
| | |
| # Merkitään joka rivi joko tuloksi tai menoksi.
| |
| out$tulomeno <- ifelse(out$Kustannuslaji == "Tulot" | substr(paste(out$kuvaus, " "), 1,4) == "TULO", "Tulot", "Menot")
| |
|
| |
| # Seuraavaksi etsitään sellaiset tulot, jotka automaattisesti skaalataan jonkin määrätyn menon suuruiseksi.
| |
| # Vertailukohtana toimiva meno tunnistetaan indeksien arvojen avulla.
| |
| # Kehityskohde: kaikkia indeksin arvoja ei tarvitse määritellä, vaan voi käyttää "villiä korttia".
| |
| # rahoitus sisältää tiedon siitä, mitä menoja rahoitetaan ja millä prosentilla (osuus 1 tarkoittaa 100%).
| |
| rahoitus <- out[substr(paste(out$kuvaus, " "), 1, 9) == "TULOVASTA", ]
| |
| rahoitus$osuus <- rahoitus$htkk
| |
| rahoitus <- (rahoitus[, c("Projekti", "Työpaketti", "Vuosi", "Laitos", "Kustannuslaji", "tulomeno", "osuus")])
| |
| rahoitus$tulomeno <- "Menot"
| |
| | |
| # temp yhdistää tiedon että rahoitetaan määriteltyihin menoihin. Sen jälkeen tämä summa nimetään tuloksi
| |
| # ja lisätään budjettitauluun ja siirrettään summa-sarakkeeseen.
| |
| temp <- merge(out, rahoitus)
| |
| temp$osuus <- temp$summa * temp$osuus
| |
| temp <- temp[, c("Laitos", "Vuosi", "Kustannuslaji", "Työpaketti", "Projekti", "tulomeno", "osuus")]
| |
| temp$tulomeno <- "Tulot"
| |
| out <- merge(out, temp, all.x = TRUE)
| |
| out$summa <- ifelse(is.na(out$osuus), out$summa, out$osuus)
| |
| | |
| # Lasketaan sivukulut ja yleiskustannukset ja merkitään joka rivi joko tuloksi tai menoksi.
| |
| test <- substr(paste(out$Kustannuslaji, " "), 1, 6) == "Palkka" # Onko palkkarivi?
| |
| out$htkk <- ifelse(test | substr(paste(out$kuvaus, " "), 1, 4) == "TULO", out$htkk, 0)
| |
| out$Sivukulu <- ifelse(test, out$Sivukulu * out$summa, 0)
| |
| out$Yleiskustannus <- ifelse(test, out$Yleiskustannus * (out$Sivukulu + out$summa), 0)
| |
| out$tulomeno <- ifelse(out$Kustannuslaji == "Tulot" | substr(paste(out$kuvaus, " "), 1,4) == "TULO", "Tulot", "Menot")
| |
| | |
| # Lisätään omat rivit sivukuluille ja yleiskustannuksille.
| |
| palkat <- out[substr(paste(out$Kustannuslaji, " "), 1, 6) == "Palkka", ]
| |
| palkat$Kustannuslaji <- "Yleiskustannus"
| |
| palkat$summa <- palkat$Yleiskustannus
| |
| out <- rbind(out, palkat)
| |
| palkat$Kustannuslaji <- "Sivukulu"
| |
| palkat$summa <- palkat$Sivukulu
| |
| out <- rbind(out, palkat)
| |
| | |
| # Menot merkitään negatiivisiksi, jotta voidaan laskea tulot ja menot yhteen.
| |
| out$summa <- ifelse(out$tulomeno == "Tulot", out$summa, -out$summa)
| |
|
| |
| # Nyt lisätään TULOLOPUT eli tieto siitä, mikä rahoittaja maksaa tietyn osuuden jäljelle jäävästä summasta.
| |
| # Summat lasketaan vuoden, työpaketin ja projektin yhdistelmille.
| |
| # Ensin tyhjennetään summasarake TULOLOPUT-riveiltä, koska siinä on osuus vaikka pitää olla 0.
| |
| out$summa <- ifelse(substr(paste(out$kuvaus, " "), 1,9) == "TULOLOPUT", 0, out$summa)
| |
| tarve <- as.data.frame(as.table(tapply(-out$summa, out[, c("Vuosi", "Työpaketti", "Projekti")], sum)))
| |
| tarve$Freq <- ifelse(tarve$Freq < 0, 0, tarve$Freq)
| |
| out <- merge(out, tarve)
| |
| # Rahoitusosuus on htkk-sarakkeessa ja tarvittava työpaketin tilanne (=tarve) Freq-sarakkeessa.
| |
| out$summa <- ifelse(substr(paste(out$kuvaus, " "), 1, 9) == "TULOLOPUT", out$htkk * out$Freq, out$summa)
| |
| out <- out[, c("Projekti", "Työpaketti", "Vuosi", "Laitos", "Rahoittaja", "Kustannuslaji", "tulomeno", "htkk", "summa", "kuvaus")]
| |
| | |
| return(out)
| |
| }
| |
| | |
| ################### Budjettiyhteenveto laskee erilaisia summatauluja budjettilaskennan tuottamasta taulusta, jossa on jokainen tapahtuma eritelty.
| |
| | |
| budjettiyhteenveto <- function(budjettitaulu, jaottelu = c(1,2,3), param = "summa") {
| |
| out <- budjettitaulu
| |
| # Kaikki palkat muutetaan samanlaisiksi.
| |
| out$Kustannuslaji <- ifelse(substr(paste(out$Kustannuslaji, " "), 1, 6) == "Palkka", "Palkka", as.character(out$Kustannuslaji))
| |
| | |
| | |
| jaottelu <- c("tulomeno", c("Projekti", "Työpaketti", "Vuosi", "Laitos", "Rahoittaja", "Kustannuslaji")[jaottelu])
| |
| out <- as.data.frame(as.table(tapply(out[, param], out[, jaottelu], sum)))
| |
| | |
| # Tyhjät rivit poistetaan ja otsikoita parannetaan.
| |
| colnames(out)[colnames(out) == "Freq"] <- param
| |
| out <- out[!is.na(out[param]), ]
| |
| | |
| return(out)
| |
| }
| |
| | |
| | |
| ############################# htkk
| |
| htkk <- function(budjettitaulu, jaottelu = c(1,2,3)) {
| |
| out <- budjettitaulu
| |
| out <- out[substr(paste(out$Kustannuslaji, " "), 1, 6) == "Palkka" & out$tulomeno == "Menot", ]
| |
| out <- budjettiyhteenveto(out, param = "htkk")
| |
| return(out)
| |
| }
| |
| | |
| out <- budjettilaskenta("Op_fi2912", rahoittaja = "STM", projekti = "Tekaisu", työpaketti = "TP1", työpaketti.add = työpaketti.add, rahoittaja.add = rahoittaja.add, kustannuslaji.add = kustannuslaji.add, määrä.add = määrä.add, kuvaus.add = kuvaus.add)
| |
|
| |
|
|
| |
|
Rivi 204: |
Rivi 61: |
|
| |
|
| </rcode> | | </rcode> |
|
| |
|
| |
| ==Budjetti==
| |
|
| |
|
| |
| <t2b index="Obs,Rahoittaja,Laitos,Työpaketti,Kustannuslaji,Vuosi" locations="2012,2013,2014,kuvaus" unit="€, pm">
| |
| 1|STM|Tuntematon|TP1|Ostopalvelu|37500|90000|90000|Kilpailutettava työ: projektikoordinaattori htkk à 7500 (sis sivukulut ja YK mutta ei ALV)
| |
| 31|STM|Tuntematon|TP1|Palkka 0|5|12|12|Kilpailutettava työ: arvio htkk määrä ostopalvelussa
| |
| 30|STM|Tuntematon|TP1|ALV|1|1|1|TULOVASTA: Kilpailutettava työ: projektikoordinaattori htkk à 7500 (sis sivukulut ja YK mutta ei ALV)
| |
| 26|THL|Nordem|TP1|Ostopalvelu ei-ALV|8000|0|0|Mikko Pohjola: Environmental health assessment for use
| |
| 2|STM|THL|TP1|Palkka VT4|1|1|1|Erikoistutkija Jouni Tuomisto
| |
| 3|STM|THL|TP1|Tulot|0|0|0|Tuke-rahoitus
| |
| 4|STM|THL|TP1|Tulot|0|100000|80000|Kaste2-rahoitus
| |
| 27|STM|THL|TP1|Tulot|35000|0|0|STM:n ympäristöterveyden hankerahoitus (terveydensuojeluohjelma)
| |
| 5|THL|THL|TP1|Palkka VT4|0|1|1|TULOVASTA: THL:n budjettirahaa omien työntekijöiden palkkoihin (J.T.)
| |
| 6|THL|THL|TP1|Tulot|1|1|1|TULOLOPUT: THL:n rahoitus puuttuvasta osuudesta
| |
| 7|STM|THL|TP2|Palkka VT6|5|3|3|Tutkija A.A. (ympäristöterveys)
| |
| 9|STM|THL|TP2|Palkka VT5|2|6|2|Tutkija N.N./O.H. (arviointi ja päätöksenteko)
| |
| 28|STM|THL|TP2|Palkka VT9|7|0|0|Graduntekijä 2 kpl I.?. ja ?.K.
| |
| 10|STM|THL|TP2|Ostopalvelu ei-ALV|6000|12000|12000|Muut kulut (mm. ostopalveluna tiedonkeräystä piloteissa)
| |
| 32|STM|THL|TP2|Palkka 0|2|4|4|Ostopalvelu: arvio htkk
| |
| 11|STM|THL|TP2|Tulot|50000|28000|28000|STM:n ympäristöterveyden hankerahoitus (terveydensuojeluohjelma)
| |
| 12|THL|THL|TP2|Tulot|1|1|1|TULOLOPUT: THL:n budjettirahaa
| |
| 13|STM|THL|TP3|Tulot|15000|37000|37000|STM:n ympäristöterveyden hankerahoitus (terveydensuojeluohjelma)
| |
| 14|STM|THL|TP3|Palkka VT4|3|2|2|Erikoistutkija Jouni Tuomisto
| |
| 15|STM|THL|TP3|Palkka VT5|0.5|0.5|0.5|Asiantuntija T.K.
| |
| 16|EU|THL|TP3|Palkka VT7|2|3|3|Ympäristöinsinööri M.S., Kuopion edustaja pilotissa
| |
| 29|EU|THL|TP3|Palkka VT7|1|1|1|TULOVASTA: Ympäristöinsinööri M.S., rahoitus Urgenche-projektista joka palvelee myös tätä työtä
| |
| 17|THL|THL|TP3|Palkka VT4|0|1|1|TULOVASTA: THL:n budjettirahaa omien työntekijöiden palkkoihin (J.T.)
| |
| 18|THL|THL|TP3|Tulot|1|1|1|TULOLOPUT: THL:n budjettirahaa
| |
| 19|STM|THL|TP5|Palkka VT6|0|12|48|Toimintatapojen jalkauttamisprojektin koordinaattori N.N.
| |
| 20|STM|THL|TP5|Tulot|0|35000|35000|STM:n ympäristöterveyden hankerahoitus
| |
| 21|STM|THL|TP5|Tulot|0|1|1|TULOLOPUT: STM:n erillismääräraha toimintatapojen jalkauttamiseen
| |
| 22|STM|THL|TP1|Ostopalvelu ei-ALV|4000|2000|2000|Tiedonkeruuta
| |
| 33|STM|THL|TP1|Palkka 0|1|0.5|0.5|Arvio ostopalvelun htkk
| |
| 23|STM|THL|TP3|Ostopalvelu ei-ALV|4000|2000|2000|Tiedonkeruuta
| |
| 34|STM|THL|TP3|Palkka 0|1|0.5|0.5|Arvio ostopalvelun htkk
| |
| 24|Kuopio|Kuopio|TP1|Palkka VT6|1|4|2|Kuopion kaupungin osallistuminen kartoitukseen
| |
| 25|Kuopio|Kuopio|TP1|Palkka VT6|1|1|1|TULOVASTA: Kuopion rahoitus virkatyönä tehtävään osallistumiseen
| |
| </t2b>
| |
|
| |
|
|
| |
|
| {{tuloslinkki}} | | {{tuloslinkki}} |