#summary GHOP features which we are 99% sure we do not want in the first Melange based GHOP
#labels Importance-Details,Phase-Design,Contents-Draft


=What is GHOP 20?=

GHOP 20 is planned for some time in the future :-)

Features slated for GHOP 20 are ones which are assumed to have a smaller return on investment on the work done than some of the 'nice to have' features which remain in the main GHOP plan.  If it actually turns out that as Melange becomes more flexible these features become easy to do, and if the discussion needed to refine the details is also found to be short, then they can be reintroduced into the main plan as NTH's.

== Automatic Prizes==

Automatic prizes may be part of the GHOP program admin dashboard.  That means that you can setup in the program settings what kind of prizes students will get for what amount of tasks.

For example:

  * < 3 tasks - t-shirt
  * every 3 tasks up to 15 tasks - 100 USD so maximum of 500 USD per student
  * and then in your report you can fetch information about all the participating  
  * students and have a PRIZE and TASKS column which says

||TASKS || PRIZE||
||2 || t-shirt||
||1 || t-shirt||
||4 || 100 USD||
||32|| 500 USD||
||7 || 200 USD||

etc 

  * so it's helpful for reports basically and saves GOSPO Team work.

===Discussion of Automatic Prizes===

A distinction needs to be made between the determination of automatic prizes and the listing and reporting of student stats.  The listing and reporting of student number of tasks-fixed and difficulty stats _is_ important for GOSPO staff.  _(To Be Confirmed)_