Worum es geht
Ein Projekt im Hub kann ein CRMS-Modul haben. Darin steht, was das Projekt über Berichte einmal entscheidet, bevor es das System überhaupt gibt: ob endgültige Dokumente aufbewahrt werden, wie lange, ob sie versiegelt werden, welche Formate es gibt, wer Vorlagen schreibt und wer sie freigibt. Ein endgültiges Dokument ist ein Bericht, den CRMS als Nachweis ablegt. Mehr dazu unter Was ein endgültiges Dokument ist.
Du bearbeitest das Modul im CRMS-Portal, einer Oberfläche im Hub. Der Hub öffnet sie aus dem Projekt heraus. Das Portal verwaltet keine Vorlagen und keine Dokumente einer laufenden Installation. Es bearbeitet nur das Modell.
Ein Projekt hat höchstens ein CRMS-Modul. Hat es zwei, bricht der Export des Projekts ab. Jedes geschützte CDMS-Modul des Projekts nutzt dieses eine CRMS-Modul.
Vom Hub in den Build
-
1Hubhält das CRMS-Modul mit seinen Feldern, seinen Freigabestufen und der Laufzeit, in der es steht
-
2Hub→Buildgibt das Modul als
crms.yamlaus, nebencias.yaml -
3Buildliest
crms.yamlund leitet die Platzierung ab -
4BuildModul in keiner Laufzeit, oder in der Laufzeit eines öffentlichen CDMS-Moduls → der Build bricht ab und nennt, was zu modellieren ist
-
5Buildsetzt die CRMS-Abhängigkeiten in die
pom.xml, je nach Platzierung und gewählten Formaten -
6Buildschreibt bei jedem Build
crms-configuration.yaml, wenn CRMS eingebettet istErgebnis: Die Anwendung importiert die Datei beim Start. Eine Umgebungsvariable überschreibt jeden Wert daraus.
Die Platzierung: wo das Modul läuft
Ein Feld für „eingebettet oder eigener Dienst“ gibt es nicht. Der Build leitet es daraus ab, in welcher Laufzeit das CRMS-Modul steht. Eine Laufzeit ist im Hub ein Prozess, in dem Module laufen.
Wann: Das CRMS-Modul steht in derselben Laufzeit wie das CDMS-Modul.
CRMS läuft im Prozess der Anwendung. Die pom.xml bekommt crms-spring-boot-starter, crms-document, crms-storage-s3, crms-rest und die Formatmodule der gewählten Formate. Die Konfiguration bekommt codamai.crms.placement: local und importiert crms-configuration.yaml.
Ergebnis: Vorlagen, Rendern, endgültige Dokumente und ihr Nachweis laufen in der Anwendung. Unter /crms stehen die Routen auch den anderen CDMS-Modulen des Projekts zur Verfügung.
Wann: Das CRMS-Modul steht in einer anderen Laufzeit, als eigener CRMS-Dienst oder eingebettet in ein anderes CDMS-Modul des Projekts.
Das CDMS-Modul ist Client. Die pom.xml bekommt crms-spring-boot-starter und crms-client, die Konfiguration codamai.crms.placement: remote. Die Adresse kommt aus CODAMAI_CRMS_CLIENT_URL.
Ergebnis: Das CDMS-Modul rendert nichts selbst. Es ruft den CRMS-Dienst mit dem Token des Aufrufers auf.
Wann: Das CRMS-Modul steht in einer Laufzeit ohne CDMS-Modul.
Daraus wird ein eigenständiger CRMS-Dienst. Der Hub liefert seinen Projektrahmen als ZIP zum Herunterladen. Für ein eingebettetes oder nicht platziertes Modul lehnt der Hub den Download ab.
Ergebnis: Ein Maven-Projekt, das bei jedem Build das CRMS-Modul aus dem Hub liest.
Wann: Das CRMS-Modul steht noch in keiner Laufzeit.
Beim Modellieren ist das ein gültiger Zustand. Ein Build eines geschützten CDMS-Moduls bricht dann ab: Er weiß nicht, ob CRMS eingebettet ist oder ein Dienst.
Ergebnis: Build abgelehnt, mit dem Hinweis, das CRMS-Modul in eine Laufzeit zu stellen.
Wann: Das Projekt hat kein CRMS-Modul.
Der Build setzt nichts von CRMS ein.
Ergebnis: Die Anwendung hat kein CRMS.
CRMS braucht CIAS. CRMS fragt CIAS nach dem Mandanten und reicht das Token des Aufrufers weiter. Ein öffentliches CDMS-Modul (authentication: NONE) hat beides nicht und bekommt deshalb nie einen CRMS-Teil. Steht das CRMS-Modul in der Laufzeit eines öffentlichen CDMS-Moduls, lehnt der Build ab.
Die Felder
Jedes Feld ist optional. „Leer“ heißt: Das Feld wird nicht geschrieben, die Spalte „Vorgabe von CRMS“ gilt.
| Feld | Was es festlegt | Variable | Vorgabe von CRMS |
|---|---|---|---|
documentRevisions | ob endgültige Dokumente abgelegt werden. Aus: Ein FINAL-Rendern wird abgelehnt | CODAMAI_CRMS_DOCUMENT_REVISIONS | true |
documentRetention | wie lange ein endgültiges Dokument aufbewahrt wird, als ISO-8601-Zeitraum, etwa P10Y | CODAMAI_CRMS_DOCUMENT_RETENTION | keine, Pflicht solange Dokumente abgelegt werden |
documentStorePayload | ob die Daten eines endgültigen Dokuments verschlüsselt mit abgelegt werden | CODAMAI_CRMS_DOCUMENT_STORE_PAYLOAD | true |
auditReads | ob auch jedes Lesen eines endgültigen Dokuments ins Journal geht, nicht nur das Schreiben | CODAMAI_CRMS_AUDIT_READS | false |
sealMode | das Siegel von PDF-Dokumenten: INTERNAL oder NONE | CODAMAI_CRMS_SEAL_MODE | internal |
formats | welche Formate gebaut und angeboten werden: PDF, DOCX, XLSX, ODS, CSV | keine, siehe unten | jedes Format |
pdfProfile | das PDF-Profil, wenn eine Anfrage keins nennt: NONE, PDF_A_3A, PDF_UA, PDF_A_3A_UA | CODAMAI_CRMS_PDF_PROFILE | PDF_A_3A |
templateScopes | welche Vorlagen-Scopes es gibt: USER, TENANT, SYSTEM | CODAMAI_CRMS_TEMPLATE_SCOPES | alle drei |
templateReasonRequired | ob Einreichen, Zurücksetzen und Stilllegen eine Begründung brauchen. Beim Ablehnen ist sie immer Pflicht | CODAMAI_CRMS_TEMPLATE_REASON_REQUIRED | true |
templateRoleUser | die Rolle, die eigene Vorlagen eines Benutzers schreibt | CODAMAI_CRMS_TEMPLATE_ROLES_USER | crms-template-personal |
templateRoleTenant | die Rolle, die Vorlagen eines Mandanten schreibt | CODAMAI_CRMS_TEMPLATE_ROLES_TENANT | crms-template-author |
documentRoleRead | die Rolle, die endgültige Dokumente liest | CODAMAI_CRMS_REST_DOCUMENT_ROLES_READ | crms-document-reader |
documentRoleHold | die Rolle, die eine Sperre gegen Löschen setzt und löst (Legal Hold) | CODAMAI_CRMS_REST_DOCUMENT_ROLES_HOLD | crms-document-custodian |
documentRoleErase | die Rolle, die ein Dokument löscht | CODAMAI_CRMS_REST_DOCUMENT_ROLES_ERASE | crms-document-eraser |
approvalStages | die Freigabestufen je Scope, siehe unten | keine | keine Stufe: direkt veröffentlicht |
Ein Scope sagt, wem eine Vorlage gehört: der Plattform (SYSTEM), einem Mandanten (TENANT) oder einem Benutzer (USER). Siehe Aufbau einer Vorlage. Die Rollen sind Client-Rollen in CIAS, siehe Rollen in CRMS.
Zwei weitere Felder stehen im Modell: approvalReauthenticate und approvalTenantDefined. Der Build liest sie nicht. Sie ändern weder die Konfiguration noch die Umgebung.
Was die Datei enthält
Der Build schreibt jedes gesetzte Feld als ${VARIABLE:wert}. Das ist die Spring-Schreibweise für „nimm die Variable, sonst diesen Wert“. Die Berichte des Hubs zum Beispiel legen keine Dokumente ab, siegeln nicht und erlauben nur Systemvorlagen. Ihr Build schreibt:
# Generated on every build from the CRMS module of this project in the CodamAI hub
codamai:
crms:
document:
revisions: "${CODAMAI_CRMS_DOCUMENT_REVISIONS:false}"
seal:
mode: "${CODAMAI_CRMS_SEAL_MODE:none}"
template:
scopes: "${CODAMAI_CRMS_TEMPLATE_SCOPES:SYSTEM}"
Leere Felder fehlen in der Datei. Die Datei wird nicht von Hand bearbeitet: Der nächste Build überschreibt sie.
Formate entscheiden die pom.xml
formats ist kein Vorgabewert einer Variable. Das Feld entscheidet, welche Formatmodule in die pom.xml kommen. CRMS bietet dann an, was installiert ist.
| Format | Modul in der pom.xml |
|---|---|
PDF | crms-format-pdf |
DOCX | crms-format-word |
XLSX, ODS, CSV | crms-format-table, einmal für alle drei |
| HTML | keins: HTML ist im Renderer von CRMS eingebaut und immer da |
| Feld leer | alle Formatmodule |
Ein CDMS-Modul, das CRMS nur als Client nutzt, bekommt kein Formatmodul. Es rendert nichts selbst.
Die Freigabestufen
Eine Freigabe ist die Zustimmung, bevor eine eingereichte Vorlage veröffentlicht wird. Je Scope kann das Projekt eine Kette von Stufen festlegen. Jede Stufe hat diese Felder:
| Feld | Bedeutung | leer |
|---|---|---|
scope | USER, TENANT oder SYSTEM | Pflicht |
sortOrder | Reihenfolge innerhalb des Scopes | ans Ende |
name | wie die Stufe heißt | Pflicht |
role | die CIAS-Rolle der Freigebenden | Pflicht |
minimumApprovers | wie viele verschiedene Personen zustimmen müssen | 1 |
authorExcluded | ob die Autorin oder der Autor selbst ausgeschlossen ist | ja |
meaning | was eine Zustimmung aussagt: REVIEWED (geprüft) oder APPROVED (freigegeben) | Pflicht |
Der Build schreibt die Stufen in der Reihenfolge von sortOrder nach codamai.crms.template.approval.<scope>:
codamai:
crms:
template:
approval:
tenant:
- name: Fachliche Prüfung
role: crms-template-reviewer
meaning: REVIEWED
- name: Freigabe
role: crms-template-approver
minimum-approvers: 2
meaning: APPROVED
(Die Rollennamen sind ein Beispiel.) Die Stufen haben keine Umgebungsvariable. Eine Freigabekette, die eine Umgebung abschalten könnte, wäre keine. Ein Scope ohne Stufe veröffentlicht eine eingereichte Vorlage sofort. Wie die Kette abläuft, steht unter Freigabe.
Hinweise im Portal
Das Portal prüft das Modul beim Bearbeiten und zeigt Hinweise. Speichern sperrt es nur bei Freigabestufen, die das Modell selbst ablehnt.
| Bereich | Situation | Was das Portal sagt |
|---|---|---|
| Freigabe | Stufe ohne Name, Rolle oder Bedeutung, oder weniger als 1 Person | Fehler, Speichern gesperrt |
| Dokumente | documentRetention ist kein lesbarer Zeitraum | Fehler |
| Ausgabe | unbekanntes Format | Fehler |
| Dokumente | documentRevisions aus | Warnung: keine endgültigen Dokumente |
| Freigabe | letzte Stufe hat nicht APPROVED | Warnung |
| Dokumente | Aufbewahrung leer, Dokumente an | Hinweis: Wert kommt aus der Umgebung |
| Vorlagen | SYSTEM zugelassen | Hinweis: CIAS muss Plattform-Administratoren nennen |
| Freigabe | Scope ohne Stufe | Hinweis: veröffentlicht direkt |