From 0464ba8929eb33045ce2459d2ffe8e284a2e37d3 Mon Sep 17 00:00:00 2001 From: Jason Jordan Date: Wed, 10 Dec 2025 13:22:33 -0500 Subject: [PATCH] Employer form mostly working with persist to db --- Gemfile | 4 +- Gemfile.lock | 13 + app/assets/tailwind/application.css | 2 + app/controllers/employer_setup_controller.rb | 112 +-- .../employer_setup_controller_forms.rb | 244 +++++ .../employer_setup_controller_old.rb | 4 +- app/form_builders/tailwind_form_builder.rb | 2 +- app/forms/employer_setup_form.rb | 27 +- ...employer_setup_general_information_form.rb | 114 ++- .../employer_setup_network_exceptions_form.rb | 44 +- app/forms/employer_setup_plans_form.rb | 72 +- .../add_alt_network_logo_controller.js | 7 +- .../add_network_exception_controller.js | 22 +- .../controllers/add_plan_controller.js | 6 + app/models/alternative_network_logo.rb | 16 + app/models/britton_web/sample_id_cards.rb | 83 ++ app/models/card_logo_file.rb | 3 + app/models/employer_setup_process.rb | 53 +- app/models/id_card_benefits_template.rb | 2 +- app/models/plan.rb | 9 +- app/models/vhcs/hl_egg_id_card_dependent.rb | 13 + app/models/vhcs/hlid_card_provider.rb | 48 + app/models/vhcs/hlid_cards_egg.rb | 25 + .../map_employer_information.rb | 72 ++ .../benefits_word_doc/map_employer_logo.rb | 28 + .../map_plans_information.rb | 149 +++ app/services/benefits_word_doc_processor.rb | 140 +-- .../benefits_word_doc_processor_old.rb | 163 ++++ app/services/sample_card/data_formatter.rb | 81 ++ .../sample_card/jasper_pdf_generator.rb | 21 + .../sample_card/jasper_url_generator.rb | 39 + app/services/sample_card/pdf_printer.rb | 27 + .../_alt_network_logo_fields.html.erb | 37 + .../_first_plan_fields.html.erb | 23 + .../_plan_benefit_only_fields.erb | 4 + .../_plan_benefits_desc_fields.html.erb | 3 + .../_plan_benefits_fields.html.erb | 5 + .../employer_setup/_plan_fields.html.erb | 11 + .../employer_information.html.erb | 136 +++ .../general_information.html.erb | 8 +- .../network_exceptions.html.erb | 12 +- app/views/employer_setup/plans.html.erb | 3 +- app/views/layouts/application.html.erb | 7 +- app/views/welcome/index.html.erb | 6 +- app/views/welcome/tailwind_colors.html.erb | 17 + card_FairosRxIDCard.jrxml | 878 ++++++++++++++++++ card_view.sql | 199 ++++ config/application.rb | 2 +- config/routes.rb | 2 +- ...rk_provider_to_employer_setup_processes.rb | 5 + ...etwork_logo_to_employer_setup_processes.rb | 7 + ...go_filename_on_employer_setup_processes.rb | 6 + .../20251205091559_create_network_logos.rb | 12 + .../20251205145750_create_card_logo_files.rb | 12 + ...pl_plan_key_to_employer_setup_processes.rb | 5 + .../20251205215553_add_plan_id_to_plan.rb | 5 + ...loyer_set_up_process_to_card_logo_files.rb | 5 + db/schema.rb | 110 ++- db/seeds.rb | 48 +- scratch.rb | 132 +++ spec/helpers/id_card_employers_helper_spec.rb | 15 + spec/requests/id_card_employers_spec.rb | 46 + .../create.html.tailwindcss_spec.rb | 5 + .../edit.html.tailwindcss_spec.rb | 5 + .../index.html.tailwindcss_spec.rb | 5 + .../new.html.tailwindcss_spec.rb | 5 + .../show.html.tailwindcss_spec.rb | 5 + .../update.html.tailwindcss_spec.rb | 5 + 68 files changed, 3071 insertions(+), 365 deletions(-) create mode 100644 app/controllers/employer_setup_controller_forms.rb create mode 100644 app/models/alternative_network_logo.rb create mode 100644 app/models/britton_web/sample_id_cards.rb create mode 100644 app/models/card_logo_file.rb create mode 100644 app/models/vhcs/hl_egg_id_card_dependent.rb create mode 100644 app/models/vhcs/hlid_card_provider.rb create mode 100644 app/models/vhcs/hlid_cards_egg.rb create mode 100644 app/services/benefits_word_doc/map_employer_information.rb create mode 100644 app/services/benefits_word_doc/map_employer_logo.rb create mode 100644 app/services/benefits_word_doc/map_plans_information.rb create mode 100644 app/services/benefits_word_doc_processor_old.rb create mode 100644 app/services/sample_card/data_formatter.rb create mode 100644 app/services/sample_card/jasper_pdf_generator.rb create mode 100644 app/services/sample_card/jasper_url_generator.rb create mode 100644 app/services/sample_card/pdf_printer.rb create mode 100644 app/views/employer_setup/_alt_network_logo_fields.html.erb create mode 100644 app/views/employer_setup/_first_plan_fields.html.erb create mode 100644 app/views/employer_setup/_plan_benefit_only_fields.erb create mode 100644 app/views/employer_setup/_plan_benefits_desc_fields.html.erb create mode 100644 app/views/employer_setup/_plan_benefits_fields.html.erb create mode 100644 app/views/employer_setup/_plan_fields.html.erb create mode 100644 app/views/employer_setup/employer_information.html.erb create mode 100644 app/views/welcome/tailwind_colors.html.erb create mode 100644 card_FairosRxIDCard.jrxml create mode 100644 card_view.sql create mode 100644 db/migrate/20251203143745_add_network_provider_to_employer_setup_processes.rb create mode 100644 db/migrate/20251204151226_add_network_logo_to_employer_setup_processes.rb create mode 100644 db/migrate/20251204151452_rename_logo_filename_on_employer_setup_processes.rb create mode 100644 db/migrate/20251205091559_create_network_logos.rb create mode 100644 db/migrate/20251205145750_create_card_logo_files.rb create mode 100644 db/migrate/20251205150421_add_pl_plan_key_to_employer_setup_processes.rb create mode 100644 db/migrate/20251205215553_add_plan_id_to_plan.rb create mode 100644 db/migrate/20251209182135_add_employer_set_up_process_to_card_logo_files.rb create mode 100644 spec/helpers/id_card_employers_helper_spec.rb create mode 100644 spec/requests/id_card_employers_spec.rb create mode 100644 spec/views/id_card_employers/create.html.tailwindcss_spec.rb create mode 100644 spec/views/id_card_employers/edit.html.tailwindcss_spec.rb create mode 100644 spec/views/id_card_employers/index.html.tailwindcss_spec.rb create mode 100644 spec/views/id_card_employers/new.html.tailwindcss_spec.rb create mode 100644 spec/views/id_card_employers/show.html.tailwindcss_spec.rb create mode 100644 spec/views/id_card_employers/update.html.tailwindcss_spec.rb diff --git a/Gemfile b/Gemfile index c5158b1..9b53888 100644 --- a/Gemfile +++ b/Gemfile @@ -83,4 +83,6 @@ gem 'devise' gem 'pundit' gem "tailwindcss-rails" gem 'docx' -gem 'rubyzip' \ No newline at end of file +gem 'rubyzip' +gem 'httparty' +gem 'combine_pdf' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 556d740..d440807 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,9 +104,13 @@ GEM xpath (~> 3.2) cgi (0.5.0) coderay (1.1.3) + combine_pdf (1.0.31) + matrix + ruby-rc4 (>= 0.1.5) concurrent-ruby (1.3.5) connection_pool (2.5.4) crass (1.0.6) + csv (3.3.5) date (3.5.0) devise (4.9.4) bcrypt (~> 3.0) @@ -123,6 +127,10 @@ GEM erubi (1.13.1) globalid (1.3.0) activesupport (>= 6.1) + httparty (0.23.2) + csv + mini_mime (>= 1.0.0) + multi_xml (>= 0.5.2) i18n (1.14.7) concurrent-ruby (~> 1.0) importmap-rails (2.2.2) @@ -156,6 +164,8 @@ GEM mini_mime (1.1.5) minitest (5.26.0) msgpack (1.8.0) + multi_xml (0.7.2) + bigdecimal (~> 3.1) net-imap (0.5.12) date net-protocol @@ -308,6 +318,7 @@ GEM lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) ruby-progressbar (1.13.0) + ruby-rc4 (0.1.5) rubyzip (3.2.2) securerandom (0.4.1) selenium-webdriver (4.38.0) @@ -391,8 +402,10 @@ DEPENDENCIES brakeman bundler-audit capybara + combine_pdf devise docx + httparty importmap-rails jbuilder pry-rails diff --git a/app/assets/tailwind/application.css b/app/assets/tailwind/application.css index ec15974..f2e87b0 100644 --- a/app/assets/tailwind/application.css +++ b/app/assets/tailwind/application.css @@ -33,4 +33,6 @@ --color-verdigris: #588288; /* oxidized copper/bronze green-blue */ --color-verdigris-tinted: #496A6F; + /* alert red */ + --color-brightlava: #f80800; } diff --git a/app/controllers/employer_setup_controller.rb b/app/controllers/employer_setup_controller.rb index ee37a22..50ecdd6 100644 --- a/app/controllers/employer_setup_controller.rb +++ b/app/controllers/employer_setup_controller.rb @@ -1,90 +1,22 @@ class EmployerSetupController < ApplicationController def new - # session.delete(:employer_setup_data) - session.clear() - # puts "Start" - # puts session[:employer_setup_data] - if session[:employer_setup_data].blank? - session[:employer_setup_data] = {} - end - session[:employer_setup_data]['current_step'] = 'network_exceptions' - session[:employer_setup_data]['pl_plan_key'] = 82 - @top_form = EmployerSetupForm.new(session[:employer_setup_data]) - if @top_form.current_step != 'summary' - @form = form_for_step - else - @form = @top_form - end - - # case @top_form.current_step - # when 'general_information' - # @form = EmployerSetupGeneralInformationForm.new(session[:employer_setup_data]&.dig('general_information_data')) - # when 'plans' - # @form = EmployerSetupPlansForm.new(session[:employer_setup_data]&.dig('plans_data')) - # when 'network_exceptions' - # @form = EmployerSetupNetworkExceptionsForm.new(session[:employer_setup_data]&.dig('network_exceptions_data')) - # when 'summary' - # @form = @top_form - # end - render @top_form.current_step_view + @employer_setup = EmployerSetupProcess.new + @employer_setup.plans.build + @plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK") + render 'employer_setup/employer_information' end def create - # puts session[:employer_setup_data] - @top_form = EmployerSetupForm.new(session[:employer_setup_data]) - if @top_form.current_step != 'summary' - if process_step(@top_form.current_step) - session[:employer_setup_data]['current_step'] = @top_form.next_step - redirect_to new_employer_setup_path - else - render @top_form.current_step_view - end + employer_setup_process_params = EmployerSetupProcess.permitted_params(params) + puts "---Params---" + puts employer_setup_process_params + @employer_setup = EmployerSetupProcess.new(employer_setup_process_params) + if @employer_setup.save + redirect_to @employer_setup, notice: 'Employer Setup Process initiated' else - if @top_form.save - session.delete(:employer_setup_data) - redirect_to root_path, notice: "Employer setup successfully!" - else - render @top_form.current_step_view - end + @plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK") + render 'employer_setup/employer_information' end - - # case @top_form.current_step - # when 'general_information' - # @form = EmployerSetupGeneralInformationForm.new(general_information_params) - # if @form.valid? - # session[:employer_setup_data]['general_information_data'] = general_information_params - # session[:employer_setup_data]['current_step'] = @top_form.next_step - # redirect_to new_employer_setup_path - # else - # render @top_form.current_step_view - # end - # when 'plans' - # @form = EmployerSetupPlansForm.new(plans_params) - # if @form.valid? - # session[:employer_setup_data]['plans_data'] = plans_params - # session[:employer_setup_data]['current_step'] = @top_form.next_step - # redirect_to new_employer_setup_path - # else - # render @top_form.current_step_view - # end - # when 'network_exceptions' - # @form = EmployerSetupNetworkExceptionsForm.new(network_exceptions_params) - # if @form.valid? - # session[:employer_setup_data]['network_exceptions_data'] = network_exceptions_params - # session[:employer_setup_data]['current_step'] = @top_form.next_step - # redirect_to new_employer_setup_path - # else - # render @top_form.current_step_view - # end - # when 'summary' - # @form = EmployerSetupForm.new(session[:employer_setup_data]) - # if @form.save - # session.delete(:employer_setup_data) - # redirect_to root_path, notice: "Employer setup successfully!" - # else - # render @top_form.current_step_view - # end - # end end def update @@ -131,23 +63,31 @@ class EmployerSetupController < ApplicationController def form_for_step step_name = @top_form.current_step form_method = "EmployerSetup#{step_name.camelize}Form".constantize - form_method.new() + # puts "/////\\\\\\||||||" + # puts session[:employer_setup_data] + # puts session[:employer_setup_data]['employer_setup_process_id'] + puts form_method + form_method.new(session[:employer_setup_data]['employer_setup_process_id']) end def process_step(step_name) @form_method = "EmployerSetup#{step_name.camelize}Form".constantize session_data_name = "#{step_name}_data" - puts "1--------------params----" + # puts "1--------------params----" + # puts params + # puts "8--------------session----" + # puts session[:employer_setup_data] + employer_setup_process_id = session[:employer_setup_data]['employer_setup_process_id'] + # puts session[:employer_setup_data] + puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" puts params - puts "8--------------session----" - puts session[:employer_setup_data] - @form = @form_method.new(params) + @form = @form_method.new(employer_setup_process_id, params) if @form.pl_plan_key.blank? @form.pl_plan_key = session[:employer_setup_data]['pl_plan_key'] end if @form.valid? && @form.save pl_plan_key = @top_form.pl_plan_key || @form.pl_plan_key - session[:employer_setup_data] = {current_step: step_name, pl_plan_key: pl_plan_key} + # session[:employer_setup_data].merge!({current_step: step_name, pl_plan_key: pl_plan_key}) # form_fields = @form.attributes.merge!(global_params(step_name)) # session[:employer_setup_data][session_data_name] = form_fields # session[:employer_setup_data].merge!(global_params(step_name)) diff --git a/app/controllers/employer_setup_controller_forms.rb b/app/controllers/employer_setup_controller_forms.rb new file mode 100644 index 0000000..63cb4fa --- /dev/null +++ b/app/controllers/employer_setup_controller_forms.rb @@ -0,0 +1,244 @@ +class EmployerSetupController < ApplicationController + def new + # session.delete(:employer_setup_data) + # session.clear() + # puts "Start" + # puts session[:employer_setup_data] + if session[:employer_setup_data].blank? + @process = EmployerSetupProcess.create(status: "form") + session[:employer_setup_data] = { "employer_setup_process_id" => @process.id } + + end + puts "-S--------------------------------------" + puts session[:employer_setup_data] + # session[:employer_setup_data]['current_step'] = 'plans' + + @top_form = EmployerSetupForm.new(session[:employer_setup_data]) + if @top_form.current_step != 'summary' + @form = form_for_step + else + @form = @top_form + end + + # case @top_form.current_step + # when 'general_information' + # @form = EmployerSetupGeneralInformationForm.new(session[:employer_setup_data]&.dig('general_information_data')) + # when 'plans' + # @form = EmployerSetupPlansForm.new(session[:employer_setup_data]&.dig('plans_data')) + # when 'network_exceptions' + # @form = EmployerSetupNetworkExceptionsForm.new(session[:employer_setup_data]&.dig('network_exceptions_data')) + # when 'summary' + # @form = @top_form + # end + render @top_form.current_step_view + end + + def create + # puts session[:employer_setup_data] + @top_form = EmployerSetupForm.new(session[:employer_setup_data]) + if @top_form.current_step != 'summary' + if process_step(@top_form.current_step) + session[:employer_setup_data]['current_step'] = @top_form.next_step + puts "---------------------------------------" + puts "pass" + puts "next - #{@top_form.next_step}" + puts session[:employer_setup_data] + puts "---------------------------------------" + redirect_to new_employer_setup_path + else + puts "fail" + render @top_form.current_step_view + end + else + if @top_form.save + session.delete(:employer_setup_data) + redirect_to root_path, notice: "Employer setup successfully!" + else + render @top_form.current_step_view + end + end + + # case @top_form.current_step + # when 'general_information' + # @form = EmployerSetupGeneralInformationForm.new(general_information_params) + # if @form.valid? + # session[:employer_setup_data]['general_information_data'] = general_information_params + # session[:employer_setup_data]['current_step'] = @top_form.next_step + # redirect_to new_employer_setup_path + # else + # render @top_form.current_step_view + # end + # when 'plans' + # @form = EmployerSetupPlansForm.new(plans_params) + # if @form.valid? + # session[:employer_setup_data]['plans_data'] = plans_params + # session[:employer_setup_data]['current_step'] = @top_form.next_step + # redirect_to new_employer_setup_path + # else + # render @top_form.current_step_view + # end + # when 'network_exceptions' + # @form = EmployerSetupNetworkExceptionsForm.new(network_exceptions_params) + # if @form.valid? + # session[:employer_setup_data]['network_exceptions_data'] = network_exceptions_params + # session[:employer_setup_data]['current_step'] = @top_form.next_step + # redirect_to new_employer_setup_path + # else + # render @top_form.current_step_view + # end + # when 'summary' + # @form = EmployerSetupForm.new(session[:employer_setup_data]) + # if @form.save + # session.delete(:employer_setup_data) + # redirect_to root_path, notice: "Employer setup successfully!" + # else + # render @top_form.current_step_view + # end + # end + end + + def update + @form = RegistrationForm.new(registration_params) + + if params[:back_button] + @form.current_step = @form.previous_step + elsif params[:skip_newsletter] + @form.current_step = @form.next_step # Skip newsletter step + end + + render :new + end + + private + + # def general_information_params + # params.require(:employer_setup_general_information_form).permit( + # :name, + # :employer_logo, + # :group_number, + # :dental, + # :pl_plan_key, + # :effect_date, + # :number_of_plans, + # :network, + # :number_of_additional_network_logos + # ) + # end + + # def plans_params + # params.require(:employer_setup_plans_form).permit( + # plans: permited_plans_keys, + # benefit_descs: benefit_sequence_keys + # ) + # end + + # def network_exceptions_params + # params.require(:employer_setup_network_exceptions_form).permit( + # network_exceptions: [:network_logo, exceptions: [:type, :value]], + # ) + # end + + def form_for_step + step_name = @top_form.current_step + form_method = "EmployerSetup#{step_name.camelize}Form".constantize + # puts "/////\\\\\\||||||" + # puts session[:employer_setup_data] + # puts session[:employer_setup_data]['employer_setup_process_id'] + puts form_method + form_method.new(session[:employer_setup_data]['employer_setup_process_id']) + end + + def process_step(step_name) + @form_method = "EmployerSetup#{step_name.camelize}Form".constantize + session_data_name = "#{step_name}_data" + # puts "1--------------params----" + # puts params + # puts "8--------------session----" + # puts session[:employer_setup_data] + employer_setup_process_id = session[:employer_setup_data]['employer_setup_process_id'] + # puts session[:employer_setup_data] + puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + puts params + @form = @form_method.new(employer_setup_process_id, params) + if @form.pl_plan_key.blank? + @form.pl_plan_key = session[:employer_setup_data]['pl_plan_key'] + end + if @form.valid? && @form.save + pl_plan_key = @top_form.pl_plan_key || @form.pl_plan_key + # session[:employer_setup_data].merge!({current_step: step_name, pl_plan_key: pl_plan_key}) + # form_fields = @form.attributes.merge!(global_params(step_name)) + # session[:employer_setup_data][session_data_name] = form_fields + # session[:employer_setup_data].merge!(global_params(step_name)) + # puts session[:employer_setup_data][session_data_name] + true + else + false + end + end + + def step_params(step_name) + form_name_sym = "employer_setup_#{step_name}_form".to_sym + params.require(form_name_sym).permit(@form_method.permitted_params) + end + + def global_params(step_name) + form_name_sym = "employer_setup_#{step_name}_form".to_sym + params.require(form_name_sym).permit(EmployerSetupForm.permitted_params) + end + + # def process_step(step_name) + # form_name = "employer_setup_#{step_name}_form".camelize.constantize + # form_params_name = "#{step_name}_params".to_sym + # allowed_params = [:general_information_params, :plans_params, :network_exceptions_params] + # if allowed_params.include?(form_params_name) + # form_params = send(form_params_name) + # @form = form_name.new(form_params) + # if @form.valid? + # session[:employer_setup_data]["#{step_name}_data"] = form_params + # true + # else + # false + # end + # end + # false + # end + + # def employer_setup_params + # params.require(:employer_setup_form).permit( + # :current_step, + # :name, + # :employer_logo, + # :group_number, + # :pl_plan_key, + # :effect_date, + # :number_of_plans, + # :network, + # :number_of_additional_network_logos, + # network_exceptions: [:network_logo, exceptions: [:type, :value]], + # plans: permited_plans_keys, + # benefit_descs: benefit_sequence_keys + # ) + # end + + # def benefit_sequence_keys + # (1..14).map { |i| i.to_s.to_sym } + # end + + # def permited_plans_keys + # benefit_sequence_keys.push(:plan_id) + # end + + # def plans_params + # plans_keys = params[:plans]&.keys || [] + + # plans_keys.each_with_object({}) do |key, hash| + # if key == 'benefit_descs' || key.match?(/^plan_\d$/) + # hash[key.to_sym] = permited_plan_param_list + # end + # end + # end + + # def permited_plan_param_list + # (1..14).map { |i| i.to_s.to_sym }.push(:plan_id) + # end +end diff --git a/app/controllers/employer_setup_controller_old.rb b/app/controllers/employer_setup_controller_old.rb index 6837bc4..98971c2 100644 --- a/app/controllers/employer_setup_controller_old.rb +++ b/app/controllers/employer_setup_controller_old.rb @@ -11,7 +11,7 @@ class EmployerSetupController < ApplicationController :name, :group_number, :pl_plan_key, - :effect_date + :effective_date )) @employer_data[:employer].merge!(params.permit(:number_of_plans)) @@ -54,7 +54,7 @@ class EmployerSetupController < ApplicationController # medical_number: @final_data['employer']['group_number'], # dental_number: ' ', # plan_key: @final_data['employer']['pl_plan_key'], - # effect_date: @final_data['employer']['effect_date'] + # effective_date: @final_data['employer']['effective_date'] # ) # default = Vhcs::HLRXCrosRef.find_by(pl_plan_key: 52) diff --git a/app/form_builders/tailwind_form_builder.rb b/app/form_builders/tailwind_form_builder.rb index b680ce2..26e0b6f 100644 --- a/app/form_builders/tailwind_form_builder.rb +++ b/app/form_builders/tailwind_form_builder.rb @@ -5,7 +5,7 @@ class TailwindFormBuilder < ActionView::Helpers::FormBuilder TEXT_FIELD_STYLE = "bg-gray-200 rounded py-2 px-4 text-bluetang font-semibold leading-tight focus:outline-none focus:bg-white".freeze SELECT_FIELD_STYLE = "block bg-gray-200 text-gray-700 py-2 px-4 rounded leading-tight focus:outline-none focus:bg-white".freeze - SUBMIT_BUTTON_STYLE = "shadow bg-bronze focus:shadow-outline focus:outline-none text-white font-bold py-2 px-4 rounded hover:bg-copper".freeze + SUBMIT_BUTTON_STYLE = "cursor-pointer shadow bg-bronze focus:shadow-outline focus:outline-none text-white font-bold py-2 px-4 rounded hover:bg-copper".freeze text_field_helpers.each do |field_method| class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 diff --git a/app/forms/employer_setup_form.rb b/app/forms/employer_setup_form.rb index 1d62965..c2561ec 100644 --- a/app/forms/employer_setup_form.rb +++ b/app/forms/employer_setup_form.rb @@ -6,12 +6,16 @@ class EmployerSetupForm attribute :current_step, :string, default: FIRST_STEP attribute :pl_plan_key, :string + attribute :employer_setup_process_id, :integer def initialize(params = {}) # if params.present? # params = permitted_params(params) # end + # @current_step = params["current_step"] + # @employer_setup_process_id = params["employer_setup_process_id"] super(params) + unless self.steps.first == FIRST_STEP raise StepMisalignmentError, "FIRST_STEP does not match first entry in steps" end @@ -53,7 +57,7 @@ class EmployerSetupForm end def permitted_params(params) - params.require(:employer_setup_data).permit( + params.permit( :pl_plan_key, :current_step ) @@ -66,15 +70,16 @@ class EmployerSetupForm ] end - # def save - # if valid? - # EmployerSetupGeneralInformationForm.new(attributes[:general_information_data]).save - # EmployerSetupPlansForm.new(attributes[:plans_data]).save - # EmployerSetupNetworkExceptionsForm.new(attributes[:network_exceptions_data]).save - # true - # else - # false - # end - # end + def save + if valid? + process = EmployerSetupProcess.find(@employer_setup_process_id) + process.update( + status: "entered" + ) + true + else + false + end + end end \ No newline at end of file diff --git a/app/forms/employer_setup_general_information_form.rb b/app/forms/employer_setup_general_information_form.rb index 66b714e..a438aec 100644 --- a/app/forms/employer_setup_general_information_form.rb +++ b/app/forms/employer_setup_general_information_form.rb @@ -7,16 +7,17 @@ class EmployerSetupGeneralInformationForm attribute :group_number, :string attribute :dental, :boolean, default: false attribute :pl_plan_key, :string - attribute :effect_date, :string + attribute :effective_date, :string # attribute :number_of_plans, :integer attribute :network, :string # attribute :number_of_additional_network_logos, :integer + attr_accessor :employer_setup_process_id + validates :name, presence: true validates :employer_logo, presence: true validates :group_number, presence: true - validates :pl_plan_key, presence: true - validates :effect_date, presence: true + validates :effective_date, presence: true # validates :number_of_plans, presence: true validates :network, presence: true # validates :number_of_additional_network_logos, presence: true if network = "cigna+" @@ -27,11 +28,27 @@ class EmployerSetupGeneralInformationForm # super(permitted_attributes) # end - def initialize(params = {}) + def initialize(employer_setup_process_id, params = {}) + @employer_setup_process_id = employer_setup_process_id if params.present? - params = permitted_params(params) + form_params = permitted_params(params) + super(form_params) + else + super(params) + load_from_process end - super(params) + end + + def load_from_process + process = EmployerSetupProcess.find(@employer_setup_process_id) + + self.name = process.employer_name + # self.employer_logo = process. + self.group_number = process.group_number + self.dental = false + self.pl_plan_key = process.pl_plan_key + self.effective_date = process.effective_date + self.network = process.network_provider end def permitted_params(params) @@ -41,7 +58,7 @@ class EmployerSetupGeneralInformationForm :group_number, :dental, :pl_plan_key, - :effect_date, + :effective_date, :number_of_plans, :network, :number_of_additional_network_logos @@ -52,48 +69,57 @@ class EmployerSetupGeneralInformationForm # Implement logic to save data to models after all steps are complete # For example, create a User record with the collected data if valid? - hl_plan_code = Vhcs::HlPlanCode.create!( + process = EmployerSetupProcess.find(@employer_setup_process_id) + process.update( + employer_name: name, group_number: group_number, - medical_number: group_number, - dental_number: '', - plan_key: pl_plan_key, - effect_date: effect_date - ) - - # Replace fairos_info with template like for benefits - fairos_info = Vhcs::HlrxCrosRef.where(pl_plan_key: 52).first - hlrx_cros_ref = Vhcs::HlrxCrosRef.create!( - group_no: group_number, - rx_group_id: group_number, - help_desk: fairos_info.help_desk, - customer_service: fairos_info.customer_service, - web_url: fairos_info.web_url, - pl_plan_key: pl_plan_key - ) - - web_employer = BrittonWeb::Employers.create!( - name: name, pl_plan_key: pl_plan_key, - dental_plan: dental, - single_card_template: 'FairosRxIDCard', - logo: employer_logo.original_filename + effective_date: effective_date, + network_provider: network ) - default_network_logo = - case - when network.include?("cig") - "CignaLogo.png" - when network.include?("med") - "Logo_MC_PMS.png" - else - "CignaLogo.png" - end + # hl_plan_code = Vhcs::HlPlanCode.create!( + # group_number: group_number, + # medical_number: group_number, + # dental_number: '', + # plan_key: pl_plan_key, + # effect_date: effective_date + # ) - BrittonWeb::NetworkLogos.create!( - employer_id: web_employer.id, - net_logo: default_network_logo, - default: true - ) + # # Replace fairos_info with template like for benefits + # fairos_info = Vhcs::HlrxCrosRef.where(pl_plan_key: 52).first + # hlrx_cros_ref = Vhcs::HlrxCrosRef.create!( + # group_no: group_number, + # rx_group_id: group_number, + # help_desk: fairos_info.help_desk, + # customer_service: fairos_info.customer_service, + # web_url: fairos_info.web_url, + # pl_plan_key: pl_plan_key + # ) + + # web_employer = BrittonWeb::Employers.create!( + # name: name, + # pl_plan_key: pl_plan_key, + # dental_plan: dental, + # single_card_template: 'FairosRxIDCard', + # logo: employer_logo.original_filename + # ) + + # default_network_logo = + # case + # when network.include?("cig") + # "CignaLogo.png" + # when network.include?("med") + # "Logo_MC_PMS.png" + # else + # "CignaLogo.png" + # end + + # BrittonWeb::NetworkLogos.create!( + # employer_id: web_employer.id, + # net_logo: default_network_logo, + # default: true + # ) true else diff --git a/app/forms/employer_setup_network_exceptions_form.rb b/app/forms/employer_setup_network_exceptions_form.rb index a254be5..f9f71de 100644 --- a/app/forms/employer_setup_network_exceptions_form.rb +++ b/app/forms/employer_setup_network_exceptions_form.rb @@ -5,15 +5,20 @@ class EmployerSetupNetworkExceptionsForm Network_exception = Struct.new(:network_logo, :exceptions) attribute :network_exceptions, :array_of_items, default: -> { [] } attribute :pl_plan_key, :string - attribute :number_of_additional_network_logos, :integer + + attr_accessor :employer_setup_process_id # validates :network_exceptions, presence: true if number_of_additional_network_logos > 0 - def initialize(params = {}) - if params.present? && params[:employer_setup_network_exceptions_form].is_a?(ActionController::Parameters) - params = permitted_params(params) + def initialize(employer_setup_process_id, params = {}) + @employer_setup_process_id = employer_setup_process_id + if params.present? + form_params = permitted_params(params) + super(form_params) + else + super(params) end - super(params) + end def permitted_params(params) @@ -67,20 +72,23 @@ class EmployerSetupNetworkExceptionsForm # Implement logic to save data to models after all steps are complete # For example, create a User record with the collected data if valid? - employer = BrittonWeb::Employers.find_by(pl_plan_key: pl_plan_key) - - network_exceptions_data = process_for_save(network_exceptions) - network_exceptions_data.each do |ne| - ne['exceptions'].each do |ex| - BrittonWeb::NetworkLogos.create!( - employer_id: employer.id, - net_logo: ne['network_logo'].original_filename, - exception_type: ex['type'].downcase, - exception_value: ex['value'], - default: false - ) - end + process = EmployerSetupProcess.find(@employer_setup_process_id) + # employer = BrittonWeb::Employers.find_by(pl_plan_key: pl_plan_key) + if network_exceptions + network_exceptions_data = process_for_save(network_exceptions) end + # network_exceptions_data.each do |ne| + # ne['exceptions'].each do |ex| + # BrittonWeb::NetworkLogos.create!( + # employer_id: employer.id, + # net_logo: ne['network_logo'].original_filename, + # exception_type: ex['type'].downcase, + # exception_value: ex['value'], + # default: false + # ) + # end + # end + true else false diff --git a/app/forms/employer_setup_plans_form.rb b/app/forms/employer_setup_plans_form.rb index 922c7c8..4f505bc 100644 --- a/app/forms/employer_setup_plans_form.rb +++ b/app/forms/employer_setup_plans_form.rb @@ -2,25 +2,31 @@ class EmployerSetupPlansForm include ActiveModel::Model include ActiveModel::Attributes - PLAN_COLORS = ['atmosphere', 'copper', 'bluemana', 'bronze', 'cobalt', 'verdigris'] + PLAN_COLORS = ['atmosphere', 'verdigris', 'cobalt', 'bluemana'] - # attribute :plans, array: true, default: [] - attribute :plans, array: true, default: -> { [new_plan] } + attribute :plans, array: true, default: -> { [Plan.new] } attribute :pl_plan_key, :string - attribute :number_of_plans, :integer - attribute :benefit_descs, hash: true, default: -> { new_plan } + attribute :benefit_descs, hash: true, default: -> { Plan.new } attr_accessor :plan_templates attr_accessor :benefits_template + attr_accessor :employer_setup_process_id validates :plans, presence: true validates :benefit_descs, presence: true - def initialize(params = {}) + def initialize(employer_setup_process_id, params = {}) + @employer_setup_process_id = employer_setup_process_id if params.present? - params = permitted_params(params) + form_params = permitted_params(params) + super(form_params) + else + super(params) + process_plans = EmployerSetupProcess.find(@employer_setup_process_id).plans + if process_plans.present? + self.plans = process_plans + end end - super(params) @plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK") @benefits_template = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence) @@ -61,6 +67,11 @@ class EmployerSetupPlansForm plan end + def process_params(employer_setup_process_id) + process = EmployerSetupProcess.find(employer_setup_process_id) + process.plans + end + def permitted_params(params) params.require(:employer_setup_plans_form).permit( :pl_plan_key, @@ -90,27 +101,54 @@ class EmployerSetupPlansForm end def permited_plans_keys - (1..14).map { |i| "benefit_#{i}".to_sym }.push(:plan_id) + (1..14).map { |i| "benefit_#{i}".to_sym }.push(:plan_id, :id) end def save # Implement logic to save data to models after all steps are complete # For example, create a User record with the collected data if valid? - plans.each do |plan| + process = EmployerSetupProcess.find(@employer_setup_process_id) + # process.plans.update(plans: plans) + + planss = Array.wrap(plans) + + plans.each_with_index do |plan, i| plan_info = plan.last - plan_id = plan_info.delete(:plan_id).to_i + plan_id = plan_info[:plan_id].present? ? plan_info[:plan_id].to_i : "temp #{i}" + plan_info.delete(:plan_id) + new_plan = process.plans.create(plan_id: plan_id) plan_info.each do |key, value| sequence = key.delete_prefix("benefit_").to_i - Vhcs::HlEgglestonCardBenefit.create( - plan_id: plan_id, - benefit_desc: benefit_descs["#{key}"], - benefit: value, - sequence: sequence, - plan_key: pl_plan_key + benefit = new_plan.plan_benefits.find_by(sequence: sequence) + benefit.update( + benefit: value ) + # Vhcs::HlEgglestonCardBenefit.create( + # plan_id: plan_id, + # benefit_desc: benefit_descs["#{key}"], + # benefit: value, + # sequence: sequence, + # plan_key: pl_plan_key + # ) end end + + + # plans.each do |plan| + # plan_info = plan.last + # plan_id = plan_info.delete(:plan_id).to_i + # plan_info.each do |key, value| + # sequence = key.delete_prefix("benefit_").to_i + # Vhcs::HlEgglestonCardBenefit.create( + # plan_id: plan_id, + # benefit_desc: benefit_descs["#{key}"], + # benefit: value, + # sequence: sequence, + # plan_key: pl_plan_key + # ) + # end + # end true else false diff --git a/app/javascript/controllers/add_alt_network_logo_controller.js b/app/javascript/controllers/add_alt_network_logo_controller.js index 645a9b9..78809f3 100644 --- a/app/javascript/controllers/add_alt_network_logo_controller.js +++ b/app/javascript/controllers/add_alt_network_logo_controller.js @@ -20,13 +20,18 @@ export default class extends Controller { const nextIndex = this.networkLogoTargets.length const num_of_colors = this.formColorValue.length let colorIndex = 0 + let newSecondaryColor = "copper" if (nextIndex != 0) { colorIndex = nextIndex % num_of_colors + if (nextIndex % 2 == 1) { + newSecondaryColor = "bronze" + } } const newColor = this.formColorValue[colorIndex] return this.templateTarget.innerHTML .replace(/NEW_RECORD/g, nextIndex) .replace(/NEXT_COLOR/g, newColor) + .replace(/NEXT_SECONDARY_COLOR/g, newSecondaryColor) } -} \ No newline at end of file +} diff --git a/app/javascript/controllers/add_network_exception_controller.js b/app/javascript/controllers/add_network_exception_controller.js index 5b5f0ca..327d97a 100644 --- a/app/javascript/controllers/add_network_exception_controller.js +++ b/app/javascript/controllers/add_network_exception_controller.js @@ -1,20 +1,30 @@ import { Controller } from "@hotwired/stimulus" export default class extends Controller { - static targets = ["template", "container"] - - connect() { - console.log("connect") + static values = { + parentColor: String } + static targets = ["template", "container"] + add(event) { console.log("start") event.preventDefault() event.stopPropagation() - const content = this.templateTarget.innerHTML.replace(/NEW_EXC_RECORD/g, new Date().getTime()) + const content = this.#updateTemplateException() this.containerTarget.insertAdjacentHTML("beforeend", content) - console.log("end") + + } + + #updateTemplateException() { + const nextIndex = new Date().getTime() + console.log("~~ " + this.parentColorValue) + return this.templateTarget.innerHTML + .replace(/NEW_EXC_RECORD/g, nextIndex) + .replace(/PARENT_SECONDARY_COLOR/g, this.parentColorValue) + + } } \ No newline at end of file diff --git a/app/javascript/controllers/add_plan_controller.js b/app/javascript/controllers/add_plan_controller.js index 8dd083e..6fbe2e6 100644 --- a/app/javascript/controllers/add_plan_controller.js +++ b/app/javascript/controllers/add_plan_controller.js @@ -7,6 +7,7 @@ export default class extends Controller { static targets = ["template", "container", "plan", "button"] add(event) { + console.log("start") event.preventDefault() event.stopPropagation() @@ -20,14 +21,19 @@ export default class extends Controller { const nextIndex = this.planTargets.length const num_of_colors = this.formColorValue.length let colorIndex = 0 + let newSecondaryColor = "copper" if (nextIndex != 0) { colorIndex = nextIndex % num_of_colors + if (nextIndex % 2 == 1) { + newSecondaryColor = "bronze" + } } const newColor = this.formColorValue[colorIndex] return this.templateTarget.innerHTML .replace(/NEW_RECORD/g, nextIndex) .replace(/NEW_PLAN/g, nextIndex + 1) .replace(/NEXT_COLOR/g, newColor) + .replace(/NEXT_SECONDARY_COLOR/g, newSecondaryColor) } diff --git a/app/models/alternative_network_logo.rb b/app/models/alternative_network_logo.rb new file mode 100644 index 0000000..c3d41ce --- /dev/null +++ b/app/models/alternative_network_logo.rb @@ -0,0 +1,16 @@ +class AlternativeNetworkLogo < ApplicationRecord + belongs_to :employer_setup_process + + before_save :process_network_logo + + def process_network_logo + unless self.network_logo.is_a?(String) + self.employer_setup_process.card_logo_files.new( + filename: self.network_logo.filename, + logo_type: 'network', + image: self.network_logo.data, + pl_plan_key: self.employer_setup_process.pl_plan_key || "" + ) + end + end +end \ No newline at end of file diff --git a/app/models/britton_web/sample_id_cards.rb b/app/models/britton_web/sample_id_cards.rb new file mode 100644 index 0000000..12957ec --- /dev/null +++ b/app/models/britton_web/sample_id_cards.rb @@ -0,0 +1,83 @@ +module BrittonWeb + class SampleIdCards < BrittonWebRecord + + self.table_name = 'sample_id_cards' + + alias_attribute :id, :id + alias_attribute :full_name, :full_name + alias_attribute :family_id, :family_id + alias_attribute :primary_mb_member_key, :primary_mb_member_key + alias_attribute :employer_name, :employer_name + alias_attribute :pl_plan_key, :pl_plan_key -moved to esp/not used in template + alias_attribute :group_number, :group_number + alias_attribute :rx_group, :rx_group + alias_attribute :network_image, :network_image -moved to esp/not used in template + alias_attribute :medical_eff_date, :medical_eff_date + alias_attribute :provider_code, :provider_code + alias_attribute :provider_line_1, :provider_line_1 + alias_attribute :provider_line_2, :provider_line_2 + alias_attribute :provider_line_3, :provider_line_3 + alias_attribute :provider_line_4, :provider_line_4 + alias_attribute :provider_line_5, :provider_line_5 + alias_attribute :provider_line_6, :provider_line_6 + alias_attribute :provider_line_7, :provider_line_7 + alias_attribute :provider_line_8, :provider_line_8 + alias_attribute :provider_line_9, :provider_line_9 + alias_attribute :provider_line_10, :provider_line_10 + alias_attribute :provider_line_11, :provider_line_11 + alias_attribute :mail_to, :mail_to - dont need/not used in template + alias_attribute :claim_to_1, :claim_to_1 + alias_attribute :claim_to_2, :claim_to_2 + alias_attribute :claim_to_3, :claim_to_3 + alias_attribute :claim_to_4, :claim_to_4 + alias_attribute :claim_to_5, :claim_to_5 + alias_attribute :claim_to_6, :claim_to_6 + alias_attribute :claim_to_7, :claim_to_7 + alias_attribute :claim_to_8, :claim_to_8 + alias_attribute :claim_to_9, :claim_to_9 + alias_attribute :claim_to_10, :claim_to_10 + alias_attribute :claim_to_11, :claim_to_11 + alias_attribute :customer_service, :customer_service + alias_attribute :web_url, :web_url + alias_attribute :dependent_1, :dependent_1 - keep for now + alias_attribute :dependent_2, :dependent_2 + alias_attribute :dependent_3, :dependent_3 + alias_attribute :dependent_4, :dependent_4 + alias_attribute :dependent_5, :dependent_5 + alias_attribute :dependent_6, :dependent_6 + alias_attribute :dependent_7, :dependent_7 + alias_attribute :dependent_8, :dependent_8 + alias_attribute :benefit_desc_1, :benefit_desc_1 + alias_attribute :benefit_1, :benefit_1 + alias_attribute :benefit_desc_2, :benefit_desc_2 + alias_attribute :benefit_2, :benefit_2 + alias_attribute :benefit_desc_3, :benefit_desc_3 + alias_attribute :benefit_3, :benefit_3 + alias_attribute :benefit_desc_4, :benefit_desc_4 + alias_attribute :benefit_4, :benefit_4 + alias_attribute :benefit_desc_5, :benefit_desc_5 + alias_attribute :benefit_5, :benefit_5 + alias_attribute :benefit_desc_6, :benefit_desc_6 + alias_attribute :benefit_6, :benefit_6 + alias_attribute :benefit_desc_7, :benefit_desc_7 + alias_attribute :benefit_7, :benefit_7 + alias_attribute :benefit_desc_8, :benefit_desc_8 + alias_attribute :benefit_8, :benefit_8 + alias_attribute :benefit_desc_9, :benefit_desc_9 + alias_attribute :benefit_9, :benefit_9 + alias_attribute :benefit_desc_10, :benefit_desc_10 + alias_attribute :benefit_10, :benefit_10 + alias_attribute :benefit_desc_11, :benefit_desc_11 + alias_attribute :benefit_11, :benefit_11 + alias_attribute :benefit_desc_12, :benefit_desc_12 + alias_attribute :benefit_12, :benefit_12 + alias_attribute :benefit_desc_13, :benefit_desc_13 + alias_attribute :benefit_13, :benefit_13 + alias_attribute :benefit_desc_14, :benefit_desc_14 + alias_attribute :benefit_14, :benefit_14 + alias_attribute :created_at, :created_at + alias_attribute :updated_at, :updated_at + + + end +end \ No newline at end of file diff --git a/app/models/card_logo_file.rb b/app/models/card_logo_file.rb new file mode 100644 index 0000000..e6d47d0 --- /dev/null +++ b/app/models/card_logo_file.rb @@ -0,0 +1,3 @@ +class CardLogoFile < ApplicationRecord + belongs_to :employer_setup_process, optional: true +end diff --git a/app/models/employer_setup_process.rb b/app/models/employer_setup_process.rb index ab3fee6..041c706 100644 --- a/app/models/employer_setup_process.rb +++ b/app/models/employer_setup_process.rb @@ -1,3 +1,54 @@ class EmployerSetupProcess < ApplicationRecord - has_many :plans + has_many :plans, dependent: :destroy + accepts_nested_attributes_for :plans, allow_destroy: true, reject_if: :all_blank + + has_many :alternative_network_logos, dependent: :destroy + accepts_nested_attributes_for :alternative_network_logos, allow_destroy: true, reject_if: :all_blank + + has_many :card_logo_files + + before_save :process_employer_logo + + def process_employer_logo + unless self.employer_logo.is_a?(String) + self.card_logo_files.new( + filename: self.employer_logo.filename, + logo_type: 'employer', + image: self.employer_logo.data, + pl_plan_key: self.pl_plan_key || "" + ) + end + end + + def self.permitted_params(params) + params.require(:employer_setup_process).permit( + :employer_name, + :group_number, + :pl_plan_key, + :effective_date, + :employer_logo, + :network_provider, + plans_attributes: [ + :id, + :title, + :plan_id, + :_destroy, + plan_benefits_attributes: [ + :id, + :benefit_desc, + :benefit, + :sequence, + :_destroy, + ] + ], + alternative_network_logos_attributes: [ + :id, + :network_logo, + :exception_type, + :exception_value, + :_destroy + ] + ) + end + end diff --git a/app/models/id_card_benefits_template.rb b/app/models/id_card_benefits_template.rb index f8ffe76..d725264 100644 --- a/app/models/id_card_benefits_template.rb +++ b/app/models/id_card_benefits_template.rb @@ -1,5 +1,5 @@ class IdCardBenefitsTemplate < ApplicationRecord - has_many :id_card_benefits + has_many :id_card_benefits, dependent: :destroy end diff --git a/app/models/plan.rb b/app/models/plan.rb index 056ef76..2f4dec1 100644 --- a/app/models/plan.rb +++ b/app/models/plan.rb @@ -1,17 +1,18 @@ class Plan < ApplicationRecord belongs_to :employer_setup_process - has_many :plan_benefits + has_many :plan_benefits, dependent: :destroy + accepts_nested_attributes_for :plan_benefits, allow_destroy: true, reject_if: :all_blank - after_create :create_default_benefits + after_initialize :create_default_benefits, if: :new_record? private - + def create_default_benefits benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence) benefits.each do |ben| - plan_benefits.create(benefit_desc: ben.benefit_desc, sequence: ben.sequence) + plan_benefits.new(benefit_desc: ben.benefit_desc, sequence: ben.sequence) end end end \ No newline at end of file diff --git a/app/models/vhcs/hl_egg_id_card_dependent.rb b/app/models/vhcs/hl_egg_id_card_dependent.rb new file mode 100644 index 0000000..3bc0ffb --- /dev/null +++ b/app/models/vhcs/hl_egg_id_card_dependent.rb @@ -0,0 +1,13 @@ +module Vhcs + class HLEggIdCardDependent < VhcsRecord + + self.table_name = 'HLEggIdCardDependent' + + alias_attribute :id, :Id + alias_attribute :family_id, :FamilyId + alias_attribute :dependent_name, :DependentName + alias_attribute :sequence_number, :SequenceNumber + + + end +end \ No newline at end of file diff --git a/app/models/vhcs/hlid_card_provider.rb b/app/models/vhcs/hlid_card_provider.rb new file mode 100644 index 0000000..7031f33 --- /dev/null +++ b/app/models/vhcs/hlid_card_provider.rb @@ -0,0 +1,48 @@ +module Vhcs + class HLIDCardProvider < VhcsRecord + + self.table_name = 'HLIDCardProvider' + + alias_attribute :provider_code, :ProviderCode + alias_attribute :provider_line_1, :ProviderLine1 + alias_attribute :provider_line_2, :ProviderLine2 + alias_attribute :provider_line_3, :ProviderLine3 + alias_attribute :provider_line_4, :ProviderLine4 + alias_attribute :provider_line_5, :ProviderLine5 + alias_attribute :mail_to, :MailTo + alias_attribute :mail_to_2, :MailTo2 + alias_attribute :contact_line_1, :ContactLine1 + alias_attribute :contact_line_2, :ContactLine2 + alias_attribute :contact_line_3, :ContactLine3 + alias_attribute :group_number, :GroupNumber + alias_attribute :claim_to_1, :ClaimTo1 + alias_attribute :claim_to_2, :ClaimTo2 + alias_attribute :claim_to_3, :ClaimTo3 + alias_attribute :claim_to_4, :ClaimTo4 + alias_attribute :claim_to_5, :ClaimTo5 + alias_attribute :claim_to_6, :ClaimTo6 + alias_attribute :claim_to_7, :ClaimTo7 + alias_attribute :claim_to_8, :ClaimTo8 + alias_attribute :claim_to_9, :ClaimTo9 + alias_attribute :claim_to_10, :ClaimTo10 + alias_attribute :claim_to_11, :ClaimTo11 + alias_attribute :provider_line_6, :ProviderLine6 + alias_attribute :provider_line_7, :ProviderLine7 + alias_attribute :provider_line_8, :ProviderLine8 + alias_attribute :provider_line_9, :ProviderLine9 + alias_attribute :provider_line_10, :ProviderLine10 + alias_attribute :provider_line_11, :ProviderLine11 + alias_attribute :rx_group_id, :RXGroupId + alias_attribute :rx_contact, :RXContact + alias_attribute :provider_lookup_1, :ProviderLookup1 + alias_attribute :provider_lookup_2, :ProviderLookup2 + alias_attribute :precert1, :Precert1 + alias_attribute :precert2, :Precert2 + alias_attribute :precert3, :Precert3 + alias_attribute :precert4, :Precert4 + alias_attribute :precert5, :Precert5 + alias_attribute :precert6, :Precert6 + + + end +end \ No newline at end of file diff --git a/app/models/vhcs/hlid_cards_egg.rb b/app/models/vhcs/hlid_cards_egg.rb new file mode 100644 index 0000000..b96fdd2 --- /dev/null +++ b/app/models/vhcs/hlid_cards_egg.rb @@ -0,0 +1,25 @@ +module Vhcs + class HLIDCardsEgg < VhcsRecord + + self.table_name = 'HLIDCardsEgg' + + alias_attribute :facility, :Facility + alias_attribute :division, :Division + alias_attribute :full_name, :FullName + alias_attribute :ssn, :SSN + alias_attribute :medical_coverage, :MedicalCoverage + alias_attribute :medical_eff_date, :MedicalEffDate + alias_attribute :medical_group_num, :MedicalGroupNum + alias_attribute :dental_coverage, :DentalCoverage + alias_attribute :dental_eff_date, :DentalEffDate + alias_attribute :dental_group_num, :DentalGroupNum + alias_attribute :card_type, :CardType + alias_attribute :group_number, :GroupNumber + alias_attribute :pb_product_key, :PBProductKey + alias_attribute :id, :Id + alias_attribute :pl_plan_key, :PLPlanKey + alias_attribute :mb_member_key, :MBMemberKey + + + end +end \ No newline at end of file diff --git a/app/services/benefits_word_doc/map_employer_information.rb b/app/services/benefits_word_doc/map_employer_information.rb new file mode 100644 index 0000000..95b0e28 --- /dev/null +++ b/app/services/benefits_word_doc/map_employer_information.rb @@ -0,0 +1,72 @@ +module BenefitsWordDoc + class MapEmployerInformation + + def initialize(process, word_doc_section) + @process = process + @word_doc_section = word_doc_section + end + + def call + search_fields = mapping_hash.keys.to_set + + @word_doc_section.each do |line| + matching_field = search_fields.detect { |field| line.include?(field) } + if matching_field + field_mapping = mapping_hash[matching_field] + field_regex = field_mapping[:doc_to_process_regex] + field_value = line.match(field_regex)[1].strip + process_field = field_mapping[:process_field] + + if field_mapping[:validation].present? + validation_type = field_mapping[:validation] + if send("is_#{validation_type}?".to_sym, field_value) + @process[process_field] = field_value + end + else + @process[process_field] = field_value + end + end + end + @process.save + end + + private + + def mapping_hash + { + 'Employer Name' => { + process_field: :employer_name, + doc_field: 'Employer Name', + doc_field_desc: 'Follows pattern - Employer Name:New Employer', + doc_to_process_regex: /.*:(.*)/, + regex_desc: 'Grabs everything after colon' + }, + 'Group Number' => { + process_field: :group_number, + doc_field: 'Group Number', + doc_field_desc: 'Follows pattern - Group Number:099999', + doc_to_process_regex: /.*:(.*)/, + regex_desc: 'Grabs everything after colon', + validation: 'number' + }, + 'Group Effective Date' => { + process_field: :effective_date, + doc_field: 'Group Effective Date', + doc_field_desc: 'Follows pattern - Group Effective Date:12/1/2025', + doc_to_process_regex: /.*:(.*)/, + regex_desc: 'Grabs everything after colon', + validation: 'date' + } + } + end + + def is_number?(string) + true if Float(string) rescue false + end + + def is_date?(string) + true if Date.parse rescue false + end + + end +end \ No newline at end of file diff --git a/app/services/benefits_word_doc/map_employer_logo.rb b/app/services/benefits_word_doc/map_employer_logo.rb new file mode 100644 index 0000000..bc8e2b3 --- /dev/null +++ b/app/services/benefits_word_doc/map_employer_logo.rb @@ -0,0 +1,28 @@ +module BenefitsWordDoc + class MapEmployerLogo + + def initialize(process, word_doc) + @process = process + @word_doc = word_doc + end + + def call + extracted_images = [] + Zip::File.open(@word_doc) do |zip_file| + zip_file.each do |entry| + if entry.name.start_with?('word/media/') && !entry.directory? + filename = @process.employer_name.titleize.gsub(/\s+/, '').concat("Logo.png") + image_data = entry.get_input_stream.read + extracted_images << { filename: filename, data: image_data } + end + end + end + if extracted_images.length > 1 + employer_logo = extracted_images.last + @process.employer_logo = employer_logo[:filename] + # same file logic + end + @process.save + end + end +end \ No newline at end of file diff --git a/app/services/benefits_word_doc/map_plans_information.rb b/app/services/benefits_word_doc/map_plans_information.rb new file mode 100644 index 0000000..2c057bf --- /dev/null +++ b/app/services/benefits_word_doc/map_plans_information.rb @@ -0,0 +1,149 @@ +module BenefitsWordDoc + class MapPlansInformation + + def initialize(process, word_doc_section) + @process = process + @word_doc_section = word_doc_section + end + + def call + search_fields = mapping_hash.keys.to_set + plans_indexes = @word_doc_section.each_index.select { |index| @word_doc_section[index].match?(/\d*\.?\d+k/i) } + + plans_indexes.each do |plan_index| + new_plan = @process.plans.create(title: @word_doc_section[plan_index]) + plan_lines = @word_doc_section.slice(plan_index + 1, 14) + plan_lines.each_with_index do |line, i| + matching_field = search_fields.detect { |field| line.include?(field) } + if matching_field + puts matching_field + field_mapping = mapping_hash[matching_field] + field_regex = field_mapping[:doc_to_process_regex] + field_value = line.match(field_regex)[1].strip + process_benefit_desc_field = field_mapping[:process_benefit_desc_field] + puts process_benefit_desc_field + puts new_plan.plan_benefits.map { |b| b.benefit_desc} + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: process_benefit_desc_field) + new_benefit.benefit = field_value + new_benefit.save + end + end + end + + end + + private + + def mapping_hash + { + 'Physician Visit' => { + process_field: :benefit, + process_benefit_desc_field: 'Primary Visit', + doc_field_desc: 'Follows pattern - Physician Visit$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Specialist Visit' => { + process_field: :benefit, + process_benefit_desc_field: 'Specialist Visit', + doc_field_desc: 'Follows pattern - Specialist Visit$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Urgent Care' => { + process_field: :benefit, + process_benefit_desc_field: 'Urgent Care', + doc_field_desc: 'Follows pattern - Urgent Care$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Individual Deductible (in network )' => { + process_field: :benefit, + process_benefit_desc_field: 'INN–Ind Ded', + doc_field_desc: 'Follows pattern - Individual Deductible (in network )$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Family Deductible(in network )' => { + process_field: :benefit, + process_benefit_desc_field: 'INN–Family Ded', + doc_field_desc: 'Follows pattern - Family Deductible(in network )$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Individual Deductible (out of network)' => { + process_field: :benefit, + process_benefit_desc_field: 'OON–Ind Ded', + doc_field_desc: 'Follows pattern - Individual Deductible (out of network)$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Family Deductible (out of network)' => { + process_field: :benefit, + process_benefit_desc_field: 'OON–Family Ded', + doc_field_desc: 'Follows pattern - Family Deductible (out of network)$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Co-Insurance' => { + process_field: :benefit, + process_benefit_desc_field: 'Co-Insurance', + doc_field_desc: 'Follows pattern - Co-Insurance70%/30%', + doc_to_process_regex: /Co-Insurance(.*)/, + regex_desc: 'Grabs everything after field name' + }, + 'Out-of-Pocket(in network)' => { + process_field: :benefit, + process_benefit_desc_field: 'INN–Ind OOP', + doc_field_desc: 'Follows pattern - Out-of-Pocket(in network)$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Out-of-Pocket Family(in network)' => { + process_field: :benefit, + process_benefit_desc_field: 'INN–Family OOP', + doc_field_desc: 'Follows pattern - Out-of-Pocket Family(in network)$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Out-of-Pocket(out of network)' => { + process_field: :benefit, + process_benefit_desc_field: 'OON–Ind OOP', + doc_field_desc: 'Follows pattern - Out-of-Pocket(out of network)$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Out-of-Pocket Family (out of network)' => { + process_field: :benefit, + process_benefit_desc_field: 'OON–Family OOP', + doc_field_desc: 'Follows pattern - Out-of-Pocket Family (out of network)$x,xxx', + doc_to_process_regex: /\$(.*)/, + regex_desc: 'Grabs everything after dollar sign' + }, + 'Emergency Room' => { + process_field: :benefit, + process_benefit_desc_field: 'Emergency Room', + doc_field_desc: 'Follows pattern - Emergency RoomXxxxx', + doc_to_process_regex: /Emergency Room(.*)/, + regex_desc: 'Grabs everything after field name' + }, + 'Preventive Care' => { + process_field: :benefit, + process_benefit_desc_field: 'Preventive Care', + doc_field_desc: 'Follows pattern - Preventive Care100%', + doc_to_process_regex: /Preventive Care(.*)/, + regex_desc: 'Grabs everything after field name' + }, + } + end + + def is_number?(string) + true if Float(string) rescue false + end + + def is_date?(string) + true if Date.parse rescue false + end + + end +end \ No newline at end of file diff --git a/app/services/benefits_word_doc_processor.rb b/app/services/benefits_word_doc_processor.rb index 0a5e0e7..9a32e29 100644 --- a/app/services/benefits_word_doc_processor.rb +++ b/app/services/benefits_word_doc_processor.rb @@ -11,146 +11,20 @@ class BenefitsWordDocProcessor def call doc = Docx::Document.open(@word_doc) + data_lines = doc.paragraphs.map { |p| p.to_s.squish }.reject!(&:empty?) - index = 40 + start_of_plans_index = data_lines.index { |s| s == 'Medical Plan'} - general_information = doc.paragraphs.slice(0, index) - plan_information = doc.paragraphs.slice(index + 1..) + employer_information = data_lines.slice(0, start_of_plans_index) + plan_information = data_lines.slice(start_of_plans_index + 1..) + BenefitsWordDoc::MapEmployerInformation.new(@process, employer_information).call + BenefitsWordDoc::MapEmployerLogo.new(@process, @word_doc).call + BenefitsWordDoc::MapPlansInformation.new(@process, plan_information).call - general_fields(general_information) - plans(plan_information) - logo @process end - - private - - def general_fields(general_information) - fields = ['Group Number:', 'Employer Name:', 'Group Effective Date:'] - general_information.each do |gi| - field_string = gi.to_s - if field_string.include?('Group Number:') - value = field_string.delete_prefix('Group Number:').strip - @process.group_number = value - elsif field_string.include?('Employer Name:') - value = field_string.delete_prefix('Employer Name:').strip - @process.employer_name = value - elsif field_string.include?('Group Effective Date:') - value = field_string.delete_prefix('Group Effective Date:').strip - @process.effect_date = value - end - end - end - - def logo - extracted_images = [] - Zip::File.open(@word_doc) do |zip_file| - zip_file.each do |entry| - if entry.name.start_with?('word/media/') && !entry.directory? - filename = File.basename(entry.name) - image_data = entry.get_input_stream.read - extracted_images << { filename: filename, data: image_data } - end - end - end - if extracted_images.length > 1 - @process.logo_filename = extracted_images.last[:filename] - end - end - - def plans(plan_information) - plans_array = [] - plan_information.each_with_index do |pin, i| - if pin.to_s.match?(/\d*\.?\d+k/i) - new_plan = {title: pin.to_s.strip, start_index: i, benefits: []} - plans_array.push(new_plan) - end - end - - plans_array.each do |pl| - new_plan = Plan.create(title: pl[:title], employer_setup_process: @process) - plan_fields = plan_information.slice(pl[:start_index] + 1, 14) - plan_fields.each_with_index do |pf, i| - field_string = pf.to_s - if field_string.strip.length > 1 - case field_string - when ->(string) { string.include?("Physician Visit") } - value = field_string.delete_prefix("Physician Visit") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Primary Visit") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Specialist Visit") } - value = field_string.delete_prefix("Specialist Visit") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Specialist Visit") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Urgent Care") } - value = field_string.delete_prefix("Urgent Care") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Urgent Care") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Individual Deductible (in network )") } - value = field_string.delete_prefix("Individual Deductible (in network )") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Ind Ded") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Family Deductible(in network )") } - value = field_string.delete_prefix("Family Deductible(in network )") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Family Ded") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Individual Deductible (out of network)") } - value = field_string.delete_prefix("Individual Deductible (out of network)") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Ind Ded") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Family Deductible (out of network) ") } - value = field_string.delete_prefix("Family Deductible (out of network) ") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Family Ded") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Co-Insurance") } - value = field_string.delete_prefix("Co-Insurance") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Co-Insurance") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Out-of-Pocket(in network) ") } - value = field_string.delete_prefix("Out-of-Pocket(in network) ") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Ind OOP") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Out-of-Pocket Family(in network) ") } - value = field_string.delete_prefix("Out-of-Pocket Family(in network) ") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Family OOP") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Out-of-Pocket(out of network) ") } - value = field_string.delete_prefix("Out-of-Pocket(out of network) ") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Ind OOP") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Out-of-Pocket Family (out of network) ") } - value = field_string.delete_prefix("Out-of-Pocket Family (out of network) ") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Family OOP") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Emergency Room ") } - value = field_string.delete_prefix("Emergency Room ") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Emergency Room") - new_benefit.benefit = value - new_benefit.save - when ->(string) { string.include?("Preventive Care") } - value = field_string.delete_prefix("Preventive Care") - new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Preventive Care") - new_benefit.benefit = value - new_benefit.save - end - end - end - end - end end \ No newline at end of file diff --git a/app/services/benefits_word_doc_processor_old.rb b/app/services/benefits_word_doc_processor_old.rb new file mode 100644 index 0000000..7caf2c8 --- /dev/null +++ b/app/services/benefits_word_doc_processor_old.rb @@ -0,0 +1,163 @@ +class BenefitsWordDocProcessorOld + + def initialize(word_doc, process=nil) + @word_doc = word_doc + if process + @process = process + else + @process = EmployerSetupProcess.new + end + end + + def call + doc = Docx::Document.open(@word_doc) + + index = 40 + + general_information = doc.paragraphs.slice(0, index) + plan_information = doc.paragraphs.slice(index + 1..) + + + general_fields(general_information) + plans(plan_information) + employer_logo() + + @process + + end + + private + + def general_fields(general_information) + fields = ['Group Number:', 'Employer Name:', 'Group Effective Date:'] + general_information.each do |gi| + field_string = gi.to_s + if field_string.include?('Group Number:') + value = field_string.delete_prefix('Group Number:').strip + if is_number?(value) + @process.group_number = value + end + elsif field_string.include?('Employer Name:') + value = field_string.delete_prefix('Employer Name:').strip + @process.employer_name = value + elsif field_string.include?('Group Effective Date:') + value = field_string.delete_prefix('Group Effective Date:').strip + @process.effective_date = value + end + end + end + + def employer_logo + extracted_images = [] + Zip::File.open(@word_doc) do |zip_file| + zip_file.each do |entry| + if entry.name.start_with?('word/media/') && !entry.directory? + filename = File.basename(entry.name) + image_data = entry.get_input_stream.read + extracted_images << { filename: filename, data: image_data } + end + end + end + if extracted_images.length > 1 + @process.employer_logo = @process.employer_name.titleize.gsub(/\s+/, '').concat("Logo.png") + # same file logic + end + end + + def plans(plan_information) + plans_array = [] + plan_information.each_with_index do |pin, i| + if pin.to_s.match?(/\d*\.?\d+k/i) + new_plan = {title: pin.to_s.strip, start_index: i, benefits: []} + plans_array.push(new_plan) + end + end + + plans_array.each do |pl| + new_plan = Plan.create(title: pl[:title], employer_setup_process: @process) + plan_fields = plan_information.slice(pl[:start_index] + 1, 14) + plan_fields.each_with_index do |pf, i| + field_string = pf.to_s + if field_string.strip.length > 1 + case field_string + when ->(string) { string.include?("Physician Visit") } + value = field_string.delete_prefix("Physician Visit") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Primary Visit") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Specialist Visit") } + value = field_string.delete_prefix("Specialist Visit") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Specialist Visit") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Urgent Care") } + value = field_string.delete_prefix("Urgent Care") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Urgent Care") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Individual Deductible (in network )") } + value = field_string.delete_prefix("Individual Deductible (in network )") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Ind Ded") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Family Deductible(in network )") } + value = field_string.delete_prefix("Family Deductible(in network )") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Family Ded") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Individual Deductible (out of network)") } + value = field_string.delete_prefix("Individual Deductible (out of network)") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Ind Ded") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Family Deductible (out of network) ") } + value = field_string.delete_prefix("Family Deductible (out of network) ") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Family Ded") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Co-Insurance") } + value = field_string.delete_prefix("Co-Insurance") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Co-Insurance") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Out-of-Pocket(in network) ") } + value = field_string.delete_prefix("Out-of-Pocket(in network) ") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Ind OOP") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Out-of-Pocket Family(in network) ") } + value = field_string.delete_prefix("Out-of-Pocket Family(in network) ") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Family OOP") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Out-of-Pocket(out of network) ") } + value = field_string.delete_prefix("Out-of-Pocket(out of network) ") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Ind OOP") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Out-of-Pocket Family (out of network) ") } + value = field_string.delete_prefix("Out-of-Pocket Family (out of network) ") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Family OOP") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Emergency Room ") } + value = field_string.delete_prefix("Emergency Room ") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Emergency Room") + new_benefit.benefit = value + new_benefit.save + when ->(string) { string.include?("Preventive Care") } + value = field_string.delete_prefix("Preventive Care") + new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Preventive Care") + new_benefit.benefit = value + new_benefit.save + end + end + end + end + end + + def is_number?(string) + true if Float(string) rescue false + end + +end \ No newline at end of file diff --git a/app/services/sample_card/data_formatter.rb b/app/services/sample_card/data_formatter.rb new file mode 100644 index 0000000..3a63a6d --- /dev/null +++ b/app/services/sample_card/data_formatter.rb @@ -0,0 +1,81 @@ +module SampleCard + class DataFormatter + + def initialize(process) + @process = process + end + + def call + @sample_card = BrittonWeb::SampleIdCard.new() + + set_process_fields() + set_generic_fields() + set_network_fields() + sample_cards = set_plan_fields() + sample_cards.each(&:save!) + + end + + private + + def set_process_fields + selected_attributes = { + employer_name: @process.employer_name, + group_number: @process.group_number, + medical_eff_date: @process.effective_date, + network_image: @process.logo_filename, + status: "imported" + } + + @sample_card.assign_attributes(selected_attributes) + end + + def set_plan_fields + plans_sample_cards = [] + @process.plans.each do |plan| + plan_sample_card = @sample_card.dup + plan_sample_card.family_id = plan.title + plan.plan_benefits.each do |bene| + plan_sample_card["benefit_desc_#{bene.sequence}".to_sym] = bene.benefit_desc + plan_sample_card["benefit_#{bene.sequence}".to_sym] = bene.benefit + end + plans_sample_cards.push(plan_sample_card) + end + plans_sample_cards + end + + def set_generic_fields + selected_attributes = { + full_name: "JANE DOE", + primary_mb_member_key: "99999", + rx_group: "99999" + } + + @sample_card.assign_attributes(selected_attributes) + end + + def set_network_fields + provider_code = @process.network_provider.includes?("Cigna") ? "5" : "2" + # if @process.network_provider.includes?("Cigna") + # provider_code = "5" + # network_image = "CignaLogo.png" + # else + # provider_code = "2" + # network_image = "Logo_MC_PMS.png" + # end + provider_information = Vhcs::HLIDCardProvider.find_by(provider_code: provider_code) + selected_attributes = provider_information.attributes.slice( + :provider_line_1, :provider_line_2, :provider_line_3, :provider_line_4, :provider_line_5, :provider_line_6, + :provider_line_7, :provider_line_8, :provider_line_9, :provider_line_10, :provider_line_11, + :claim_to_1, :claim_to_2, :claim_to_3, :claim_to_4, :claim_to_5, :claim_to_6, + :claim_to_7, :claim_to_8, :claim_to_9, :claim_to_10, :claim_to_11 + ) + + @sample_card.assign_attributes(selected_attributes) + end + + def set_dependent_fields + # Not needed for sample card + end + end +end \ No newline at end of file diff --git a/app/services/sample_card/jasper_pdf_generator.rb b/app/services/sample_card/jasper_pdf_generator.rb new file mode 100644 index 0000000..214c4e1 --- /dev/null +++ b/app/services/sample_card/jasper_pdf_generator.rb @@ -0,0 +1,21 @@ +module SampleCard + class JasperPdfGenerator + + def initialize(jasper_url) + @jasper_url = jasper_url + end + + def call + + response = HTTParty.get(@jasper_url) + card_pdf = CombinePDF.parse(response.body) + + # todays_date = Date.today.strftime("%m-%d-%Y") + # card_pdf.save("tmp/service_test_member_id_card_#{todays_date}.pdf") + + card_pdf + + end + + end +end \ No newline at end of file diff --git a/app/services/sample_card/jasper_url_generator.rb b/app/services/sample_card/jasper_url_generator.rb new file mode 100644 index 0000000..0e23dfb --- /dev/null +++ b/app/services/sample_card/jasper_url_generator.rb @@ -0,0 +1,39 @@ +module SampleCard + class JasperUrlGenerator + + def initialize(process, family_id) + @family_id = family_id + @process = process + end + + def call + @net_logo = determine_network_logo + + URI::HTTPS.build(url_components) + end + + private + + def determine_network_logo + # if @network_logos.length > 1 + # member_geographic_info = Vhcs::PbEntityAddress.joins("INNER JOIN vwMBMember ON PBEntityAddress.PBEntityKey = vwMBMember.PBEntityKey AND PBEntityAddress.AddressTypeID = 1137").where("vwMBMember.FamilyID = ?", @family_id).first + # @network_logos.where.not(default: true).each do |pnl| + # if member_geographic_info[pnl.exception_type] == pnl.exception_value + # return pnl.net_logo + # end + # end + # end + # @network_logos.find_by(default: true).net_logo + @process.network_logo + end + + def url_components + { + host: 'www.dicins.com', + path: '/ReportServerDEV/PdfServlet', + query: "reportConn=BrittonWeb&id=&reportName=#{@process.card_template}&FamilyId=#{@family_id}&BackImage=c:/images/#{@net_logo}&reportDir=secure/Documents&SUBREPORT_DIR=/&ImageDir=secure/Documents&netToken=3a4a8b03f4dfb0e6e3fc82dd369f70ef&FileType=PDF" + } + end + + end +end \ No newline at end of file diff --git a/app/services/sample_card/pdf_printer.rb b/app/services/sample_card/pdf_printer.rb new file mode 100644 index 0000000..16a1a15 --- /dev/null +++ b/app/services/sample_card/pdf_printer.rb @@ -0,0 +1,27 @@ +module SampleCard + class PdfPrinter + + def initialize(process, sample_cards) + @process = process + @sample_cards = sample_cards + end + + def call + group_cards_pdf = CombinePDF.new + @sample_cards.each do |sample_card| + url = SampleCard::JasperUrlGenerator.new(@process, sample_card.family_id).call + puts url + sample_card_pdf = SampleCard::JasperPdfGenerator.new(url).call + + group_cards_pdf << sample_card_pdf + end + + employer_name = @process.employer_name.downcase.tr(" ", "_") + todays_date = Date.today.strftime("%m-%d-%Y") + group_cards_pdf.save("tmp/#{employer_name}_sample_cards_#{todays_date}.pdf") + + group_cards_pdf + end + + end +end \ No newline at end of file diff --git a/app/views/employer_setup/_alt_network_logo_fields.html.erb b/app/views/employer_setup/_alt_network_logo_fields.html.erb new file mode 100644 index 0000000..7840037 --- /dev/null +++ b/app/views/employer_setup/_alt_network_logo_fields.html.erb @@ -0,0 +1,37 @@ +
+ + No file chosen + <%= network_fields.file_field :network_logo, class: "hidden", id: "file_upload_input_NEW_RECORD", data: { add_alt_network_logo_target: "networkLogo" } %> +
+
+
+ <%= network_fields.select :exception_type, options_for_select(["Zip","State"]), label: { text: "Exception Type" }, prompt: "Select Type", class: "w-full" %> +
+
+ <%= network_fields.text_field :exception_value, label: { text: "Exception Value" }, class: "w-full" %> +
+
+ <%= network_fields.hidden_field :_destroy %> + <%= button_tag "Remove", class: "cursor-pointer bg-deepcove hover:bg-brightlava text-xl font-bold text-NEXT_SECONDARY_COLOR hover:text-platinum py-1 px-2 font-semibold leading-tight rounded-lg border-3 border-NEXT_SECONDARY_COLOR w-full", data: { action: "add-alt-network-logo#remove" } %> +
+
+
+<%= button_tag "Add an exception rule", class: "cursor-pointer bg-NEXT_COLOR hover:bg-NEXT_COLOR-tinted text-platinum text-lg font-bold py-2 px-4 rounded border border-platinum w-full", data: { action: "add-network-exception#add" } %> + \ No newline at end of file diff --git a/app/views/employer_setup/_first_plan_fields.html.erb b/app/views/employer_setup/_first_plan_fields.html.erb new file mode 100644 index 0000000..5c36417 --- /dev/null +++ b/app/views/employer_setup/_first_plan_fields.html.erb @@ -0,0 +1,23 @@ +
+ <%= plan_fields.fields_for :plan_benefits do |plan_benefits_fields| %> + <%= render 'plan_benefits_desc_fields', plan_benefits_fields: plan_benefits_fields %> + <% end %> +
+
+
rounded-bl-lg">
+
-ml-[6px] z-2 w-full"> + <%= "Plan #{i + 1}" %> +
+
+ <%= plan_fields.text_field :title, label: { text: "Plan Title" }, class: "w-full", data: { add_plan_target: "plan" } %> +
+
+ <%= plan_fields.text_field :plan_id, label: { text: "Plan Id" }, class: "w-full" %> +
+
+ <%= f.select :template_id, options_from_collection_for_select(@form.plan_templates, :id, :title), { prompt: "Select Plan Template" }, { data: { action: "benefits-template-picker#fetchData" }} %> +
+ <%= plan_fields.fields_for :plan_benefits do |plan_benefits_fields| %> + <%= render 'plan_benefits_fields', plan_benefits_fields: plan_benefits_fields %> + <% end %> +
\ No newline at end of file diff --git a/app/views/employer_setup/_plan_benefit_only_fields.erb b/app/views/employer_setup/_plan_benefit_only_fields.erb new file mode 100644 index 0000000..095e7e7 --- /dev/null +++ b/app/views/employer_setup/_plan_benefit_only_fields.erb @@ -0,0 +1,4 @@ +
+ <%= plan_benefits_fields.text_field :benefit, label: { text: "Benefit Value #{plan_benefits_fields.object.sequence}" }, data: { benefits_template_picker_target: "benefit", sequence: plan_benefits_fields.object.sequence}, class: "w-full" %> + <%= plan_benefits_fields.hidden_field :sequence %> +
\ No newline at end of file diff --git a/app/views/employer_setup/_plan_benefits_desc_fields.html.erb b/app/views/employer_setup/_plan_benefits_desc_fields.html.erb new file mode 100644 index 0000000..65cbdca --- /dev/null +++ b/app/views/employer_setup/_plan_benefits_desc_fields.html.erb @@ -0,0 +1,3 @@ +
+ <%= plan_benefits_fields.text_field :benefit_desc, label: { text: "Benefit Description #{plan_benefits_fields.object.sequence}" }, class: "w-full" %> +
\ No newline at end of file diff --git a/app/views/employer_setup/_plan_benefits_fields.html.erb b/app/views/employer_setup/_plan_benefits_fields.html.erb new file mode 100644 index 0000000..7078c44 --- /dev/null +++ b/app/views/employer_setup/_plan_benefits_fields.html.erb @@ -0,0 +1,5 @@ +
+ <%= plan_benefits_fields.text_field :benefit, label: { text: "Benefit Value #{plan_benefits_fields.object.sequence}" }, data: { benefits_template_picker_target: "benefit", sequence: plan_benefits_fields.object.sequence}, class: "w-full" %> + <%= plan_benefits_fields.hidden_field :benefit_desc %> + <%= plan_benefits_fields.hidden_field :sequence %> +
\ No newline at end of file diff --git a/app/views/employer_setup/_plan_fields.html.erb b/app/views/employer_setup/_plan_fields.html.erb new file mode 100644 index 0000000..5c07f92 --- /dev/null +++ b/app/views/employer_setup/_plan_fields.html.erb @@ -0,0 +1,11 @@ +
+ <%= plan_fields.text_field :title, label: { text: "Plan Title" }, class: "w-full", data: { add_plan_target: "plan" } %> +
+
+ <%= plan_fields.text_field :plan_id, label: { text: "Plan Id" }, class: "w-full" %> +
+
+ <%= f.select :template_id, options_from_collection_for_select(@plan_templates, :id, :title), { prompt: "Select Plan Template" }, { data: { action: "benefits-template-picker#fetchData" }} %> +
+ + diff --git a/app/views/employer_setup/employer_information.html.erb b/app/views/employer_setup/employer_information.html.erb new file mode 100644 index 0000000..22cf2e6 --- /dev/null +++ b/app/views/employer_setup/employer_information.html.erb @@ -0,0 +1,136 @@ +
+

