vocabulary Orienteering;

/*

* Value Types
*/

Accessibility is written as Char(1) restricted to {'A'..'D'}; Club Code is written as String(6); Club Name is written as String(32); Control Number is written as Unsigned Integer(32) restricted to {1..1000}; Course is written as String(16) restricted to {'A'..'E', 'PW'}; Entry ID is written as Auto Counter; Event ID is written as Auto Counter; Event Name is written as String(50); Family Name is written as String(48); Gender is written as Char(1) restricted to {'F', 'M'}; Given Name is written as String(48); Location is written as String(200); Map ID is written as Auto Counter; Map Name is written as String(80); Number is written as Unsigned Integer(32) restricted to {1..100}; Person ID is written as Auto Counter; Placing is written as Unsigned Integer(32); Point Value is written as Unsigned Integer(32); Post Code is written as Unsigned Integer(32); Punch ID is written as Auto Counter; Score is written as Signed Integer(32); Scoring Method is written as String(32) restricted to {'Scatter', 'Score', 'Special'}; Series ID is written as Auto Counter; Series Name is written as String(40); Start Time is written as Date Time; Time is written as Date Time; Year is written as Unsigned Integer(32) restricted to {1900..3000};

/*

* Entity Types
*/

Club is identified by its Code; Club Name is name of at most one Club,

Club is called one Club Name;

Event is identified by its ID; Club runs Event,

Event is run by one Club;

Event is called at most one Event Name,

Event Name is name of at most one Event;

Event has at most one Number; Event is held on one Start Time; Event starts at one start-Location,

Location is place Event starts;

Event Control is where

Event includes at least one Control Number;

Event Control has at most one Point Value;

Event Scoring Method is where

Scoring Method is used for Course of Event,
Course of Event uses one Scoring Method;

Map is identified by its ID; Club (as Owner) owns Map,

Map is owned by one Owner;

Map has at most one Accessibility; Map is map for Event,

Event uses one Map;

Map has one Map Name,

Map Name is of at most one Map;

Person is identified by its ID; Person is member of at most one Club; Person has one Family Name,

Family Name is of Person;

Person is of at most one Gender; Person has one Given Name,

Given Name is name of Person;

Person has at most one Post Code; Person was born in at most one birth-Year;

Punch is identified by its ID;

Punch Placement is where

Punch is placed at Event Control;

Series is identified by its ID; Event is in at most one Series; Series has one Series Name (as Name),

Name is of at most one Series;

Entry is identified by its ID where

Person entered Course of Event,
Person entered Event in one Course;

Entry received at most one Score; Entry finished in at most one finish-Placing;

Visit is where

Punch was visited by Entry at Time;

/*

* Constraints:
*/

Event is in Series

if and only if
Event has Number;

each Event Control occurs at least one time in

Punch is placed at Event Control;

either Event is called Event Name or Event is in Series; each combination Given Name, Family Name occurs at most one time in

Person has Given Name,
Person has Family Name;

each combination Series, Number occurs at most one time in

Event is in Series,
Event has Number;