summaryrefslogtreecommitdiff
path: root/topics/editing/case-attributes.gmi
diff options
context:
space:
mode:
Diffstat (limited to 'topics/editing/case-attributes.gmi')
-rw-r--r--topics/editing/case-attributes.gmi110
1 files changed, 110 insertions, 0 deletions
diff --git a/topics/editing/case-attributes.gmi b/topics/editing/case-attributes.gmi
new file mode 100644
index 0000000..1a86131
--- /dev/null
+++ b/topics/editing/case-attributes.gmi
@@ -0,0 +1,110 @@
+# Editing Case-Attributes
+
+## Tags
+
+* type: document
+* keywords: case-attribute, editing
+* assigned: fredm, zachs, acenteno, bonfacem
+* status: requirements gathering
+
+## Introduction
+
+Case-attributes metadata for samples. They are include: sex, age, etc of the various individuals and exist separately from "normal" traits mainly because they're non-numeric. From the GN2 traits page, they are shown as extra columns under the "Reviews and Edit Data" section.
+
+Case-attributes are determined at the group-level. E.g. for BXD, case attributes would apply at the level of each sample, across all BXD data. Every strain has a unique attribute and it's fixed, not variable.
+
+We need to differentiate these two things:
+
+* Case-Attribute labels/names/categories (e.g. Sex, Height, Cage-handler, etc)
+* Case-Attribute values (e.g. Male/Female, 20cm, Frederick, etc.)
+
+Currently, both labels and values are set at the group level:
+
+=> https://github.com/genenetwork/genenetwork1/blob/0f170f0b748a4e10eaf8538f6bcbf88b573ce8e7/web/webqtl/showTrait/DataEditingPage.py Case-Attributes on GeneNetwork1
+is a good starting point to help with understanding how case-attributes were implemented and how they worked.
+
+Critical bug existed where editing one case-attribute affected all case-attributes defined for a group.
+
+Case attributes can have the following data-types:
+
+* Free-form text (no constraints) - see the `Status` column
+* Enumerations - textual data, but where the user can only pick from specific values
+* Links - The value displayed also acts as a link - e.g. the 'JAX:*' values in the `RRID` column
+
+## HOWTO
+
+Example SQL query to fetch case-attribute data:
+
+```
+SELECT
+ caxrn.*, ca.Name AS CaseAttributeName,
+ ca.Description AS CaseAttributeDescription,
+ iset.InbredSetId AS OrigInbredSetId
+FROM
+ CaseAttribute AS ca INNER JOIN CaseAttributeXRefNew AS caxrn
+ ON ca.Id=caxrn.CaseAttributeId
+INNER JOIN
+ StrainXRef AS sxr
+ ON caxrn.StrainId=sxr.StrainId
+INNER JOIN
+ InbredSet AS iset
+ ON sxr.InbredSetId=iset.InbredSetId
+WHERE
+ caxrn.value != 'x'
+ AND caxrn.value IS NOT NULL;
+```
+
+CaseAttributeXRefNew differs from CaseAttributeXRef:
+
+```
+mysql> describe CaseAttributeXRef;
++------------------+----------------------+------+-----+---------+-------+
+| Field | Type | Null | Key | Default | Extra |
++------------------+----------------------+------+-----+---------+-------+
+| ProbeSetFreezeId | smallint(5) unsigned | NO | PRI | 0 | |
+| StrainId | smallint(5) unsigned | NO | PRI | 0 | |
+| CaseAttributeId | smallint(5) | NO | PRI | 0 | |
+| Value | varchar(100) | NO | | | |
++------------------+----------------------+------+-----+---------+-------+
+4 rows in set (0.01 sec)
+
+mysql> describe CaseAttributeXRefNew;
++-----------------+------------------+------+-----+---------+-------+
+| Field | Type | Null | Key | Default | Extra |
++-----------------+------------------+------+-----+---------+-------+
+| InbredSetId | int(5) unsigned | NO | PRI | NULL | |
+| StrainId | int(20) unsigned | NO | PRI | NULL | |
+| CaseAttributeId | int(5) unsigned | NO | PRI | NULL | |
+| Value | varchar(100) | NO | | NULL | |
++-----------------+------------------+------+-----+---------+-------+
+4 rows in set (0.01 sec)
+```
+
+=> https://github.com/genenetwork/genenetwork3/blob/dd0b29c07017ec398c447ca683dd4b4be18d73b7/scripts/update-case-attribute-tables-20230818 Script to update CaseAttribute and CaseAttributeXRefNew table
+
+## Tasks
+
+* @bmunyoki: Model case-attributes correctly in RDF.
+* @bmunyoki, @zachs: Implement case-attributes editing in GN3 that correctly models case-attributes at the group-level. CRUD operations with the correct authorization. People who can edit sample data should not be able to edit case-attributes because case-attributes are defined at the group level; and editing case-attributes at the group-level will affect other samples.
+* @rob: Confirm to team whether "N" and "SE" are case-attributes. @bmunyoki AFAICT, no.
+
+
+Possible set of privileges subject to discussion:
+
+* group:resource:add-case-attributes - Allows user to add a completely new case attribute
+* group:resource:edit-case-attributes - Allows user to edit an existing case attribute
+* group:resource:delete-case-attributes - Allows user to delete an existing case attribute
+* group:resource:view-case-attributes - Allows user to view case attributes and their value
+
+Given groups are not directly linked to any auth resource, we may introduce some level of indirection. Addy a new resource type that handles groups may solve this.
+
+## See Also
+
+=> https://matrix.to/#/!EhYjlMbZHbGPjmAFbh:matrix.org/$myIoafLp_dIONnyNvEI0k2xf3Y8-LyiI_mkP2vBN08o?via=matrix.org Discussion on Case-Attributes Editing in Matrix
+=> https://matrix.to/#/!EhYjlMbZHbGPjmAFbh:matrix.org/$P6SNnpY-nAZsDr3VZlRi05m6MT32lXBsCl-BYLh-YLM?via=matrix.org More Discussion on Matrix
+=> /issues/case-attr-edit-error Case Attribute Edting Problems
+=> /issues/fix-case-attribute-work Fix Case Attribute Work (Same Columns)
+=> /issues/fix-case-attribute-editing Editing Case Attribute
+=> /issues/consecutive-crud-applications-when-uploading-data Fix Case Attribute Work (Consecutive CRUD applications)
+=> /issues/edit-metadata-bugs Cannot Edit Metadata of BXD Traits Effectively
+=> /topics/data-uploads/datasets Some Historical Context