dscf-credit 0.1.4 → 0.1.5
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.
- checksums.yaml +4 -4
- data/app/controllers/concerns/dscf/core/copilot-instructions.md +683 -0
- data/app/controllers/concerns/dscf/core/reviewable_controller.rb +347 -0
- data/app/controllers/dscf/credit/categories_controller.rb +3 -3
- data/app/controllers/dscf/credit/credit_lines_controller.rb +21 -13
- data/app/controllers/dscf/credit/eligible_credit_lines_controller.rb +50 -8
- data/app/controllers/dscf/credit/facilitator_applications_controller.rb +35 -0
- data/app/controllers/dscf/credit/facilitators_controller.rb +8 -96
- data/app/controllers/dscf/credit/loan_applications_controller.rb +252 -0
- data/app/controllers/dscf/credit/loan_profiles_controller.rb +61 -68
- data/app/controllers/dscf/credit/payment_requests_controller.rb +3 -5
- data/app/controllers/dscf/credit/scoring_parameters_controller.rb +59 -13
- data/app/controllers/dscf/credit/system_configs_controller.rb +30 -12
- data/app/models/concerns/core/reviewable_model.rb +31 -0
- data/app/models/dscf/credit/bank.rb +3 -3
- data/app/models/dscf/credit/bank_branch.rb +1 -1
- data/app/models/dscf/credit/category.rb +1 -2
- data/app/models/dscf/credit/credit_line.rb +4 -10
- data/app/models/dscf/credit/eligible_credit_line.rb +2 -2
- data/app/models/dscf/credit/facilitator.rb +6 -17
- data/app/models/dscf/credit/facilitator_application.rb +20 -0
- data/app/models/dscf/credit/loan_application.rb +30 -0
- data/app/models/dscf/credit/loan_profile.rb +10 -30
- data/app/models/dscf/credit/parameter_normalizer.rb +1 -1
- data/app/models/dscf/credit/scoring_parameter.rb +5 -7
- data/app/models/dscf/credit/system_config.rb +4 -9
- data/app/serializers/dscf/credit/category_serializer.rb +0 -1
- data/app/serializers/dscf/credit/credit_line_serializer.rb +2 -2
- data/app/serializers/dscf/credit/facilitator_application_serializer.rb +7 -0
- data/app/serializers/dscf/credit/facilitator_serializer.rb +3 -6
- data/app/serializers/dscf/credit/loan_application_serializer.rb +12 -0
- data/app/serializers/dscf/credit/loan_profile_serializer.rb +3 -6
- data/app/serializers/dscf/credit/scoring_parameter_serializer.rb +3 -4
- data/app/serializers/dscf/credit/system_config_serializer.rb +2 -2
- data/app/services/dscf/credit/credit_scoring_engine.rb +258 -0
- data/app/services/dscf/credit/facility_limit_calculation_engine.rb +159 -0
- data/app/services/dscf/credit/loan_profile_creation_service.rb +91 -0
- data/app/services/dscf/credit/risk_application_service.rb +61 -11
- data/config/locales/en.yml +63 -48
- data/config/routes.rb +31 -17
- data/db/migrate/20250822091131_create_dscf_credit_credit_lines.rb +1 -8
- data/db/migrate/20250822091820_create_dscf_credit_system_configs.rb +0 -7
- data/db/migrate/20250822092050_create_dscf_credit_scoring_parameters.rb +2 -6
- data/db/migrate/20250822092225_create_dscf_credit_parameter_normalizers.rb +1 -1
- data/db/migrate/20250822092236_create_dscf_credit_loan_applications.rb +20 -0
- data/db/migrate/20250822092246_create_dscf_credit_loan_profiles.rb +7 -19
- data/db/migrate/20250822092426_create_dscf_credit_facilitator_applications.rb +10 -0
- data/db/migrate/20250822092436_create_dscf_credit_facilitators.rb +1 -16
- data/db/seeds.rb +316 -203
- data/lib/dscf/credit/version.rb +1 -1
- data/spec/factories/dscf/credit/banks.rb +1 -1
- data/spec/factories/dscf/credit/credit_lines.rb +0 -23
- data/spec/factories/dscf/credit/facilitator_applications.rb +37 -0
- data/spec/factories/dscf/credit/facilitators.rb +8 -30
- data/spec/factories/dscf/credit/loan_applications.rb +42 -0
- data/spec/factories/dscf/credit/loan_profiles.rb +20 -34
- data/spec/factories/dscf/credit/parameter_normalizers.rb +4 -4
- data/spec/factories/dscf/credit/scoring_parameters.rb +14 -11
- data/spec/factories/dscf/credit/system_configs.rb +21 -5
- metadata +20 -10
- data/app/controllers/concerns/dscf/credit/reviewable.rb +0 -112
- data/app/controllers/dscf/credit/scoring_tables_controller.rb +0 -63
- data/app/models/dscf/credit/scoring_table.rb +0 -24
- data/app/serializers/dscf/credit/scoring_table_serializer.rb +0 -9
- data/db/migrate/20250901172842_create_dscf_credit_scoring_tables.rb +0 -18
- data/spec/factories/dscf/credit/scoring_tables.rb +0 -25
@@ -1,63 +0,0 @@
|
|
1
|
-
module Dscf::Credit
|
2
|
-
class ScoringTablesController < ApplicationController
|
3
|
-
include Dscf::Core::Common
|
4
|
-
|
5
|
-
def create
|
6
|
-
super do
|
7
|
-
scoring_table = @clazz.new(model_params)
|
8
|
-
scoring_table.created_by = current_user
|
9
|
-
scoring_table
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def activate
|
14
|
-
@obj = @clazz.find(params[:id])
|
15
|
-
if @obj.update(active: true)
|
16
|
-
render_success(data: @obj, serializer_options: { include: [ :category, :scoring_parameter, :created_by ] })
|
17
|
-
else
|
18
|
-
render_error(errors: @obj.errors.full_messages[0], status: :unprocessable_entity)
|
19
|
-
end
|
20
|
-
rescue StandardError => e
|
21
|
-
render_error(error: e.message)
|
22
|
-
end
|
23
|
-
|
24
|
-
def deactivate
|
25
|
-
@obj = @clazz.find(params[:id])
|
26
|
-
if @obj.update(active: false)
|
27
|
-
render_success(data: @obj, serializer_options: { include: [ :category, :scoring_parameter, :created_by ] })
|
28
|
-
else
|
29
|
-
render_error(errors: @obj.errors.full_messages[0], status: :unprocessable_entity)
|
30
|
-
end
|
31
|
-
rescue StandardError => e
|
32
|
-
render_error(error: e.message)
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def model_params
|
38
|
-
params.require(:scoring_table).permit(
|
39
|
-
:category_id,
|
40
|
-
:scoring_parameter_id,
|
41
|
-
:weight,
|
42
|
-
:active
|
43
|
-
)
|
44
|
-
end
|
45
|
-
|
46
|
-
def eager_loaded_associations
|
47
|
-
[ :category, :scoring_parameter, :created_by ]
|
48
|
-
end
|
49
|
-
|
50
|
-
def allowed_order_columns
|
51
|
-
%w[id weight active created_at updated_at]
|
52
|
-
end
|
53
|
-
|
54
|
-
def default_serializer_includes
|
55
|
-
{
|
56
|
-
index: [ :category, :scoring_parameter, :created_by ],
|
57
|
-
show: [ :category, :scoring_parameter, :created_by ],
|
58
|
-
create: [ :category, :scoring_parameter, :created_by ],
|
59
|
-
update: [ :category, :scoring_parameter, :created_by ]
|
60
|
-
}
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Dscf::Credit
|
2
|
-
class ScoringTable < ApplicationRecord
|
3
|
-
self.table_name = "dscf_credit_scoring_tables"
|
4
|
-
|
5
|
-
belongs_to :category, class_name: "Dscf::Credit::Category", foreign_key: "category_id"
|
6
|
-
belongs_to :scoring_parameter, class_name: "Dscf::Credit::ScoringParameter", foreign_key: "scoring_parameter_id"
|
7
|
-
belongs_to :created_by, polymorphic: true
|
8
|
-
|
9
|
-
validates :weight, presence: true, numericality: { greater_than: 0, less_than_or_equal_to: 1 }
|
10
|
-
validates :category_id, uniqueness: { scope: :scoring_parameter_id }
|
11
|
-
|
12
|
-
scope :active, -> { where(active: true) }
|
13
|
-
scope :by_category, ->(category_id) { where(category_id: category_id) }
|
14
|
-
scope :by_scoring_parameter, ->(scoring_parameter_id) { where(scoring_parameter_id: scoring_parameter_id) }
|
15
|
-
|
16
|
-
def self.ransackable_attributes(auth_object = nil)
|
17
|
-
%w[id weight active created_at updated_at]
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.ransackable_associations(auth_object = nil)
|
21
|
-
%w[category scoring_parameter created_by]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
module Dscf::Credit
|
2
|
-
class ScoringTableSerializer < ActiveModel::Serializer
|
3
|
-
attributes :id, :weight, :active, :created_at, :updated_at
|
4
|
-
|
5
|
-
belongs_to :category, serializer: Dscf::Credit::CategorySerializer
|
6
|
-
belongs_to :scoring_parameter, serializer: Dscf::Credit::ScoringParameterSerializer
|
7
|
-
belongs_to :created_by, serializer: Dscf::Core::UserSerializer
|
8
|
-
end
|
9
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
class CreateDscfCreditScoringTables < ActiveRecord::Migration[8.0]
|
2
|
-
def change
|
3
|
-
create_table :dscf_credit_scoring_tables do |t|
|
4
|
-
t.references :category, null: false, foreign_key: { to_table: :dscf_credit_categories }
|
5
|
-
t.references :scoring_parameter, null: false, foreign_key: { to_table: :dscf_credit_scoring_parameters }
|
6
|
-
t.decimal :weight, precision: 5, scale: 4, null: false
|
7
|
-
t.boolean :active, default: true
|
8
|
-
t.references :created_by, polymorphic: true, null: false
|
9
|
-
|
10
|
-
t.timestamps
|
11
|
-
end
|
12
|
-
|
13
|
-
add_index :dscf_credit_scoring_tables, :weight
|
14
|
-
add_index :dscf_credit_scoring_tables, :active
|
15
|
-
add_index :dscf_credit_scoring_tables, [ :created_by_type, :created_by_id ]
|
16
|
-
add_index :dscf_credit_scoring_tables, [ :category_id, :scoring_parameter_id ], unique: true, name: 'index_scoring_tables_on_category_and_scoring_parameter'
|
17
|
-
end
|
18
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
FactoryBot.define do
|
2
|
-
factory :scoring_table, class: "Dscf::Credit::ScoringTable" do
|
3
|
-
association :category, factory: :category
|
4
|
-
association :scoring_parameter, factory: :scoring_parameter
|
5
|
-
association :created_by, factory: :user if defined?(Dscf::Core::User)
|
6
|
-
weight { Faker::Number.decimal(l_digits: 0, r_digits: 4).clamp(0.0001, 1.0) }
|
7
|
-
active { true }
|
8
|
-
|
9
|
-
trait :inactive do
|
10
|
-
active { false }
|
11
|
-
end
|
12
|
-
|
13
|
-
trait :high_weight do
|
14
|
-
weight { Faker::Number.decimal(l_digits: 0, r_digits: 4).clamp(0.7, 1.0) }
|
15
|
-
end
|
16
|
-
|
17
|
-
trait :medium_weight do
|
18
|
-
weight { Faker::Number.decimal(l_digits: 0, r_digits: 4).clamp(0.3, 0.7) }
|
19
|
-
end
|
20
|
-
|
21
|
-
trait :low_weight do
|
22
|
-
weight { Faker::Number.decimal(l_digits: 0, r_digits: 4).clamp(0.0001, 0.3) }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|