{
  "title": "PLDSchema",
  "type": "object",
  "properties": {
    "locale": {
      "title": "Locale",
      "description": "Locale of the PLD",
      "anyOf": [
        {
          "$ref": "#/definitions/Locale"
        },
        {
          "type": "string"
        }
      ]
    },
    "title": {
      "title": "Title",
      "description": "Main title on document title page",
      "type": "string"
    },
    "subtitle": {
      "title": "Subtitle",
      "description": "Subtitle on document title page",
      "type": "string"
    },
    "description": {
      "title": "Description",
      "description": "Description of document",
      "type": "string"
    },
    "authors": {
      "title": "Authors",
      "description": "List of document authors",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "versions": {
      "title": "Versions",
      "type": "array",
      "items": {
        "$ref": "#/definitions/Version"
      }
    },
    "deliverables": {
      "title": "Deliverables",
      "description": "Project deliverable",
      "type": "array",
      "items": {
        "$ref": "#/definitions/Deliverable"
      }
    }
  },
  "required": [
    "locale",
    "title"
  ],
  "definitions": {
    "Locale": {
      "title": "Locale",
      "description": "An enumeration.",
      "enum": [
        "fr_FR"
      ],
      "type": "string"
    },
    "Version": {
      "title": "Version",
      "type": "object",
      "properties": {
        "version": {
          "title": "Version",
          "pattern": "^\\d+\\.\\d+\\.\\d+$",
          "type": "string"
        },
        "date": {
          "title": "Date",
          "description": "Release date of this version",
          "type": "string",
          "format": "date"
        },
        "authors": {
          "title": "Authors",
          "description": "Authors of this version",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sections": {
          "title": "Sections",
          "description": "Which sections have been modified",
          "type": "string"
        },
        "comment": {
          "title": "Comment",
          "description": "Comment about this version",
          "type": "string"
        }
      },
      "required": [
        "version",
        "date",
        "sections",
        "comment"
      ]
    },
    "Status": {
      "title": "Status",
      "description": "An enumeration.",
      "enum": [
        "To do",
        "WIP",
        "Done",
        "Abandoned"
      ],
      "type": "string"
    },
    "UserStory": {
      "title": "UserStory",
      "type": "object",
      "properties": {
        "type": {
          "title": "Type",
          "default": "user_story",
          "const": "user_story",
          "type": "string"
        },
        "name": {
          "title": "Name",
          "description": "Name of the user story",
          "type": "string"
        },
        "user": {
          "title": "User",
          "description": "User that do the action of user story",
          "type": "string"
        },
        "action": {
          "title": "Action",
          "description": "Action done by the user",
          "type": "string"
        },
        "description": {
          "title": "Description",
          "description": "Detailed description of the user",
          "type": "string"
        },
        "definitions_of_done": {
          "title": "Definitions Of Done",
          "description": "List of definition of done (list of goal) that must be done to complete the user story",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "estimated_duration": {
          "title": "Estimated Duration",
          "description": "Number of estimated man day (8 hours)",
          "multipleOf": 0.5,
          "type": "number"
        },
        "due_date": {
          "title": "Due Date",
          "description": "User story due date",
          "type": "string",
          "format": "date"
        },
        "end_date": {
          "title": "End Date",
          "description": "Date when the user story was marked as Done",
          "type": "string",
          "format": "date"
        },
        "status": {
          "description": "User story work status",
          "default": "To do",
          "allOf": [
            {
              "$ref": "#/definitions/Status"
            }
          ]
        },
        "assignments": {
          "title": "Assignments",
          "description": "List of person assigned to work on this user story",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "comments": {
          "title": "Comments",
          "description": "Comment about the user story",
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "string"
            }
          ]
        }
      },
      "required": [
        "name",
        "user",
        "action",
        "estimated_duration"
      ]
    },
    "Subset": {
      "title": "Subset",
      "type": "object",
      "properties": {
        "type": {
          "title": "Type",
          "default": "subset",
          "const": "subset",
          "type": "string"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "description": {
          "title": "Description",
          "type": "string"
        },
        "user_stories": {
          "title": "User Stories",
          "type": "array",
          "items": {
            "$ref": "#/definitions/UserStory"
          }
        }
      },
      "required": [
        "name"
      ]
    },
    "Deliverable": {
      "title": "Deliverable",
      "type": "object",
      "properties": {
        "type": {
          "title": "Type",
          "default": "deliverable",
          "const": "deliverable",
          "type": "string"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "description": {
          "title": "Description",
          "type": "string"
        },
        "subsets": {
          "title": "Subsets",
          "description": "Subset that groups many user story",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Subset"
          }
        }
      },
      "required": [
        "name"
      ]
    }
  }
}