Portability format JSON structure

The specification starts with the definition of an interoperable exchange format for the telco data. It will be completed in the coming weeks with file format and exchange protocols between data controllers.

The specification relies on JavaScript Object Notation (JSON) Data Interchange Format described at
https://tools.ietf.org/html/rfc7159

It uses Json-Schema to describe the data, as defined by the official website https://json-schema.org/

Please note that all objects are optional.


Here is the structure the DPC proposes for portability :

PortabilityData :
{

   "identity_information": {     /* identity information of data subject */
      "salutation": "string",     /* salutation (Mr, Mrs.) the user wants to be addressed */
      "title": "string",     /* title (Dr) of the user */
      "first_name": "string",     /* first name/given name of the user. */
      "middle_name": "string",     /* middle name of the person */
      "last_name": "string",     /* surname/family name of the user. */
      "civility": "string",     /* civility of the person (Mr, Ms, Mss) */
      "nickname": "string",     /* nickname chosen by the person */
      "gender": "string",     /* gender of the person (M/F) */
      "birthdate": "string",     /* The end-user's birthday, represented in ISO 8601:2004 YYYY-MM-DD format. To represent only the year, YYYY format is allowed. */
      "birthplace": "string",     /* birthplace of the person */
      "birthcountry": "string"     /* Country code in ISO Alpha 2 format */
   }


   "contact_information": {     /* contact information of the data subject */
      "contact_email": "string",     /* e-mail where the user wants to be contacted. */
      "contact_phone": "string",     /* user phone number (Format UIT E.164. Example: +34666000000). */
      "additional_contact_info": [     /* list of additional contact information */
         {
         "contact_description": "string",     /* Description of the additional contact info ("contact_email", "contact_mobile", "secondary_mobile", etc.). */
         "contact_value": "string"     /* Value of the contact information (email, phone number, etc.) */
         }
      ]
   }


   "address": {     /* Full address information (Postal code, country, city, street, number, ...). */
      "country": "string",     /* Country of the street. Format iso3166-1 */
      "street_type_name": "string",     /* Street type (Street, Avenue, Square) */
      "street_name": "string",     /* Name of street */
      "location_address": "string",     /* Additional/full address information */
      "municipality_name": "string",     /* Name of the municipality/city */
      "province_name": "string",     /* Name of the province/region */
      "zip_code": "string"     /* Postal Code */
   }


   "bank_account": {
      "customer_name": "string",     /* Name of the client as appears in the bank account */
      "iban": "string"     /* International Bank Account Number. */
      "bic": "string"     /* European BIC. */
   }


   "id_documents": [
      {  /* National ID document. */
         "country": "string",     /* Country of issuance of the id_document. Format iso3166-1 */
         "type": "string",     /* Type of document (e.g. passport) */
         "value": "string"     /* Id number associated to the id_document */
         "issue_authority_document": "string",     /* Authority that issued the document */
         "issue_date_document": "string($date)",     /* Date when the document was issued. */
         "issue_place_docoument": "string",     /* Place where the document was issued. */
         "validation_date_document": "string",     /* Last date the document was validated. */
      }
   ]


   "subscribed_products": [
      {
         "product_name": "string",     /* Product commercial name */
         "display_name": "string",     /* A human readable description of the product. */
         "product_type": "string",     /* The type of the product (mobile line, fixed line, triple play) */
         "subscription_type": "string",     /* Specifies how the product is paid (prepaid, postpaid, etc) */
         "phone_number": "string"     /* Phone number related to the product (if relevant). */
      }
   ]


   "mobile_consumption_information": {
      "voice_last_6_months": [     /* Last 6 months of voice consumption. */
         {     /* Voice calls usage aggregated by month */
            "start_month_date": "string",     /* Start date of the monthly voice consumption aggregated data */
            "end_month_date": "string",     /* End date of the monthly voice consumption aggregated data */
            "total_calls": "int64",     /* Number of calls */
            "total_seconds": "int64"     /* Amount of seconds consumed */
         }
      ],
      "data_last_6_months": [     /* Last 6 months of data consumption. */
         {     /* Data usage aggregated by day */
            "start_month_date": "string",     /* Start date of the monthly data consumption aggregated data */
            "end_month_date": "string",     /* End date of the monthly data consumption aggregated data */
            "total_bytes": "int64"     /* Amount of bytes consumed */
         }
      ],
      "sms_last_6_months": [     /* Last 6 months of sms consumption. */
         {     /* SMS usage aggregated by day */
            "start_month_date": "string",     /* Start date of the monthly sms consumption aggregated data */
            "end_month_date": "string",     /* End date of the monthly sms consumption aggregated data */
            "total_sms": "int64"     /* Number of sms sent */
         }
      ]
   }


   "fixed_consumption_information": {
      "voice_last_6_months": [     /* Last 6 months of voice consumption. */
         {     /* Voice calls usage aggregated by month */
            "start_month_date": "string",     /* Start date of the monthly voice consumption aggregated data */
            "end_month_date": "string",     /* End date of the monthly voice consumption aggregated data */
            "total_calls": "int64",     /* Number of calls */
            "total_seconds": "int64"     /* Amount of seconds consumed */
         }
      ],
      "data_last_6_months": [     /* Last 6 months of data consumption. */
         {     /* Data usage aggregated by day */
            "start_month_date": "string",     /* Start date of the monthly data consumption aggregated data */
            "end_month_date": "string",     /* End date of the monthly data consumption aggregated data */
            "total_bytes": "int64"     /* Amount of bytes consumed */
         }
      ]
   }


   "video_consumption_information": {
      "video_last_6_months": [     /* Last 6 months of video consumption. */
         {     /* video consumption minutes aggregated by month */
            "start_month_date": "string",     /* Start date of the monthly video consumption aggregated data */
            "end_month_date": "string",     /* End date of the monthly video consumption aggregated data */
            "total_minutes": "int64"     /* Number of minutes viewed */
         }
      ]
   }


   "extra_information": {     /* Additional information. */
      "number_of_phones": "string",     /* number of phones in the household */
      "broadband_operator": "string"     /* broadband operator name */
   }

} // end of portability data