Min rolle
#- Kode og integrasjon
- Jeg var eneste som kodet endringene, både i moderniseringen i 2025 og i runden til budsjettprosessen for 2027. Jeg rekonstruerte arbeidsbokens sammenhenger fra VBA-kode, formler og navngitte områder, integrerte bemanningsdata og sammenlignet omarbeidede funksjoner med originalene.
- Samarbeid, opplæring og støtte
- Controllere og andre interessenter deltok i behovsavklaring og budsjettprosessen. Jeg laget opplærings- og presentasjonsmateriale for brukerne. I budsjettprosessene for 2026 og 2027 har jeg hatt ansvaret for teknisk støtte og feilsøking, og jeg har hjulpet brukerne med å løse feil og problemer som oppsto i bruken.
Brukt i hele sykehuset i budsjettprosessene for 2026 og 2027.
Mer om status
- Leveranse
- Moderniseringen i 2025 ble levert under strenge kompatibilitetskrav. Neste runde, til budsjettprosessen for 2027, er også fullført. Der hadde jeg vesentlig større frihet i utformingen.
- Effekt
- Tidsbesparelse og feilreduksjon er ikke tallfestet.
Kravene til en innarbeidet arbeidsflyt
#Verktøyet var forretningskritisk og hadde vokst i om lag 20 år. Logikken lå fordelt mellom formler, navngitte områder, makroer og kopier av arbeidsbøker. Jeg måtte forstå den før jeg kunne endre den, og brukernes kjente arbeidsflate var en del av kravene.
I 2025 avgrenset implementeringslederen arbeidet til funksjonsvis refaktorering. Jeg hadde anbefalt en bredere omstrukturering og gjennomførte endringene innenfor den avtalte rammen. Om lag 80 prosent av endringene var refaktorering som bevarte eksisterende virkemåte.
Integrasjonen av bemanningsdata måtte holde sammen ansatte, ansettelser, organisasjon og budsjett, mens periodisering, kontroll og eksport fortsatt virket i den etablerte prosessen.
Bemanningsdata ble kopiert inn fra en annen arbeidsbok.
Ansatt-, ansettelses- og bemanningsdata integrert i budsjettverktøyet.
Kompatibilitet, bemanningsdata og avstemming
#Bevare arbeidsflyten under ombyggingen
#Budsjettprosessen måtte kunne fortsette mens verktøyet ble endret.
Jeg kartla sammenhengene mellom formler, navngitte områder, makroer og arbeidsark, og refaktorerte funksjonene innenfor det avtalte omfanget. Underveis sammenlignet jeg gamle og omarbeidede funksjoner, med akseptansekriterier og et register over avvik og risiko. Sammenligningen avdekket avvik i beregningslogikken.
Kompatibilitet var en leveransebetingelse. Hver endring måtte vurderes mot virkemåten som formler, makroer og brukere var avhengige av. Den bredere ombyggingen jeg hadde anbefalt, ville samlet mer av logikken, men endret flere deler av arbeidsprosessen samtidig.
Funksjonsvis refaktorering lot noen arvede strukturer leve videre. I runden til budsjettprosessen for 2027 hadde jeg vesentlig større designrom.
Integrere bemanning i budsjettgrunnlaget
#Bemanningsopplysninger måtte tidligere kopieres inn fra en annen arbeidsbok, med manuelle steg og avhengigheter mellom filer.
Jeg integrerte ansatt-, ansettelses- og bemanningsdata i budsjettverktøyet og koblet dem til organisasjon, økonomi, årsverk, periodisering, kontroll og eksport.
Når bemanningsgrunnlaget ligger i verktøyet, blir koblingen mellom kilde og beregning en del av verktøyet, ikke en kopieringsrutine brukerne må huske.
Mer samlet informasjon stiller større krav til organisasjonskoblinger, perioder og datakvalitet.
Gjøre avvik lette å finne
#Avrunding og periodisering kan gi en forskjell mellom delsummer og total, selv når hver beregning ser rimelig ut.
Jeg forbedret avrundings- og valideringslogikk, logging og periodiseringsnøkler, og kontrollerte endringene mot etablert virkemåte.
Avstemming viser hvor en forskjell oppstår. Det betyr mest når samme verdi brukes videre i flere deler av arbeidsboken. Å kontrollere hver funksjon for seg ville ikke avklart om perioder, totaler og eksport fortsatt hang sammen.
Kilder og grenser
#Arbeidsbøker, kode og interne dokumenter er ikke publisert.
- Jeg laget ikke det opprinnelige verktøyet og eier ikke budsjettprosessen.
- Budsjettprosessen for 2027 er budsjettarbeidet høsten 2026, ikke regnskapsresultater for 2027.
- Regneeksemplet viser totalbevaring med fiktive tall. Det er ingen test av den opprinnelige arbeidsboken.
Teknisk grunnlag
#Sammenligne med en kjent referanse
Jeg rekonstruerte arbeidsbokens arkitektur fra VBA-kode, metadata, formler, navngitte områder og tidligere rapporter. Arbeidsboken for 2025 hadde om lag 15 arbeidsark og 78 globale navn.
En meningsfull sammenligning bruker samme grunnlag og undersøker utdataene endringen berører. Endret rekkefølge, andre nøkkeltyper eller en annen avrunding kan flytte en forskjell til et senere steg.
Jeg innførte obligatorisk variabeldeklarasjon, samlet konstanter og skrev tydeligere norske kommentarer. Kontrollen brukte kode- og funksjonssammenligning, sammenligning av arbeidsbøker og avgrensede akseptansekriterier.
En eksplisitt restdifferanse
Eksemplet fordeler en samlet, additiv mengde årsverk på perioder, regnet i tideler. Periodetallene summeres til den oppgitte totalen. De viser ikke gjennomsnittlig bemanning per måned.
De første periodene får lik andel avrundet ned, og den siste perioden får resten. Da bevares totalen uten negativ rest. Kostnaden er at hele resten havner i siste periode, og ved små totaler kan det bli skjevt.
Nyskrevet eksempel. Viser mønsteret, ikke originalkoden.
// Total og periodeantall er validert før beregningen.
const totalITideler = Math.round(arsverk * 10);
const grunnandel = Math.floor(totalITideler / perioder);
const sistePeriode = totalITideler - grunnandel * (perioder - 1);
// Demonstrasjonen bruker den felles beregningsfunksjonen:
const resultat = R8Calc.budget({ arsverk, perioder });Fordel årsverk uten å miste totalen
Dette viser hvordan en total kan fordeles på perioder i tideler uten at summen endres.
Syntetisk illustrasjon. Kjører ikke originalsystemet.
Uten fungerende JavaScript vises det faste eksemplet. Valg i lenken beregnes ikke.
Fordeling med avrundingsrest
Eksakt sum: 37,4 årsverk.
Tidelene avrundes ned, og siste periode får resten. Totalen bevares.
| Periode | Årsverk |
|---|---|
| 1 | 3,1 |
| 2 | 3,1 |
| 3 | 3,1 |
| 4 | 3,1 |
| 5 | 3,1 |
| 6 | 3,1 |
| 7 | 3,1 |
| 8 | 3,1 |
| 9 | 3,1 |
| 10 | 3,1 |
| 11 | 3,1 |
| 12 | 3,3 |