New Employer Setup

+ <%= form_with model: @employer_setup, url: employer_setup_index_path, local: true do |f| %> +
+
+

General Information

+
+
+
+
+ <%= f.text_field :employer_name, label: { text: "Employer Name" }, class: "w-full" %> +
+
+ <%= f.text_field :group_number, label: { text: "Group/Medical Number" }, class: "w-full" %> +
+
+
+
+ <%= f.text_field :pl_plan_key, label: { text: "Pl Plan Key" }, class: "w-full" %> +
+
+ <%= f.text_field :effective_date, label: { text: "Effective Date" }, class: "w-full" %> +
+
+
+
+ <%= f.select :network_provider, options_for_select(["Cigna", "Medcost"]), label: { text: "Provider Network" }, class: "w-full" %> +
+
+
+ + No file chosen + <%= f.file_field :employer_logo, class: "hidden", id: "file_upload_input" %> +
+ +
+

Plans Information

+
+
+
+
+ <% @employer_setup.plans.each_with_index do |plan, index| %> + <%= f.fields_for :plans, plan, child_index: index do |plan_fields| %> + + <% if index == 0 %> +
+
">
+
+
-ml-[6px] z-2 w-full"> + <%= "Plan 1" %> +
+ <%= render 'plan_fields', plan_fields: plan_fields, f: f, index: index %> +
+
+ <%= plan_fields.fields_for :plan_benefits do |plan_benefits_fields| %> +
+
+ <%= render 'plan_benefits_desc_fields', plan_benefits_fields: plan_benefits_fields %> +
+
+ <%= render 'plan_benefit_only_fields', plan_benefits_fields: plan_benefits_fields %> +
+ +
+ <% end %> +
+ <%= plan_fields.hidden_field :_destroy %> + <%= button_tag "Remove Plan 1", class: "cursor-pointer bg-deepcove hover:bg-brightlava text-xl font-bold text-copper hover:text-platinum py-2 px-4 font-semibold leading-tight rounded-lg border-3 border-copper w-full", data: { action: "add-plan#remove" } %> +
+
+
+ <% else %> +
+
">
+
-ml-[6px] z-2 w-full"> + <%= "Plan #{index + 1}" %> +
+ <%= render 'plan_fields', plan_fields: plan_fields, f: f, index: index %> + <%= plan_fields.fields_for :plan_benefits do |plan_benefits_fields| %> + <%= render 'plan_benefits_fields', plan_benefits_fields: plan_benefits_fields %> + <% end %> +
+ <%= plan_fields.hidden_field :_destroy %> + <%= button_tag "Remove Plan #{index + 1}", class: "cursor-pointer bg-deepcove text-brightlava py-2 px-4 font-semibold leading-tight rounded border-3 border-#{EmployerSetupPlansForm::PLAN_COLORS[index]} w-full", data: { action: "add-plan#remove" } %> +
+
+ <% end %> + + <% end %> + <% end %> + <%= button_tag "Add a Plan", class: "cursor-pointer text-2xl font-bold py-2 pr-6 mt-10 w-[calc(24%-1rem)] w-1/4 min-h-[940px] text-[#E0E0E0] rounded-lg font-medium border border-[#E0E0E0] bg-[#173057] hover:bg-transparent hover:shadow-[0_0_10px_3px_#93c5fd] transition-colors duration-150", data: { action: "add-plan#add", add_plan_target: "button" } %> + +
+
+ +
+

