effective_cpd 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +117 -0
  4. data/Rakefile +18 -0
  5. data/app/assets/config/effective_cpd_manifest.js +2 -0
  6. data/app/assets/javascripts/effective_cpd.js +2 -0
  7. data/app/assets/javascripts/effective_cpd/activities.js +49 -0
  8. data/app/assets/javascripts/effective_cpd/activities_new.js +21 -0
  9. data/app/assets/stylesheets/effective_cpd.scss +1 -0
  10. data/app/assets/stylesheets/effective_cpd/_activities.scss +19 -0
  11. data/app/controllers/admin/cpd_activities_controller.rb +13 -0
  12. data/app/controllers/admin/cpd_categories_controller.rb +13 -0
  13. data/app/controllers/admin/cpd_cycles_controller.rb +13 -0
  14. data/app/controllers/admin/cpd_rules_controller.rb +13 -0
  15. data/app/controllers/admin/cpd_statements_controller.rb +13 -0
  16. data/app/controllers/effective/cpd_cycles_controller.rb +19 -0
  17. data/app/controllers/effective/cpd_statement_activities_controller.rb +27 -0
  18. data/app/controllers/effective/cpd_statements_controller.rb +71 -0
  19. data/app/datatables/admin/effective_cpd_activities_datatable.rb +31 -0
  20. data/app/datatables/admin/effective_cpd_categories_datatable.rb +24 -0
  21. data/app/datatables/admin/effective_cpd_cycles_datatable.rb +22 -0
  22. data/app/datatables/admin/effective_cpd_rules_datatable.rb +43 -0
  23. data/app/datatables/admin/effective_cpd_statements_datatable.rb +30 -0
  24. data/app/datatables/effective_cpd_datatable.rb +30 -0
  25. data/app/datatables/effective_cpd_statements_datatable.rb +23 -0
  26. data/app/helpers/effective_cpd_helper.rb +37 -0
  27. data/app/mailers/effective/cpd_mailer.rb +7 -0
  28. data/app/models/effective/cpd_activity.rb +41 -0
  29. data/app/models/effective/cpd_category.rb +35 -0
  30. data/app/models/effective/cpd_cycle.rb +113 -0
  31. data/app/models/effective/cpd_rule.rb +108 -0
  32. data/app/models/effective/cpd_scorer.rb +158 -0
  33. data/app/models/effective/cpd_statement.rb +95 -0
  34. data/app/models/effective/cpd_statement_activity.rb +78 -0
  35. data/app/views/admin/cpd_activities/_form.html.haml +20 -0
  36. data/app/views/admin/cpd_categories/_form.html.haml +21 -0
  37. data/app/views/admin/cpd_categories/_form_cpd_category.html.haml +5 -0
  38. data/app/views/admin/cpd_cycles/_form.html.haml +17 -0
  39. data/app/views/admin/cpd_cycles/_form_content.html.haml +32 -0
  40. data/app/views/admin/cpd_cycles/_form_cpd_cycle.html.haml +21 -0
  41. data/app/views/admin/cpd_cycles/_form_cpd_rules.html.haml +56 -0
  42. data/app/views/admin/cpd_statements/_form.html.haml +6 -0
  43. data/app/views/effective/cpd_statement_activities/_form.html.haml +70 -0
  44. data/app/views/effective/cpd_statements/_activities.html.haml +64 -0
  45. data/app/views/effective/cpd_statements/_activities_new.html.haml +39 -0
  46. data/app/views/effective/cpd_statements/_agreements.html.haml +6 -0
  47. data/app/views/effective/cpd_statements/_cpd_statement.html.haml +5 -0
  48. data/app/views/effective/cpd_statements/_layout.html.haml +37 -0
  49. data/app/views/effective/cpd_statements/_summary.html.haml +36 -0
  50. data/app/views/effective/cpd_statements/activities.html.haml +25 -0
  51. data/app/views/effective/cpd_statements/agreements.html.haml +14 -0
  52. data/app/views/effective/cpd_statements/complete.html.haml +13 -0
  53. data/app/views/effective/cpd_statements/start.html.haml +13 -0
  54. data/app/views/effective/cpd_statements/submit.html.haml +20 -0
  55. data/app/views/layouts/effective_cpd_mailer_layout.html.haml +7 -0
  56. data/config/effective_cpd.rb +29 -0
  57. data/config/routes.rb +28 -0
  58. data/db/migrate/01_create_effective_cpd.rb.erb +98 -0
  59. data/db/seeds.rb +472 -0
  60. data/lib/effective_cpd.rb +18 -0
  61. data/lib/effective_cpd/engine.rb +11 -0
  62. data/lib/effective_cpd/version.rb +3 -0
  63. data/lib/generators/effective_cpd/install_generator.rb +46 -0
  64. data/lib/generators/templates/effective_cpd_mailer_preview.rb +4 -0
  65. data/lib/tasks/effective_cpd_tasks.rake +6 -0
  66. metadata +233 -0
