Skip to content

Commit bf80c6a

Browse files
authored
Merge pull request #5 from stjudecloud/specimen-molecular
feat(specimenmolecular): add specimen molecular analyte type
2 parents 0a3b529 + 2a49f4d commit bf80c6a

File tree

3 files changed

+366
-0
lines changed

3 files changed

+366
-0
lines changed

src/CDE/V1/Data/SpecimenMolecular.php

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
<?php
2+
3+
namespace CCDI\CDE\V1\Data;
4+
5+
use ArrayAccess;
6+
use CCDI\CDE\Validator\ValidatorTrait;
7+
8+
enum SpecimenMolecular implements ArrayAccess
9+
{
10+
use ValidatorTrait;
11+
12+
case CFDNA;
13+
14+
case CTDNA;
15+
16+
case DNA;
17+
18+
case MIRNA;
19+
20+
case MESSENGER_RNA;
21+
22+
case NOT_REPORTED;
23+
24+
case NUCLEIC_RNA;
25+
26+
case PROTEIN;
27+
28+
case RNA;
29+
30+
case TOTAL_RNA;
31+
32+
case UNKNOWN;
33+
34+
/**
35+
* @var int
36+
*/
37+
const CDE_ID = 15063661;
38+
39+
const URL = 'https://cadsr.cancer.gov/onedata/dmdirect/NIH/NCI/CO/CDEDD?filter=CDEDD.ITEM_ID=15063661%20and%20ver_nr=1';
40+
41+
const DESCRIPTION = 'The sample or material being subjected to analysis.';
42+
43+
const CDE_VERSION = 1;
44+
45+
private const DATA = [
46+
[
47+
'value' => self::CFDNA,
48+
'permissible_value' => 'cfDNA',
49+
'long_name' => 'Circulating cell-free DNA',
50+
'public_id' => 2578098,
51+
'concept_code' => ['C128274'],
52+
'description' => 'DNA found in blood plasma and other bodily fluids that is not associated with cells.',
53+
],
54+
[
55+
'value' => self::CTDNA,
56+
'permissible_value' => 'ctDNA',
57+
'long_name' => 'Circulating Tumor-Derived DNA',
58+
'public_id' => 4061103,
59+
'concept_code' => ['C113243'],
60+
'description' => 'Neoplasm-derived DNA found in blood plasma and other bodily fluids that is not associated with cells.',
61+
],
62+
[
63+
'value' => self::DNA,
64+
'permissible_value' => 'DNA',
65+
'long_name' => 'DNA',
66+
'public_id' => 2581946,
67+
'concept_code' => ['C449'],
68+
'description' => 'A long linear double-stranded polymer formed from nucleotides attached to a deoxyribose backbone and found in the nucleus of a cell; associated with the transmission of genetic information.',
69+
],
70+
[
71+
'value' => self::MIRNA,
72+
'permissible_value' => 'miRNA',
73+
'long_name' => 'MicroRNA',
74+
'public_id' => 2938123,
75+
'concept_code' => ['C25966'],
76+
'description' => 'A sequence of single-stranded RNA, that is 20-25 nucleotides in length, which is transcribed from DNA but is not translated into a protein. This nucleic acid may regulate the transcription or translation of other genes.',
77+
],
78+
[
79+
'value' => self::MESSENGER_RNA,
80+
'permissible_value' => 'mRNA',
81+
'long_name' => 'Messenger RNA',
82+
'public_id' => 2756502,
83+
'concept_code' => ['C813'],
84+
'description' => 'A class of RNA molecule containing protein-coding information in its nucleotide sequence that can be translated into the amino acid sequence of a protein.',
85+
],
86+
[
87+
'value' => self::NOT_REPORTED,
88+
'permissible_value' => 'Not Reported',
89+
'long_name' => 'Not Reported',
90+
'public_id' => 2572578,
91+
'concept_code' => ['C43234'],
92+
'description' => 'Not provided or available.',
93+
],
94+
[
95+
'value' => self::NUCLEIC_RNA,
96+
'permissible_value' => 'Nucleic RNA',
97+
'long_name' => 'Nucleic RNA Sample',
98+
'public_id' => 15063892,
99+
'concept_code' => ['C174108'],
100+
'description' => 'A biological specimen comprised of the RNA isolated from the nuclei of cells.',
101+
],
102+
[
103+
'value' => self::PROTEIN,
104+
'permissible_value' => 'Protein',
105+
'long_name' => 'Protein',
106+
'public_id' => 2581951,
107+
'concept_code' => ['C17021'],
108+
'description' => 'Any of a group of complex organic macromolecules that contain carbon, hydrogen, oxygen, nitrogen, and usually sulfur and are composed of one or more chains of amino acids. Proteins are fundamental components of all living cells and include many substances, such as enzymes, hormones, and antibodies, that are necessary for the proper functioning of an organism.',
109+
],
110+
[
111+
'value' => self::RNA,
112+
'permissible_value' => 'RNA',
113+
'long_name' => 'RNA Specimen',
114+
'public_id' => 14239169,
115+
'concept_code' => ['C198568'],
116+
'description' => 'A biospecimen created to contain an isolated or enriched RNA sample.',
117+
],
118+
[
119+
'value' => self::TOTAL_RNA,
120+
'permissible_value' => 'Total RNA',
121+
'long_name' => 'Total RNA',
122+
'public_id' => 10811966,
123+
'concept_code' => ['C163995'],
124+
'description' => 'A biological sample comprised of all of the RNA collected from an experimental subject.',
125+
],
126+
[
127+
'value' => self::UNKNOWN,
128+
'permissible_value' => 'Unknown',
129+
'long_name' => 'Unknown',
130+
'public_id' => 5682944,
131+
'concept_code' => ['C17998'],
132+
'description' => 'Not known, not observed, not recorded, or refused.',
133+
],
134+
];
135+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace CCDI\Transformer\V0;
4+
5+
use CCDI\CDE\V1\Data\SpecimenMolecular;
6+
7+
/**
8+
* @method static string|null|SpecimenMolecular transform($permissibleValue, $key = null)
9+
*/
10+
class SpecimenMolecularTransformer extends AbstractTransformer
11+
{
12+
protected static array $MAPPINGS = [
13+
[
14+
'value' => SpecimenMolecular::CFDNA,
15+
'regex' => '/^(cfdna)$/i',
16+
],
17+
[
18+
'value' => SpecimenMolecular::CTDNA,
19+
'regex' => '/^(ctdna)$/i',
20+
],
21+
[
22+
'value' => SpecimenMolecular::DNA,
23+
'regex' => '/^(dna)$/i',
24+
],
25+
[
26+
'value' => SpecimenMolecular::MIRNA,
27+
'regex' => '/^(mirna)$/i',
28+
],
29+
[
30+
'value' => SpecimenMolecular::MESSENGER_RNA,
31+
'regex' => '/^(mrna)$/i',
32+
],
33+
[
34+
'value' => SpecimenMolecular::NOT_REPORTED,
35+
'regex' => '/^(not reported)$/i',
36+
],
37+
[
38+
'value' => SpecimenMolecular::NUCLEIC_RNA,
39+
'regex' => '/^(nucleic rna)$/i',
40+
],
41+
[
42+
'value' => SpecimenMolecular::PROTEIN,
43+
'regex' => '/^(protein)$/i',
44+
],
45+
[
46+
'value' => SpecimenMolecular::RNA,
47+
'regex' => '/^(rna)$/i',
48+
],
49+
[
50+
'value' => SpecimenMolecular::TOTAL_RNA,
51+
'regex' => '/^(total rna)$/i',
52+
],
53+
[
54+
'value' => SpecimenMolecular::UNKNOWN,
55+
'regex' => '/^(unknown)$/i',
56+
],
57+
];
58+
}
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
<?php
2+
3+
use CCDI\CDE\V1\Data\SpecimenMolecular;
4+
use CCDI\Transformer\V0\SpecimenMolecularTransformer;
5+
use PHPUnit\Framework\TestCase;
6+
7+
class SpecimenMolecularTransformerTest extends TestCase
8+
{
9+
public function testCFDNAInput()
10+
{
11+
$string = 'cfDNA';
12+
$this->assertTrue(SpecimenMolecular::validate($string));
13+
$this->assertTrue(
14+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
15+
);
16+
$this->assertTrue(
17+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
18+
);
19+
$this->assertTrue(
20+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
21+
);
22+
}
23+
24+
public function testCTDNAInput()
25+
{
26+
$string = 'ctDNA';
27+
$this->assertTrue(SpecimenMolecular::validate($string));
28+
$this->assertTrue(
29+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
30+
);
31+
$this->assertTrue(
32+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
33+
);
34+
$this->assertTrue(
35+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
36+
);
37+
}
38+
39+
public function testDNAInput()
40+
{
41+
$string = 'DNA';
42+
$this->assertTrue(SpecimenMolecular::validate($string));
43+
$this->assertTrue(
44+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
45+
);
46+
$this->assertTrue(
47+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
48+
);
49+
$this->assertTrue(
50+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
51+
);
52+
}
53+
54+
public function testMIRNAInput()
55+
{
56+
$string = 'miRNA';
57+
$this->assertTrue(SpecimenMolecular::validate($string));
58+
$this->assertTrue(
59+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
60+
);
61+
$this->assertTrue(
62+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
63+
);
64+
$this->assertTrue(
65+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
66+
);
67+
}
68+
69+
public function testMRNAInput()
70+
{
71+
$string = 'mRNA';
72+
$this->assertTrue(SpecimenMolecular::validate($string));
73+
$this->assertTrue(
74+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
75+
);
76+
$this->assertTrue(
77+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
78+
);
79+
$this->assertTrue(
80+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
81+
);
82+
}
83+
84+
public function testNotreportedInput()
85+
{
86+
$string = 'Not Reported';
87+
$this->assertTrue(SpecimenMolecular::validate($string));
88+
$this->assertTrue(
89+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
90+
);
91+
$this->assertTrue(
92+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
93+
);
94+
$this->assertTrue(
95+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
96+
);
97+
}
98+
99+
public function testNuclericRNAInput()
100+
{
101+
$string = 'Nucleic RNA';
102+
$this->assertTrue(SpecimenMolecular::validate($string));
103+
$this->assertTrue(
104+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
105+
);
106+
$this->assertTrue(
107+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
108+
);
109+
$this->assertTrue(
110+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
111+
);
112+
}
113+
114+
public function testProtetinInput()
115+
{
116+
$string = 'Protein';
117+
$this->assertTrue(SpecimenMolecular::validate($string));
118+
$this->assertTrue(
119+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
120+
);
121+
$this->assertTrue(
122+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
123+
);
124+
$this->assertTrue(
125+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
126+
);
127+
}
128+
129+
public function testRNAInput()
130+
{
131+
$string = 'RNA';
132+
$this->assertTrue(SpecimenMolecular::validate($string));
133+
$this->assertTrue(
134+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
135+
);
136+
$this->assertTrue(
137+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
138+
);
139+
$this->assertTrue(
140+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
141+
);
142+
}
143+
144+
public function testTotalRNAInput()
145+
{
146+
$string = 'Total RNA';
147+
$this->assertTrue(SpecimenMolecular::validate($string));
148+
$this->assertTrue(
149+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
150+
);
151+
$this->assertTrue(
152+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
153+
);
154+
$this->assertTrue(
155+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
156+
);
157+
}
158+
159+
public function testUnknownInput()
160+
{
161+
$string = 'Unknown';
162+
$this->assertTrue(SpecimenMolecular::validate($string));
163+
$this->assertTrue(
164+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtolower($string), 'permissible_value'))
165+
);
166+
$this->assertTrue(
167+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform(strtoupper($string), 'permissible_value'))
168+
);
169+
$this->assertTrue(
170+
SpecimenMolecular::validate(SpecimenMolecularTransformer::transform($string, 'permissible_value'))
171+
);
172+
}
173+
}

0 commit comments

Comments
 (0)