ABCDEFGHIJKLMNOPQRSTUVWXYZAA
1
Schema file / Docs pageObjectCONSTRAINTTested whereError in lib-cove-bods (if relevant)Relevant to BODS 0.4Notes
2
componentsAddresstype must be of the addressType codelistMUSTJSON SchemaTRUE
3
componentsAddresstype must correspond with correct recordTypeMUSTJSON SchemaTRUE
4
componentsAddressWhere postal codes and country information are isolated fields in source systems, this information SHOULD be published in the dedicated fields and SHOULD NOT be published in the `address` field.SHOULDNot testedTRUEThis is not testable as it depends on knowledge of source system.
5
componentsAddresspostcode is a stringMUSTJSON SchemaTRUE
6
componentsAddressaddress is a stringMUSTJSON SchemaTRUE
7
componentsAddresscountry is a country objectMUSTJSON SchemaTRUE
8
componentsCountryname is requiredMUSTJSON SchemaTRUE
9
componentsCountryname is a stringMUSTJSON SchemaTRUE
10
componentsCountrycode is a string of 2 charsMUSTJSON SchemaTRUE
11
componentsCountrycode is the 2-letter country code (ISO 3166-1) for a countryimplied MUSTNot testedTRUESee open issue https://github.com/openownership/lib-cove-bods/issues/53 and internal discussion https://opendataservices.plan.io/issues/50255
12
componentsJurisdictionname is a stringMUSTJSON SchemaTRUE
13
componentsJurisdictionname is requiredMUSTJSON SchemaTRUE
14
componentsJurisdictioncode is a string between 2 and 6 charsMUSTJSON SchemaTRUE
15
componentsJurisdictioncode is the 2-letter country code (ISO 3166-1) or the subdivision code (ISO 3166-2) for a jurisdictionimplied MUSTNot testedTRUESee open issue https://github.com/openownership/lib-cove-bods/issues/53 and internal discussion https://opendataservices.plan.io/issues/50255
16
componentsIdentifierid is a stringMUSTJSON SchemaTRUE
17
componentsIdentifierfor entity statements, the scheme should be an entry from the org-id guide codelistSHOULDAdditional checkentity_identifier_scheme_not_knownTRUE
18
componentsIdentifierfor person statements, the scheme should have the pattern {JURISDICTION}-{TYPE} where JURISDICTION is an ISO 3-digit country code and TYPE is one of PASSPORT, TAXID or IDCARDSHOULDAdditional checkTRUEThis test isn't checking the validity of the ISO country codes, any 3 letter code will pass. See open issue https://github.com/openownership/lib-cove-bods/issues/53 and internal discussion https://opendataservices.plan.io/issues/50255
19
componentsIdentifier`scheme` or `schemeName` (or both) MUST be included in an Identifier objectMUSTJSON SchemaTRUE
20
componentsIdentifierscheme is a stringMUSTJSON SchemaTRUE
21
componentsIdentifierschemeName is a stringMUSTJSON SchemaTRUE
22
componentsIdentifieruri is a uri format stringMUSTJSON SchemaTRUE
23
componentsSourcetype is an array of strings from the sourceType codelistMUSTJSON SchemaTRUE
24
componentsSourcedescription is a stringMUSTJSON SchemaTRUE
25
componentsSourceurl is a uri format stringMUSTJSON SchemaTRUE
26
componentsSourceretrievedAt is a date or date-time formatted stringMUSTJSON SchemaTRUE
27
componentsSourceretrievedAt is not a future dateMUSTAdditional checkTRUE
28
componentsSourceassertedBy is an array of objectsMUSTJSON SchemaTRUE
29
componentsSourceassertedBy/name is a stringMUSTJSON SchemaTRUE
30
componentsSourceassertedBy/uri is a uri format stringMUSTJSON SchemaTRUE
31
componentsUnspecifiedRecorda reason must be specifiedMUSTJSON SchemaTRUE
32
componentsUnspecifiedRecordreason must be from the unspecifiedReason codelistMUSTJSON SchemaTRUE
33
componentsUnspecifiedRecorddescription is a stringMUSTJSON SchemaTRUE
34
personPerson recordisComponent is a boolMUSTJSON SchemaTRUE
35
personPerson recordWhere `isComponent` is 'true': (1) the `recordId` of this person MUST be an element in the `componentRecords` array of that primary Relationship Statement,MUSTAdditional check
statement_is_component_but_not_used_in_component_statement_ids
TRUE
36
personPerson recordWhere `isComponent` is 'true': (2) this Person Statement MUST come before that primary Relationship Statement in a BODS package or streamMUSTAdditional check
statement_is_component_but_is_after_use_in_component_statement_id
TRUE
37
personPerson recordWhere `isComponent` is 'true': , (3) the replacement of this Person Statement SHOULD be considered when replacing the primary Relationship Statement.SHOULDNot testedTRUENot testable
38
personPerson recordThe primary Relationship Statement MUST have a `isComponent` value of 'false'.MUSTNot testedTRUEThis is indirectly tested by statement_is_component_but_not_used_in_component_statement_ids. All isComponent rows should be considered together.
39
personPerson recordpersonType is from personType codelistMUSTJSON SchemaTRUE
40
personPerson recordunspecifiedPersonDetails is an UnspecifiedRecordMUSTJSON SchemaTRUE
41
personPerson recordnames is an array of Name objectsMUSTJSON SchemaTRUE
42
personPerson recordidentifiers is an array of Identifier objectsMUSTJSON SchemaTRUE
43
personPerson recordnationalities is an array of country objectsMUSTJSON SchemaTRUEThere is not yet any unit test data for this in tests/data/invalid-statements
44
personPerson recordplaceOfBirth is an Address objectMUSTJSON SchemaTRUE
45
personPerson recordplaceOfBirth.type is "placeOfBirth"MUSTJSON SchemaTRUEThere is not yet any unit test data for this in tests/data/invalid-statements
46
personPerson recordbirthDate is a stringMUSTJSON SchemaTRUE
47
personPerson recordbirthDate format is one of yyyy, yyyy-mm or yyyy-mm-ddMUSTJSON SchemaTRUE
48
personPerson record[implied] deathDate is valid wrt current date and birthdateimplied MUSTAdditional checkTRUE
49
personPerson recorddeathDate format is one of yyyy, yyyy-mm or yyyy-mm-ddMUSTJSON SchemaTRUE
50
personPerson recordbirthDate is not a future dateMUSTAdditional checkperson_birth_year_too_lateTRUE
51
personPerson recordbirthDate is not a date in the far pastMUSTAdditional checkperson_birth_year_too_earlyTRUE
52
personPerson recordtaxResidencies is an array of Country objectsMUSTJSON SchemaTRUE
53
personPerson recordaddresses is an array of Address objectsMUSTJSON SchemaTRUE
54
personPerson recordaddresses.[n].type is one of "residence", "service", "alternative"MUSTJSON SchemaTRUE
55
personPerson recordIf an address in the addresses array is of type "alternative" then there is also another address in the array(implied) MUSTNot tested
alternative_address_with_no_other_address_types
TRUEAs address.type is not a required field this test was not implemented - suggestion to remove "alternative" from the code list https://github.com/openownership/data-standard/issues/725
56
personPerson recordpoliticalExposure is an objectMUSTJSON SchemaTRUE
57
personPerson recordpoliticalExposure/status is requiredMUSTJSON SchemaTRUE
58
personPerson recordpoliticalExposure/status is one of isPep, isNotPep, unknownMUSTJSON SchemaTRUE
59
personPerson recordpoliticalExposure/details is an array of PepStatusDetails objectsMUSTJSON SchemaTRUE
60
personPerson recordpersonType is requiredMUSTJSON SchemaTRUE
61
personPerson recordisComponent is requiredMUSTJSON SchemaTRUE
62
personNametype is from the nameType codelistMUSTJSON SchemaTRUE
63
personNamefullName is a stringMUSTJSON SchemaTRUE
64
personNamefullName is requiredMUSTJSON SchemaTRUE
65
personNamefamilyName is a stringMUSTJSON SchemaTRUE
66
personNamegivenName is a stringMUSTJSON SchemaTRUE
67
personNamepatronymicName is a stringMUSTJSON SchemaTRUE
68
personPepStatusDetailsreason is a stringMUSTJSON SchemaTRUE
69
personPepStatusDetailsmissingInfoReason is a stringMUSTJSON SchemaTRUE
70
personPepStatusDetailsmissingInfoReason should be supplied if politicalExposure.status is 'unknown'SHOULDNot testedTRUE
71
personPepStatusDetailswhere missingInfoReason is present it should be the only field except for sourceSHOULDNot testedTRUE
72
personPepStatusDetailsjurisdiction is Jurisdiction objectMUSTJSON SchemaTRUE
73
personPepStatusDetailsstartDate is a date format stringMUSTJSON SchemaTRUE
74
personPepStatusDetailsendDate is a date format stringMUSTJSON SchemaTRUE
75
personPepStatusDetailsWhere startDate and endDate exist, startDate <= endDateMUSTNot testedTRUE
76
personPepStatusDetailssource is a Source objectMUSTJSON SchemaTRUE
77
statementStatementstatementId is a string between 32 and 64 charsMUSTJSON SchemaTRUE
78
statementStatementstatementDate is a date or date-time format stringMUSTJSON SchemaTRUE
79
statementStatementstatementDate is not a future dateMUSTAdditional checkTRUE
80
statementStatementannotations is an array of Annotation objectsMUSTJSON SchemaTRUE
81
statementStatementpublicationDetails is an objectMUSTJSON SchemaTRUE
82
statementStatementpublicationDetails/publicationDate is a date or date-time format stringMUSTJSON SchemaTRUE
83
statementStatementpublicationDetails/publicationDate is not a future dateMUSTAdditional checkTRUE
84
statementStatementpublicationDetails/bodsVersion is a string with pattern ^(\\d+\\.)(\\d+)$MUSTJSON SchemaTRUE
85
statementStatementIn a published BODS dataset, all Statements MUST have the same major version number.MUSTNot testedTRUECurrently not tested as we haven't reached 0.1. At the moment the DRT can only handle statements with a consistent minor version number. https://github.com/openownership/lib-cove-bods/issues/124
86
statementStatementpublicationDetails/license is a uri format stringMUSTJSON SchemaTRUE
87
statementStatementpublicationDetails/license should be the canonical URI of the licenseSHOULDNot tested TRUENot testable
88
statementStatementpublicationDetails/publisher is an objectMUSTJSON SchemaTRUE
89
statementStatementpublicationDetails/publisher/name is a stringMUSTJSON SchemaTRUE
90
statementStatementpublicationDetails/publisher/url is a uri format stringMUSTJSON SchemaTRUE
91
statementStatementpublicationDetails/publisher requires either name or url or bothMUSTJSON SchemaTRUE
92
statementStatementpublicationDetails/publicationDate is requiredMUSTJSON SchemaTRUE
93
statementStatementpublicationDetails/bodsVersion is requiredMUSTJSON SchemaTRUE
94
statementStatementpublicationDetails/publisher is requiredMUSTJSON SchemaTRUE
95
statementStatementsource is a Source objectMUSTJSON SchemaTRUE
96
statementStatementdeclaration is a stringMUSTJSON SchemaTRUE
97
statementStatementdeclarationSubject is a stringMUSTJSON SchemaTRUE
98
statementStatementdeclarationSubject is a recordIdMUSTAdditional checkTRUE
99
statementStatementThe declarationSubject recordId always relates to an entity or person.MUSTAdditional checkTRUE
100
statementStatementrecordId is a stringMUSTJSON SchemaTRUE