Alternative Network Information

+
+
+
+
+ <%= button_tag "Add a Regional Logo", class: "cursor-pointer text-lg font-medium py-2 px-4 rounded w-1/7 h-75 my-8 text-[#E0E0E0] rounded-lg border border-[#C2C2C2] hover:shadow-[0_0_10px_3px_#93c5fd]", data: { action: "add-alt-network-logo#add", add_alt_network_logo_target: "button" } %> +
+ +
+
+ <%= f.submit "Submit" %> +
+
+ <% end %> +
diff --git a/app/views/employer_setup/general_information.html.erb b/app/views/employer_setup/general_information.html.erb index 65a5af6..9714876 100644 --- a/app/views/employer_setup/general_information.html.erb +++ b/app/views/employer_setup/general_information.html.erb @@ -1,8 +1,8 @@ -
+

New Employer Setup

General Information

<%= form_with model: @form, url: employer_setup_index_path, local: true do |f| %> -
+
<%= f.text_field :name, label: { text: "Employer Name" }, class: "w-full" %> @@ -16,12 +16,12 @@ <%= f.text_field :pl_plan_key, label: { text: "Pl Plan Key" }, class: "w-full" %>
- <%= f.text_field :effect_date, label: { text: "Effective Date" }, class: "w-full" %> + <%= f.text_field :effective_date, label: { text: "Effective Date" }, class: "w-full" %>
- <%= f.select :network, options_for_select([["Cigna", "cig"], ["Cigna+Regional", "cig+"], ["Medcost", "med"]]), label: { text: "Provider Network" }, data: { controller: "form-toggle", action: "change->form-toggle#toggleDivs" }, class: "w-full" %> + <%= f.select :network, options_for_select(["Cigna", "Cigna+Regional", "Medcost"]), label: { text: "Provider Network" }, data: { controller: "form-toggle", action: "change->form-toggle#toggleDivs" }, class: "w-full" %>
diff --git a/app/views/employer_setup/network_exceptions.html.erb b/app/views/employer_setup/network_exceptions.html.erb index 460075f..f577c56 100644 --- a/app/views/employer_setup/network_exceptions.html.erb +++ b/app/views/employer_setup/network_exceptions.html.erb @@ -2,12 +2,14 @@

