For å implementere kassasjon i Java basert på beskrivelsen du har gitt, kan vi lage klasser for Kassasjonsvedtak, Kassasjon, UtfoertKassasjon, og en mekanisme for å håndtere sletting av dokumentobjekter. Jeg har laget en struktur som reflekterer beskrivelsen du gav. Java-kildekode for kassasjon: import java.time.LocalDateTime;
// Enum for Kassasjonsvedtak enum Kassasjonsvedtak { BEVARES("B"), KASSERES("K"), VURDERES_SENERE("G");
private final String kode;
Kassasjonsvedtak(String kode) { this.kode = kode; }
public String getKode() { return kode; } }
// Klasse for Kassasjon class Kassasjon { private Kassasjonsvedtak kassasjonsvedtak; private String kassasjonshjemmel; private Integer bevaringstid; // Antall år for bevaringstid private LocalDateTime kassasjonsdato;
// Konstruktor public Kassasjon(Kassasjonsvedtak kassasjonsvedtak, String kassasjonshjemmel, Integer bevaringstid, LocalDateTime kassasjonsdato) { this.kassasjonsvedtak = kassasjonsvedtak; this.kassasjonshjemmel = kassasjonshjemmel; this.bevaringstid = bevaringstid; this.kassasjonsdato = kassasjonsdato; }
// Gettere og settere public Kassasjonsvedtak getKassasjonsvedtak() { return kassasjonsvedtak; }
public void setKassasjonsvedtak(Kassasjonsvedtak kassasjonsvedtak) { this.kassasjonsvedtak = kassasjonsvedtak; }
public String getKassasjonshjemmel() { return kassasjonshjemmel; }
public void setKassasjonshjemmel(String kassasjonshjemmel) { this.kassasjonshjemmel = kassasjonshjemmel; }
public Integer getBevaringstid() { return bevaringstid; }
public void setBevaringstid(Integer bevaringstid) { this.bevaringstid = bevaringstid; }
public LocalDateTime getKassasjonsdato() { return kassasjonsdato; }
public void setKassasjonsdato(LocalDateTime kassasjonsdato) { this.kassasjonsdato = kassasjonsdato; } }
// Klasse for UtfoertKassasjon class UtfoertKassasjon { private LocalDateTime kassertDato; private String kassertAv; private String referanseKassertAv; // SystemID
// Konstruktor public UtfoertKassasjon(LocalDateTime kassertDato, String kassertAv, String referanseKassertAv) { this.kassertDato = kassertDato; this.kassertAv = kassertAv; this.referanseKassertAv = referanseKassertAv; }
// Gettere og settere public LocalDateTime getKassertDato() { return kassertDato; }
public void setKassertDato(LocalDateTime kassertDato) { this.kassertDato = kassertDato; }
public String getKassertAv() { return kassertAv; }
public void setKassertAv(String kassertAv) { this.kassertAv = kassertAv; }
public String getReferanseKassertAv() { return referanseKassertAv; }
public void setReferanseKassertAv(String referanseKassertAv) { this.referanseKassertAv = referanseKassertAv; } }
// Klasse for Dokumentobjekt class Dokumentobjekt { private String filnavn; private LocalDateTime opprettetDato;
// Konstruktor public Dokumentobjekt(String filnavn, LocalDateTime opprettetDato) { this.filnavn = filnavn; this.opprettetDato = opprettetDato; }
// Gettere og settere public String getFilnavn() { return filnavn; }
public void setFilnavn(String filnavn) { this.filnavn = filnavn; }
public LocalDateTime getOpprettetDato() { return opprettetDato; }
public void setOpprettetDato(LocalDateTime opprettetDato) { this.opprettetDato = opprettetDato; }
// Metode for å slette dokumentobjekt public void slettDokumentobjekt() { // Logikk for sletting av dokumentobjekt System.out.println("Dokumentobjekt " + filnavn + " slettes."); } }
// Klasse for Arkivdel class Arkivdel { private String navn; private UtfoertKassasjon utfoertKassasjon;
// Konstruktor public Arkivdel(String navn) { this.navn = navn; }
// Metode for å utføre kassasjon på alle dokumentobjekter under arkivdelen public void utførKassasjon(String kassertAv) { // Logikk for å utføre kassasjon på alle tilknyttede dokumentobjekter utfoertKassasjon = new UtfoertKassasjon(LocalDateTime.now(), kassertAv, "SystemID"); System.out.println("Kassasjon utført på arkivdel " + navn); }
public UtfoertKassasjon getUtfoertKassasjon() { return utfoertKassasjon; } }
public class KassasjonSystem {
public static void main(String[] args) { // Eksempel på opprettelse av kassasjonselementer Kassasjonsvedtak vedtak = Kassasjonsvedtak.KASSERES; Kassasjon kassasjon = new Kassasjon(vedtak, "Lovhenvisning", 10, LocalDateTime.now().plusYears(1));
// Opprett dokumentobjekt og utfør kassasjon Dokumentobjekt dokument = new Dokumentobjekt("fil1.txt", LocalDateTime.now()); dokument.slettDokumentobjekt();
// Opprett arkivdel og utfør kassasjon Arkivdel arkivdel = new Arkivdel("Arkivdel1"); arkivdel.utførKassasjon("Petter Reinholdtsen"); } } Forklaring:
1. Enum Kassasjonsvedtak: Representerer de ulike statusene for kassasjon (Bevares, Kasseres, Vurderes senere). 2. Klasse Kassasjon: Representerer kassasjonselementet med informasjon som kassasjonsvedtak, hjemmel, bevaringstid og kassasjonsdato. 3. Klasse UtfoertKassasjon: Registrerer informasjon om utført kassasjon, inkludert dato og hvem som utførte kassasjonen. 4. Klasse Dokumentobjekt: Representerer et dokument som kan slettes basert på kassasjon. 5. Klasse Arkivdel: Representerer en arkivdel som kan utføre kassasjon på tilknyttede dokumentobjekter. Hvordan systemet fungerer:
* Kassasjon kan markeres for dokumentobjekter, og sletting av disse skjer når bevaringstid er utløpt. * Utført kassasjon logges, og det er mulig å koble tilbake til hvem som utførte kassasjonen. * Systemet støtter tostegs sletting, hvor referanser til filer markeres først, og deretter utføres sletting når det er trygt å gjøre det. Dette er et grunnleggende design for kassasjon i Nikita-systemet og kan tilpasses videre i henhold til spesifikasjoner og krav. On November 29, 2024 at 12:42:37 pm +01:00, Petter Reinholdtsen pere@hungry.com wrote:
Jeg har tenkt litt i det siste på hvordan kassasjon bør fungere i Nikita, og har noen notater. En nyttig kilde er <URL: https://www.arkivverket.no/for-arkiveiere/bevaring-og-kassasjon/om-bevaring-og-kassasjon-i-offentlig-forvaltning >, samt N5- og N5TG-spesifikasjonene. Jeg forsøker her å beskrive hvordan jeg forstår Kassasjon i relasjon til Nikita og N5TG.
Hvis jeg forstår det riktig, slå er Kassasjons-elementet ment å notere intensjon om kassering. Elementet er i dag del av Arkivdel, Klasse, Mappe, Registrering og Dokumentbeskrivelse, som alle kan ha en eller ingen kassasjonselementer. Elemtet ser i TG i dag slik ut:
class Kassasjonsvedtak <<codelist>> { +Bevares = B +Kasseres = K +Vurderes senere = G }
class Kassasjon <<dataType>> { +kassasjonsvedtak : Kassasjonsvedtak +kassasjonshjemmel : string [0..1] +bevaringstid : integer +kassasjonsdato : datetime }
En kan her notere om ting skal bevares, vurderes senere eller kasseres. Aktuell verdi for kassasjonsvedtak er her "K=kasseres". Når en ser på et klassifikajonssystem som fupperåd, så er det der lagt inn informasjon om bevaringstid. Antall år kan legges inn i Kassasjon.bevaringtid for hver klasse der slikt er definert. Dette lar arkivet ta vare på intensjon om kassering. Et kassasjonselement gjelder for alle underliggende instanser, slik at et element i Klasse vil gjelde for alle underklasser, mapper, registreringer, dokumentbeskrivelser og dokumentobjekter, med mindre de overstyres av kassasjonselementer i underliggende entiteter.
Selve kassasjonen kan enten skje automatisk, eller med manuelle rutiner der noen søker opp alle dokumentobjekter (med tilhørende dokumentbeskrivelser, registreringer, mapper) der aktuell dato (opprettetdato?) er mer enn bevaringstid antall år siden, eller der kassasjonsdato er passert. En kassasjon innebærer at en dokumentobjekt-instans slettes. Tilhørende fil slettes også hvis det var siste referanse til filen. N5-spesifikasjonen sier at det bør være mulig å angre kassasjon, slik at det bør være en mekanisme for tostegs sletting, der først referanser markeres for sletting, for så senere gjennomføre den fysiske slettingen. Øvrige instanser (dokumentbeskrivelse, registrering, mappe) kasseres aldri. I forbindelse med sletting (umiddelbart før eller etter), legges det inn en UtfoertKassasjon-entitet i dokumentobjektets foreldre-dokumentbeskrivelse. Disse kan i dag legges inn i Arkivdel og Dokumentbeskrivelse, og ser slik ut:
class UtfoertKassasjon <<dataType>> { +kassertDato : datetime [0..1] [1..1] +kassertAv : string [0..1] [1..1] +referanseKassertAv : SystemID [0..1] [1..1] }
Her noteres altså at det eksisterte et eller annet under dokumentbeskrivelse som er blitt slettet på kassertDato. I og med at det ikke kan noteres informasjon om hvilket dokumentobjekt som ble kassert, virker det nærliggende å anta at alle barn av en dokumentbeskrivelse kasseres samtidig. N5 gjør det klart at en ikke skal kunne kassere journalposter (aka registreringer) og saksmapper (aka mapper) som er notert å skape presedens. Jeg antar det betyr at en heller ikke kan kassere dokumentobjekter i slike mapper og registreringer.
Jeg mistenker det også bør opprettes en UtfoertKassasjon på arkivdelnivå når en arkivdel er avsluttet og en har utført kassasjon på alt under arkivdelen, for å notere at en ikke trenger tenke mer på det for alt materiale under denne.
Slik kassasjon kan da utføres med en API-klient som søker ut aktuelle dokumentobjekt-instanser. Jeg mistenker det er lurt å legge inn UtfoertKassasjon-elementer før sletting av dokumentobjekter, i tilfelle databasen faller ned i prosessen, for å sikre at en ikke mister kobling til en fil før det er notert at filen er kassert.
Stemmer denne beskrivelsen med deres forståelse av hvordan kassering skal gjøres med N5TG og Nikita?
-- Vennlig hilsen Petter Reinholdtsen _______________________________________________ nikita-noark mailing list -- nikita-noark@nuug.no To unsubscribe send an email to nikita-noark-leave@nuug.no