effective_cpd 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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"