Here you can maintain the list of school years.
When a new schoolyear is created, all children which already exist in the system will automatically be upgraded in their class level for the newly created school year.
![]() | Important |
|---|---|
The reference schoolyear for the upgrading is the one that has been created at last as it is supposed to be the most recent schoolyear. It can be recognized as it has the highest "id". |
In order to use this functionality, the class levels and their order must be defined in the list of class levels. If a class is marked as a final class the child will not be upgraded in its class level and will not appear in the list of children for the newly created school year – it has finished the school.
This list is necessary for the automatic upgrading of the class level of the children when creating a new schoolyear. After the class level marked as “final” no upgrading takes place – which means the child has finished the school.
This list defines the possible class names that you can select when editing the data of a child.
Before you can create any course or service, you must have created "service categories". Service categories have the following sense:
They predefine accounting information (for the invoice item generation during an invoicing run): account credit, cost center and cost carrier.
They help you to classify your services and courses for an easier overview in lists
![]() | Important |
|---|---|
If you do not define any account credit, cost center or cost carrier in an individual course or service, the system will derive the values from the corresponding service category during the invoicing run. |
Here some basic data for the PA-Administration application can be maintained, as e.g. the school year to use when a user logs into the system or any predefined cancelation fees for services.
| Parameter | Description |
|---|---|
| Default schoolyear after login | When a user enters into the system he will automatically see all data corresponding to this schoolyear. |
| Generate debitor number | When a new data record for parents is being created or imported, the system automatically checks for the highest debitor number in the database until now and generates an increased number that will be automatically be preset for the new record. |
| Service cancelation period (days) | Preset default value when a new service or course is being created. |
| Service cancelation fee | Preset default value when a new service or course is being created. |
| Publish courses / services | Courses and services can be published via a XML interface (like a RSS feed). But inly curses and services in the state "published" will be published. If this flag is not set, then the XML interface will deliver an empty list, independently from the state of the course or service. |
| Publish for schoolyear | The schoolyear of which the courses should be published. |
| School address (for geocoding) | Enter here the address of the school (e.g. Elise-Aulinger-Str. 21; 81739 München; Deutschland). The system will automatically calculate via geocoding the latitude and longitude of the schools address. The system will use that information to calculate the shortest distance to the school (routing through streets - not the direct line) when creating parents or editing a parents address. |
Some services may not have a fixed pricing, but a pricing that must be individually calculated for each participant. An example is the schoolbus price, depending on the distance from the school. For these services you can define princing rules which allow you to define logically complex rules yourself.
In order to do so you need to have some know how a script language called "Liquid" which enables you to:
use variables
Do some basic programming logics
You need to read the following small manual carefully in order to design your own pricing rules.
![]() | Tip |
|---|---|
You can find a complete overview on the usage of "Liquid" for designers under |
The following fields are necessary to define a pricing rule:
Name: Define a descriptive name for the rule
Description: Here you can describe the logic in words in order to get a better understanding of how the rule must calculate a price.
Pricing rule: Here you must enter the pricing rule in liquid format, mixing it with variables and any processing instructions.
The following variables can be used for the pricing rules. They can be introduced into your rule with curly double brackets like {{header}}:
| Object | variable name | Description |
|---|---|---|
| Parents | |
The zip code of the parents address |
distance |
The distance to the school via streets in meters | |
| Child | < will be added on request
> |
|
| Service | < will be added on request
> |
|
| Service registration | < will be added on request
> |
An example for the "bus price by distance" could look like:
{% capture ziplong %}{{zip}}#####{% endcapture %}
{% capture zipshort %}{{ziplong|truncate:5}}{% endcapture %}
{% case zipshort %}
{% when '81...' or '80...' %}
0
{% else %}
{% if distance < 5000 %}
5
{% elsif distance < 10000 %}
10
{% elsif distance < 15000 %}
15
{% elsif distance < 20000 %}
20
{% elsif distance < 25000 %}
25
{% else %}
300
{% endif %}
{% endcase %}
In the above example we assign to the variable "ziplong" the value of "zip" and add some hashes to make the string longer.
Then we assign to the variable "zipshort" the value of "ziplong", but truncating it to 5 characters. This means that "80345#####" gets converted to "80...".
If a zip code starts with "80" or "81" (which means that "zipshort" must be "80..." or "81...", then the price is 0.
Otherwise the price depends on the "distance" in meters.
![]() | Note |
|---|---|
Commas must be written with a point - like e.g. 10.05 would be a valid number. If the result of a pricing rule is not a number, then the system converts the value to 0 when calculating a price. |
In order to avoid the time consuming manual entering of your data, it is possible to import the data of parents and children in a very safe way. If any error occurs, no data will be created or changed in the database.
![]() | Note |
|---|---|
The data import is processed in the background after the initial upload, as it can take some minutes to import all data - depending on the amount of data. Refresh once in a while the list of imports to check if the import has finished. |
With this functionality, children and parents can be uploaded together in a mass upload and the system can link them automatically together via a “match field”. The “match field” is a column which must exist in both CSV files and which has the same value for parents and children rows. Just indicate the name of the column that will serve as the match field.
Also mass updates of entries already existing in the database can be done via this functionality, but then some rules must be respected.
The upload of the data is specific for the currently selected schoolyear as some parents and children data depends on the schoolyear (e.g. membership of parent or the class level of a child).

The system will upload the files and at first do a test run to check for any errors.
If no errors are found, then the data will be automatically imported into the database.
If any errors are found, no data will be imported at all and the found errors can be seen in the Errors field of the stored upload information, so that they can be fixed by the user in the CSV files.

During the import, the following data are eventually generated automatically:
If no membership information is given, then the parents will automatically be created with the flag "member" set.
If in the preferences menu of the PA-administration module it is defined that the system should generate a debitor number for new parents, then the system automatically creates a new debitor number for the newly imported parents. The automatic numbering starts following to the highest number existing already either in the database or in the list of parents that will be imported.
You can also overwrite existing data by a mass import of parents and children.
![]() | Important |
|---|---|
Fields that are left blank in the import file will not overwrite any value in the database records |
The following table explains in which priority and how data records are matched with values from the CSV file, so that the system can find the corresponding existing data record in the database for overwriting the parents and the children:
| Element | Match priority | Identifying field(s) | Matching algorithm |
|---|---|---|---|
| Parents | 1 | id |
At first, the system checks if the CSV file with the
parents data contains a column "id". In
this case the system searches for existing records with the
given ID and overwrites them. If the
record with the given ID cannot be found, an error is given
back. |
| Parents | 2 | debitor_no |
If the column "id" is not given, but
a column "debitor_no" exists in the CSV
file with the children data, then the system uses this
number to identify already existing records and overwrites
them. |
| Parents | 3 | email_father |
If no successful match was possible until now, at next
the "email_father" field will be used to
match, if this field has a value in the CSV import
file. |
| Parents | 4 | email_mother |
If no successful match was possible until now, at next
the "email_mother" field will be used to
match, if this field has a value in the CSV import
file. |
| Children | 1 | id |
At first, the system checks if the CSV file with the
children data contains a column "id". In
this case the system searches for existing records with the
given ID and overwrites them. If the
record with the given ID cannot be found, an error is given
back. |
| Children | 2 | name, surname, dateofbirth |
If no record could be found via the
"id", either because no
"id" was given in the CSV file or because
it could not be found in the database, then the system tries
to match a child record via the fields "name,
surname, dateofbirth". |
The CSV files must comply with the following rules:
The columns must be separated by the column separator sign
The first line of each CSV file must contain the column names (as headers). The order of the columns is not important as the header line indicates which kind of data is stored in which column.
The column names must correspond to valid column lines as described here later on – otherwise they will be ignored during the upload
If a column exists with the name ID and if there is a value present in a line, then the system will search for existing database entries with this ID and give an error if they are not found. This way mass updates of data can be done when they have been exported as CSV files before from the parents or children table which contain the database IDs of each entry
![]() | Tip |
|---|---|
If you do a CSV export of the parents and the children (e.g. in the demo client if you do not have any own data yet), you will get exactly the format that you need. This also a good way to do mass updates of data with the help of a spreadsheet program outside the system and then import them again. |
The format definition for special field types is the following:
| Field type | Format |
|---|---|
| boolean | "WAHR","TRUE","YES","JA","SI","1",1,true,"wahr","true","yes","ja","si", "FALSCH","FALSE","NO","NEIN","0",0,false,"falsch","false","no","nein" |
| date | DD.MM.YYYY |
The CSV file with the parents data must consist of the following column headers and column value formats. The order is not important and only those columns must be provided that you need.
| Column name | Description | Data type / max. length / format |
|---|---|---|
|
Id of the data record in the database. | integer |
debitor_no |
Debitor number as in an accounting system. Must be unique if provided. | string, 30 |
namefather |
Name of the father. | string, 50 |
surnamefather |
Surname of the father. | string, 50 |
email_father |
Email of the father. | string, 50 |
namemother |
Name of the mother. | string, 50 |
surnamemother |
Surname of the mother. | string, 50 |
email_mother |
Email of the mother | string, 50 |
street |
Street | string, 100 |
houseno |
Number of the house | string, 25 |
city |
City | string, 50 |
zip |
ZIP code of the city | string, 8 |
country |
Country ISO 3166 code | string, 2 |
language |
Language code. Must be one of the currently available system languages "de", "en", "es" | string, 2 |
telephone |
Telephone at home | string, 25 |
jobroom |
Room at the job | string, 10 |
jobtelephone |
Telephone at the job | string, 20 |
publishaddress |
May the address be published in the pupils list ? | boolean |
publishaddressinclass |
May the address be published in the list of children of the schoolclass ? | boolean |
paymentmethod_id |
The paymentmethod. Can be given as the id or as the text of the paymentmethod. In any case it must be a valid entry of the table for paymentmethods. | Integer / string, 50 |
maxinstalment |
Payment with a maximum instalment amount (instalments must be handled by the accounting software) | boolean |
accountnumber |
Accountnumber for the invoicing in the accounting software | string, 50 |
accountholder |
Name of the account holder | string, 50 |
bankcode |
Bank code | string, 50 |
bankname |
Name of the bank | string, 50 |
bankcity |
City of the bank | string, 50 |
bankswift |
SWIFT Code of the bank | string, 50 |
bankiban |
IBAN / BIC of the bank | string, 50 |
agbread |
Did the parents read the general conditions of the parents association ? | boolean |
comment |
Any comment | string, 65535 |
pamember |
If the parents are members of the parents association | boolean |
pasupportingmember |
If the parents are supporting members of the parents association | boolean |
| < any free name for a match column> | A special column that will be used to match the parents with children. You can also use any of the other columns for that purpose. | string (any length, as it will not be stored in the database) |
The CSV file with the children data must consist of the following column headers and column value formats. The order is not important and only those columns must be provided that you need.
| Column name | Description | Data type / max. length / format |
|---|---|---|
|
Id of the data record in the database. | integer |
name |
Name of the child. | string, 50 |
surname |
Surname of the child. | string, 50 |
language |
ISO 639-1 language code | string, 2 |
dateofbirth |
Date of birth | date |
classlevel |
Class level of the child (for the currently selected schoolyear | string, 30 |
classname |
Class name of the child (or language section) (for the currently selected schoolyear) | string, 30 |
comment |
Any comment text | string, 65535 |
| < any free name for a match column> | A special column that will be used to match the parents with children. You can also use any of the other columns for that purpose. | string (any length, as it will not be stored in the database) |