<?xml version="1.0" encoding="UTF-8"?>
<!-- DOCTYPE application PUBLIC "-//JOURNEYMAN//DTD ADL 1.4.1//EN"
"http://www.journeyman.cc/adl/stable/adl/schemas/adl-1.4.1.dtd" -->
<application name="youyesyet" version="0.1.1"
             xmlns="http://bowyer.journeyman.cc/adl/1.4.1/"
             xmlns:html="http://www.w3.org/1999/xhtml"
             xmlns:adl="http://bowyer.journeyman.cc/adl/1.4.1/">
  <documentation>
    A web-app intended to be used by canvassers campaigning for a 'Yes' vote in the second independence referendum.

    The web-app will be delivered to canvassers out knocking doors primarily through an HTML5/React single-page app designed to work on a mobile phone; it's possible that someone else may do an Android of iPhone native app to address the same back end but at present I have no plans for this.

    There must also be an administrative interface through which privileged users can set the system up and authorise canvassers, and a 'followup' interface through which issue-expert specialist canvassers can address particular electors' queries.
  </documentation>
  <typedef name="postcode" type="string"
    pattern="^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$" size="16">
    <documentation>See
      https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/488478/Bulk_Data_Transfer_-_additional_validation_valid_from_12_November_2015.pdf,
      section 3</documentation>
    <help locale="en-GB">A valid postcode.</help>
  </typedef>
  <group name="public">
    <documentation>All users</documentation>
  </group>
  <group name="canvassers" parent="public">
    <documentation>All users of the canvasser app Able to read and add canvassing data in a limited
      radius around their current position. </documentation>
  </group>
  <group name="teamorganisers" parent="canvassers">
    <documentation>Organisers of canvassing teams Able to see and modify data on the canvassers in
      the team(s) they organise; able to add canvassers to their team; able to update canvassers in
      their team, including resetting passwords and locking accounts; able to see canvass data over
      the whole area in which their team operates. </documentation>
  </group>
  <group name="issueexperts" parent="public">
    <documentation>People expert on particular issues. Able to read followup requests, and the electors to which they
      relate; able to access (read/write) the issues wiki; able to write followuop action records.
    </documentation>
  </group>
  <group name="analysts" parent="public">
    <documentation>Users entitled to see an overview of the canvassing data collected. Able to read canvassing data over the whole map, including historical
      data.</documentation>
  </group>
  <group name="issueeditors" parent="analysts">
    <documentation>Users responsible for determining what issues should be current at any time.
      Able to set current issues; able to add issues.</documentation>
  </group>
  <group name="admin" parent="public">
    <documentation>Able to read and update canvasser records, team membership records, team
      organisership records, issue expertise records; able to add and update reference data
      generally.</documentation>
  </group>

  <entity name="electors" magnitude="6" volatility="5">
    <documentation>All electors known to the system; electors are people believed to be entitled to vote in the current campaign.</documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" immutable="true" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property size="64" required="true" type="string" name="name" column="name" distinct="user">
      <prompt prompt="name" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="dwelling_id" column="dwelling_id" entity="dwellings" farkey="id">
      <prompt prompt="home" locale="en-GB"/>
    </property>
    <property size="16" type="string" name="phone" column="phone" distinct="user">
      <prompt prompt="phone" locale="en-GB"/>
    </property>
    <property size="128" type="string" name="email" column="email" distinct="user">
      <prompt prompt="email" locale="en-GB"/>
    </property>
    <property name="gender" type="entity" column="gender" entity="genders" farkey="id"
      default="Unknown" distinct="user">
      <prompt prompt="gender" locale="en-GB"/>
    </property>
    <list name="Electors" properties="all"/>
    <form name="Elector" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="genders" magnitude="1" volatility="6">
    <documentation>All genders which may be assigned to electors.</documentation>
    <key>
      <property name="id" type="string" size="32" distinct="all">
        <prompt prompt="gender" locale="en-GB"/>
      </property>
    </key>
    <list name="Genders" properties="all"/>
    <form name="Gender" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="dwellings" magnitude="6" volatility="6">
    <documentation>All dwellings within addresses in the system; a dwelling is a
      house, flat or appartment in which electors live. Every address should have
      at least one dwelling; essentially, an address maps onto a street door and
      dwellings map onto what's behind that door. So a tenement or a block of flats
      would be one address with many dwellings.
    </documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" immutable="true" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="entity" name="address_id" column="address_id" entity="addresses" farkey="id" distinct="user">
      <prompt prompt="Building Address" locale="en-GB"/>
    </property>
    <property required="false" type="string" size="32" name="sub-address" distinct="user"/>
    <list name="Dwellings" properties="all"/>
    <form name="Dwelling" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="addresses" magnitude="6" volatility="6">
    <documentation>Addresses of all buildings which contain dwellings.</documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" immutable="true" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="string" name="address" column="address" size="256" distinct="user">
      <prompt prompt="address" locale="en-GB"/>
    </property>
    <property type="defined" typedef="postcode" name="postcode" column="postcode" size="16" distinct="user">
      <prompt prompt="postcode" locale="en-GB"/>
    </property>
    <property type="string" name="phone" column="phone" size="16">
      <prompt prompt="phone" locale="en-GB"/>
    </property>
    <property type="entity" name="district_id" column="district_id" entity="districts" farkey="id">
      <prompt prompt="district_id" locale="en-GB"/>
    </property>
    <property type="real" name="latitude" column="latitude">
      <prompt prompt="latitude" locale="en-GB"/>
    </property>
    <property type="real" name="longitude" column="longitude">
      <prompt prompt="longitude" locale="en-GB"/>
    </property>
    <property type="integer" name="locality" column="locality">
      <documentation>
        Locality indexing; see issue #44. Note that this property should be generated
        automatically from the latitude and longitude:
        (+
          (* 10000            ;; left-shift the latitude component four digits
            (integer
              (* latitude 1000)))
          (-                  ;; invert the sign of the longitude component, since
                              ;; we're interested in localities West of Greenwich.
            (integer
              (* longitude 1000))))
        We'll use a trigger to insert this. I don't think it will ever appear in the user
        interface; it's an implementation detail, not of interest to users.
      </documentation>
    </property>
    <list properties="listed" name="Addresses">
      <field property="id"><prompt prompt="id" locale="en-GB"/></field>
      <field property="address"><prompt prompt="address" locale="en-GB"/></field>
      <field property="postcode"><prompt prompt="postcode" locale="en-GB"/></field>
      <field property="phone"><prompt prompt="phone" locale="en-GB"/></field>
      <field property="district_id"><prompt prompt="district_id" locale="en-GB"/></field>
      <field property="latitude"><prompt prompt="latitude" locale="en-GB"/></field>
      <field property="longitude"><prompt prompt="longitude" locale="en-GB"/></field>
    </list>
    <form properties="listed" name="Address">
      <field property="id"><prompt prompt="id" locale="en-GB"/></field>
      <field property="address"><prompt prompt="address" locale="en-GB"/></field>
      <field property="postcode"><prompt prompt="postcode" locale="en-GB"/></field>
      <field property="phone"><prompt prompt="phone" locale="en-GB"/></field>
      <field property="district_id"><prompt prompt="district_id" locale="en-GB"/></field>
      <field property="latitude"><prompt prompt="latitude" locale="en-GB"/></field>
      <field property="longitude"><prompt prompt="longitude" locale="en-GB"/></field>
    </form>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="visits" magnitude="7" volatility="2">
    <documentation>All visits made by canvassers to dwellings in which opinions were recorded.</documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="entity" name="address_id" column="address_id"
      entity="addresses" farkey="id" distinct="user">
      <prompt prompt="address_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="canvasser_id" column="canvasser_id"
      entity="canvassers" farkey="id">
      <prompt prompt="canvasser_id" locale="en-GB"/>
    </property>
    <property required="true" type="timestamp" name="date" column="date" default="now()" distinct="user">
      <prompt prompt="date" locale="en-GB"/>
    </property>
    <permission group="canvassers" permission="noedit">
      <documentation>But only in their immediate area.</documentation>
    </permission>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
    <list name="Visits" properties="all"/>
    <form name="Visit" properties="all"/>
    <permission permission="none" group="public"/>
    <permission permission="noedit" group="canvassers"/>
    <permission permission="noedit" group="teamorganisers"/>
    <permission permission="read" group="issueexperts"/>
    <permission permission="read" group="analysts"/>
    <permission permission="read" group="issueeditors"/>
    <permission permission="all" group="admin"/>
  </entity>
  <entity name="authorities" magnitude="2" volatility="7">
    <documentation>Authorities which may authenticate canvassers to the system.</documentation>
    <key>
      <property required="true" type="string" name="id" column="id" size="32" distinct="all">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property name="request-token-uri" type="string" size="256" required="true"/>
    <property name="access-token-uri" type="string" size="256" required="true"/>
    <property name="authorize-uri" type="string" size="256" required="true"/>
    <property name="consumer-key" type="string" size="32" required="true" default="youyesyet"/>
    <property name="consumer-secret" type="string" size="256" required="true"/>
    <list name="Authorities" properties="listed">
      <field property="id"><prompt prompt="id" locale="en-GB"/></field>#
      <field property="request-token-uri"/>
      <field property="access-token-uri"/>
      <field property="authorize-uri"/>
    </list>
    <form name="Authority" properties="all">
      <permission group="canvassers" permission="none"/>
      <permission group="teamorganisers" permission="none"/>
      <permission group="issueexperts" permission="none"/>
      <permission group="analysts" permission="none"/>
      <permission group="issueeditors" permission="none"/>
      <permission group="admin" permission="all"/>
    </form>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="issues" magnitude="1" volatility="3">
    <documentation>Issues believed to be of interest to electors, about which they may have questions.</documentation>
    <key>
      <property required="true" type="string" name="id" column="id" size="32" immutable="true" distinct="all">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property type="string" name="url" column="url" size="256">
      <prompt prompt="url" locale="en-GB"/>
    </property>
    <property name="current" type="boolean" default="true">
      <prompt prompt="Is current?" locale="en-GB"/>
    </property>
    <list name="Issues" properties="all"/>
    <form name="Issue" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="edit"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="intentions" magnitude="6" volatility="2">
    <documentation>Intentions of electors to vote for options elicited in visits.</documentation>
    <property required="true" type="entity" entity="visits" farkey="id" name="visit_id"
      column="visit_id">
      <prompt prompt="visit_id" locale="en-GB"/>
    </property>
    <property type="entity" entity="electors" farkey="id" name="elector_id"
      column="elector_id">
      <prompt prompt="elector_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" entity="options" farkey="id" name="option_id"
      column="option_id">
      <prompt prompt="option_id" locale="en-GB"/>
    </property>
    <property name="locality" type="integer" required="true">
      <documentation>
        The locality at which the intention was recorded; used where an elector does not consent to
        have polling intention stored against them. This is a locality as described in
      </documentation>
    </property>
    <list name="Intentions" properties="all"/>
    <form name="Intention" properties="all"/>
    <permission group="canvassers" permission="noedit">
      <documentation>But only for intentions in their immediate locality.</documentation>
    </permission>
    <permission group="teamorganisers" permission="none"/>
    <permission group="issueexperts" permission="none"/>
    <permission group="analysts" permission="read">
      <documentation>Can see all recorded intentions across the whole of Scotland.</documentation>
    </permission>
    <permission group="issueeditors" permission="none"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="canvassers" magnitude="5" volatility="4">
    <documentation>Primary users of the system: those actually interviewing electors.</documentation>
    <key>
      <property type="integer" name="id" column="id" distinct="system" immutable="true">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="string" name="username" column="username" size="32" distinct="all">
      <prompt prompt="username" locale="en-GB"/>
    </property>
    <property required="true" type="string" name="fullname" column="fullname" size="64" distinct="user">
      <prompt prompt="fullname" locale="en-GB"/>
    </property>
    <property type="entity" name="elector_id" column="elector_id" entity="electors" farkey="id">
      <prompt prompt="elector_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="address_id" column="address_id"
      entity="addresses" farkey="id" distinct="user">
      <prompt prompt="address_id" locale="en-GB"/>
    </property>
    <property type="string" name="phone" column="phone" size="16" distinct="user">
      <prompt prompt="phone" locale="en-GB"/>
    </property>
    <property type="string" name="email" column="email" size="128" distinct="user">
      <prompt prompt="email" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="authority_id"
      entity="authorities" farkey="id">
      <prompt prompt="authority_id" locale="en-GB"/>
    </property>
    <property type="boolean" name="authorised" column="authorised">
      <prompt prompt="authorised" locale="en-GB"/>
    </property>
    <property type="link" name="roles" entity="roles" farkey="role_id">
      <prompt prompt="Roles" locale="en-GB"/>
    </property>
    <permission group="canvassers" permission="edit">
      <documentation>But only their own record</documentation>
    </permission>
    <permission group="teamorganisers" permission="edit">
      <documentation>But only canvassers in their own team.</documentation>
    </permission>
    <permission group="admin" permission="all">
      <documentation>All canvassers</documentation>
    </permission>
    <list name="Canvassers" properties="all"/>
    <form name="Canvasser" properties="all"/>
    <permission group="canvassers" permission="edit">
      <documentation>But should only be able to edit their own record.</documentation>
    </permission>
    <permission group="teamorganisers" permission="edit"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="followuprequests" magnitude="7" volatility="2">
    <documentation>Requests for a followup with an issue expert</documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="entity" name="elector_id" column="elector_id" entity="electors"
      farkey="id" distinct="user">
      <prompt prompt="elector_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="visit_id" column="visit_id" entity="visits"
      farkey="id" distinct="user">
      <prompt prompt="visit_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="issue_id" column="issue_id" entity="issues"
      farkey="id" distinct="user">
      <prompt prompt="issue_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="method_id" column="method_id"
      entity="followupmethods" farkey="id">
      <prompt prompt="method_id" locale="en-GB"/>
    </property>
    <list name="Followuprequests" properties="all"/>
    <form name="Followuprequest" properties="all"/>
    <permission group="canvassers" permission="noedit"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="roles" magnitude="1" volatility="7">
    <documentation>A role (essentially, the same as a group, but application layer rather than database layer) of which a user may be a member.</documentation>
    <key>
      <property type="integer" name="id" column="id" immutable="true" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="string" name="name" column="name" size="64" distinct="all" immutable="true">
      <prompt prompt="name" locale="en-GB"/>
    </property>
    <property type="link" entity="canvassers" name="members">
      <prompt prompt="Members" locale="en-GB"/>
    </property>
    <list name="Roles" properties="all"/>
    <form name="Role" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="teams" magnitude="4" volatility="4">
    <key>
      <property type="integer" name="id" column="id" distinct="system" immutable="true">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="string" name="name" column="name" size="64" distinct="user">
      <prompt prompt="name" locale="en-GB"/>
    </property>
    <property required="true" type="entity" entity="districts" farkey="id" name="district_id"
      column="district_id">
      <prompt prompt="district_id" locale="en-GB"/>
    </property>
    <property type="real" name="latitude" column="latitude">
      <prompt prompt="latitude" locale="en-GB"/>
    </property>
    <property type="link" entity="canvassers" name="members">
      <prompt prompt="Members" locale="en-GB"/>
    </property>
    <property type="link" entity="canvassers" name="organisers">
      <prompt prompt="Organisers" locale="en-GB"/>
    </property>
    <property type="real" name="longitude" column="longitude">
      <prompt prompt="longitude" locale="en-GB"/>
    </property>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="edit">
      <documentation>But only their own group(s)</documentation>
    </permission>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all">
      <documentation>All groups</documentation>
    </permission>
    <list name="Teams" properties="all"/>
    <form name="Team" properties="all"/>
    <permission permission="none" group="public"/>
    <permission permission="read" group="canvassers"/>
    <permission permission="edit" group="teamorganisers"/>
    <permission permission="read" group="issueexperts"/>
    <permission permission="read" group="analysts"/>
    <permission permission="read" group="issueeditors"/>
    <permission permission="all" group="admin"/>
  </entity>
  <entity name="districts" magnitude="4" volatility="7">
    <documentation>Electoral districts: TODO: Shape (polygon) information will need to be added, for use in maps.</documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" immutable="true" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="string" name="name" column="name" size="64" distinct="user">
      <prompt prompt="name" locale="en-GB"/>
    </property>
    <permission group="public" permission="read"></permission>
    <permission group="admin" permission="all"></permission>
    <list name="Districts" properties="all"/>
    <form name="District" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="followupactions" magnitude="7" volatility="0">
    <documentation>Actions taken on followup requests.</documentation>
    <key>
      <property required="true" type="integer" name="id" column="id" distinct="system">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <property required="true" type="entity" name="request_id" column="request_id"
      entity="followuprequests" farkey="id">
      <prompt prompt="request_id" locale="en-GB"/>
    </property>
    <property required="true" type="entity" name="actor" column="actor" entity="canvassers"
      farkey="id">
      <prompt prompt="actor" locale="en-GB"/>
    </property>
    <property required="true" default="now()" type="timestamp" name="date" column="date" distinct="user">
      <prompt prompt="date" locale="en-GB"/>
    </property>
    <property type="text" name="notes" column="notes" distinct="user">
      <prompt prompt="notes" locale="en-GB"/>
    </property>
    <property type="boolean" name="closed" column="closed" default="false">
      <prompt prompt="closed" locale="en-GB"/>
    </property>
    <list name="Followupactions" properties="all"/>
    <form name="Followupaction" properties="all"/>
    <permission group="issueexperts" permission="noedit"/>
    <permission group="canvassers" permission="read">
      <documentation>But only for electors in their immediate vicinity</documentation>
    </permission>
    <permission group="teamorganisers" permission="none"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="options" magnitude="1" volatility="7">
    <documentation>Options in the election or referendum being canvassed on</documentation>
    <key>
      <property required="true" type="string" name="id" column="id" size="32" immutable="true" distinct="all">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <list name="Options" properties="all"/>
    <form name="Option" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
  <entity name="followupmethods" magnitude="1" volatility="7">
    <key>
      <property required="true" type="string" size="32" name="id" column="id" immutable="true" distinct="all">
        <prompt prompt="id" locale="en-GB"/>
      </property>
    </key>
    <list name="Followupmethods" properties="all"/>
    <form name="Followupmethod" properties="all"/>
    <permission group="canvassers" permission="read"/>
    <permission group="teamorganisers" permission="read"/>
    <permission group="issueexperts" permission="read"/>
    <permission group="analysts" permission="read"/>
    <permission group="issueeditors" permission="read"/>
    <permission group="admin" permission="all"/>
  </entity>
</application>