New Employer Setup

Provider Network

<%= form_with model: @form, url: employer_setup_index_path, local: true do |f| %> -
-
- <%= button_tag "Add a Regional Logo", class: "cursor-pointer text-lg font-medium py-2 px-4 rounded w-1/7 h-75 my-8 text-[#E0E0E0] rounded-lg border border-[#C2C2C2] hover:shadow-[0_0_10px_3px_#93c5fd]", data: { action: "add-alt-network-logo#add", add_alt_network_logo_target: "button" } %> + +
+
+ <%= button_tag "Add a Regional Logo", class: "cursor-pointer text-lg font-medium py-2 px-4 rounded w-1/7 h-75 my-8 text-[#E0E0E0] rounded-lg border border-[#C2C2C2] hover:shadow-[0_0_10px_3px_#93c5fd]", data: { action: "add-alt-network-logo#add", add_alt_network_logo_target: "button" } %> +
-
+ <%= f.hidden_field :pl_plan_key, value: "fake" %> <%= f.submit "Continue to Summary" %>
+ + <% end %>
diff --git a/app/views/employer_setup/plans.html.erb b/app/views/employer_setup/plans.html.erb index 084efea..1bb1bf7 100644 --- a/app/views/employer_setup/plans.html.erb +++ b/app/views/employer_setup/plans.html.erb @@ -3,12 +3,11 @@

