232 lines
10 KiB
XML
232 lines
10 KiB
XML
<?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 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/" name="pastoralist"
|
|
version="0.0.1">
|
|
|
|
<documentation>A web-app intended to be used by pastoralists in managing
|
|
pastures, grazing, and animals.</documentation>
|
|
|
|
<entity name="holding" magnitude="7" volatility="1">
|
|
<documentation>All holdings used to the system</documentation>
|
|
<key>
|
|
<documentation>Although in the UK and, probably, in many other
|
|
countries, holdings have a unique, government issued, holding
|
|
number which could rationally be used as a key, internationally
|
|
we cannot rely on this.
|
|
</documentation>
|
|
<property required="true" type="integer" name="id"
|
|
column="id" immutable="true" distinct="system">
|
|
<generator action="native"/>
|
|
</property>
|
|
</key>
|
|
<property size="64" type="string" name="holding-identifier" distinct="all">
|
|
<prompt prompt="Holding Number" locale="en_GB.UTF-8" immutable="true"/>
|
|
</property>
|
|
<property size="128" type="string" name="name" distinct="user"/>
|
|
<property type="list" name="pastures" entity="pasture"/>
|
|
<property type="list" name="animals" entity="animal"/>
|
|
<property type="link" name="users" entity="user">
|
|
<documentation>A user is a person authorised to see data on a holding.
|
|
Some users (e.g. vets, farm secretaries) may be authorised to see data
|
|
on many holdings.</documentation>
|
|
</property>
|
|
<property name="is-active" type="boolean" default="true">
|
|
<documentation>Records are not normally deleted from this system because
|
|
of historical data integrity; we may want to trace the history of an
|
|
animal across holdings even after a holding has ceased to be active
|
|
in the system.</documentation>
|
|
</property>
|
|
</entity>
|
|
|
|
<entity name="pasture" magnitude="8" volatility="2">
|
|
<documentation>A pasture within a holding. TODO: how should common pastures,
|
|
or pastures otherwise shared between holdings, be handled?</documentation>
|
|
<key>
|
|
<property required="true" type="integer" name="id"
|
|
column="id" immutable="true" distinct="system">
|
|
<generator action="native"/>
|
|
</property>
|
|
</key>
|
|
<property size="128" type="string" name="name" distinct="user"/>
|
|
<property type="real" name="area" distinct="user">
|
|
<prompt prompt="Area in Ha" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property name="holding" type="entity" entity="holding" required="true"/>
|
|
<!-- property name="geometry" type="entity" entity="polygon" required="true">
|
|
<documentation>
|
|
Polygon is a first-class datatype in PostGIS, but ADL does not yet
|
|
support this. Solutions:
|
|
1. hack ADL to support native polygons;
|
|
2. implement our own polygon datatype;
|
|
3. work-around in override code.
|
|
|
|
Generally, when pasture boundaries are changed, a pasture record
|
|
should not be edited; rather it should be marked inactive, and new
|
|
pasture record(s) created.
|
|
</documentation>
|
|
</property -->
|
|
<property name="subdivision-of" type="entity" entity="pasture"/>
|
|
<property name="is-active" type="boolean" default="true">
|
|
<documentation>Records are not normally deleted from this system because
|
|
of historical data integrity; we may want to trace the history of an
|
|
pasture even after pasture boundaries have been changed.
|
|
|
|
Indeed, if we treat subdivisions as pastures (which would be quite sensible),
|
|
active pastures in the system will change quite frequently, especially if
|
|
strip-grazing is used.
|
|
</documentation>
|
|
</property>
|
|
<property name="history" type="link" entity="event"/>
|
|
</entity>
|
|
|
|
<entity name="animal" magnitude="9" volatility="5">
|
|
<documentation>An animal on a holding (or which has been on a holding; the
|
|
historical record is not wiped when an animal dies, is killed, or is sold)
|
|
</documentation>
|
|
<key>
|
|
<documentation>Although in the UK and, probably, in many other
|
|
countries, animals have a unique, government registered, identifying
|
|
number which could rationally be used as a key, internationally
|
|
we cannot rely on this.
|
|
</documentation>
|
|
<property required="true" type="integer" name="id"
|
|
column="id" immutable="true" distinct="system">
|
|
<generator action="native"/>
|
|
</property>
|
|
</key>
|
|
<property name="holding" type="entity" entity="holding">
|
|
<documentation>The holding the animal is currently on, if any. Not 'required',
|
|
since the animal may be dead, or simply moved off to a holding which is
|
|
not part of the system.</documentation>
|
|
</property>
|
|
<property name="dam" type="entity" entity="animal"/>
|
|
<property name="sire" type="entity" entity="animal"/>
|
|
<property name="born" type="date" immutable="true" required="true"/>
|
|
<property name="animal-identifier" type="string" size="64" distinct="user" required="true">
|
|
<prompt prompt="Ear-tag Number" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property name="name" type="string" size="64" distinct="user"/>
|
|
<property name="gender" type="entity" entity="gender" required="true"/>
|
|
<property name="species" type="entity" entity="species" required="true"/>
|
|
<property name="breed" type="entity" entity="breed"/>
|
|
<property name="is-pedigree" type="boolean" default="false"/>
|
|
<property name="pasture" type="entity" entity="pasture"/>
|
|
<property name="history" type="link" entity="event"/>
|
|
</entity>
|
|
|
|
<entity name="gender" magnitude="1" volatility="10">
|
|
<key>
|
|
<property name="gender" type="string" size="8" distinct="all" immutable="true"/>
|
|
</key>
|
|
</entity>
|
|
|
|
<entity name="species" magnitude="2" volatility="5">
|
|
<key>
|
|
<property name="species" type="string" size="32" distinct="all" immutable="true"/>
|
|
</key>
|
|
</entity>
|
|
|
|
<entity name="breed" magnitude="1" volatility="10">
|
|
<key>
|
|
<property name="breed" type="string" size="32" distinct="all" immutable="true"/>
|
|
</key>
|
|
<property name="species" type="entity" entity="species"/>
|
|
</entity>
|
|
|
|
<entity name="event" magnitude="9" volatility="2">
|
|
<key>
|
|
<property required="true" type="integer" name="id"
|
|
column="id" immutable="true" distinct="system">
|
|
<generator action="native"/>
|
|
</property>
|
|
</key>
|
|
<property name="type" type="entity" entity="event-type"></property>
|
|
<property name="actor" type="entity" entity="user" required="true" immutable="true">
|
|
<documentation>The user who recorded this event.</documentation>
|
|
</property>
|
|
<promperty name="date" type="timestamp" required="true" default="now()"/>
|
|
<property name="pastures" type="link" entity="pasture">
|
|
<documentation>Pastures affected by this event.</documentation>
|
|
</property>
|
|
<property name="animals" type="link" entity="animal">
|
|
<documentation>Animals affected by this event.</documentation>
|
|
</property>
|
|
<property name="summary" type="string" size="80"/>
|
|
<property name="notes" type="text"/>
|
|
</entity>
|
|
|
|
<entity name="event-type" magnitude="3" volatility="5">
|
|
<key>
|
|
<property required="true" type="integer" name="id"
|
|
column="id" immutable="true" distinct="system">
|
|
<generator action="native"/>
|
|
</property>
|
|
</key>
|
|
<property name="summary" type="string" size="80"/>
|
|
<property name="description" type="text"/>
|
|
<property name="n-holdings" type="integer" default="1">
|
|
<documentation>
|
|
Number of holdings affected by this event type; if an animal movement on
|
|
or off, for example, it will be two, otherwise normally one.
|
|
</documentation>
|
|
<prompt prompt="No. of Holdings Affected" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property name="n-pastures" type="integer" default="1">
|
|
<documentation>
|
|
Number of pastures affected by this event type; if an animal movement between
|
|
pastures, for example, it will be two, otherwise normally one.
|
|
</documentation>
|
|
<prompt prompt="No. of Pastures Affected" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property name="n-animals" type="integer" default="1">
|
|
<documentation>
|
|
Number of animals affected by this event type. If a value greater than 10
|
|
is recorded, that will be treated as 'many'. TODO: not comfortable that
|
|
that is the right way to handle 'many'.
|
|
</documentation>
|
|
<prompt prompt="No. of Animals Affected" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
</entity>
|
|
|
|
<entity name="user" magnitude="6" volatility="3">
|
|
<key>
|
|
<property required="true" type="string" name="username" size="32"
|
|
column="username" immutable="true" distinct="all"/>
|
|
</key>
|
|
<property required="true" type="string" name="fullname"
|
|
column="fullname" size="64" distinct="user">
|
|
<prompt prompt="fullname" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property name="avatar" type="image" size="256">
|
|
<documentation>An image of the canvasser, so that other members of their
|
|
team can recognise them.</documentation>
|
|
<prompt prompt="Avatar" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property name="bio" type="text">
|
|
<documentation>Information the canvasser supplies about themselves; an introduction.</documentation>
|
|
<prompt prompt="Bio" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property type="string" name="phone" column="phone" size="16"
|
|
distinct="user">
|
|
<documentation>Does a canvasser record need a phone field? There is a phone
|
|
field on the elector record. I suppose, for under-16 canvassers, there may
|
|
be no elector record.</documentation>
|
|
<prompt prompt="phone" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<property type="string" name="email" column="email" size="128"
|
|
distinct="user">
|
|
<prompt prompt="email" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
<!-- property required="true" type="entity" name="authority_id"
|
|
entity="authorities" farkey="id">
|
|
<prompt prompt="authority_id" locale="en_GB.UTF-8"/>
|
|
</property -->
|
|
<property type="boolean" name="authorised" column="authorised">
|
|
<prompt prompt="authorised" locale="en_GB.UTF-8"/>
|
|
</property>
|
|
</entity>
|
|
</application>
|