Eurykleia on suunnitelma THL:n talous- ja henkilöstönhallintaohjelmaksi.
Kysymys
Millainen talous- ja henkilöstönsuunniteelu- ja -hallintaohjelma THL:een tarvittaisiin? Sen tuli erityisesti auttaa eroon irrallisista Exceleistä, joita jokainen joutuu ylläpitämään oman projektinhallintansa tueksi.
Vastaus
Yksi mahdollisuus on hyödyntää THL:n omia valmiita järjestelmiä kuten Terhoa (Confluence-wiki) ja R-tilasto-ohjelma, jota kymmenet ihmiset talossa osaavat käyttää tehokkaasti. Tarkempi ehdotus löytyy Yhteistyötiloista sivulta Ehdotus Eurykleian toteuttamiseksi Terhossa ja sen toteutusesimerkki sivulta Esimerkki Terho-toteutuksesta.
Perustelut
Alla on peruskoodi tietojen hakemiseen Yhteistyötiloista ja joidenkin perusraporttien tuottaminen. Idea sinänsä on erittäin joustava, ja R:llä on helppo toteuttaa millaista raportointia tai seurantaa tahansa. Tiedot voidaan myös kytkeä Shinyyn, joka tehokkaana R-rajapintana auttaa tekemään monenlaisia kuvaajia talous- ja henkilöstötilanteesta.
+ Näytä koodi- Piilota koodi
# This is code Op_fi5758/ on page [[Eurykleia]]
library(OpasnetUtils)
library(rvest)
tables <- html_table(read_html("https://yhteistyotilat.fi/wiki08/x/UIesAg"))[[2]]
hae <- function(aihe) {
aihe <- match(aihe, tables$Kuvaus)
out <- html_table(read_html(tables$URL[aihe]))[[tables$Taulu[aihe]+1]]
return(na.omit(out))
}
henkilot <- hae("Henkilöiden tiedot")
resurssit <- hae("Henkilöresurssisuunnitelma")
kulut <- hae("Kulusuunnitelma")
projektit <- hae("THL:n projektien tiedot")
projektit$HSK <- as.numeric(as.character(gsub("[ %]", "", projektit$HSK)))/100
projektit$YK <- as.numeric(as.character(gsub("[ %]", "", projektit$YK)))/100
projektit$Omarahoitus <- as.numeric(as.character(gsub("[ %]", "", projektit$Omarahoitus)))/100
projektit$"Tehollinen työaika" <- as.numeric(as.character(gsub("[ %]", "", projektit$"Tehollinen työaika")))/100
henkilot$"Osa-aika" <- as.numeric(as.character(gsub("[ %]", "", henkilot$"Osa-aika")))/100
palkat <- merge(resurssit, henkilot)
palkat$Palkat <- palkat$Aikamäärä * palkat$"Osa-aika" * palkat$Palkka
palkat <- merge(palkat, projektit, by.x = "Projekti", by.y = "Nimi")
palkat$Sivukulut <- palkat$Palkat * palkat$HSK
palkat$Yleiskustannus <- (palkat$Palkat + palkat$Sivukulut) * palkat$YK
palkat$Alku <- unlist(lapply(strsplit(palkat$Kuukausi, "-"), function(x) x[[1]]))
palkat$Loppu <- unlist(lapply(strsplit(palkat$Kuukausi, "-"), function(x) x[[2]]))
palkat$Alku <- as.Date(palkat$Alku, format="%d.%m.%Y")
palkat$Loppu <- as.Date(palkat$Loppu, format="%d.%m.%Y")
out <- data.frame()
for(i in 1:nrow(palkat)) {
k <- as.numeric(substr(palkat$Loppu,6,7))[i] - as.numeric(substr(palkat$Alku,6,7))[i] + 1
for(j in 1:k) {
out <- rbind(out,
data.frame(
Kuukausi = palkat$Alku[i] + 31*(j-1),
Projekti = palkat$Projekti[i],
Yksikkö = palkat$Yksikkö[i],
TA.tili = palkat$`TA-tili`[i],
Palkat = palkat$Palkat[i]/k,
Sivukulut = palkat$Sivukulut[i]/k,
Yleiskustannus = palkat$Yleiskustannus[i]/k
)
)
}
}
out <- melt(
out,
measure.vars = c("Palkat","Sivukulut","Yleiskustannus"),
variable.name = "Kululaji",
value.name="Summa"
)
out$Summa <- -out$Summa
############# Tarvitaanko näitä ja miten yhdistetään?
out$TA.tili <- NULL
kulut$Lisäerittely <- NULL
kulut$Kuvaus <- NULL
kulut$Yksikkö <- "vaikutusarviointi"
kulut$Kuukausi <- as.Date(kulut$Kuukausi, format="%d.%m.%Y")
out <- rbind(out, kulut)
##################### Remove extra details from time
out <- out[out$Kuukausi >= alku & out$Kuukausi <= loppu , ]
out$Kausi <- substr(as.character(out$Kuukausi),1,7)
oprint(aggregate(out["Summa"], by = out[c("Projekti","Kululaji")], FUN = "sum"))
oprint(aggregate(out["Summa"], by = out[c("Kausi")], FUN = "sum"))
oprint(aggregate(out["Summa"], by = out[c("Projekti")], FUN = "sum"))
| |
Katso myös