Medical Plans

<%= form_with model: @form, url: employer_setup_index_path, local: true do |f| %> - <%= f.text_field :pl_plan_key, label: { text: "Employer PL Plan Key" }, class: "justify-self-start" %>
<%= f.fields_for :benefit_descs do |plan_benefit_fields| %> - <%= plan_benefit_fields.text_field :plan_id, class: "hidden", value: "descriptions" %> + <%= plan_benefit_fields.hidden_field :plan_id, value: "descriptions" %> <% @form.benefits_template.each do |bene| %>
<%= plan_benefit_fields.text_field "benefit_#{bene.sequence}", label: { text: "Benefit Description #{bene.sequence}" }, value: "#{bene.benefit_desc}", class: "w-full" %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index c9bbee4..c6c3cae 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -13,9 +13,9 @@
-
-
-
+
+
+
<%= yield %>
@@ -23,3 +23,4 @@
+ diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb index 90b6ce3..d03b2af 100644 --- a/app/views/welcome/index.html.erb +++ b/app/views/welcome/index.html.erb @@ -1,13 +1,13 @@ -
+
Baclight
- Baclight + Baclight
- Baclight + Baclight
diff --git a/app/views/welcome/tailwind_colors.html.erb b/app/views/welcome/tailwind_colors.html.erb new file mode 100644 index 0000000..d0b01f8 --- /dev/null +++ b/app/views/welcome/tailwind_colors.html.erb @@ -0,0 +1,17 @@ +
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+
co
+ diff --git a/card_FairosRxIDCard.jrxml b/card_FairosRxIDCard.jrxml new file mode 100644 index 0000000..26dc4fa --- /dev/null +++ b/card_FairosRxIDCard.jrxml @@ -0,0 +1,878 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/card_view.sql b/card_view.sql new file mode 100644 index 0000000..aa08a9c --- /dev/null +++ b/card_view.sql @@ -0,0 +1,199 @@ +USE [VHCS_HIPAA] +GO + +/****** Object: View [dbo].[HLIDCardsViewEgg] Script Date: 12/3/2025 12:34:01 PM ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + + + + + +ALTER VIEW [dbo].[HLIDCardsViewEgg] +AS + SELECT dbo.HLIDCardsEgg.Facility, + dbo.HLIDCardsEgg.Division AS Division, + UPPER(dbo.HLIDCardsEgg.FullName) AS FullName, + 'XXX-XX-' + SUBSTRING(dbo.HLIDCardsEgg.SSN, 6, 4) AS SSN, + dbo.HLIDCardsEgg.MedicalCoverage, + dbo.HLIDCardsEgg.MedicalEffDate, + dbo.HLIDCardsEgg.MedicalGroupNum, + dbo.HLIDCardsEgg.DentalCoverage, + dbo.HLIDCardsEgg.DentalEffDate, + dbo.HLIDCardsEgg.DentalGroupNum, + dbo.HLIDCardsEgg.CardType, + dbo.HLIDCardProvider.ProviderCode, + dbo.HLIDCardProvider.ProviderLine1, + dbo.HLIDCardProvider.ProviderLine2, + dbo.HLIDCardProvider.ProviderLine3, + dbo.HLIDCardProvider.ProviderLine4, + dbo.HLIDCardProvider.ProviderLine5, + dbo.HLIDCardProvider.ProviderLine6, + dbo.HLIDCardProvider.ProviderLine7, + dbo.HLIDCardProvider.ProviderLine8, + dbo.HLIDCardProvider.ProviderLine9, + dbo.HLIDCardProvider.ProviderLine10, + dbo.HLIDCardProvider.ProviderLine11, + dbo.HLIDCardProvider.MailTo, + dbo.HLIDCardProvider.MailTo2, + dbo.HLIDCardProvider.ClaimTo1, + dbo.HLIDCardProvider.ClaimTo2, + dbo.HLIDCardProvider.ClaimTo3, + dbo.HLIDCardProvider.ClaimTo4, + dbo.HLIDCardProvider.ClaimTo5, + dbo.HLIDCardProvider.ClaimTo6, + dbo.HLIDCardProvider.ClaimTo7, + dbo.HLIDCardProvider.ClaimTo8, + dbo.HLIDCardProvider.ClaimTo9, + dbo.HLIDCardProvider.ClaimTo10, + dbo.HLIDCardProvider.ClaimTo11, + dbo.HLIDCardProvider.ContactLine1, + dbo.HLIDCardProvider.ContactLine2, + dbo.HLIDCardProvider.ContactLine3, + dbo.HLIDCardsEgg.GroupNumber, + REPLACE(dbo.HLIDCardsEgg.SSN, '-', '') AS FamilyId, dbo.HLIDCardsEgg.GroupNumber AS GroupNo, + + CASE + WHEN dbo.HLIDCardsEgg.PLPlanKey = 56 -- HealthBus/TCRM BENEFITS - Plan Specific RXGroupID + THEN (Select RXGroupID From HLRXCrosRef_Product Where PLPlanKey = dbo.HLIDCardsEgg.PLPlanKey And PBProductKey = dbo.HLIDCardsEgg.PBProductKey) + ELSE dbo.HLRXCrosRef.RXGroupID + END as RXGroupID, + + dbo.HLRXCrosRef.HelpDesk, + dbo.HLRXCrosRef.CustomerService, + dbo.HLRXCrosRef.WebUrl, + dbo.HLIDCardProvider.MailTo2 AS Expr1, + + CASE + WHEN CardType = 'T' THEN '1-800-676-1182' + WHEN CardType = 'I' THEN '1-800-676-1182' + WHEN CardType = 'A' THEN '1-800-676-1182' + WHEN CardType = 'J' THEN '1-800-676-1182' + WHEN CardType = 'K' THEN '1-800-676-1182' + ELSE 'Britton Benefits at 1-800-676-1182' + END Line3, + + ISNULL((Select DependentName + From (Select distinct TOP(1) dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber) A),'') as Dependent1, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 1 ROWS -- backup 1 row + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent2, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 2 ROWS -- backup 2 rows + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent3, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 3 ROWS -- backup 3 rows + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent4, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 4 ROWS -- backup 4 rows + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent5, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 5 ROWS -- backup 5 rows + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent6, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 6 ROWS -- backup 6 rows + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent7, + ISNULL((Select DependentName + From (Select distinct dbo.HLEggIdCardDependent.DependentName DependentName, dbo.HLEggIdCardDependent.SequenceNumber SequenceNumber + From dbo.HLEggIdCardDependent Where dbo.HLEggIdCardDependent.FamilyId = dbo.HLIDCardsEgg.SSN + order by dbo.HLEggIdCardDependent.SequenceNumber + OFFSET 7 ROWS -- backup 7 rows + FETCH NEXT 1 ROWS ONLY) A),'') as Dependent8, + + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 1), '') as BenDesc1, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 1), '') as Ben1, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 2), '') as BenDesc2, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 2), '') as Ben2, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 3), '') as BenDesc3, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 3), '') as Ben3, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 4), '') as BenDesc4, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 4), '') as Ben4, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 5), '') as BenDesc5, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 5), '') as Ben5, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 6), '') as BenDesc6, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 6), '') as Ben6, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 7), '') as BenDesc7, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 7), '') as Ben7, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 8), '') as BenDesc8, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 8), '') as Ben8, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 9), '') as BenDesc9, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 9), '') as Ben9, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 10),'') as BenDesc10, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 10),'') as Ben10, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 11),'') as BenDesc11, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 11),'') as Ben11, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 12),'') as BenDesc12, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 12),'') as Ben12, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 13),'') as BenDesc13, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 13),'') as Ben13, + ISNULL((Select h.BenefitDesc From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 14),'') as BenDesc14, + ISNULL((Select h.Benefit From HLEgglestonCardBenefit h Where PlanId = dbo.HLIDCardsEgg.PBProductKey AND h.Sequence = 14),'') as Ben14, + + dbo.HLIDCardsEgg.PLPlanKey, + dbo.HLIDCardsEgg.MBMemberKey, + dbo.HLIDCardProvider.ProviderLookup1, + dbo.HLIDCardProvider.ProviderLookup2, + dbo.HLIDCardProvider.Precert1, + dbo.HLIDCardProvider.Precert2, + dbo.HLIDCardProvider.Precert3, + dbo.HLIDCardProvider.Precert4, + dbo.HLIDCardProvider.Precert5, + dbo.HLIDCardProvider.Precert6, + + CASE + WHEN dbo.HLIDCardsEgg.PLPlanKey IN (13, 21, 39, 49, 50, 51, 20, 52, 19, 53, 54, 56, 58, 60, 61, 62) + THEN 'Benefits are not insured by Cigna Healthcare or affiliates' + ELSE '' + END AS MISCDATA, + + CASE WHEN dbo.HLIDCardsEgg.PLPlanKey IN (21,39) THEN 'CIGNA' ELSE '' END AS PPODATA, + CASE WHEN dbo.HLIDCardsEgg.PLPlanKey IN (21,39) THEN 'PPO' ELSE '' END AS PPODATA2, + CASE WHEN dbo.HLIDCardsEgg.PLPlanKey IN (21,39) THEN '"S"' ELSE '' END AS PPODATA3, + + CASE + WHEN LEN(FullName) - LEN(REPLACE(FullName,' ','')) > 2 + THEN FullName + WHEN LEN(FullName) - LEN(REPLACE(FullName,' ','')) > 1 + THEN SUBSTRING(SUBSTRING(FullName , CHARINDEX(' ', FullName ) + 1, LEN(FullName )), + CHARINDEX(' ', SUBSTRING(FullName , CHARINDEX(' ', FullName ) + 1, LEN(FullName )) ) + 1, + LEN(SUBSTRING(FullName , CHARINDEX(' ', FullName ) + 1, LEN(FullName )) )) + WHEN LEN(FullName) - LEN(REPLACE(FullName,' ','')) > 0 + THEN SUBSTRING(FullName , CHARINDEX(' ', FullName ) + 1, LEN(FullName )) + ELSE FullName + END AS LastName + + FROM dbo.HLIDCardsEgg + INNER JOIN dbo.HLIDCardProvider + ON dbo.HLIDCardsEgg.CardType = dbo.HLIDCardProvider.ProviderCode + INNER JOIN dbo.HLRXCrosRef + ON dbo.HLRXCrosRef.GroupNo = dbo.HLIDCardsEgg.GroupNumber + WHERE dbo.HLIDCardsEgg.PBProductKey IN (Select PBProductKey From PBProduct Where FullDescription NOT LIKE '%LIFE%' AND FullDescription NOT LIKE '%VISION%') + AND dbo.HLIDCardsEgg.PBProductKey <> 1059 -- Grace Chapel Vision + +GO + + diff --git a/config/application.rb b/config/application.rb index f9b478d..d625241 100644 --- a/config/application.rb +++ b/config/application.rb @@ -18,7 +18,7 @@ require "action_cable/engine" # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) -module Railsondocker +module Baclight class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 7.2 diff --git a/config/routes.rb b/config/routes.rb index c641725..13cc9be 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Rails.application.routes.draw do - resources :employer_setup, only: [:new, :create] + resources :employer_setup, only: [:new, :create, :edit, :update] get 'id_card_benefits_templates/get_template_benefits/:id', to: 'id_card_benefits_templates#get_template_benefits' # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. diff --git a/db/migrate/20251203143745_add_network_provider_to_employer_setup_processes.rb b/db/migrate/20251203143745_add_network_provider_to_employer_setup_processes.rb new file mode 100644 index 0000000..c574b1d --- /dev/null +++ b/db/migrate/20251203143745_add_network_provider_to_employer_setup_processes.rb @@ -0,0 +1,5 @@ +class AddNetworkProviderToEmployerSetupProcesses < ActiveRecord::Migration[7.0] + def change + add_column :employer_setup_processes, :network_provider, :string + end +end diff --git a/db/migrate/20251204151226_add_network_logo_to_employer_setup_processes.rb b/db/migrate/20251204151226_add_network_logo_to_employer_setup_processes.rb new file mode 100644 index 0000000..556c577 --- /dev/null +++ b/db/migrate/20251204151226_add_network_logo_to_employer_setup_processes.rb @@ -0,0 +1,7 @@ +class AddNetworkLogoToEmployerSetupProcesses < ActiveRecord::Migration[7.2] + def change + add_column :employer_setup_processes, :network_logo, :string + add_column :employer_setup_processes, :card_template, :string + add_column :employer_setup_processes, :pl_plan_key, :string + end +end diff --git a/db/migrate/20251204151452_rename_logo_filename_on_employer_setup_processes.rb b/db/migrate/20251204151452_rename_logo_filename_on_employer_setup_processes.rb new file mode 100644 index 0000000..9b2895e --- /dev/null +++ b/db/migrate/20251204151452_rename_logo_filename_on_employer_setup_processes.rb @@ -0,0 +1,6 @@ +class RenameLogoFilenameOnEmployerSetupProcesses < ActiveRecord::Migration[7.2] + def change + rename_column :employer_setup_processes, :logo_filename, :employer_logo + rename_column :employer_setup_processes, :effect_date, :effective_date + end +end diff --git a/db/migrate/20251205091559_create_network_logos.rb b/db/migrate/20251205091559_create_network_logos.rb new file mode 100644 index 0000000..60695d7 --- /dev/null +++ b/db/migrate/20251205091559_create_network_logos.rb @@ -0,0 +1,12 @@ +class CreateNetworkLogos < ActiveRecord::Migration[7.0] + def change + create_table :alternate_network_logos do |t| + t.string :network_logo + t.string :exception_type + t.string :exception_value + t.belongs_to :employer_setup_process, null: false, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/migrate/20251205145750_create_card_logo_files.rb b/db/migrate/20251205145750_create_card_logo_files.rb new file mode 100644 index 0000000..fc2bcb6 --- /dev/null +++ b/db/migrate/20251205145750_create_card_logo_files.rb @@ -0,0 +1,12 @@ +class CreateCardLogoFiles < ActiveRecord::Migration[7.2] + def change + create_table :card_logo_files do |t| + t.string :filename + t.string :logo_type + t.binary :image + t.integer :pl_plan_key + + t.timestamps + end + end +end diff --git a/db/migrate/20251205150421_add_pl_plan_key_to_employer_setup_processes.rb b/db/migrate/20251205150421_add_pl_plan_key_to_employer_setup_processes.rb new file mode 100644 index 0000000..dcf27ff --- /dev/null +++ b/db/migrate/20251205150421_add_pl_plan_key_to_employer_setup_processes.rb @@ -0,0 +1,5 @@ +class AddPlPlanKeyToEmployerSetupProcesses < ActiveRecord::Migration[7.2] + def change + add_column :employer_setup_processes, :pl_plan_key, :string + end +end diff --git a/db/migrate/20251205215553_add_plan_id_to_plan.rb b/db/migrate/20251205215553_add_plan_id_to_plan.rb new file mode 100644 index 0000000..61c38be --- /dev/null +++ b/db/migrate/20251205215553_add_plan_id_to_plan.rb @@ -0,0 +1,5 @@ +class AddPlanIdToPlan < ActiveRecord::Migration[7.2] + def change + add_column :plans, :plan_id, :integer + end +end diff --git a/db/migrate/20251209182135_add_employer_set_up_process_to_card_logo_files.rb b/db/migrate/20251209182135_add_employer_set_up_process_to_card_logo_files.rb new file mode 100644 index 0000000..87b81b5 --- /dev/null +++ b/db/migrate/20251209182135_add_employer_set_up_process_to_card_logo_files.rb @@ -0,0 +1,5 @@ +class AddEmployerSetUpProcessToCardLogoFiles < ActiveRecord::Migration[7.2] + def change + add_reference :card_logo_files, :employer_setup_process, null: false, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 537c9bd..acc2055 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2025_12_02_142512) do +ActiveRecord::Schema[7.2].define(version: 2025_12_09_182135) do create_table "action_text_rich_texts", force: :cascade do |t| t.string "name", null: false t.text "body" @@ -49,16 +49,41 @@ ActiveRecord::Schema[7.2].define(version: 2025_12_02_142512) do t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true end + create_table "alternative_network_logos", force: :cascade do |t| + t.string "network_logo" + t.string "exception_type" + t.string "exception_value" + t.bigint "employer_setup_process_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["employer_setup_process_id"], name: "index_alternative_network_logos_on_employer_setup_process_id" + end + + create_table "card_logo_files", force: :cascade do |t| + t.string "filename" + t.string "logo_type" + t.binary "image" + t.integer "pl_plan_key" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.bigint "employer_setup_process_id", null: false + t.index ["employer_setup_process_id"], name: "index_card_logo_files_on_employer_setup_process_id" + end + create_table "employer_setup_processes", force: :cascade do |t| t.string "employer_name" t.string "group_number" - t.string "effect_date" - t.string "logo_filename" + t.string "effective_date" + t.string "employer_logo" t.string "form_method" t.string "status" t.string "current_step" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "network_provider" + t.string "network_logo" + t.string "card_template" + t.string "pl_plan_key" end create_table "id_card_benefits", force: :cascade do |t| @@ -92,11 +117,90 @@ ActiveRecord::Schema[7.2].define(version: 2025_12_02_142512) do t.bigint "employer_setup_process_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "plan_id" t.index ["employer_setup_process_id"], name: "index_plans_on_employer_setup_process_id" end + create_table "sample_id_cards", force: :cascade do |t| + t.string "family_id" + t.string "network_image" + t.integer "pl_plan_key" + t.integer "primary_mb_member_key" + t.string "group_number" + t.string "rx_group" + t.string "employer_name" + t.string "full_name" + t.string "medical_eff_date" + t.string "provider_code" + t.string "provider_line_1" + t.string "provider_line_2" + t.string "provider_line_3" + t.string "provider_line_4" + t.string "provider_line_5" + t.string "provider_line_6" + t.string "provider_line_7" + t.string "provider_line_8" + t.string "provider_line_9" + t.string "provider_line_10" + t.string "provider_line_11" + t.string "mail_to" + t.string "claim_to_1" + t.string "claim_to_2" + t.string "claim_to_3" + t.string "claim_to_4" + t.string "claim_to_5" + t.string "claim_to_6" + t.string "claim_to_7" + t.string "claim_to_8" + t.string "claim_to_9" + t.string "claim_to_10" + t.string "claim_to_11" + t.string "customer_service" + t.string "web_url" + t.string "dependent_1" + t.string "dependent_2" + t.string "dependent_3" + t.string "dependent_4" + t.string "dependent_5" + t.string "dependent_6" + t.string "dependent_7" + t.string "dependent_8" + t.string "benefit_desc_1" + t.string "benefit_1" + t.string "benefit_desc_2" + t.string "benefit_2" + t.string "benefit_desc_3" + t.string "benefit_3" + t.string "benefit_desc_4" + t.string "benefit_4" + t.string "benefit_desc_5" + t.string "benefit_5" + t.string "benefit_desc_6" + t.string "benefit_6" + t.string "benefit_desc_7" + t.string "benefit_7" + t.string "benefit_desc_8" + t.string "benefit_8" + t.string "benefit_desc_9" + t.string "benefit_9" + t.string "benefit_desc_10" + t.string "benefit_10" + t.string "benefit_desc_11" + t.string "benefit_11" + t.string "benefit_desc_12" + t.string "benefit_12" + t.string "benefit_desc_13" + t.string "benefit_13" + t.string "benefit_desc_14" + t.string "benefit_14" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" + add_foreign_key "alternative_network_logos", "employer_setup_processes" + add_foreign_key "card_logo_files", "employer_setup_processes" add_foreign_key "id_card_benefits", "id_card_benefits_templates" add_foreign_key "plan_benefits", "plans" add_foreign_key "plans", "employer_setup_processes" diff --git a/db/seeds.rb b/db/seeds.rb index 35e1b10..2135f6a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,20 +1,32 @@ -# frozen_string_literal: true +benefit_descriptions = ["Primary Visit", + "Specialist Visit", + "Urgent Care", + "INN–Ind Ded", + "INN–Family Ded", + "OON–Ind Ded", + "OON–Family Ded", + "Co-Insurance", + "INN–Ind OOP", + "INN–Family OOP", + "OON–Ind OOP", + "OON–Family OOP", + "Emergency Room", + "Preventive Care"] + +default = IdCardBenefitsTemplate.create(title: "BLANK") +benefit_descriptions.each_with_index do |bene, i| + IdCardBenefit.create(sequence: i + 1, benefit_desc: bene, id_card_benefits_template: default) +end + +temp_1 = IdCardBenefitsTemplate.create(title: "Rebekah's Template") +(1..14).each do |seq| + IdCardBenefit.create(sequence: seq, benefit: "greatest hits vol #{seq}", id_card_benefits_template: temp_1) +end + +temp_2 = IdCardBenefitsTemplate.create(title: "Jason's Template") +(1..14).each do |seq| + IdCardBenefit.create(sequence: seq, benefit: "#{seq} hit wonder", id_card_benefits_template: temp_2) +end + -# This file should ensure the existence of records required to run the application in every environment (production, -# development, test). The code here should be idempotent so that it can be executed at any point in every environment. -# The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup). -# -# Example: -# -# ["Action", "Comedy", "Drama", "Horror"].each do |genre_name| -# MovieGenre.find_or_create_by!(name: genre_name) -# end -# Pull one planid, return data, run this -# data.each do |bene| -# IdCardBenefit.create( -# benefit_desc: bene.benefit_desc, -# sequence: bene.sequence, -# id_card_benefits_template: temp -# ) -# end \ No newline at end of file diff --git a/scratch.rb b/scratch.rb index e69de29..5adb3f2 100644 --- a/scratch.rb +++ b/scratch.rb @@ -0,0 +1,132 @@ +temp = IdCardBenefitsTemplate.create(title: "Testing Template") +(1..14).each do |bene| + IdCardBenefit.create(sequence: bene, benefit: "value_#{bene}", id_card_benefits_template: temp) +end + +3.times do |i| + puts i +end + +
co
+
ve
+
co
+
ve
+
co
+
ve
+
co
+
ve
+
co
+
ve
+
co
+ +doc = Docx::Document.open('tmp/BRYAN PEST CONTROL ID CARD SET UP REVISION.docx') +data_lines = doc.paragraphs.map { |p| p.to_s.strip }.reject!(&:empty?) +data_lines.each_with_index do |p, i| + if p.to_s.length > 1 + puts "-#{i}----------------------------------------------------------" + puts p + end +end + +doc.bookmarks.each_pair do |bookmark_name, bookmark_object| + puts bookmark_object.text +end + +data_lines.index { |s| s == 'Medical Plan'} + + + +Zip::File.open('tmp/BRYAN PEST CONTROL ID CARD SET UP REVISION.docx') do |zip_file| + zip_file.each do |entry| + if entry.name.start_with?('word/media/') && !entry.directory? + filename = File.basename(entry.name) + image_data = entry.get_input_stream.read + extracted_images << { filename: filename, data: image_data } + end + end + end + +Sitation +[8,9,10,15,19,40] +plan 1 [48..62] +plan 2 [65..79] +plan 3 [85..99] + +Bryan + + + + + + + +group_number +employer_name +effect_date +logo_name + +plans: +same as template + +process: + +{ + +} + + +BenefitsWordDocProcessor.new('tmp/BRYAN PEST CONTROL ID CARD SET UP REVISION.docx').call + +sample_id_cards +rails g model SampleIdCard family_id:string network_image:string pl_plan_key:integer primary_mb_member_key:integer employer_name:string full_name:string medical_eff_date:string provider_code:string provider_line_1:string provider_line_2:string provider_line_3:string provider_line_4:string provider_line_5:string provider_line_6:string provider_line_7:string provider_line_8:string provider_line_9:string provider_line_10:string provider_line_11:string mail_to:string claim_to_1:string claim_to_2:string claim_to_3:string claim_to_4:string claim_to_5:string claim_to_6:string claim_to_7:string claim_to_8:string claim_to_9:string claim_to_10:string claim_to_11:string group_number:string rx_group:string customer_service:string web_url:string dependent_1:string dependent_2:string dependent_3:string dependent_4:string dependent_5:string dependent_6:string dependent_7:string dependent_8:string benefit_desc_1:string benefit_1:string benefit_desc_2:string benefit_2:string benefit_desc_3:string benefit_3:string benefit_desc_4:string benefit_4:string benefit_desc_5:string benefit_5:string benefit_desc_6:string benefit_6:string benefit_desc_7:string benefit_7:string benefit_desc_8:string benefit_8:string benefit_desc_9:string benefit_9:string benefit_desc_10:string benefit_10:string benefit_desc_11:string benefit_11:string benefit_desc_12:string benefit_12:string benefit_desc_13:string benefit_13:string benefit_desc_14:string benefit_14:string + + +:provider_line_1, :provider_line_2, :provider_line_3, :provider_line_4, :provider_line_5, :provider_line_6, +:provider_line_7, :provider_line_8, :provider_line_9, :provider_line_10, :provider_line_11, +:claim_to_1, :claim_to_2, :claim_to_3, :claim_to_4, :claim_to_5, :claim_to_6, +:claim_to_7, :claim_to_8, :claim_to_9, :claim_to_10, :claim_to_11 + +claim_to + +temp = IdCardBenefitsTemplate.first +seed_data = temp.attributes.except("id", "created_at", "updated_at") +seed_data_bene = temp.id_card_benefits.order(:sequence).pluck(:benefit) + +IdCardBenefitsTemplate.find() +IdCardBenefitsTemplate.where(id: IdCardBenefitsTemplate.group(:user_id).select('MAX(id)')) + + + + + +BenefitsWordDocProcessor.new('').call + + +e_names = EmployerSetupProcess.where.not(employer_name: [nil, ""]).pluck(:employer_name).uniq + +substrings_to_remove = ["health plan", "the", "inc", "llc"] +regex = Regexp.union(substrings_to_remove) +trimmed_e_names = e_names.map { |e_name| e_name.downcase.gsub(regex, "").squish } + +sql_query = "SELECT PLPlanKey, PlanId, Company FROM PLPlanHeader WHERE PLPlanKey >= 58" +plan_headers = VhcsRecord.connection.select_all(sql_query) + +trimmed_e_names.each do |e_name| + match = plan_headers.select { |ph| e_name.downcase.include?(ph["Company"].downcase) || ph["Company"].downcase.include?(e_name.downcase) } + if match.present? + puts match + else + puts "#{e_name} not matched" + end +end + +original_string = "How to chop an onion? This is a test string." +substrings_to_remove = ["to", "an", "a", "the"] + +# Create a regular expression from the array of substrings, +# using the | (OR) operator to match any of them. +# The `\b` word boundary ensures that "an" in "another" isn't removed. +regex = Regexp.union(substrings_to_remove.map { |s| /\b#{Regexp.escape(s)}\b/ }) + +# Use gsub with the regular expression to replace all occurrences with an empty string. +cleaned_string = original_string.gsub(regex, '') \ No newline at end of file diff --git a/spec/helpers/id_card_employers_helper_spec.rb b/spec/helpers/id_card_employers_helper_spec.rb new file mode 100644 index 0000000..93d26e9 --- /dev/null +++ b/spec/helpers/id_card_employers_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the IdCardEmployersHelper. For example: +# +# describe IdCardEmployersHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe IdCardEmployersHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/requests/id_card_employers_spec.rb b/spec/requests/id_card_employers_spec.rb new file mode 100644 index 0000000..5cdfd24 --- /dev/null +++ b/spec/requests/id_card_employers_spec.rb @@ -0,0 +1,46 @@ +require 'rails_helper' + +RSpec.describe "IdCardEmployers", type: :request do + describe "GET /index" do + it "returns http success" do + get "/id_card_employers/index" + expect(response).to have_http_status(:success) + end + end + + describe "GET /show" do + it "returns http success" do + get "/id_card_employers/show" + expect(response).to have_http_status(:success) + end + end + + describe "GET /new" do + it "returns http success" do + get "/id_card_employers/new" + expect(response).to have_http_status(:success) + end + end + + describe "GET /create" do + it "returns http success" do + get "/id_card_employers/create" + expect(response).to have_http_status(:success) + end + end + + describe "GET /edit" do + it "returns http success" do + get "/id_card_employers/edit" + expect(response).to have_http_status(:success) + end + end + + describe "GET /update" do + it "returns http success" do + get "/id_card_employers/update" + expect(response).to have_http_status(:success) + end + end + +end diff --git a/spec/views/id_card_employers/create.html.tailwindcss_spec.rb b/spec/views/id_card_employers/create.html.tailwindcss_spec.rb new file mode 100644 index 0000000..a4881a4 --- /dev/null +++ b/spec/views/id_card_employers/create.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "id_card_employers/create.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/id_card_employers/edit.html.tailwindcss_spec.rb b/spec/views/id_card_employers/edit.html.tailwindcss_spec.rb new file mode 100644 index 0000000..9749997 --- /dev/null +++ b/spec/views/id_card_employers/edit.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "id_card_employers/edit.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/id_card_employers/index.html.tailwindcss_spec.rb b/spec/views/id_card_employers/index.html.tailwindcss_spec.rb new file mode 100644 index 0000000..89457a6 --- /dev/null +++ b/spec/views/id_card_employers/index.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "id_card_employers/index.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/id_card_employers/new.html.tailwindcss_spec.rb b/spec/views/id_card_employers/new.html.tailwindcss_spec.rb new file mode 100644 index 0000000..5a7b392 --- /dev/null +++ b/spec/views/id_card_employers/new.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "id_card_employers/new.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/id_card_employers/show.html.tailwindcss_spec.rb b/spec/views/id_card_employers/show.html.tailwindcss_spec.rb new file mode 100644 index 0000000..2731c62 --- /dev/null +++ b/spec/views/id_card_employers/show.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "id_card_employers/show.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/views/id_card_employers/update.html.tailwindcss_spec.rb b/spec/views/id_card_employers/update.html.tailwindcss_spec.rb new file mode 100644 index 0000000..06d9280 --- /dev/null +++ b/spec/views/id_card_employers/update.html.tailwindcss_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe "id_card_employers/update.html.tailwindcss", type: :view do + pending "add some examples to (or delete) #{__FILE__}" +end