{
  "transaction_id": "{{ transaction_id }}",
  "request_id": "{{ request_id }}",
  "start_date" : "{{ start_time }}",
  "end_date" : "{{ end_time }}",

  "change_elements" : [
  {% set comma = joiner(",") -%}
  {% for element in all_upgrades -%} {{ comma() }}
    {
      "id" : "{{ element.id }}",
      "failback_duration": {{ element.failback_duration }},
      {% if element.group_id -%}
        "group_id": "{{ element.group_id }}",
      {% endif %}
      {% if element.scheduled_on -%}
        "scheduled_on": "{{ element.scheduled_on }}",
      {% endif %}
      "duration": {{ element.duration }}
    }
  {% endfor -%}
  ],

  "constraints" : [
    {
      "type" : "general_concurrency_limit",
      "parameters": [{{ concurrency_limit }}]
    },

    {
      "type" : "allowed_forbidden_periods",
      "parameters" : [
      {% set comma = joiner(",") -%}
      {% for idx in all_pending -%} {{ comma() }}
        { "id" : "{{ idx.id }}",
          "allowed_periods": [ {{ allowed_periods }}]
        }
      {% endfor -%}
      ]
    },
    {
      "type" : "spatial_conflict",
      "parameters": [
      {% set comma = joiner(",") -%}
      {% for pserver, vce_list in vce_pserver_mapping.items() -%} {{ comma() }}
        {
          "spatial_entity": "{{ pserver }}",
          "affected_entities": {{ vce_list }}
        }
      {% endfor -%}
      ]
    },

    {
      "type" : "critical_periods",
      "parameters": [
      {% set comma = joiner(",") -%}
      {% for element, conflict_period in conflict_interval.items() -%} {{ comma() }}
        {
          "id" : "{{ element }}",
          "periods": [{{ conflict_period }}]
        }
      {% endfor -%}
      ]
    }
  ]
}