@@ -0,0 +1,14 @@
1
+ = render('layout') do
2
+ %h1= resource.cpd_cycle
3
+
4
+ - if resource.cpd_cycle.all_steps_content.present?
5
+ .mb-2= resource.cpd_cycle.all_steps_content
6
+
7
+ - if resource.cpd_cycle.agreements_content.present?
8
+ .mb-2= resource.cpd_cycle.agreements_content
9
+
10
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
11
+ = render('agreements', f: f, form: f)
12
+ = f.hidden_field :current_step
13
+
14
+ = f.submit 'Save and Continue', center: true
@@ -0,0 +1,13 @@
1
+ = render('layout') do
2
+ %h1= resource.cpd_cycle
3
+
4
+ - if resource.cpd_cycle.all_steps_content.present?
5
+ .mb-2= resource.cpd_cycle.all_steps_content
6
+
7
+ - if resource.cpd_cycle.complete_content.present?
8
+ .mb-2= resource.cpd_cycle.complete_content
9
+
10
+ = render(resource)
11
+
12
+ %hr
13
+ .text-center= link_to 'Home', root_url, class: 'btn btn-primary'
@@ -0,0 +1,13 @@
1
+ = render('layout') do
2
+ %h1= resource.cpd_cycle
3
+
4
+ - if resource.cpd_cycle.all_steps_content.present?
5
+ .mb-2= resource.cpd_cycle.all_steps_content
6
+
7
+ - if resource.cpd_cycle.start_content.present?
8
+ .mb-2= resource.cpd_cycle.start_content
9
+
10
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
11
+ = f.hidden_field :current_step
12
+
13
+ = f.submit 'Start', center: true
@@ -0,0 +1,20 @@
1
+ = render('layout') do
2
+ %h1= resource.cpd_cycle
3
+
4
+ - if resource.cpd_cycle.all_steps_content.present?
5
+ .mb-2= resource.cpd_cycle.all_steps_content
6
+
7
+ - if resource.cpd_cycle.submit_content.present?
8
+ .mb-2= resource.cpd_cycle.submit_content
9
+
10
+ = render(resource)
11
+
12
+ %p= link_to 'Change Activities', wizard_path(:activities)
13
+
14
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
15
+ = f.hidden_field :current_step
16
+
17
+ = f.check_box :confirm_readonly,
18
+ label: 'Yes, I understand that I will not be able to modify this statement after submission'
19
+
20
+ = f.submit 'Save and Continue', center: true
@@ -0,0 +1,7 @@
1
+ !!!
2
+ %html{style: 'background: #fff;'}
3
+ %head
4
+ %meta{:content => 'text/html; charset=UTF-8', 'http-equiv' => 'Content-Type'}
5
+
6
+ %body{style: 'background: #fff;'}
7
+ = yield
@@ -0,0 +1,29 @@
1
+ EffectiveCpd.setup do |config|
2
+ config.cpd_cycles_table_name = :cpd_cycles
3
+ config.cpd_categories_table_name = :cpd_categories
4
+ config.cpd_activities_table_name = :cpd_activities
5
+ config.cpd_rules_table_name = :cpd_rules
6
+ config.cpd_statement_activities_table_name = :cpd_statement_activities
7
+ config.cpd_statements_table_name = :cpd_statements
8
+
9
+ # Layout Settings
10
+ # Configure the Layout per controller, or all at once
11
+ config.layout = {
12
+ cpd: 'application',
13
+ admin: 'admin'
14
+ }
15
+
16
+ config.cycle_label = 'year' # 'cycle', 'season'
17
+ config.credit_label = 'credit' # 'credit', 'PDH', 'PDU', 'CCC'
18
+
19
+ # Notifications Mailer Settings
20
+ #
21
+ # Schedule rake effective_cpd:notify to run every 10 minutes
22
+ # to send out email poll notifications
23
+ #
24
+ config.mailer = {
25
+ layout: 'effective_cpd_mailer_layout',
26
+ default_from: 'no-reply@example.com'
27
+ }
28
+
29
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,28 @@
1
+ Rails.application.routes.draw do
2
+ mount EffectiveCpd::Engine => '/', as: 'effective_cpd'
3
+ end
4
+
5
+ EffectiveCpd::Engine.routes.draw do
6
+ scope module: 'effective' do
7
+ resources :cpd_cycles, path: "cpd_#{EffectiveCpd.cycle_label.pluralize.parameterize.underscore}", only: [:show] do
8
+ resources :cpd_statements, path: :statements, only: [:new, :show] do
9
+ resources :build, controller: :cpd_statements, only: [:show, :update]
10
+ end
11
+ end
12
+
13
+ resources :cpd_statements, only: [] do
14
+ resources :cpd_statement_activities, except: [:index, :show]
15
+ end
16
+
17
+ end
18
+
19
+ namespace :admin do
20
+ resources :cpd_categories, except: [:show]
21
+ resources :cpd_activities, except: [:show]
22
+ resources :cpd_cycles, except: [:show]
23
+ resources :cpd_rules, only: [:index]
24
+
25
+ resources :cpd_statements, only: [:index, :edit, :update]
26
+ end
27
+
28
+ end
@@ -0,0 +1,98 @@
1
+ class CreateEffectiveCpd < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table <%= @cpd_cycles_table_name %> do |t|
4
+ t.string :title
5
+
6
+ t.datetime :start_at
7
+ t.datetime :end_at
8
+
9
+ t.integer :required_score
10
+
11
+ t.datetime :updated_at
12
+ t.datetime :created_at
13
+ end
14
+
15
+ create_table <%= @cpd_categories_table_name %> do |t|
16
+ t.string :title
17
+ t.integer :position
18
+
19
+ t.datetime :updated_at
20
+ t.datetime :created_at
21
+ end
22
+
23
+ create_table <%= @cpd_activities_table_name %> do |t|
24
+ t.references :cpd_category
25
+
26
+ t.string :title
27
+ t.integer :position
28
+
29
+ t.string :amount_label
30
+ t.string :amount2_label
31
+
32
+ t.boolean :requires_upload_file, default: false
33
+
34
+ t.datetime :updated_at
35
+ t.datetime :created_at
36
+ end
37
+
38
+ create_table <%= @cpd_rules_table_name %> do |t|
39
+ t.references :cpd_cycle
40
+ t.integer :ruleable_id
41
+ t.string :ruleable_type
42
+
43
+ t.text :credit_description
44
+ t.string :formula
45
+
46
+ t.integer :max_credits_per_cycle
47
+ t.integer :max_cycles_can_carry_forward
48
+ t.boolean :unavailable, default: false
49
+
50
+ t.datetime :updated_at
51
+ t.datetime :created_at
52
+ end
53
+
54
+ create_table <%= @cpd_statement_activities_table_name %> do |t|
55
+ t.references :cpd_statement
56
+ t.references :cpd_activity
57
+ t.references :cpd_category
58
+ t.references :original
59
+
60
+ t.integer :amount
61
+ t.integer :amount2
62
+
63
+ t.text :description
64
+
65
+ t.integer :carry_over
66
+ t.integer :score
67
+ t.integer :carry_forward
68
+
69
+ t.text :reduced_messages
70
+
71
+ t.datetime :updated_at
72
+ t.datetime :created_at
73
+ end
74
+
75
+ create_table <%= @cpd_statements_table_name %> do |t|
76
+ t.references :cpd_cycle
77
+
78
+ t.integer :user_id
79
+ t.string :user_type
80
+
81
+ t.string :token
82
+
83
+ t.integer :score
84
+
85
+ t.boolean :confirm_read
86
+ t.boolean :confirm_factual
87
+ t.boolean :confirm_readonly
88
+
89
+ t.datetime :completed_at
90
+
91
+ t.text :wizard_steps
92
+
93
+ t.datetime :updated_at
94
+ t.datetime :created_at
95
+ end
96
+
97
+ end
98
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,472 @@
1
+ puts "Running effective_cpd seeds"
2
+
3
+ now = Time.zone.now
4
+
5
+ if Rails.env.test?
6
+ Effective::CpdCycle.delete_all
7
+ Effective::CpdCategory.delete_all
8
+ Effective::CpdActivity.delete_all
9
+ Effective::CpdRule.delete_all
10
+
11
+ ActionText::RichText.where(record_type: ['Effective::CpdCycle', 'Effective::CpdCycle', 'Effective::CpdActivity']).delete_all
12
+ end
13
+
14
+ # Build the first CpdCycle
15
+ cycle = Effective::CpdCycle.create!(
16
+ title: "#{now.year} Continuing Professional Development",
17
+ start_at: now.beginning_of_year,
18
+ end_at: now.end_of_year,
19
+ required_score: 100,
20
+ all_steps_content: "<div>All Steps Content</div>",
21
+ start_content: "<div>Start Content</div>",
22
+ activities_content: "<div>Activities Content</div>",
23
+ submit_content: "<div>Submit Content</div>",
24
+ complete_content: "<div>Complete Content</div>"
25
+ )
26
+
27
+ # Professional Practice
28
+ category = Effective::CpdCategory.create!(
29
+ title: 'Professional Practice',
30
+ body: "A registrant who is actively practicing applied biology (performing technical work) or influencing (having some effect on how the professional is practiced) the practice of applied biology. <em>Note: Points claimed in this category cannot also be claimed under the Management category</em>",
31
+ )
32
+ Effective::CpdRule.create!(
33
+ cpd_cycle: cycle,
34
+ ruleable: category,
35
+ credit_description: 'Upto a maximum of 20 claimable points per CPD year. Points cannot be carried forward to future years.',
36
+ max_credits_per_cycle: 20
37
+ )
38
+
39
+ activity = Effective::CpdActivity.create!(
40
+ cpd_category: category,
41
+ position: 0,
42
+ title: 'Practicing applied biology',
43
+ amount_label: 'points',
44
+ )
45
+
46
+ Effective::CpdRule.create!(
47
+ cpd_cycle: cycle,
48
+ ruleable: activity,
49
+ formula: 'amount',
50
+ credit_description: '1 point equals 1 CPD point',
51
+ max_cycles_can_carry_forward: nil
52
+ )
53
+
54
+ activity = Effective::CpdActivity.create!(
55
+ cpd_category: category,
56
+ position: 1,
57
+ title: 'Influencing the practice of applied biology',
58
+ amount_label: 'points',
59
+ )
60
+ Effective::CpdRule.create!(
61
+ cpd_cycle: cycle,
62
+ ruleable: activity,
63
+ formula: 'amount',
64
+ credit_description: '1 point equals 1 CPD point',
65
+ max_cycles_can_carry_forward: nil
66
+ )
67
+
68
+ # Management
69
+ category = Effective::CpdCategory.create!(
70
+ title: 'Management',
71
+ body: "The management, evaluation, direction/supervision of professionals; and the management, evaluation and direction/management of projects or activities being carried out by professionals <em>Note: Points claimed in this category cannot also be claimed under the Professional Practice category.</em>",
72
+ )
73
+ Effective::CpdRule.create!(
74
+ cpd_cycle: cycle,
75
+ ruleable: category,
76
+ credit_description: 'Upto a maximum of 20 claimable points per CPD year. Points cannot be carried forward to future years.',
77
+ max_credits_per_cycle: 20
78
+ )
79
+
80
+ activity = Effective::CpdActivity.create!(
81
+ cpd_category: category,
82
+ position: 0,
83
+ title: 'Assessment and evaluation of professionals who are conducting applied biology',
84
+ body: "e.g. determining who is best for the particular work.",
85
+ amount_label: 'points',
86
+ )
87
+ Effective::CpdRule.create!(
88
+ cpd_cycle: cycle,
89
+ ruleable: activity,
90
+ formula: 'amount',
91
+ credit_description: '1 point equals 1 CPD point',
92
+ max_cycles_can_carry_forward: nil
93
+ )
94
+
95
+ activity = Effective::CpdActivity.create!(
96
+ cpd_category: category,
97
+ position: 1,
98
+ title: 'Overseeing projects or activities',
99
+ body: "e.g. reviewing professional documents being carried out by professionals.",
100
+ amount_label: 'points',
101
+ )
102
+ Effective::CpdRule.create!(
103
+ cpd_cycle: cycle,
104
+ ruleable: activity,
105
+ formula: 'amount',
106
+ credit_description: '1 point equals 1 CPD point',
107
+ max_cycles_can_carry_forward: nil
108
+ )
109
+
110
+ activity = Effective::CpdActivity.create!(
111
+ cpd_category: category,
112
+ position: 2,
113
+ title: 'Establishing financial (cost assessments) and time limits for projects, and scope of projects',
114
+ amount_label: 'points',
115
+ )
116
+ Effective::CpdRule.create!(
117
+ cpd_cycle: cycle,
118
+ ruleable: activity,
119
+ formula: 'amount',
120
+ credit_description: '1 point equals 1 CPD point',
121
+ max_cycles_can_carry_forward: nil
122
+ )
123
+
124
+ activity = Effective::CpdActivity.create!(
125
+ cpd_category: category,
126
+ position: 3,
127
+ title: 'Other',
128
+ amount_label: 'points',
129
+ )
130
+ Effective::CpdRule.create!(
131
+ cpd_cycle: cycle,
132
+ ruleable: activity,
133
+ formula: 'amount',
134
+ credit_description: '1 point equals 1 CPD point',
135
+ max_cycles_can_carry_forward: nil
136
+ )
137
+
138
+ # Formal Learning
139
+ category = Effective::CpdCategory.create!(
140
+ title: 'Formal Learning',
141
+ body: "Learning that has academic or technical credit, and may include assignments or examinations to evaluate learning that assists a registrant in practicing due diligence with regards to clients and their professional requirements; and to maintain, enhance or to develop practice competence in areas of practice.",
142
+ )
143
+ Effective::CpdRule.create!(
144
+ cpd_cycle: cycle,
145
+ ruleable: category,
146
+ credit_description: 'Upto a maximum of 35 claimable points per CPD year. Points may be carried over upto a maximum of 2 years after the year in which they were earned.',
147
+ max_credits_per_cycle: 35
148
+ )
149
+
150
+ activity = Effective::CpdActivity.create!(
151
+ cpd_category: category,
152
+ title: 'From post-secondary education institutes, suppliers, employers, government or professional associations',
153
+ amount_label: 'points',
154
+ )
155
+ Effective::CpdRule.create!(
156
+ cpd_cycle: cycle,
157
+ ruleable: activity,
158
+ formula: 'amount',
159
+ credit_description: '1 point equals 1 CPD point',
160
+ max_cycles_can_carry_forward: 2
161
+ )
162
+
163
+ activity = Effective::CpdActivity.create!(
164
+ cpd_category: category,
165
+ position: 0,
166
+ title: 'Online, in classroom settings, a combination, or other methods',
167
+ amount_label: 'points',
168
+ )
169
+ Effective::CpdRule.create!(
170
+ cpd_cycle: cycle,
171
+ ruleable: activity,
172
+ formula: 'amount',
173
+ credit_description: '1 point equals 1 CPD point',
174
+ max_cycles_can_carry_forward: 2
175
+ )
176
+
177
+ # Informal Learning
178
+ category = Effective::CpdCategory.create!(
179
+ title: 'Informal Learning',
180
+ body: "Learning that has academic or technical credit, and may include assignments or examinations to evaluate learning that assists a registrant in practicing due diligence with regards to clients and their professional requirements; and to maintain, enhance or to develop practice competence in areas of practice.",
181
+ )
182
+ Effective::CpdRule.create!(
183
+ cpd_cycle: cycle,
184
+ ruleable: category,
185
+ credit_description: 'Upto a maximum of 15 claimable points per CPD year. Points may be carried over upto a maximum of 2 years after the year in which they were earned.',
186
+ max_credits_per_cycle: 15
187
+ )
188
+
189
+ activity = Effective::CpdActivity.create!(
190
+ cpd_category: category,
191
+ position: 1,
192
+ title: 'Self-directed studies',
193
+ amount_label: 'points',
194
+ )
195
+ Effective::CpdRule.create!(
196
+ cpd_cycle: cycle,
197
+ ruleable: activity,
198
+ formula: 'amount',
199
+ credit_description: '1 point equals 1 CPD point',
200
+ max_cycles_can_carry_forward: 2
201
+ )
202
+
203
+ activity = Effective::CpdActivity.create!(
204
+ cpd_category: category,
205
+ position: 2,
206
+ title: 'Attendance at conferences, seminars, workshops, technical presentations, clinics',
207
+ amount_label: 'points',
208
+ )
209
+ Effective::CpdRule.create!(
210
+ cpd_cycle: cycle,
211
+ ruleable: activity,
212
+ formula: 'amount',
213
+ credit_description: '1 point equals 1 CPD point',
214
+ max_cycles_can_carry_forward: 2
215
+ )
216
+
217
+ activity = Effective::CpdActivity.create!(
218
+ cpd_category: category,
219
+ position: 3,
220
+ title: 'Formalized and structured on the job training',
221
+ amount_label: 'points',
222
+ )
223
+ Effective::CpdRule.create!(
224
+ cpd_cycle: cycle,
225
+ ruleable: activity,
226
+ formula: 'amount',
227
+ credit_description: '1 point equals 1 CPD point',
228
+ max_cycles_can_carry_forward: 2
229
+ )
230
+
231
+ activity = Effective::CpdActivity.create!(
232
+ cpd_category: category,
233
+ position: 4,
234
+ title: 'Attendance at meetings of technical, professional or managerial associations or societies',
235
+ amount_label: 'points',
236
+ )
237
+ Effective::CpdRule.create!(
238
+ cpd_cycle: cycle,
239
+ ruleable: activity,
240
+ formula: 'amount',
241
+ credit_description: '1 point equals 1 CPD point',
242
+ max_cycles_can_carry_forward: 2
243
+ )
244
+
245
+ activity = Effective::CpdActivity.create!(
246
+ cpd_category: category,
247
+ position: 5,
248
+ title: 'Structured discussion of technical or professional issues with peers',
249
+ amount_label: 'points',
250
+ )
251
+ Effective::CpdRule.create!(
252
+ cpd_cycle: cycle,
253
+ ruleable: activity,
254
+ formula: 'amount',
255
+ credit_description: '1 point equals 1 CPD point',
256
+ max_cycles_can_carry_forward: 2
257
+ )
258
+
259
+ # Presentations
260
+ category = Effective::CpdCategory.create!(
261
+ title: 'Presentations',
262
+ body: "<div>Lecture/talk/speech that is of a technical and/or professional nature that are outside the normal daily job function(s)</div>",
263
+ )
264
+ Effective::CpdRule.create!(
265
+ cpd_cycle: cycle,
266
+ ruleable: category,
267
+ credit_description: 'Upto a maximum of 15 claimable points per CPD year. Points may be carried over upto a maximum of 2 years after the year in which they were earned.',
268
+ max_credits_per_cycle: 15
269
+ )
270
+
271
+ activity = Effective::CpdActivity.create!(
272
+ cpd_category: category,
273
+ position: 0,
274
+ title: 'Conference, symposium, workshop, seminar meeting, course, training session, lunch presentations',
275
+ amount_label: 'points',
276
+ )
277
+ Effective::CpdRule.create!(
278
+ cpd_cycle: cycle,
279
+ ruleable: activity,
280
+ formula: 'amount',
281
+ credit_description: '1 point equals 1 CPD point',
282
+ max_cycles_can_carry_forward: 2
283
+ )
284
+
285
+ activity = Effective::CpdActivity.create!(
286
+ cpd_category: category,
287
+ position: 1,
288
+ title: 'Post-secondary education institutes, employers, government, professional associations, public organizations',
289
+ amount_label: 'points',
290
+ )
291
+ Effective::CpdRule.create!(
292
+ cpd_cycle: cycle,
293
+ ruleable: activity,
294
+ formula: 'amount',
295
+ credit_description: '1 point equals 1 CPD point',
296
+ max_cycles_can_carry_forward: 2
297
+ )
298
+
299
+ activity = Effective::CpdActivity.create!(
300
+ cpd_category: category,
301
+ position: 2,
302
+ title: 'Other',
303
+ amount_label: 'points',
304
+ )
305
+ Effective::CpdRule.create!(
306
+ cpd_cycle: cycle,
307
+ ruleable: activity,
308
+ formula: 'amount',
309
+ credit_description: '1 point equals 1 CPD point',
310
+ max_cycles_can_carry_forward: 2
311
+ )
312
+
313
+ # Contributions to Knowledge
314
+ category = Effective::CpdCategory.create!(
315
+ title: 'Contributions to Knowledge',
316
+ body: "Activities which expand or develop new biological and/or technical/scientific knowledge in the biological profession are recognized that are outside the normal daily job function(s).",
317
+ )
318
+ Effective::CpdRule.create!(
319
+ cpd_cycle: cycle,
320
+ ruleable: category,
321
+ credit_description: 'Upto a maximum of 30 claimable points per CPD year. Points may be carried over upto a maximum of 2 years after the year in which they were earned.',
322
+ max_credits_per_cycle: 30
323
+ )
324
+
325
+ activity = Effective::CpdActivity.create!(
326
+ cpd_category: category,
327
+ position: 0,
328
+ title: 'Development of published standards, practices, codes',
329
+ amount_label: 'standard, practice, code',
330
+ )
331
+ Effective::CpdRule.create!(
332
+ cpd_cycle: cycle,
333
+ ruleable: activity,
334
+ formula: '10 * amount',
335
+ credit_description: '1 publication equals 10 CPD points',
336
+ max_credits_per_cycle: 10,
337
+ max_cycles_can_carry_forward: 2
338
+ )
339
+
340
+ activity = Effective::CpdActivity.create!(
341
+ cpd_category: category,
342
+ position: 1,
343
+ title: 'Development of published policy(ies), reference(s), guidelines(s), guidance(s)',
344
+ amount_label: 'standard, practice, guideline',
345
+ )
346
+ Effective::CpdRule.create!(
347
+ cpd_cycle: cycle,
348
+ ruleable: activity,
349
+ formula: '10 * amount',
350
+ credit_description: '1 publication equals 10 CPD points',
351
+ max_credits_per_cycle: 10,
352
+ max_cycles_can_carry_forward: 2
353
+ )
354
+
355
+ activity = Effective::CpdActivity.create!(
356
+ cpd_category: category,
357
+ position: 2,
358
+ title: 'Publication of papers in scientific peer-reviewed journals',
359
+ amount_label: 'hour',
360
+ )
361
+ Effective::CpdRule.create!(
362
+ cpd_cycle: cycle,
363
+ ruleable: activity,
364
+ formula: 'amount',
365
+ credit_description: '1 hour equals 1 CPD point',
366
+ max_credits_per_cycle: 15,
367
+ max_cycles_can_carry_forward: 2
368
+ )
369
+
370
+ activity = Effective::CpdActivity.create!(
371
+ cpd_category: category,
372
+ position: 3,
373
+ title: 'Publication of articles in non-peer-reviewed journals',
374
+ amount_label: 'article',
375
+ )
376
+ Effective::CpdRule.create!(
377
+ cpd_cycle: cycle,
378
+ ruleable: activity,
379
+ formula: '5 * amount',
380
+ credit_description: '1 article equals 5 CPD point',
381
+ max_credits_per_cycle: 10,
382
+ max_cycles_can_carry_forward: 2
383
+ )
384
+
385
+ activity = Effective::CpdActivity.create!(
386
+ cpd_category: category,
387
+ position: 4,
388
+ title: 'Publication of a books, a book chapter',
389
+ amount_label: 'book or book chapter',
390
+ )
391
+ Effective::CpdRule.create!(
392
+ cpd_cycle: cycle,
393
+ ruleable: activity,
394
+ formula: '10 * amount',
395
+ credit_description: '1 book or book chapter equals 10 CPD point',
396
+ max_credits_per_cycle: 10,
397
+ max_cycles_can_carry_forward: 2
398
+ )
399
+
400
+ activity = Effective::CpdActivity.create!(
401
+ cpd_category: category,
402
+ position: 5,
403
+ title: 'Peer-review of manuscripts for a scientific journal',
404
+ amount_label: 'hour',
405
+ )
406
+ Effective::CpdRule.create!(
407
+ cpd_cycle: cycle,
408
+ ruleable: activity,
409
+ formula: 'amount',
410
+ credit_description: '1 hour equals 1 CPD point',
411
+ max_credits_per_cycle: 10,
412
+ max_cycles_can_carry_forward: 2
413
+ )
414
+
415
+ # Service to the Community and the Profession
416
+ category = Effective::CpdCategory.create!(
417
+ title: 'Service to the Community and the Profession',
418
+ body: "Activities that promote peer interaction, provide exposure to new ideas and technologies; enhance the profession and serve the public interest.",
419
+ )
420
+ Effective::CpdRule.create!(
421
+ cpd_cycle: cycle,
422
+ ruleable: category,
423
+ credit_description: 'Upto a maximum of 10 points per mentee or position per CPD year. Points may be carried over upto a maximum of 2 years after the year in which they were earned.',
424
+ max_credits_per_cycle: nil
425
+ )
426
+
427
+ activity = Effective::CpdActivity.create!(
428
+ cpd_category: category,
429
+ position: 0,
430
+ title: 'Appointment as a mentor to an in-training registrant, a less experienced applied biology professional, student',
431
+ amount_label: 'mentee',
432
+ )
433
+ Effective::CpdRule.create!(
434
+ cpd_cycle: cycle,
435
+ ruleable: activity,
436
+ formula: '10 * amount',
437
+ credit_description: '1 mentee equals 10 CPD point',
438
+ max_credits_per_cycle: nil,
439
+ max_cycles_can_carry_forward: 2
440
+ )
441
+
442
+ activity = Effective::CpdActivity.create!(
443
+ cpd_category: category,
444
+ position: 1,
445
+ title: 'Service as an appointed and/or elected biology professional on a public, government, non-government and non-profit organization Board, Council, Committee, Working group etc.',
446
+ amount_label: 'appointed position',
447
+ )
448
+ Effective::CpdRule.create!(
449
+ cpd_cycle: cycle,
450
+ ruleable: activity,
451
+ formula: '10 * amount',
452
+ credit_description: '1 appointed position equals 10 CPD point',
453
+ max_credits_per_cycle: nil,
454
+ max_cycles_can_carry_forward: 2
455
+ )
456
+
457
+ activity = Effective::CpdActivity.create!(
458
+ cpd_category: category,
459
+ position: 2,
460
+ title: 'Other',
461
+ amount_label: 'point',
462
+ )
463
+ Effective::CpdRule.create!(
464
+ cpd_cycle: cycle,
465
+ ruleable: activity,
466
+ formula: 'amount',
467
+ credit_description: '1 point equals 1 CPD point',
468
+ max_credits_per_cycle: nil,
469
+ max_cycles_can_carry_forward: 2
470
+ )
471
+
472
+ puts "All Done"