diff --git a/models_and_helper_scripts/sample-management-datamodel.yml b/models_and_helper_scripts/sample-management-datamodel.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f8deb9d90206c9a5b37690b233aa9ce35d6f52e6
--- /dev/null
+++ b/models_and_helper_scripts/sample-management-datamodel.yml
@@ -0,0 +1,293 @@
+#
+#
+# Copyright (C) 2024 IndiScale <info@indiscale.com>
+# Copyright (C) 2024 Florian Spreckelsen <f.spreckelsen@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+ControlledRecordType:
+  description: |
+    Abstract type to denote that a RecordType is controlled, i.e.,
+    that no new Records of this type may be created during
+    sample/container upload. Add this type as a parent to any
+    RecordType you want to be controlled.
+
+Responsible:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  obligatory_properties:
+    Abbreviation:
+      description: An abbreviation for this entity that is used for creating BIS labels
+      datatype: TEXT
+ResearchDivision:
+  inherit_from_obligatory:
+    - Responsible
+  obligatory_properties:
+    German name:
+      description: A german name for an entitiy. This can be used in queries since it is an alias.
+      datatype: TEXT
+ResearchUnit:
+  inherit_from_obligatory:
+    - Responsible
+  obligatory_properties:
+    German name:
+    ResearchDivision:
+Person:
+  inherit_from_obligatory:
+    - Responsible
+  obligatory_properties:
+    First name:
+      datatype: TEXT
+    Last name:
+      datatype: TEXT
+    Email:
+      datatype: TEXT
+    ResearchUnit:
+
+ContainerType:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  obligatory_properties:
+    Abbreviation:
+
+Container:
+  obligatory_properties:
+    Responsible:
+    ContainerType:
+    BIS Label:
+      description: A standardized label for a container in BIS.
+      datatype: TEXT
+  suggested_properties:
+    Child container:
+      datatype: LIST<Container>
+    Container size:
+      description: The size of the container, e.g. number of spaces or dimension
+      datatype: TEXT
+    Custom label:
+      description: A custom label for a container that doesn't have to follow the BIS labeling guidelines.
+      datatype: TEXT
+    Container Contents:
+      datatype: TEXT
+    PI:
+      datatype: Person
+
+Sample:
+  recommended_properties:
+    NagoyaCase:
+    Container:
+    FunctionalGroup:
+    SampleType:
+    Parent sample:
+      datatype: Sample
+    Sampling Person:
+      datatype: Person
+    Main User:
+      datatype: Person
+  suggested_properties:
+    Custom ID:
+      datatype: LIST<TEXT>
+    Publications:
+      description: DOIs of publications related to this sample.
+      datatype: LIST<TEXT>
+    NCBI BioProject:
+      datatype: LIST<TEXT>
+    NCBI BioSample:
+      datatype: LIST<TEXT>
+    NCBI Accession:
+      datatype: LIST<TEXT>
+    Sampling method:
+      description: A short description of the sampling methodology used for this sample.
+      datatype: TEXT
+    Notes:
+      datatype: TEXT
+    Time sampled start:
+      datatype: DATETIME
+    Time sampled stop:
+      datatype: DATETIME
+    AphiaID:
+      description: An ID for this taxon that allows to uniquely identify it on http://www.marinespecies.org.
+      datatype: INTEGER
+
+
+Collection:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+LabelCounter:
+  obligatory_properties:
+    Counter:
+      datatype: INTEGER
+    ContainerType:
+
+EEZ:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  obligatory_properties:
+    MRGID:
+      description: The Marine Regions Geographic Identifier, i.e. a PID (Persistent Identifier) for a geographic region on https://www.marineregions.org
+      datatype: TEXT
+
+NagoyaCase:
+  obligatory_properties:
+    Nagoya Case Number:
+      description: An identifier for nagoya cases. This is managed by the Nagoya-Coordinator and should be taken care of before sampling.
+      datatype: TEXT
+  recommended_properties:
+    Nagoya documents:
+      description: A link to the Nagoya documents (or an indication where to find the documents).
+      datatype: TEXT
+  suggested_properties:
+    Old case number:
+      datatype: LIST<TEXT>
+    EEZ:
+
+Position:
+  obligatory_properties:
+    Latitude:
+      datatype: DOUBLE
+      unit: °
+    Longitude:
+      datatype: DOUBLE
+      unit: °
+  recommended_properties:
+    Water depth:
+      description: The depth of the water in meters as a positive value
+      datatype: DOUBLE
+      unit: m
+    Sampling depth:
+      description: The depth in meters where the sampling took place as a positive value
+      datatype: DOUBLE
+      unit: m
+
+FunctionalGroup:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+Gear:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  recommended_properties:
+    Configuration:
+      datatype: TEXT
+
+Event:
+  obligatory_properties:
+    Gear:
+  recommended_properties:
+    Time start:
+      description: The date and time the event started.
+      datatype: DATETIME
+  suggested_properties:
+    Time stop:
+      description: The date and time the event ended.
+      datatype: DATETIME
+
+SourceEvent:
+  inherit_from_suggested:
+    - Event
+  obligatory_properties:
+    Position:
+      datatype: LIST<Position>
+    Gear:
+  recommended_properties:
+    Hol:
+      datatype: TEXT
+    Station Number:
+      datatype: TEXT
+    IGSN:
+      datatype: TEXT
+    DOI:
+      datatype: TEXT
+  suggested_properties:
+    Station ID:
+      description: The name/identifier of a station where regular sampling activity takes place.
+      datatype: TEXT
+
+Platform:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+SampleType:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+SampleTypeSpecific:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+StartPosition:
+  inherit_from_obligatory:
+    - Position
+
+StopPosition:
+  inherit_from_obligatory:
+    - Position
+
+RegisterSampleTemplate:
+  recommended_properties:
+    column_names:
+      datatype: LIST<TEXT>
+
+MeshPoreSize:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  recommended_properties:
+    enumValue:
+      datatype: TEXT
+
+Fixation:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  recommended_properties:
+    enumValue:
+
+StorageTemperature:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  recommended_properties:
+    enumValue:
+
+Campaign:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  description: Cruise name or leg description
+
+Sphere:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+Sample context:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+PDFReport:
+  inherit_from_obligatory:
+    - ControlledRecordType
+  description: PDF files which contain reports and additional information about samples, collections, or containers
+
+commonGermanName:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+commonEnglishName:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+Taxonomic group/Species:
+  inherit_from_obligatory:
+    - ControlledRecordType
+
+Sample container:
+  inherit_from_obligatory:
+    - ControlledRecordType
diff --git a/test-profile/custom/caosdb-server/scripting/home/.pycaosdb.ini b/test-profile/custom/caosdb-server/scripting/home/.pycaosdb.ini
new file mode 100644
index 0000000000000000000000000000000000000000..c5e98ee67c613de7146670942488957783c1247c
--- /dev/null
+++ b/test-profile/custom/caosdb-server/scripting/home/.pycaosdb.ini
@@ -0,0 +1,18 @@
+[Connection]
+url = https://localhost:10443
+cacert = /opt/caosdb/cert/caosdb.cert.pem
+debug = 0
+timeout = 5000
+
+[Misc]
+sendmail = /usr/local/bin/sendmail_to_file
+
+[caoscrawler]
+send_crawler_notifications=True
+sendmail_from_address=crawler@example.com
+sendmail_to_address=curator@example.com
+public_host_url=https://localhost:10443
+
+[sss_helper]
+external_uri = https://localhost:10443
+