You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Button in the middle to send the dataset to a configured mqtt broker
add in setting MQTT settings: Server, Topic, User, Pass
Status of Datapicker and Middleware: add new nav elements on left side for status (functionality should be in PROCEED main repo)
UI: put Name and ID into Header and add an Edit button
add Reference Data Sets between Target and Machine Sets
Settings: Name of "Tech Data Set" should be configurable, Default not Tech Data Set but: "Config Data Set"
Space-Logo should be configurable (functionality should be in PROCEED main repo)
Replace logo in login screen
UI: Show "Services and Status" under the separator line (in PROCEED main repo)
Implement New TDS Structure (see Miro):
implement structure in backend and database
adapt the UI elements to write into the new structure
add to the three editing icons (in edit mode) two more icons for moving the parameter up and down. find a beautiful position for all five icons
UI: change the table columns for the parameters to (in this sequence): Name, Value, Unit, Parameter-Description, Transformation
implement the following functionality and show a small question mark icon behind "Name" with the following explanation (tooltip): "This column shows the "Display Name" of a parameter. If it is not filled it shows the "Name" field of a parameter in italic."
connect meta-data (shortName, name, description, categories) with "Create New" modal
for creating a new config set with "New TDS" based on the Template, generate the uuids for all parameters in the template
UI Edit modal: check that the "Name" input field only has lower-case letters, upper-case letters, numbers or -_+. Autogenerate a (changeable) suggestion for the "Name" input field every time a new character is inserted in the "Display Name" field (replace space with -, remove all other special characters
UI Tree-View: show displayNametext in the TreeView for each element. Default: Deutsch (as long as we have no language selection built into the UI)
UI Tree-View: show hierarchical structure of parameters if structureVisible != false (if ==false then all child elements should get one level up)
UI Editor: show multiple, expandable sections of all Parameters of the highest/root level of the TreeView of the View mode (hint: if structureVisible is false, parameters "jump" one level up in view mode). Each section has a table with all its including parameters. In Edit mode, still show exactly the same sections of view mode, even if a parameter is not on the root level anymore because of structureVisible = false. For all additional Parameters on the root level, which are not shown in the View mode, show an extra section
UI: Default if opening a new Config Set: TreeView = show all root elements but closed, Right Content View: all sections closed
UI TreeView:
remove "m" and "c" from the boxes
create a hard-coded color for "parameterType": "meta" and its childs: #F0FFFF
create a hard-coded color for "parameterType": "content" and its childs: #F6FFED
for all parameters with a transformation (not "none"), the square should have on one half another color:
"manual": #FFF8E7
"linked": #FFFFE0
"algorithm": #F1E9D2
"external": #E5E4E2
same functionality for TreeView and Tables (right side): "Move up", "Move down", "Edit", "Add Parameter", "Add Nested Parameter", "Delete"
parse/store Categories as a semicolon separated list in meta
UI: there is a Parameter "Categories" in the TDS header, which is linked to our meta field. If you open the Edit modal, it should not show the semicolon separated list but our Categories input field
realize copyValueToParameterAtCreationFromTemplate functionality of the meta fields (shortName, name, description, categories).
UI: show a drop down where the user can select None or one of the four meta fields. If the user selects one, store the path into the array. if the user deselects one to "None" again, create a normal parameter inside the structure.
UI Edit Modal: activate language input fields, to insert and see the different text for Display Name and Description. (even though, we not yet use it somewhere in the UI)
UI: Default in TreeView and Table View: Deutsch
UI Bug: after creating a new Parameter, in TreeView the parameter name (not displayname) is shown (probably reason: in the Edit modal you add everything in English?)
UI: Show an "Add Parameter" under every nested parameter table, if it is opened
UI: a row in the table on the right side, should not have any plus icon if it has no nested parameters (like the TreeView)
UI (low prio): implement "Move up" and "Move down"
UI (low prio): in the Parameter Edit modal, for linking parameters for a transformation, a drop-down opens. ESC key stroke should close the drop-down instead of closing the Edit modal.
UI: in the TreeView, every content parameter (parameterType == content, if none look at the parent) without a value should be italic and dark-red
UI: After saving a new value for a parameter in the Edit modal, show a pop-up if transformations were executed. In the popup, show all changed parameters.
UI: Advanced section in the parameter Edit modal that is by default collapsed/closed. if someone opens this Advanced section, there he can set the Parameter Type, Structure Visible, and Template Source for Value (valueTemplateSource).
(low prio) Config Editor -> Edit modal: reduce all language selection lists, e.g. not 4 differen dialect for german, just "de"
UI: in the Editor in the right content area: the border of the blocks should have the same color as the parameter type (content -> light green)
UI (low prio): in the Editor in the right content area - in Edit mode: indent the separate blocks a little to the right if they are a child element of the previous block. Example: the "Vorgabe-Datensatz" block should be a little indented to the right because it is under the "TDS Body" block
UI (low prio): drop-down language selection in UI (only for the values of the config set, not for the whole MS)
UI Edit Modal (low prio, later): on top of the "Value" input field, have a small tab-environment where the user can select either "Value" (+Question Mark Icon: "Value is directly stored inside this Parameter"), "Target Value" (+Question Mark Icon: "Value is stored inside a Nested Parameter called Target Value") or "Min-Target-Max" (+Question Mark Icon: "Three Values that are stored inside Nested Parameters for describing a range"). Add the functionalities like described in the question mark texts (see AAS example, "TargetValue" = german displayName "Sollwert"). This sub-parameters must have structureVisible set to false so that it is not displayed in the View mode. If "Min-Target-Max" is selected, display two further input fields for entering addtionally a Min and Max value. "Min", and "Max" which contain the inserted values in its "value" properties.
Bug: it seems that usedAsInputParameterIn -> path is not filled anymore
if the main Header is removed and someone tries to create a new version, add the main Header again
AAS Import/Export: should be the same functionality as the REST API
AAS: Serialization of Categories
AAS: Serialization of Transformations
Add Option to send AAS format over MQTT
Drop-Down button in Editor and right click to create dataset:
1. "Create a Target Dataset": creates default structure (deactivate button if already one target dataset exists);
2. "Create a Reference Dataset": creates default structure and copies all Body Parameter from Target Dataset with a transformation set to linked, the correct input parameter set and usedAsInputParameterIn updated. (deactivate button if already one reference dataset exists);
3. "Update Reference Dataset": copies all Body Parameter from Target Dataset (if the same name is not yet existing) with a transformation set to linked, the correct input parameter set and usedAsInputParameterIn updated.
4. "Create a Machine Dataset": creates default structure and copies all Body Parameter from Reference Dataset with a transformation set to linked, the correct input parameter set and usedAsInputParameterIn updated.
5. "Update Machine Dataset": update default structure and copies all new Body Parameter from Reference Dataset with a transformation set to linked, the correct input parameter set and usedAsInputParameterIn updated.
UI: The collapse/extend icon in the TreeView should only open and close the Content/Body parameters (not the Header fields)
Units
Show usedAsInputParameterIn and transformation -> linkedParameters in UI + clickable
TDS Template:
TDS Template: "TDS Header" and all its subparameter should be invisible in the View mode => structureVisible: false
Bug: Header stays hidden in edit mode
TDS Template: the parameter TDSIdentifier in the Machine Datasets should have a transformation by default: linked to TDSIdentifier in the Config Header
Transformation currently not working for virtual Parameters
TDS Template: the parameter AcknowledgeMode in the Machine Datasets should have a transformation by default: linked to AcknowledgeModeDefault in the Config Header
(low prio) Generic Structure: in our TDS Template, some parameters contains references to other parameters in linkValueToParameterValue, usedAsInputParameterIn, linkedInputParameters. They all have the same structure: [{ "id": "<uuid>", "path": ["Header", "VersionNumber"] }, ...]. In out internal TDS template, the UUID must be empty and only the path exists because before creating, we can not know what will be the uuid of the referenced parameter. For now, the few transformations of the TDS template are more or less hard coded in the backend => make it more generic: if no uuid exists, then use the path to create a transformation
data structure adapted
TDS/Config List table:
show all meta data of the TDS in the main table: Id, Name, Categories, Description, Version
make it sortable (not the version number column)
make it searchable/filterable (ID, Name, Desc, Category)
removing the three dots on the right side (all columns are already shown)
make the icons of the rows work again (Copy can be done later)
Add functionality to copy a config
"New Empty Config": create an empty editor
UI: After Creating a new Config Set, automatically open the Editor
(low prio) in the Config Set list: only one "Import" button -> that automatically detects, if it is the internal or the AAS format
Export: like in the Editor -> be able to export as internal or AAS format
(low prio) in the Config Set list: only one "New" button (no drop-down anymore). that opens our meta modal which should have an extra "Template" selection area, where "Empty Set" or "Techdata-Set" can be selected
REST API:
../configurations:
GET: return a list of all Configurations with their Metadata (no content/parameters, because the content has multiple versions later on)
POST: Create New Empty Configuration Container, id generated at server, shortName required
POST: with query parameter ?template=TDS, create a new TDS configuration
POST: create a new Parameter directly under content (root parameter) with the following logic
POST: if query parameter ?asSubParameterOf=<uuid> is given, create a new Parameter directly as a Subparameter of the given Parameter with the following logic
(low Prio): implement the query parameter ?aas-format=true for setting the AAS serialization
Parameter Logic:
we should be a little bit more open, so that the complete parameter structure must not always be given. it is okay, if some properties are missing.
Only name is required.
the following part of the generic parameter should be set/changeable via REST: name*, parameterType, structureVisible, displayName*, description*, value*, valueTemplateSource*, transformation*
name: it must be unique in the whole Configuration
displayName and description: this does not add an entry, but it overrides the complete array
value: can only be set if transformation is not existing or transformationType is none or manual
valueTemplateSource: 1. check is given reference is correct ("shortName", "name", "description", "categories"), 2. update value and correctly link with the meta parameter
transformation: can be given if the following conditions are satisfied:
type none: linkedInputParameters and action must be empty (else: return 400 and error with description in body, hint: this is independent of value - it can have a value set or not)
type manual: linkedInputParameters must have exactly one entry which exists as parameter in the same TDS set, and action must be empty (else: return 400 and error with description in body, hint: this is independent of value - it can have a value set or not) => update usedAsInputParameterIn of the referenced parameter
type linked: linkedInputParameters must have exactly one entry which exists as parameter in the same TDS set, value must be empty, and action must be empty (else: return 400 and error with description in body) => 1. update value entry of own parameter and 2. update usedAsInputParameterIn of the linked parameter
type algorithm: linkedInputParameters could have entries or none, value must be empty, and action must be set (else: return 400 and error with description in body) => 1. calculate value entry of own parameter and 2. update usedAsInputParameterIn of the linked parameters
type external: linkedInputParameters must be empty, value must be empty, and action must be set (else: return 400 and error with description in body) => do nothing for now
changeableByUser, usedAsInputParameterIn, valueType, subParameters must not be set
usedAsInputParameterIn should be automatically updated if a transformation is added inside another parameter
valueType should be automatically calculated on our server based on the input of value. it should be automatically recalculated if value is updated.
PUT: create the update of a Parameter like the creation of a new Parameter (see POST) but with the following additions:
It is okay, if some properties of the Parameter structure are missing. The given properties update the existing ones and do not delete the others (exception: displayName and description: this does not add an entry, but it overrides the complete array)
id inside body can be missing. if id is included in body, it must be the same as in the REST path and already existing in the TDS set as a parameter
if (path-)parameter-id does not exist in the given set-id (in path): return 400 and error with description in body
i.e. even if the parameter exists in another configuration container set, throw an error
parameter can only be changed with PUT, if changeableByUser attribute is true or non-existent (default=true). if false, return 400 with explanation
change of name: change all references of this parameter (in usedAsInputParameterIn, linkedInputParameters, and maybe in the meta data fields copyValueToParameterAtCreationFromTemplate)
change of transformation: if the linkedInputParameters change compared to the previous linkedInputParameters, e.g. one referenced parameter was deleted, also remove the old, deleted input parameters from the referenced parameters usedAsInputParameterIn attribute
look into the existing usedAsInputParameterIn and update the values of the linked parameters accordingly to the change (i.e. run the transformation)
(low Prio) DELETE: remove the parameter only on the latest version of the Configuration (later, if we have versioning)
DELETE: also remove all references of this parameter (in usedAsInputParameterIn, and maybe in the meta data fields copyValueToParameterAtCreationFromTemplate)
(low Prio): implement the query parameter ?aas-format=true for retrieving/setting the AAS serialization
GET: implement the query parameter ?parameter-id-or-name for retrieving only one part of the configuration with all its subparameters
COMMENT: Done but as part of the method GET /spaces/{space-id}/configurations/{config-container-id-or-shortName}/latest-parameter/{parameter-id} and we cannot select Parameters by name since their names are not unique for a whole config
(low Prio): implement the query parameter ?aas-format=true for retrieving the AAS serialization
remove all this paths and operations for "target", "reference" and "machine" (expect for the "feedback" parts, if they have been already implemented)
Transformations:
Change Name of "Automatic" Transformation to "Linked" (also in template)
Add a possibility to add a transformation for every parameter:
drop-down field for "Transformation-Type:" with values "None", "Manual", "Linked", "Formula" (hint: stored as "algorithm")
if "Transformation-Type:" is not "None" (any other selection), 1. disable "Value" input field, 2. show the other transformation input fields (if it is "None", the other transformation input fields should not be shown)
"Select Input Parameter" field: 1. move the "Linked Parameters" selection field (currently outside of the Edit modal - see picture) into the Edit modal and rename it to "Select Input Parameter". 2. if "Manual" and "Automatic" type is selected, only one input parameter is allowed, for "Formula" multiple input parameters should be selectable
for "Formula" type: each input parameter needs to automatically get a short variable name, e.g. IN1, and the user should see it (maybe under the selection dialog)
for "Formula" type: an input field "Formula" should be shown
UI: Put an explaining question mark behind "Transformations" with the following text: "None: Value can be set directly. It is not linked to any other input parameter and is never changed automatically. \n Manual: Value can be set directly, but is linked to an input parameter. If this changes, Value is cleared and must be reset manually. \n Linked: Value is linked to an input parameter, from which Value is automatically copied 1-to-1. \n Formula: Value is linked to several input parameters, which are used to calculate a value using a formula."
UI: Remove "External" option from drop-down
for every parameter that creates a new transformation (only if "OK" is clicked, not if "Cancel" is clicked), store this parameter also into the linked input parameters in the field usedAsInputParameterIn: []
when a TDS is initially loaded in the UI, go through all parameters: Recreate the usedAsInputParameterIn field for the whole TDS based on all existing transformations.
do transformations at the backend when the "value" of an input parameter changes: 1. "Automatic" just copies values, 2. "Formula" executes with JSONata, 3. "Manual" empties/deletes the "value" input field
when the request to change the value of a parameter arrives at the backend, run the JSONata transformations on all parameters referenced in the usedAsInputParameterIn field. Send the response with every changed parameter back to the frontend.
UI - highlight (in the content tables and in the navigational TreeView) parameters that are empty or have transformations attached, so that someone is aware of a transformation and can check it. The following ideas apply in general, not just for parameters with transformations: for a parameter, 1. change the text color in the TreeView (not black) and 2. somehow change the table row (ideas: change font color or just make a border around the "value" column). Parameters with no/empty value should have an orange highlighting, Parameters with automatic, algorithm and external should have a blue highlighting
UI: for each parameter in the table show (with the multi-selection drop down already used in the UI): 1. all parameters where it is used as input parameter, 2. all input parameters for its own transformation. (it should not be changeable inside the table directly (deactivated), only within the edit modal)
optional/low priority UI: both should be linked in the UI for the View and Edit mode. if someone clicks on the UI box with the linked parameters, then the UI scrolls to the referenced parameter
UI: show hint in TDS editor (as some kind of removeable banner), if "Not every Parameter inside the Target Dataset is linked in the Reference Dataset". Simply check the usedAsInputParameterIn attribute of every target parameter (not for the Header fields)
(low prio): before "Save" inside the Edit modal, test if the Syntax of the formula is correct and show an error if not
Versioning
Versioning: Versioning == Release: Each time the entire TDS is released by an authorized employee, it is “versioned.” Work is always done on “latest,” which represents the changes since the last version. Old versions should be viewable and recoverable.
The version parameters should be shown in the tables but should not be changeable by the User in the UI. Implement the attribute changeableByUser: true|false in our parameter structure
UI: deactivate the Edit, Add Nested Parameter, Delete buttons/icons if changeableByUser == false for a parameter
REST (low prio): deactivate the changing of parameters via REST that contain changeableByUser == false
UI: Implement a button "Release" in the top row which opens a modal: Title = "Release Config Set: Create new Version", Text = "Do you want to release the latest changes in this Configuration Set as a new version? <newline> There have been structural or content changes in Header, Target Dataset, or Reference Dataset compared to the previous version. The new version number for config set will be: <show last versioned Header -> VersionNumber> arrow: -> <show new Header -> VersionNumber> <newline>(for every changed Machine Dataset:) Machine Dataset <name>: There have been structural or content changes compared to the previous version. The new machine dataset version will be: <show last versioned Machine Dataset -> Header -> FullVersionNumber> arrow: -> <show pre-calculated Machine Dataset -> Header -> FullVersionNumber> <newline>(repeat for every changed Machine Dataset)<newline> "Cancel" and "Release" button on the right side
UI: only show the "Release" button in Config Set based on our TDS template (not in Empty Config Sets)
UI: when the Release modal exists and the versioning is working, remove the "Send to MQTT" button and add the functionality (sending to MQTT) to the button if a new version is created
UI: deactivate the Release button for someone who has not the release permission
UI: if there are no changes compared to the latest versioned dataset, show the following text: 1. for Config Set "There have been no structural or content changes in Header, Target Dataset, or Reference Dataset compared to the previous version.", 2. for each Machine Dataset "There have been no structural or content changes compared to the previous version."
versioning functionality Config Set Target and Reference: there is one VersionNumber in Header for changes (structural and content) in the Header, Target and Reference Dataset. This is an integer that should be incremented (+1) if there has been a change in the corresponding dataset compared to the previous version.
create backend function: versioningCheckIfTargetOrReferenceSetChanged(): true or false. if true, then also return the calculation of the next version number
create backend function: versioningCreateNewVersionForTargetOrReferenceSet(): new version number. 1. check if there were changes, 2. change Header -> VersionNumber +1 and write "latest" into the current VersionNumber (if no version parameter exist, create them) , 3. Copy the Config Set as JSON into a versioning table
versioning functionality Machine Datasets: 1. each Machine Datasets Header contains a StructureVersionNumber. This is an integer that should be incremented (+1) when structural changes occur in the specific machine dataset (parameter is renamed, deleted, or added). 2. each Machine Datasets Header contains a VersionNumber displaying the individual optimizations done to a specific machine dataset. This is an integer that should be incremented (+1) when content changes occured in the specific machine dataset compared to the previous version. But, it should just increment if only the Machine Dataset was changed and not the Structure of the Machine Dataset OR the Target OR the Reference Dataset. If the Structure of the Machine Dataset OR the Target OR the Reference Dataset was changed (see other version numbers), then reset this version to 0.
create backend function: versioningCheckEachMachineSetChangedStructure(): true or false for each machine set. if true, then also return the calculation of the next structure version number
create backend function: versioningCheckEachMachineSetChangedContent(): true or false for each machine set. if true, then also return the calculation of the next version number
create backend function: versioningCreateNewVersionsForMachineSet(): new structure and version number. 1. check if there were changes in Header -> VersionNumber, structural and content changes in each Machine Set, 2. change Machine's StructureVersion and VersionNumer according to the logic (if no version parameter exist, create them), 3. Copy the Machine Set as JSON into a separate Machine versioning table which is connected to the main Config Set version
creating a new version must mean that the whole TDS is saved as a separate copy and the parameters can no longer be changed. There is one exception: the free-run status on the machine (AcknowledgeMode) in all machine data sets must remain changeable so that it is possible to store which data set has been approved for use in production.
for the frontend and REST, we also need functions to easily retrieve 1. all versions of the main config set (1, 2, 3, latest -> versioningGetAllConfigSetVersions()), 2. for one config set to get all included machine datasets plus all of its full version numbers (versioningGetAllMachineDatasetsAndVersions(<config-set-id>), remember that new machine datasets can be added over time to a config set and must not exist already in the very first config version), 3. get a specific version of a config set (versioningGetConfigSet(<version>)), 4. get a specific version of a machine dataset (versioningGetMachineDataSet(<config-set-id>, <machine-dataset-id>, <full-version-number>))
in the “MachineDataset” - “Header” there is a “FullVersionNumber”: this should be be default a composition (via a transformation) of ‘StructureVersionNumber’ (first digit), “VersionNumber” from TDS Header (second digit), and “VersionNumber” from Machine Dataset Header (third digit), e.g., “2.1.4.”
Kai G.: change REST API so that (the newest) versions can be retrieved. Add a possibility to change the AcknowledgeMode of each MachineDataSet of an already versioned TDS set
Implement the REST API for machine datasets: /spaces/{space-id}/configurations/{config-container-id-or-shortName}/machines, /spaces/{space-id}/configurations/{config-container-id-or-shortName}/machines/{machine-dataset-id-or-name}/{full-version-number}, /spaces/{space-id}/configurations/{config-container-id-or-shortName}/machines/{machine-dataset-id-or-name}/{full-version-number}/acknowledged. Pay attention that full-version_number can be 2.3.5 or latest or latest-versioned or latest-acknowledged-versioned
UI: in the Version drop-down field in the top row, show all VersionNumber (e.g. 1, 2, 3, 4, latest). This drop-down should only be visible in "View" mode. If clicked, open the selected version in the view editor (read-only).
(low prio) Now, if an version is selected+shown, show a button next to the drop-down to "Set this version to Latest" (attention: before recovering this version, automatically create a new version of the current "Latest" if there are changes)
UI: in every Machine Dataset, show its own Version drop-down field which shows its FullVersionNumber (e.g. 1.4.2). This drop-down should only be visible in "View" mode. If clicked, open the selected version in the view editor (read-only) (hint: the full TDS will be reloaded, because old Machine versions depend on old Target and Reference).
UI: after versioning is implemented, highlight the parameters which have changed since the last version, e.g. because an automatic transformation was applied
implement "Set as Latest" functionality
implement correct version comparison of current version with the previous one (currently, we just use a boolean to mark, if a parameter was changed. Problem: if a parameter is changed and then reverted back again, the system still shows that something changed.)
Import Bug: changeableByUser attribute must be set for versionings even after Import (hard coded). else, someone could easily import a file which has changeableByUser set to true
BUG blue parameter text to show unversioned changes: if two parameters have the same name/id (but within different parent elements), then the blue text is not consistent and only one of the two are shown in blue
BUG blue parameter text to show unversioned changes: not well implemented because it is only stored if something has changed. Problem: if the change is reverted, it still show blue although there is no change compared to the previous version
Feedback
Feedback functionality from Machine: Machine should be able to send feedback via REST which will be displayed in the UI
Kai: create REST API endpoints for Machine Feedback
implement Feedback REST API to store every change to an existing machine dataset: 1. The full version number must be specified for unique identification. 2. Meta data information must be in the "FeedbackHeader": “AuthenticationData” (person/worker, machine/cell), ‘FeedbackID’ (timestamp from the machine), “Comment” (change comment), 3. Complete machine dataset with changed values -> Return error if it does not contain the same parameters name as the original M-dataset or any data is missing in the FeedbackHeader
Persistently save all incoming M-TDSs by timestamp conneted to an existing M-TDS in the DB. Set “ReviewState” in the ‘Header’ to 0. (Note: incoming feedback from an M-TDS is not automatically a new version, but rather a kind of new “commit” to a version. In other words, an intermediate version.)
UI: When a TDS is opened, the system must check whether new machine feedback is available, i.e., “ReviewState” == 0 but only from the newest feedback. If so, a pop-up modal is displayed. The user/reviewer can decide whether they want to view the feedback. If so, the time (FeedbackID), comment, and authentication are displayed, along with a summary of the changes to all affected parameters. The user/reviewer can decide 1. whether they want to accept the feedback in Latest (sets “ReviewState” to 1), OR 2. reject it (sets “ReviewState” to 2), OR 3. send it to the reference dataset (sets ‘ReviewState’ to 3), OR 4. send it to the target dataset (sets “ReviewState” to 4).
If option 3 or 4 is selected, the comment field will change from read-only to writable so that further comments can be added, and all other buttons will disappear except for the selected button. When clicked, feedback will then be written to the respective “FeedbackHeader” of the reference or target data set: “AuthenticationData” (person is renewed), “FeedbackID” (timestamp is reset), comment from the comment field is used
UI: When a TDS is opened, it must check whether there is new feedback in the reference dataset, i.e., “ReviewState” == 0 but only from the newest feedback. If so, a pop-up modal is displayed. The user/reviewer can decide whether they want to view the feedback. If so, the time, comment, and authentication are displayed. The user/reviewer can decide 1. whether they want to “incorporate” the feedback (sets “ReviewState” to 1), OR 2. reject it (sets “ReviewState” to 2), OR 3. send it to the target dataset (sets “ReviewState” to 4).
If option 3 is selected, the comment field will change from read-only to writable so that further comments can be added, and all other buttons will disappear except for the selected button. When clicked, feedback is then written to the respective “FeedbackHeader” of the target dataset: ‘AuthenticationData’ (person is renewed), “FeedbackID” (timestamp is reset), comment from the comment field is used
UI: When a TDS is opened, it must check whether there is new target feedback, i.e., “ReviewState” == 0. If so, a pop-up modal is displayed. The user/reviewer can decide whether they want to view the feedback. If so, the time, comment, and authentication are displayed. The user/reviewer can decide 1. whether they want to “Incorporate” the feedback (sets “ReviewState” to 1), OR 2. reject it (sets ‘ReviewState’ to 2), OR 3. prepare it for development (sets “ReviewState” to 5).
Implement Hints and Restrictions that this software is just a prototype:
reusable pop-up modal: "This software was developed as a prototype for demonstration purposes within a research project. For stable execution, it was only tested with . If you want further development into stable, production-ready software, please contact us: ...contact data."
Spaces View: 1 space
User View: 5 additional Users
Parameter: 1000 parameters over all configs
TODOs for further Dev:
Test and restrict JSONata functionality -> no bad things should happen
more stable: transactions, separation and no corruption of data if something goes wrong
Implement New TDS Structure (see Miro):
-_+. Autogenerate a (changeable) suggestion for the "Name" input field every time a new character is inserted in the "Display Name" field (replace space with-, remove all other special charactersdisplayNametext in the TreeView for each element. Default: Deutsch (as long as we have no language selection built into the UI)structureVisible != false(if==falsethen all child elements should get one level up)structureVisibleisfalse, parameters "jump" one level up in view mode). Each section has a table with all its including parameters. In Edit mode, still show exactly the same sections of view mode, even if a parameter is not on the root level anymore because ofstructureVisible = false. For all additional Parameters on the root level, which are not shown in the View mode, show an extra section"parameterType": "meta"and its childs:#F0FFFF"parameterType": "content"and its childs:#F6FFED#FFF8E7#FFFFE0#F1E9D2#E5E4E2copyValueToParameterAtCreationFromTemplatefunctionality of the meta fields (shortName, name, description, categories).parameterType == content, ifnonelook at the parent) without avalueshould be italic and dark-redvaluefor a parameter in the Edit modal, show a pop-up if transformations were executed. In the popup, show all changed parameters.structureVisibleset tofalseso that it is not displayed in the View mode. If "Min-Target-Max" is selected, display two further input fields for entering addtionally a Min and Max value. "Min", and "Max" which contain the inserted values in its "value" properties.usedAsInputParameterIn->pathis not filled anymoreHeaderis removed and someone tries to create a new version, add the main Header againlinked, the correct input parameter set andusedAsInputParameterInupdated. (deactivate button if already one reference dataset exists);nameis not yet existing) with a transformation set tolinked, the correct input parameter set andusedAsInputParameterInupdated.linked, the correct input parameter set andusedAsInputParameterInupdated.linked, the correct input parameter set andusedAsInputParameterInupdated.usedAsInputParameterInandtransformation -> linkedParametersin UI + clickableTDS Template:
structureVisible: falseTDSIdentifierin the Machine Datasets should have a transformation by default: linked toTDSIdentifierin the Config HeaderAcknowledgeModein the Machine Datasets should have a transformation by default: linked toAcknowledgeModeDefaultin the Config HeaderlinkValueToParameterValue, usedAsInputParameterIn, linkedInputParameters. They all have the same structure:[{ "id": "<uuid>", "path": ["Header", "VersionNumber"] }, ...]. In out internal TDS template, the UUID must be empty and only the path exists because before creating, we can not know what will be the uuid of the referenced parameter. For now, the few transformations of the TDS template are more or less hard coded in the backend => make it more generic: if nouuidexists, then use thepathto create a transformationTDS/Config List table:
REST API:
../configurations:idgenerated at server,shortNamerequired?template=TDS, create a new TDS configuration../configurations/{config-container-id-or-shortName}:idof the config-container can be used, but also the uniqueshortName(update this behaviour for every paths)idexists (path and body), show error (return "please first delete the existing Configuration Set")../configurations/{config-container-id-or-shortName}/latest-parameter:content(root parameter) with the following logic?asSubParameterOf=<uuid>is given, create a new Parameter directly as a Subparameter of the given Parameter with the following logic?aas-format=truefor setting the AAS serializationnameis required.name*, parameterType, structureVisible, displayName*, description*, value*, valueTemplateSource*, transformation*name: it must be unique in the whole ConfigurationdisplayNameanddescription: this does not add an entry, but it overrides the complete arrayvalue: can only be set iftransformationis not existing ortransformationTypeisnoneormanualvalueTemplateSource: 1. check is given reference is correct ("shortName", "name", "description", "categories"), 2. updatevalueand correctly link with the meta parametertransformation: can be given if the following conditions are satisfied:none:linkedInputParametersandactionmust be empty (else: return 400 and error with description in body, hint: this is independent ofvalue- it can have a value set or not)manual:linkedInputParametersmust have exactly one entry which exists as parameter in the same TDS set, andactionmust be empty (else: return 400 and error with description in body, hint: this is independent ofvalue- it can have a value set or not) => updateusedAsInputParameterInof the referenced parameterlinked:linkedInputParametersmust have exactly one entry which exists as parameter in the same TDS set,valuemust be empty, andactionmust be empty (else: return 400 and error with description in body) => 1. updatevalueentry of own parameter and 2. updateusedAsInputParameterInof the linked parameteralgorithm:linkedInputParameterscould have entries or none,valuemust be empty, andactionmust be set (else: return 400 and error with description in body) => 1. calculatevalueentry of own parameter and 2. updateusedAsInputParameterInof the linked parametersexternal:linkedInputParametersmust be empty,valuemust be empty, andactionmust be set (else: return 400 and error with description in body) => do nothing for nowchangeableByUser,usedAsInputParameterIn,valueType,subParametersmust not be setusedAsInputParameterInshould be automatically updated if a transformation is added inside another parametervalueTypeshould be automatically calculated on our server based on the input ofvalue. it should be automatically recalculated ifvalueis updated.../configurations/{config-container-id-or-shortName}/latest-parameter/{parameter-id}:displayNameanddescription: this does not add an entry, but it overrides the complete array)idinside body can be missing. ifidis included in body, it must be the same as in the REST path and already existing in the TDS set as a parameterchangeableByUserattribute istrueor non-existent (default=true). iffalse, return 400 with explanationname: change all references of this parameter (inusedAsInputParameterIn,linkedInputParameters, and maybe in the meta data fieldscopyValueToParameterAtCreationFromTemplate)transformation: if thelinkedInputParameterschange compared to the previouslinkedInputParameters, e.g. one referenced parameter was deleted, also remove the old, deleted input parameters from the referenced parametersusedAsInputParameterInattributeusedAsInputParameterInand update the values of the linked parameters accordingly to the change (i.e. run the transformation)usedAsInputParameterIn, and maybe in the meta data fieldscopyValueToParameterAtCreationFromTemplate)?aas-format=truefor retrieving/setting the AAS serialization/spaces/{space-id}/configurations/{config-container-id-or-shortName}/{version-id}?parameter-id-or-namefor retrieving only one part of the configuration with all its subparameters?aas-format=truefor retrieving the AAS serialization/spaces/{space-id}/configurations/{config-container-id-or-shortName}/{version-id}/target|reference|machineTransformations:
"algorithm")usedAsInputParameterIn: []usedAsInputParameterInfield for the whole TDS based on all existing transformations.valueof a parameter arrives at the backend, run the JSONata transformations on all parameters referenced in theusedAsInputParameterInfield. Send the response with every changed parameter back to the frontend.valueshould have an orange highlighting, Parameters withautomatic,algorithmandexternalshould have a blue highlightingusedAsInputParameterInattribute of every target parameter (not for the Header fields)Versioning
changeableByUser: true|falsein our parameter structurechangeableByUser == falsefor a parameterchangeableByUser == false<newline>There have been structural or content changes in Header, Target Dataset, or Reference Dataset compared to the previous version. The new version number for config set will be: <show last versionedHeader -> VersionNumber> arrow: -> <show newHeader -> VersionNumber><newline>(for every changed Machine Dataset:) Machine Dataset<name>: There have been structural or content changes compared to the previous version. The new machine dataset version will be: <show last versionedMachine Dataset -> Header -> FullVersionNumber> arrow: -> <show pre-calculatedMachine Dataset -> Header -> FullVersionNumber><newline>(repeat for every changed Machine Dataset)<newline>"Cancel" and "Release" button on the right sideVersionNumberinHeaderfor changes (structural and content) in the Header, Target and Reference Dataset. This is an integer that should be incremented (+1) if there has been a change in the corresponding dataset compared to the previous version.versioningCheckIfTargetOrReferenceSetChanged(): true or false. if true, then also return the calculation of the next version numberversioningCreateNewVersionForTargetOrReferenceSet(): new version number. 1. check if there were changes, 2. changeHeader -> VersionNumber +1and write "latest" into the current VersionNumber (if no version parameter exist, create them) , 3. Copy the Config Set as JSON into a versioning tableHeadercontains aStructureVersionNumber. This is an integer that should be incremented (+1) when structural changes occur in the specific machine dataset (parameter is renamed, deleted, or added). 2. each Machine DatasetsHeadercontains aVersionNumberdisplaying the individual optimizations done to a specific machine dataset. This is an integer that should be incremented (+1) when content changes occured in the specific machine dataset compared to the previous version. But, it should just increment if only the Machine Dataset was changed and not the Structure of the Machine Dataset OR the Target OR the Reference Dataset. If the Structure of the Machine Dataset OR the Target OR the Reference Dataset was changed (see other version numbers), then reset this version to0.versioningCheckEachMachineSetChangedStructure(): true or false for each machine set. if true, then also return the calculation of the next structure version numberversioningCheckEachMachineSetChangedContent(): true or false for each machine set. if true, then also return the calculation of the next version numberversioningCreateNewVersionsForMachineSet(): new structure and version number. 1. check if there were changes in Header -> VersionNumber, structural and content changes in each Machine Set, 2. change Machine's StructureVersion and VersionNumer according to the logic (if no version parameter exist, create them), 3. Copy the Machine Set as JSON into a separate Machine versioning table which is connected to the main Config Set versionAcknowledgeMode) in all machine data sets must remain changeable so that it is possible to store which data set has been approved for use in production.1, 2, 3, latest->versioningGetAllConfigSetVersions()), 2. for one config set to get all included machine datasets plus all of its full version numbers (versioningGetAllMachineDatasetsAndVersions(<config-set-id>), remember that new machine datasets can be added over time to a config set and must not exist already in the very first config version), 3. get a specific version of a config set (versioningGetConfigSet(<version>)), 4. get a specific version of a machine dataset (versioningGetMachineDataSet(<config-set-id>, <machine-dataset-id>, <full-version-number>))AcknowledgeModeof each MachineDataSet of an already versioned TDS set/spaces/{space-id}/configurations/{config-container-id-or-shortName}/machines,/spaces/{space-id}/configurations/{config-container-id-or-shortName}/machines/{machine-dataset-id-or-name}/{full-version-number},/spaces/{space-id}/configurations/{config-container-id-or-shortName}/machines/{machine-dataset-id-or-name}/{full-version-number}/acknowledged. Pay attention that full-version_number can be2.3.5orlatestorlatest-versionedorlatest-acknowledged-versionedVersionNumber(e.g. 1, 2, 3, 4, latest). This drop-down should only be visible in "View" mode. If clicked, open the selected version in the view editor (read-only).FullVersionNumber(e.g. 1.4.2). This drop-down should only be visible in "View" mode. If clicked, open the selected version in the view editor (read-only) (hint: the full TDS will be reloaded, because old Machine versions depend on old Target and Reference).changeableByUserattribute must be set for versionings even after Import (hard coded). else, someone could easily import a file which haschangeableByUserset totrueFeedback
FeedbackID), comment, and authentication are displayed, along with a summary of the changes to all affected parameters. The user/reviewer can decide 1. whether they want to accept the feedback in Latest (sets “ReviewState” to 1), OR 2. reject it (sets “ReviewState” to 2), OR 3. send it to the reference dataset (sets ‘ReviewState’ to 3), OR 4. send it to the target dataset (sets “ReviewState” to 4).Implement Hints and Restrictions that this software is just a prototype:
TODOs for further Dev: