turbot-runner-morph 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/bin/rspec +16 -0
- data/lib/turbot_runner.rb +28 -0
- data/lib/turbot_runner/base_handler.rb +15 -0
- data/lib/turbot_runner/exceptions.rb +4 -0
- data/lib/turbot_runner/prerun.rb +3 -0
- data/lib/turbot_runner/processor.rb +53 -0
- data/lib/turbot_runner/runner.rb +179 -0
- data/lib/turbot_runner/script_runner.rb +98 -0
- data/lib/turbot_runner/utils.rb +47 -0
- data/lib/turbot_runner/validator.rb +28 -0
- data/lib/turbot_runner/version.rb +3 -0
- data/schema/schemas/company-schema.json +243 -0
- data/schema/schemas/financial-payment-schema.json +32 -0
- data/schema/schemas/includes/address.json +53 -0
- data/schema/schemas/includes/alternative_name.json +36 -0
- data/schema/schemas/includes/company-for-nesting.json +245 -0
- data/schema/schemas/includes/company.json +25 -0
- data/schema/schemas/includes/entity.json +58 -0
- data/schema/schemas/includes/filing.json +52 -0
- data/schema/schemas/includes/financial-payment-data-object.json +112 -0
- data/schema/schemas/includes/identifier.json +20 -0
- data/schema/schemas/includes/industry_code.json +29 -0
- data/schema/schemas/includes/licence-data-object.json +63 -0
- data/schema/schemas/includes/officer.json +70 -0
- data/schema/schemas/includes/organisation.json +58 -0
- data/schema/schemas/includes/permission.json +46 -0
- data/schema/schemas/includes/person.json +62 -0
- data/schema/schemas/includes/person_name.json +71 -0
- data/schema/schemas/includes/previous_name.json +24 -0
- data/schema/schemas/includes/share-parcel-data.json +82 -0
- data/schema/schemas/includes/share-parcel.json +78 -0
- data/schema/schemas/includes/subsidiary-relationship-data.json +58 -0
- data/schema/schemas/includes/total-shares.json +17 -0
- data/schema/schemas/includes/unknown_entity_type.json +58 -0
- data/schema/schemas/licence-schema.json +105 -0
- data/schema/schemas/primary-data-schema.json +20 -0
- data/schema/schemas/share-parcel-schema.json +22 -0
- data/schema/schemas/simple-financial-payment-schema.json +122 -0
- data/schema/schemas/simple-licence-schema.json +82 -0
- data/schema/schemas/simple-subsidiary-schema.json +85 -0
- data/schema/schemas/subsidiary-relationship-schema.json +46 -0
- data/spec/bots/bot-that-crashes-immediately/manifest.json +15 -0
- data/spec/bots/bot-that-crashes-immediately/scraper.rb +1 -0
- data/spec/bots/bot-that-crashes-immediately/transformer1.rb +15 -0
- data/spec/bots/bot-that-crashes-in-scraper/manifest.json +15 -0
- data/spec/bots/bot-that-crashes-in-scraper/scraper.rb +11 -0
- data/spec/bots/bot-that-crashes-in-scraper/transformer1.rb +15 -0
- data/spec/bots/bot-that-crashes-in-transformer/manifest.json +20 -0
- data/spec/bots/bot-that-crashes-in-transformer/scraper.rb +10 -0
- data/spec/bots/bot-that-crashes-in-transformer/transformer1.rb +15 -0
- data/spec/bots/bot-that-crashes-in-transformer/transformer2.rb +17 -0
- data/spec/bots/bot-that-emits-run-ended/manifest.json +8 -0
- data/spec/bots/bot-that-emits-run-ended/scraper.rb +11 -0
- data/spec/bots/bot-that-expects-file/manifest.json +8 -0
- data/spec/bots/bot-that-expects-file/scraper.rb +11 -0
- data/spec/bots/bot-that-expects-file/something.txt +1 -0
- data/spec/bots/bot-with-invalid-data-type/manifest.json +8 -0
- data/spec/bots/bot-with-invalid-data-type/scraper.rb +10 -0
- data/spec/bots/bot-with-invalid-sample-date/manifest.json +8 -0
- data/spec/bots/bot-with-invalid-sample-date/scraper.rb +10 -0
- data/spec/bots/bot-with-pause/manifest.json +8 -0
- data/spec/bots/bot-with-pause/scraper.rb +16 -0
- data/spec/bots/bot-with-transformer/manifest.json +15 -0
- data/spec/bots/bot-with-transformer/scraper.rb +10 -0
- data/spec/bots/bot-with-transformer/transformer.rb +15 -0
- data/spec/bots/bot-with-transformers/manifest.json +20 -0
- data/spec/bots/bot-with-transformers/scraper.rb +10 -0
- data/spec/bots/bot-with-transformers/transformer1.rb +15 -0
- data/spec/bots/bot-with-transformers/transformer2.rb +15 -0
- data/spec/bots/invalid-json-bot/manifest.json +8 -0
- data/spec/bots/invalid-json-bot/scraper.rb +11 -0
- data/spec/bots/invalid-record-bot/manifest.json +8 -0
- data/spec/bots/invalid-record-bot/scraper.rb +11 -0
- data/spec/bots/logging-bot/manifest.json +8 -0
- data/spec/bots/logging-bot/scraper.rb +14 -0
- data/spec/bots/python-bot/manifest.json +8 -0
- data/spec/bots/python-bot/scraper.py +11 -0
- data/spec/bots/ruby-bot/manifest.json +8 -0
- data/spec/bots/ruby-bot/scraper.rb +10 -0
- data/spec/bots/slow-bot/manifest.json +8 -0
- data/spec/bots/slow-bot/scraper.rb +11 -0
- data/spec/lib/processor_spec.rb +181 -0
- data/spec/lib/runner_spec.rb +330 -0
- data/spec/lib/utils_spec.rb +23 -0
- data/spec/lib/validator_spec.rb +89 -0
- data/spec/manual_spec.rb +57 -0
- data/spec/outputs/full-scraper.out +10 -0
- data/spec/outputs/full-transformer.out +10 -0
- data/spec/outputs/truncated-scraper.out +5 -0
- data/spec/spec_helper.rb +20 -0
- metadata +148 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"description": "An entity of unknown type - potentially a company, a person, government entity, or some unincorporated organisation",
|
4
|
+
"type": "object",
|
5
|
+
"properties": {
|
6
|
+
"name": {
|
7
|
+
"type": "string",
|
8
|
+
"description": "Name of the entity",
|
9
|
+
"minLength": 1
|
10
|
+
},
|
11
|
+
"jurisdiction": {
|
12
|
+
"type": "string",
|
13
|
+
"description": "Name of the jurisdiction in which the entity is incorporated/domiciled"
|
14
|
+
},
|
15
|
+
"website": {
|
16
|
+
"type": "string",
|
17
|
+
"minLength": 5
|
18
|
+
},
|
19
|
+
"telephone_number": {
|
20
|
+
"type": "string",
|
21
|
+
"minLength": 4
|
22
|
+
},
|
23
|
+
"fax_number": {
|
24
|
+
"type": "string",
|
25
|
+
"minLength": 4
|
26
|
+
},
|
27
|
+
"registered_address": {
|
28
|
+
"$ref": "address.json"
|
29
|
+
},
|
30
|
+
"headquarters_address": {
|
31
|
+
"$ref": "address.json"
|
32
|
+
},
|
33
|
+
"mailing_address": {
|
34
|
+
"$ref": "address.json"
|
35
|
+
},
|
36
|
+
"industry_codes": {
|
37
|
+
"type": "array",
|
38
|
+
"items": {
|
39
|
+
"$ref": "industry_code.json"
|
40
|
+
}
|
41
|
+
},
|
42
|
+
"previous_names": {
|
43
|
+
"type": "array",
|
44
|
+
"items": {
|
45
|
+
"$ref": "previous_name.json"
|
46
|
+
}
|
47
|
+
},
|
48
|
+
"alternative_names": {
|
49
|
+
"type": "array",
|
50
|
+
"items": {
|
51
|
+
"$ref": "alternative_name.json"
|
52
|
+
}
|
53
|
+
}
|
54
|
+
},
|
55
|
+
"required": [
|
56
|
+
"name"
|
57
|
+
]
|
58
|
+
}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"description": "A Licence is a permission for an entity to do something that would otherwise not be permitted. Note that such permissions are recorded in multiple different ways and to different granularity. In addition categories cross over, for example a pawnborker may be regulated as a retail establishment by a city, but also as a financial institution by a national or regional financial regulator. Sometimes the licence is a simple statement – the government of Rwanda has given a banking licence to a certain bank -- other times it is fine-grained and highly complex (e.g. an extractives licence or the UK FCA licencing scheme). This schema tries to make it easy to submit the former, while not losing granularity of the latter. The object has the name of Rich Licence to distinguish it from Simple Licence, which it is expected to ultimately replace.",
|
4
|
+
"properties": {
|
5
|
+
"licence_holder": {
|
6
|
+
"$ref": "includes/entity.json"
|
7
|
+
},
|
8
|
+
"licence_issuer": {
|
9
|
+
"oneOf": [
|
10
|
+
{
|
11
|
+
"type": [
|
12
|
+
"string",
|
13
|
+
"null"
|
14
|
+
],
|
15
|
+
"minLength": 2
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"$ref": "includes/organisation.json"
|
19
|
+
}
|
20
|
+
]
|
21
|
+
},
|
22
|
+
"licenced_location": {
|
23
|
+
"$ref": "includes/address.json"
|
24
|
+
},
|
25
|
+
"licence_number": {
|
26
|
+
"type": "string"
|
27
|
+
},
|
28
|
+
"start_date": {
|
29
|
+
"description": "The issue date of the licence",
|
30
|
+
"type": "string",
|
31
|
+
"format": "date"
|
32
|
+
},
|
33
|
+
"end_date": {
|
34
|
+
"description": "The expiry date of the licence",
|
35
|
+
"type": "string",
|
36
|
+
"format": "date"
|
37
|
+
},
|
38
|
+
"source_url": {
|
39
|
+
"description": "Place where this fact can be verified",
|
40
|
+
"type": "string",
|
41
|
+
"minLength": 1
|
42
|
+
},
|
43
|
+
"confidence": {
|
44
|
+
"description": "Confidence in accuracy of data",
|
45
|
+
"type": "string",
|
46
|
+
"enum": [
|
47
|
+
"HIGH",
|
48
|
+
"MEDIUM",
|
49
|
+
"LOW"
|
50
|
+
]
|
51
|
+
},
|
52
|
+
"renewal_date": {
|
53
|
+
"type": "string",
|
54
|
+
"format": "date"
|
55
|
+
},
|
56
|
+
"sample_date": {
|
57
|
+
"description": "Date on which we know this to be true (usually date this information was retrieved from the source)",
|
58
|
+
"type": "string",
|
59
|
+
"format": "date"
|
60
|
+
},
|
61
|
+
"licence_url": {
|
62
|
+
"type": "string",
|
63
|
+
"description": "A public URL for the licence"
|
64
|
+
},
|
65
|
+
"jurisdiction_of_licence": {
|
66
|
+
"type": "string",
|
67
|
+
"description": "The area in which this licence is valid"
|
68
|
+
},
|
69
|
+
"status": {
|
70
|
+
"type": "string",
|
71
|
+
"description": "The status of the licence. If the licence is made up of a number of permissions, each of which has a status, store the status in the permissions field instead/as well"
|
72
|
+
},
|
73
|
+
"category": {
|
74
|
+
"description": "Category of licence",
|
75
|
+
"type": "array",
|
76
|
+
"items": {
|
77
|
+
"type": "string",
|
78
|
+
"enum": [
|
79
|
+
"Financial",
|
80
|
+
"Business",
|
81
|
+
"Extractive"
|
82
|
+
]
|
83
|
+
}
|
84
|
+
},
|
85
|
+
"permissions": {
|
86
|
+
"type": "array",
|
87
|
+
"items": {
|
88
|
+
"$ref": "includes/permission.json"
|
89
|
+
}
|
90
|
+
},
|
91
|
+
"other_attributes": {
|
92
|
+
"description": "Use for other licence attributes for which we don't yet have curated schema attributes",
|
93
|
+
"type": "object"
|
94
|
+
}
|
95
|
+
},
|
96
|
+
"additionalProperties": false,
|
97
|
+
"required": [
|
98
|
+
"source_url",
|
99
|
+
"sample_date",
|
100
|
+
"licence_holder",
|
101
|
+
"permissions",
|
102
|
+
"licence_issuer",
|
103
|
+
"jurisdiction_of_licence"
|
104
|
+
]
|
105
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"properties": {
|
5
|
+
"source_url": {
|
6
|
+
"description": "Place where this fact can be verified",
|
7
|
+
"type": "string"
|
8
|
+
},
|
9
|
+
"sample_date": {
|
10
|
+
"description": "Date on which this fact was known to be true",
|
11
|
+
"type": "string",
|
12
|
+
"format": "date"
|
13
|
+
}
|
14
|
+
},
|
15
|
+
"required": [
|
16
|
+
"source_url",
|
17
|
+
"sample_date"
|
18
|
+
],
|
19
|
+
"additionalProperties": true
|
20
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"allOf": [
|
5
|
+
{
|
6
|
+
"$ref": "includes/base-statement.json"
|
7
|
+
},
|
8
|
+
{
|
9
|
+
"properties": {
|
10
|
+
"data": {
|
11
|
+
"items": {
|
12
|
+
"allOf": [
|
13
|
+
{
|
14
|
+
"$ref": "includes/share-parcel-data.json"
|
15
|
+
}
|
16
|
+
]
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
]
|
22
|
+
}
|
@@ -0,0 +1,122 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"description": "A Financial Payment is a payment from government to a recipient",
|
4
|
+
"type": "object",
|
5
|
+
"properties": {
|
6
|
+
"source_url": {
|
7
|
+
"description": "Place where this fact can be verified",
|
8
|
+
"type": "string"
|
9
|
+
},
|
10
|
+
"sample_date": {
|
11
|
+
"description": "Date on which this fact was known to be true",
|
12
|
+
"type": "string",
|
13
|
+
"format": "date"
|
14
|
+
},
|
15
|
+
"confidence": {
|
16
|
+
"description": "Confidence in accuracy of data",
|
17
|
+
"type": "string",
|
18
|
+
"enum": [
|
19
|
+
"HIGH",
|
20
|
+
"MEDIUM",
|
21
|
+
"LOW"
|
22
|
+
]
|
23
|
+
},
|
24
|
+
"company_name": {
|
25
|
+
"description": "Name of the company that received the money",
|
26
|
+
"type": "string"
|
27
|
+
},
|
28
|
+
"company_jurisdiction": {
|
29
|
+
"description": "Jurisdiction where company is based",
|
30
|
+
"type": "string"
|
31
|
+
},
|
32
|
+
"value": {
|
33
|
+
"description": "The amount transacted (e.g. 19.95)",
|
34
|
+
"type": "string"
|
35
|
+
},
|
36
|
+
"payee_name": {
|
37
|
+
"description": "The name of the payee (the entity that received the money)",
|
38
|
+
"type": "string"
|
39
|
+
},
|
40
|
+
"currency": {
|
41
|
+
"description": "The currency of the payment (three letter symbol, e.g. USD, GBP, EUR)",
|
42
|
+
"type": "string"
|
43
|
+
},
|
44
|
+
"date": {
|
45
|
+
"description": "The date on which the payment was made",
|
46
|
+
"type": "date"
|
47
|
+
},
|
48
|
+
"transaction_number": {
|
49
|
+
"description": "The unique identifier for the transaction, scoped to this bot",
|
50
|
+
"type": "string"
|
51
|
+
},
|
52
|
+
"jurisdiction": {
|
53
|
+
"description": "The jurisdiction of the body that made the payment, eg. UK, France, Delaware, Manchester",
|
54
|
+
"type": "string"
|
55
|
+
},
|
56
|
+
"more_details_url": {
|
57
|
+
"description": "A url from which more details can be seen (may be the same as the source_url)",
|
58
|
+
"type": [
|
59
|
+
"string",
|
60
|
+
null
|
61
|
+
]
|
62
|
+
},
|
63
|
+
"description": {
|
64
|
+
"description": "The description of the transaction as given in the raw data",
|
65
|
+
"type": [
|
66
|
+
"string",
|
67
|
+
null
|
68
|
+
]
|
69
|
+
},
|
70
|
+
"expense_type": {
|
71
|
+
"description": "The type of expense -- can be either capital, revenue (i.e. current expenditure) or null",
|
72
|
+
"enum": [
|
73
|
+
"capital",
|
74
|
+
"revenue",
|
75
|
+
null
|
76
|
+
]
|
77
|
+
},
|
78
|
+
"expense_area": {
|
79
|
+
"description": "category (in words) of the expenditure",
|
80
|
+
"type": [
|
81
|
+
"string",
|
82
|
+
null
|
83
|
+
]
|
84
|
+
},
|
85
|
+
"entity_name": {
|
86
|
+
"description": "The name of the government entity that made the payment, e.g. Environment Agency",
|
87
|
+
"type": "string"
|
88
|
+
},
|
89
|
+
"entity_uri": {
|
90
|
+
"description": "A unique URL (ideally a dereferencable URI) for the government entity",
|
91
|
+
"type": [
|
92
|
+
"string",
|
93
|
+
null
|
94
|
+
]
|
95
|
+
},
|
96
|
+
"department_name": {
|
97
|
+
"description": "The name of the government department which the entity belongs to (if relevant), e.g. Department of Health",
|
98
|
+
"type": [
|
99
|
+
"string",
|
100
|
+
null
|
101
|
+
]
|
102
|
+
},
|
103
|
+
"csv_line_number": {
|
104
|
+
"description": "If the source for the data is a CSV file, you can optionally include the line number of the CSV from which this data was retrieved",
|
105
|
+
"type": [
|
106
|
+
"string",
|
107
|
+
null
|
108
|
+
]
|
109
|
+
}
|
110
|
+
},
|
111
|
+
"additionalProperties": false,
|
112
|
+
"required": [
|
113
|
+
"source_url",
|
114
|
+
"sample_date",
|
115
|
+
"company_name",
|
116
|
+
"company_jurisdiction",
|
117
|
+
"value",
|
118
|
+
"payee_name",
|
119
|
+
"date",
|
120
|
+
"currency"
|
121
|
+
]
|
122
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"properties": {
|
5
|
+
"source_url": {
|
6
|
+
"description": "Place where this fact can be verified",
|
7
|
+
"type": "string",
|
8
|
+
"minLength": 1
|
9
|
+
},
|
10
|
+
"sample_date": {
|
11
|
+
"description": "Date on which this fact was known to be true",
|
12
|
+
"type": "string",
|
13
|
+
"format": "date"
|
14
|
+
},
|
15
|
+
"start_date": {
|
16
|
+
"type": "string",
|
17
|
+
"format": "date"
|
18
|
+
},
|
19
|
+
"end_date": {
|
20
|
+
"type": "string",
|
21
|
+
"format": "date"
|
22
|
+
},
|
23
|
+
"confidence": {
|
24
|
+
"description": "Confidence in accuracy of data",
|
25
|
+
"type": "string",
|
26
|
+
"enum": [
|
27
|
+
"HIGH",
|
28
|
+
"MEDIUM",
|
29
|
+
"LOW"
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"company_name": {
|
33
|
+
"description": "Name of the company holding the licence",
|
34
|
+
"type": "string",
|
35
|
+
"minLength": 1
|
36
|
+
},
|
37
|
+
"company_jurisdiction": {
|
38
|
+
"description": "Jurisdiction where company is based",
|
39
|
+
"type": "string",
|
40
|
+
"minLength": 1
|
41
|
+
},
|
42
|
+
"licence_number": {
|
43
|
+
"description": "Licence number or code",
|
44
|
+
"type": "string"
|
45
|
+
},
|
46
|
+
"jurisdiction_classification": {
|
47
|
+
"description": "Description of how regulator classifies licence",
|
48
|
+
"type": [
|
49
|
+
"string",
|
50
|
+
"array"
|
51
|
+
]
|
52
|
+
},
|
53
|
+
"regulator": {
|
54
|
+
"description": "The regulating body that issued the licence",
|
55
|
+
"type": "string"
|
56
|
+
},
|
57
|
+
"licence_jurisdiction": {
|
58
|
+
"description": "Jurisdiction for which licence is issued",
|
59
|
+
"type": "string",
|
60
|
+
"minLength": 1
|
61
|
+
},
|
62
|
+
"status": {
|
63
|
+
"description": "Status of the licence",
|
64
|
+
"type": "string"
|
65
|
+
},
|
66
|
+
"category": {
|
67
|
+
"description": "Category of licence",
|
68
|
+
"type": "string",
|
69
|
+
"enum": [
|
70
|
+
"Financial",
|
71
|
+
"Business"
|
72
|
+
]
|
73
|
+
}
|
74
|
+
},
|
75
|
+
"additionalProperties": false,
|
76
|
+
"required": [
|
77
|
+
"source_url",
|
78
|
+
"sample_date",
|
79
|
+
"company_name",
|
80
|
+
"company_jurisdiction"
|
81
|
+
]
|
82
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type": "object",
|
4
|
+
"properties": {
|
5
|
+
"source_url": {
|
6
|
+
"description": "Place where this fact can be verified",
|
7
|
+
"type": "string",
|
8
|
+
"minLength": 1
|
9
|
+
},
|
10
|
+
"sample_date": {
|
11
|
+
"description": "Date on which this fact was known to be true",
|
12
|
+
"type": "string",
|
13
|
+
"format": "date"
|
14
|
+
},
|
15
|
+
"start_date": {
|
16
|
+
"description": "Earliest known date this was known to be a subsidiary",
|
17
|
+
"type": "string",
|
18
|
+
"format": "date"
|
19
|
+
},
|
20
|
+
"end_date": {
|
21
|
+
"description": "Latest known date this was known to be a subsidiary",
|
22
|
+
"type": "string",
|
23
|
+
"format": "date"
|
24
|
+
},
|
25
|
+
"confidence": {
|
26
|
+
"description": "Confidence in accuracy of data",
|
27
|
+
"type": "string",
|
28
|
+
"enum": [
|
29
|
+
"HIGH",
|
30
|
+
"MEDIUM",
|
31
|
+
"LOW"
|
32
|
+
]
|
33
|
+
},
|
34
|
+
"parent_name": {
|
35
|
+
"description": "Name of the controlling company",
|
36
|
+
"type": "string",
|
37
|
+
"minLength": 1
|
38
|
+
},
|
39
|
+
"parent_jurisdiction": {
|
40
|
+
"description": "Jurisdiction where controlling company is based",
|
41
|
+
"type": "string",
|
42
|
+
"minLength": 1
|
43
|
+
},
|
44
|
+
"parent_identifier": {
|
45
|
+
"description": "Any unique ID for the controlling company",
|
46
|
+
"type": "string"
|
47
|
+
},
|
48
|
+
"direct": {
|
49
|
+
"description": "Is the control relationship direct or indirect (if unknown, leave blank)?",
|
50
|
+
"type": "boolean"
|
51
|
+
},
|
52
|
+
"percentage_controlled": {
|
53
|
+
"description": "Percentage of the subsidiary that is controlled (if known), either directly or indirectly",
|
54
|
+
"type": "string",
|
55
|
+
"pattern": "^[0-9]{1,2}0?[.]?[0-9]{0,2}$"
|
56
|
+
},
|
57
|
+
"subsidiary_name": {
|
58
|
+
"description": "The name of the subsidiary",
|
59
|
+
"type": "string",
|
60
|
+
"minLength": 1
|
61
|
+
},
|
62
|
+
"subsidiary_jurisdiction": {
|
63
|
+
"description": "Jurisdiction of the subsidiary",
|
64
|
+
"type": "string",
|
65
|
+
"minLength": 1
|
66
|
+
},
|
67
|
+
"subsidiary_identifier": {
|
68
|
+
"description": "Any unique id for the subsidiary that might be provided in the source",
|
69
|
+
"type": "string"
|
70
|
+
}
|
71
|
+
},
|
72
|
+
"other_attributes": {
|
73
|
+
"description": "Use for other attributes for which we don't yet have curated schema attributes",
|
74
|
+
"type": "object"
|
75
|
+
},
|
76
|
+
"additionalProperties": false,
|
77
|
+
"required": [
|
78
|
+
"source_url",
|
79
|
+
"sample_date",
|
80
|
+
"parent_name",
|
81
|
+
"parent_jurisdiction",
|
82
|
+
"subsidiary_name",
|
83
|
+
"subsidiary_jurisdiction"
|
84
|
+
]
|
85
|
+
}
|