{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "in-case-of-emergency-contacts.schema.json", "title": "Personal in-case-of-emergency contacts", "description": "A person's in-case-of-emergency contacts", "type": "object", "properties": { "contacts": { "description": "The person's in-case-of-emergency contacts", "$comment": "Should be listed in the order of descending contact priority", "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/emergency_contact_field" } } }, "required": [], "additionalProperties": false, "$defs": { "string_field": { "type": "object", "properties": { "value": { "type": "string" }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "required": [ "value" ], "additionalProperties": false }, "date_field": { "type": "object", "properties": { "value": { "type": "string", "format": "date" }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "required": [ "value" ], "additionalProperties": false }, "email_field": { "type": "object", "properties": { "value": { "type": "string", "format": "email" }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "required": [ "value" ], "additionalProperties": false }, "postal_address_field": { "$comment": "Rough implementation of the AFNOR NF Z 10-011 standard", "type": "object", "properties": { "value": { "type": "object", "properties": { "line1": { "type": "string", "maxLength": 38 }, "line2": { "type": "string", "maxLength": 38 }, "line3": { "type": "string", "maxLength": 38 }, "line4": { "type": "string", "maxLength": 38 }, "line5": { "type": "string", "maxLength": 38 }, "line6": { "type": "string", "maxLength": 38 }, "line7": { "type": "string", "maxLength": 38 } }, "$comment": "At least first line is expected to be filled", "required": [ "line1" ], "additionalProperties": false }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "required": [ "value" ], "additionalProperties": false }, "emergency_contact_field": { "type": "object", "properties": { "lastName": { "description": "The person's last name", "$ref": "#/$defs/string_field" }, "firstName": { "description": "The person's first name", "$ref": "#/$defs/string_field" }, "phoneNumber": { "description": "The person's phone number name", "$ref": "#/$defs/phone_number_field" }, "email": { "description": "The person's email", "$ref": "#/$defs/phone_number_field" } }, "required": [ "lastName", "firstName", "phoneNumber" ], "additionalProperties": false }, "phone_number_field": { "type": "object", "properties": { "value": { "type": "string", "$comment": "E.164 standard", "pattern": "^\\+?[1-9]\\d{1,14}$" }, "mobile": { "type": "boolean", "$comment": "if the telephone is mobile, meaning it can receive SMS" }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "required": [ "value", "mobile" ], "additionalProperties": false }, "gender_field": { "type": "object", "properties": { "value": { "type": "integer", "$comment": "ISO/IEC 5218", "enum": [0, 1, 2, 9] }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "required": [ "value" ], "additionalProperties": false }, "city_field": { "type": "object", "properties": { "name": { "type": "string" }, "inseeValue": { "type": "string", "$comment": "French INSEE code for cities", "minLength": 5, "maxLength": 5 }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "oneOf": [ { "required": [ "name" ] }, { "required": [ "inseeValue" ] } ], "additionalProperties": false }, "country_field": { "type": "object", "properties": { "name": { "type": "string" }, "isoValue": { "type": "string", "$comment": "ISO 3166-1 alpha-3", "minLength": 3, "maxLength": 3 }, "source": { "type": "string" }, "certificationDate": { "type": "string", "format": "date-time" } }, "oneOf": [ { "required": [ "name" ] }, { "required": [ "isoValue" ] } ], "additionalProperties": false } } }