{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "fr-caf-information.schema.json", "title": "Personal French CAF information", "description": "A person's French CAF information", "type": "object", "properties": { "familyQuotient": { "description": "The person's family quotient", "$ref": "#/$defs/string_field" }, "recipientNumber": { "description": "The person's recipient number", "$ref": "#/$defs/string_field" }, "address": { "description": "The person's main postal address", "$ref": "#/$defs/postal_address_field" }, "lastName": { "description": "The person's last name", "$ref": "#/$defs/string_field" }, "firstName": { "description": "The person's first name", "$ref": "#/$defs/string_field" }, "middleNames": { "$comment": "TODO: check if this is the right model", "description": "The person's middle names, separated by spaces", "$ref": "#/$defs/string_field" }, "birthDate": { "description": "The person's birth date", "$ref": "#/$defs/date_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 }, "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 } } }