Advertisement
Guest User

Untitled

a guest
Jun 14th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rails 35.05 KB | None | 0 0
  1. class PatientsController < ApplicationController
  2.   layout  'patient'
  3.   before_filter :set_visit_id, :except => :checkin  
  4.  
  5.   def index
  6.     # Use this to do the superfast AJAX autocomplete
  7.     begin
  8.       @patients = Patient.find_all_by_practice_id(session[:practice_id], :select => 'id, search_helper,first_name',:order=>'first_name')
  9.     rescue => e
  10.       render :text=> " #{e.message}"
  11.     end
  12.   end
  13.  
  14.   #OBSERVE_FIELD for the responsible party name
  15.   def search_responsible_party
  16.     conditions_string = "practice_id = ? "
  17.     conditions_array = []
  18.     conditions_array.<< session[:practice_id]
  19.    
  20.     if (!params[:first_name].empty?)
  21.       conditions_string += " AND first_name LIKE ? "
  22.       conditions_array.<< params[:first_name] + "%"
  23.     end
  24.    
  25.     if (!params[:middle_name].empty?)
  26.         conditions_string += " AND middle_name LIKE ? "
  27.         conditions_array.<< params[:middle_name] + "%"
  28.     end  
  29.    
  30.     if (!params[:last_name].empty?)
  31.         conditions_string += " AND last_name LIKE ? "
  32.         conditions_array.<< params[:last_name] + "%"
  33.     end  
  34.    
  35.     begin
  36.       @responsible_party = ResponsibleParty.find :all, :conditions => [conditions_string] + conditions_array
  37.     rescue => e
  38.       render :text=> " #{e.message}"
  39.     end  
  40.   end
  41.  
  42.   def fill_responsible_party
  43.     begin    
  44.       if params[:id] != ""
  45.         @responsible = ResponsibleParty.find(params[:id])
  46.         render :partial=>'responsible_party_auto_fill'
  47.       else
  48.         render :text=>'<font color=red>Responsible Party Not Found.</font>'
  49.       end
  50.     rescue => e
  51.      render :text=> " #{e.message}"
  52.     end  
  53.   end
  54.  
  55.   def find
  56.     begin
  57.       @patient = Patient.identify(params[:patient], session[:practice_id])
  58.       if (@patient)
  59.         redirect_to(:action=>"show", :id=>@patient.id)
  60.       else
  61.         flash[:error] = "Could not find patient. Please try again..."
  62.         redirect_to(:action=>:index)
  63.       end
  64.     rescue => e
  65.       render :text=> " #{e.message}"
  66.     end
  67.   end
  68.  
  69.   def search_patient
  70.     if params[:search_by] == "first_name"
  71.       @patient_result = Patient.find(:all,:conditions=>["first_name like ? and practice_id =? ", params[:id] +"%",session[:practice_id]])
  72.     elsif params[:search_by] == "last_name"
  73.       @patient_result = Patient.find(:all,:conditions=>["last_name like ? and practice_id =?", params[:id] +"%",session[:practice_id]])    
  74.     else
  75.        @patient_result = Patient.find(:all,:conditions=>["first_name like ? or last_name like ? and practice_id =?", params[:id] +"%",params[:id] +"%",session[:practice_id]])    
  76.     end  
  77.     @no_of_record= @patient_result.length
  78.     paging
  79.     if @patient_result == []
  80.        render :text=>'<font color=red>No Record Found</font>'
  81.     else
  82.        render :partial=>'patient_result'
  83.     end
  84.   end
  85.   def new
  86.     begin
  87.       @carriers = Carrier.find_all_by_practice_id(session[:practice_id]).map {|u| [u.name, u.id]}
  88.       @patient = Patient.new
  89.       @responsible_party = ResponsibleParty.new
  90.       @policy = Policy.new
  91.       @referal_provider = @patient.referal_providers.new    
  92.       @doctors = Doctor.find_all_by_practice_id(session[:practice_id],:include=>"user",:select=>["id,first_name,last_name"])
  93.       render(:layout => 'new_patient', :action => 'account')
  94.     rescue => e
  95.       render :text=> " #{e.message}"
  96.     end
  97.   end
  98.  
  99.   def show
  100.     # Here again, we search within the practice to avoid hack attacks
  101.     begin
  102.       @patient = Patient.find(params[:id], :include => :policies)
  103.       @patient.set_amounts_due
  104.       @record = @patient.most_recent_record
  105.       @responsible_party = @patient.responsible_party
  106.       @referal_provider = @patient.referal_providers.first
  107.     rescue => e
  108.       render :text=> " #{e.message}"
  109.     end
  110.   end
  111.  
  112.   def create
  113.     begin
  114.       @carriers = Carrier.find_all_by_practice_id(session[:practice_id]).map {|u| [u.name, u.id]}
  115.       @practice = Practice.find(session[:practice_id])
  116.  
  117.       Patient.transaction do
  118.         @patient = Patient.new(params[:patient])
  119.         @patient.practice_id = @practice.id
  120.         @patient.doctor_id = Doctor.find_by_user_id(session[:user]) if params[:patient][:doctor_id] ==  ""
  121.         @patient.dob = Patient.date_split(params[:patient][:dob])
  122.         if params[:self] == "new"
  123.           @patient.responsible_party = ResponsibleParty.new(params[:responsible_party])
  124.           @patient.responsible_party.practice_id = session[:practice_id]
  125.         elsif params[:self] == "auto_complete"
  126.           responsible = ResponsibleParty.find(params[:responsible_party_id])
  127.           @patient.responsible_party_id = responsible.id
  128.        elsif params[:self] == "self"
  129.           @patient.responsible_party = ResponsibleParty.create(:first_name => params[:patient][:first_name],
  130.                                              :middle_name=>params[:patient][:middle_name],
  131.                                              :last_name => params[:patient][:last_name],
  132.                                              :address => params[:patient][:address],
  133.                                              :apt_suite=> params[:patient][:apt_suite],
  134.                                              :address_line1=> params[:patient][:address_line1],
  135.                                              :city=> params[:patient][:city],
  136.                                              :state=> params[:patient][:state],
  137.                                              :zipcode=> params[:patient][:zipcode],
  138.                                              :email=> params[:patient][:email],
  139.                                              :home_phone=> params[:patient][:primary_phone],
  140.                                              :work_phone=> params[:patient][:alternate_phone],
  141.                                              :cell_phone=> params[:patient][:cell_phone],
  142.                                              :practice_id=>session[:practice_id])
  143.        end
  144.  
  145.         if(params[:referal_provider][:first_name] != "")
  146.        
  147.           @referal_provider = ReferalProvider.new(params[:referal_provider])
  148.           @referal_provider.practice_id = @practice.id
  149.           @referal_provider.save
  150.           @patient.referals.create(:patient_id => @patient.id,
  151.                                   :referal_provider_id => @referal_provider.id,
  152.                                   :creation_date => Time.now )
  153.         end
  154.         if !(params[:policy][:carrier_id] == "Select")
  155.           @patient.policies.create(:patient_id => @patient.id,
  156.                                   :start_at => Patient.date_split(params[:policy][:start_at ]),
  157.                                   :end_at => Patient.date_split(params[:policy][:end_at]),
  158.                                   :carrier_id =>params[:policy][:carrier_id],
  159.                                   :relationship_id => params[:policy][:relationship_id],
  160.                                   :group_number => params[:policy][:group_number],  
  161.                                   :group_name => params[:policy][:group_name],
  162.                                   :copay => params[:policy][:copay],
  163.                                   :copay_type => params[:policy][:copay_type],
  164.                                   :subscriber_first_name => params[:policy][:subscriber_first_name],
  165.                                   :subscriber_last_name => params[:policy][:subscriber_last_name],
  166.                                   :subscriber_apt_suite =>params[:policy][:subscriber_apt_suite],
  167.                                   :subscriber_address_line1 => params[:policy][:subscriber_address_line1],
  168.                                   :subscriber_address=> params[:policy][:subscriber_address],
  169.                                   :subscriber_city => params[:policy][:subscriber_city],
  170.                                   :subscriber_state => params[:policy][:subscriber_state],
  171.                                   :subscriber_zipcode =>params[:policy][:subscriber_zipcode],
  172.                                   :subscriber_DOB => Patient.date_split(params[:policy][:dob]),
  173.                                   :subscriber_sex => params[:policy][:subscriber_sex],
  174.                                   :subscriber_status => params[:policy][:subscriber_status],
  175.                                   :subscriber_number => params[:policy][:subscriber_number],
  176.                                   :subscriber_employer => params[:policy][:subscriber_employer],
  177.                                   :carrier_type => "Primary")
  178.         end
  179.         if !(params[:policy][:carrier_id_sec] == "Select")
  180.          @patient.policies.create(:patient_id => @patient.id,
  181.                                   :start_at => Patient.date_split(params[:policy][:start_at_sec]),
  182.                                   :end_at => Patient.date_split(params[:policy][:end_at_sec]),
  183.                                   :carrier_id => params[:policy][:carrier_id_sec],
  184.                                   :relationship_id => params[:policy][:relationship_id_sec],
  185.                                   :group_number => params[:group_number_sec],  
  186.                                   :group_name => params[:group_name_sec],
  187.                                   :copay => params[:policy][:copay_sec],
  188.                                   :copay_type => params[:policy][:copay_type_sec],
  189.                                   :subscriber_first_name => params[:subscriber_first_name_sec],
  190.                                   :subscriber_last_name => params[:subscriber_last_name_sec],
  191.                                   :subscriber_apt_suite =>params[:policy][:subscriber_apt_suite_sec],
  192.                                   :subscriber_address_line1 => params[:subscriber_address_line1_sec],
  193.                                   :subscriber_address=> params[:subscriber_address_sec],
  194.                                   :subscriber_city => params[:subscriber_city_sec],
  195.                                   :subscriber_state => params[:policy][:subscriber_state_sec],
  196.                                   :subscriber_zipcode =>params[:subscriber_zipcode_sec],
  197.                                   :subscriber_DOB => Patient.date_split(params[:policy][:dob_sec]),
  198.                                   :subscriber_sex => params[:policy][:subscriber_sex_sec],
  199.                                   :subscriber_status => params[:subscriber_status_sec],
  200.                                   :subscriber_number => params[:subscriber_number_sec],
  201.                                   :subscriber_employer => params[:subscriber_employer_sec],
  202.                                   :carrier_type => "Secondary")
  203.         end
  204.         if @patient.save  
  205.           redirect_to(:controller => 'patients' ,:action => 'show', :id => @patient.id)
  206.         else
  207.           logger.debug(@patient.errors.full_messages)
  208.           redirect_to :back
  209.         end
  210.       end
  211.     rescue => e
  212.       render :text=> " #{e.message}"
  213.    end
  214.   end
  215.    
  216.   # editing the patient information
  217.    def payments_notes_edit
  218.     begin
  219.       @patient = Patient.find(params[:id])
  220.       @patient.update_attributes(params[:patient])  
  221.        rescue => e
  222.       render :text=> " #{e.message}"
  223.      end
  224.      render :partial=>"payment_notes"
  225.    end  
  226.  
  227.    def payments_notes
  228.      @patient = Patient.find(params[:id])
  229.      render :partial=>"payment_notes"
  230.    end
  231.  
  232.    def payments_edit_notes
  233.      @patient = Patient.find(params[:id])
  234.      render :partial=>"payment_notes_edit"
  235.    end
  236.  
  237.   def edit_account_info
  238.     begin
  239.       @patient = Patient.find(params[:id])
  240.       dob = Patient.date_split(params[:patient][:dob])
  241.       @patient.update_attributes(params[:patient])  
  242.       @patient.update_attributes(:dob=>dob)
  243.    rescue => e
  244.       render :text=> " #{e.message}"
  245.     end  
  246.   end
  247.  
  248.   #editing patient quick notes and medical history
  249.   def edit_notes
  250.     begin
  251.       @patient = Patient.find(params[:id])
  252.       @patient.update_attributes(params[:patient])  
  253.        rescue => e
  254.       render :text=> " #{e.message}"
  255.      end
  256.     end  
  257.  
  258.   def referal_edit
  259.      @referal_provider = ReferalProvider.find(params[:id])
  260.      render :partial=>'referals/referal_info_edit'
  261.   end
  262.  
  263.   def cancel_referal_edit
  264.      @referal_provider = ReferalProvider.find(params[:id])
  265.      render :partial=>'referals/details'
  266.   end    
  267.  
  268.   #edit responsible party
  269.   def edit_responsible_party
  270.     begin
  271.       @patient = Patient.find(params[:id])
  272.       @responsible_party= @patient.responsible_party
  273.       @responsible_parties = ResponsibleParty.find_all_by_practice_id(session[:practice_id])
  274.       @responsible_party.update_attributes(params[:responsible_party])
  275.     rescue => e
  276.       render :text=> " #{e.message}"
  277.     end  
  278.   end
  279.  
  280.   #new referal
  281.   def new_referal  
  282.    if request.method == :get  
  283.       render :partial=> 'referals/new_referal'  
  284.    else    
  285.       @patient = Patient.find(params[:id])      
  286.       @referal_provider = ReferalProvider.new(params[:referal_provider])
  287.       @referal_provider.practice_id= @patient.practice_id
  288.       @referal_provider.save
  289.       @patient.referals.create(:patient_id => @patient.id,:referal_provider_id => @referal_provider.id,:creation_date => Time.now )
  290.       render :partial=>"referals/details"
  291.    end    
  292.   end
  293.  
  294.   #edit the referal provider information
  295.   def edit_referal
  296.     begin
  297.       @referal_provider = ReferalProvider.find(params[:id])
  298.       @referal_provider.update_attributes(params[:referal_provider])
  299. #      @patient = Patient.find(params[:patient_id])  
  300.     rescue => e
  301.       render :text=> " #{e.message}"
  302.     end
  303.       render :partial=>'referals/details'
  304.   end    
  305.  
  306.  
  307.   def notes_edit
  308.      @patient = Patient.find(params[:id])
  309.      render :partial=>'notes_edit'
  310.   end
  311.  
  312.   def notes_cancel
  313.      @patient = Patient.find(params[:id])
  314.       render :partial=>'notes'
  315.     end
  316.  
  317.   def account_edit
  318.      @patient = Patient.find(params[:id])
  319.       render :partial=>'account_info_edit'
  320.     end
  321.  
  322.  
  323.   def cancel_edit
  324.      if params[:error_flag]
  325.        @claim = Claim.find(params[:claim_id])
  326.        @error_flag = params[:error_flag]
  327.        @patient = Claim.patientdetail(@claim.visit_id,params[:claim_id]).first
  328.        render :partial=>'/claims/claim_edit_patient_detail'
  329.      else
  330.         @patient = Patient.find(params[:id])
  331.         render :partial=>'account_info'
  332.      end  
  333.   end
  334.  
  335.  
  336.   def responsible_edit
  337.       @patient= Patient.find(params[:id])
  338.       @responsible_party= @patient.responsible_party
  339.       render :partial=>'/responsible_parties/responsible_info_edit'
  340.     end
  341.    
  342.    def cancel_responsible_edit
  343.       @patient= Patient.find(params[:id])
  344.       @responsible_party= @patient.responsible_party
  345.       render :partial=>'/responsible_parties/details'
  346.     end
  347.  
  348.  
  349.   # Record a Visit
  350.   def checkin
  351.     @visit = Visit.todays_visit(params[:id])
  352.     if (@visit.nil?)
  353.       @patient = Patient.find(params[:id])
  354.       policy = Policy.find_by_patient_id_and_carrier_type(@patient.id,'Primary')
  355.       visit = Visit.new
  356.       if (not policy.nil?)
  357.         if policy.copay_type == 'Absolute'
  358.           visit.patient_portion, = policy.copay
  359.           visit.patient_due = policy.copay
  360.           visit.charge = policy.copay
  361.         end
  362.       end      
  363.       visit.treated_at = Time.now
  364.       visit.practice_id = session[:practice_id]
  365.       visit.patient_id  = @patient.id
  366.       visit.location_id = session[:location_id]    
  367.       visit.doctor_id = @patient.doctor_id
  368.       appointment = Appointment.find_by_patient_id_and_date(@patient.id, Date.today)
  369.       if (appointment)
  370.         appointment.checked_in = true
  371.         appointment.save
  372.         visit.appointment_id = appointment.id
  373.       end
  374.       visit.save      
  375.       if (not policy.nil?)
  376.         referal =  Referal.find_by_patient_id(@patient.id)
  377.         referal_provider_id = referal.nil? ? 0 : referal.referal_provider_id
  378.  
  379.         practice = visit.practice      
  380.         practice.claims.create(:visit_id=>visit.id,
  381.                      :policy_id => policy.id,
  382.                      :referal_provider_id=> referal_provider_id,
  383.                      :status=>'PENDING_CHARGE_REVIEW'
  384.                      )
  385.       end
  386.       flash[:message] = "Patient visit recorded for today."
  387.     else
  388.       flash[:error] = "Visit already recorded for today."
  389.       logger.debug("Visit already recorded for today")
  390.     end
  391.     redirect_to :action => 'show',:id=>params[:id]
  392.  end
  393.  
  394.  def checkout
  395.     begin
  396.       @visit = Visit.todays_visit(params[:id])
  397.       flag = true
  398.       if params[:type] == 'new_visit'
  399.         if @visit.nil?
  400.           flag = false
  401.         end
  402.       else
  403.         flag = true  
  404.       end  
  405.       if flag
  406.         @patient = @visit ? @visit.patient : Patient.find(params[:id])
  407.         @copay   = Copay.new
  408.         patients = Patient.find_all_by_responsible_party_id(@patient.responsible_party_id,:select=>'id')
  409.         @patient_due = Visit.sum(:patient_due,:conditions=>["patient_id in (?)", patients])
  410.         @selected_procedure_codes = Patient.selected_procedure_codes(@visit.id) if @visit
  411.         @selected_diagnosis_codes = Patient.selected_diagnosis_codes(@visit.id) if @visit
  412.         @visits = Visit.find(:all,:conditions=>["practice_id =? and patient_id in(?) and patient_due > 0",session[:practice_id],patients])
  413.       else
  414.         flash[:error] = "No Visit recorded for today."
  415.         logger.debug("No Visit recorded for today")
  416.         redirect_to :action=>'show',:id=>params[:id]
  417.       end
  418.     rescue => e
  419.       render :text=> " #{e.message}"
  420.     end  
  421.   end
  422.  
  423.   def savecopay
  424.     begin
  425.       @visit = Visit.todays_visit(params[:patient_id]) if params[:patient_id] != '0'
  426.       payment = Practice.find(session[:practice_id]).patient_payments.create(:amount=>params[:copay][:paid],
  427.                                   :check_number=>params[:copay][:check_number]
  428.                                   )  
  429.       payment.responsible_party_id =  params[:patient_id] != '0' ? @visit ? @visit.patient.responsible_party_id : Patient.find(params[:patient_id]).responsible_party_id : params[:payment][:responsible_party_id]
  430.       payment.received_at = Time.now
  431.      if params[:copay][:check_number].empty?
  432.         payment.payment_method = "Cash"
  433.       else  
  434.         payment.payment_method = "Check"
  435.       end    
  436.       if payment.save
  437.         #due for the patient for this visit
  438.         if params[:patient_id] != '0'
  439.           patients = Patient.find_all_by_responsible_party_id(@visit? @visit.patient.responsible_party_id : Patient.find(params[:patient_id]).responsible_party_id,:select=>'id')
  440.           @visits = Visit.find(:all,:conditions=>["practice_id =? and patient_id in(?) and patient_due > 0",session[:practice_id],patients])
  441.         else
  442.           patient = Patient.find_all_by_responsible_party_id(params[:payment][:responsible_party_id],:select=>'id')
  443.           @visits = Visit.find(:all,:conditions=>["practice_id =? and patient_due > 0 and patient_id in (?)",session[:practice_id],patient])
  444.         end
  445.         for visit in @visits
  446.           patient_due = visit.patient_due
  447.           temp = "amt_"+ visit.id.to_s
  448.           amount = params[temp].to_f
  449.           if amount > 0
  450.             due = patient_due.to_f - amount
  451.             PaymentVisit.create(:payment_id=>payment.id,:visit_id=>visit.id,:amount=>amount)
  452.             #updating the patient due in visits
  453.             visit.update_attributes(:patient_due=> due)
  454.           end
  455.         end
  456.         if params[:patient_id] != '0'
  457.           redirect_to(:action=>"show", :id=>params[:id])
  458.         else
  459.           redirect_to :controller=>'payment',:action=>'post_payments',:id=>'rp_payment'
  460.         end
  461.       else
  462.        flash[:error] = "Could not save patient checkout information"
  463.        redirect_to(:action=>'checkout',:id=>params[:patient_id])
  464.       end
  465.    rescue => e
  466.       render :text=> " #{e.message}"
  467.     end  
  468.   end
  469.  
  470.   ######################################################################################################
  471.   #  action used to collect the object for the join table and redirecting to icd_list via add_icd.rhtml
  472.   ######################################################################################################
  473.  
  474.   def add_icd
  475.     begin
  476.       if params[:visitid]
  477.           @selected_diagnosis_codes = Patient.selected_diagnosis_codes(params[:visitid]).collect{|x|x.icd_code_id}
  478.           @practice  = Practice.find(session[:practice_id])    
  479.           @patient = Visit.find(params[:visitid]).patient
  480.           @visit = Visit.todays_visit(@patient.id)
  481.       else
  482.           @visit = Visit.todays_visit(params[:id])
  483.           @patient = @visit.patient
  484.           if !(@visit.nil?)
  485.             @selected_diagnosis_codes = Patient.selected_diagnosis_codes(@visit.id).collect{|x|x.icd_code_id}
  486.             @practice  = Practice.find(session[:practice_id])
  487.           else
  488.             flash[:error] = "No Visit recorded for today."
  489.             logger.debug("No Visit recorded for today.")
  490.             redirect_to :action=>'show',:id=>params[:id]
  491.           end
  492.  
  493.       end
  494.     rescue => e
  495.       render :text=> " #{e.message}"
  496.     end  
  497.   end
  498.  
  499.  
  500.   ###################################################################################################
  501.   #  action to display icd_list with check boxes for the user to select action to display icd_list
  502.   ###################################################################################################
  503.  
  504.   def icd_list
  505.     begin
  506.       @practice_icd = Practice.find(session[:practice_id], :include => [:practice_icd_lists])
  507.       new_practice_icd_ids = []
  508.       for practice_icd_list in @practice_icd.practice_icd_lists
  509.         temp = "check_"+ practice_icd_list.icd_code_id.to_s
  510.         if !(params[temp].nil?)  
  511.           begin          
  512.            @visit_icd_info = VisitIcdInfo.create(:visit_id => params[:visitid],:practice_icd_list_id=>practice_icd_list.id)
  513.           rescue
  514.           end            
  515.           new_practice_icd_ids <<  practice_icd_list.id
  516.         end        
  517.       end  
  518.      
  519.       if new_practice_icd_ids != []    
  520.         VisitIcdInfo.delete_all(["visit_id = #{params[:visitid]} and practice_icd_list_id not in (?)", new_practice_icd_ids])
  521.       end
  522.      
  523.     redirect_to :action=>'add_cpt',:visitid=>params[:visitid],:patientid=>params[:patientid],:cntrl_name=>params[:cntrl_name],:claim_id=>params[:claim_id]
  524.     rescue => e
  525.       render :text=> " #{e.message}"
  526.     end    
  527.   end
  528.  
  529.   def add_cpt
  530.     begin
  531.       @patient = Visit.find(params[:visitid]).patient
  532.       @practice  = Practice.find(session[:practice_id])
  533.       @visit = Visit.todays_visit(@patient.id)
  534.       # FIXME: Isnt the next line something like @visit._visit_cpt_list ?
  535.       @selected_procedure_codes = Patient.selected_procedure_codes(params[:visitid]).collect{|x|x.cpt_code_id}
  536.       #the above query to get the selected cpt codes and cpt codes for the visit
  537.       @carriers = @practice.carriers.collect{|x|[x.id,x.name]}
  538.     rescue => e
  539.       render :text=> " #{e.message}"
  540.     end  
  541.   end
  542.  
  543.   def cpt_list
  544.     @practice  = Practice.find(session[:practice_id])
  545.     @practice_cpt = @practice.cpt_codes
  546.     new_practice_cpt_ids = []
  547.     visit = Visit.find(params[:visitid])
  548.     error_msg = []
  549.     for practice_cpt in @practice_cpt        
  550.       temp = "check_"+ practice_cpt.id.to_s
  551.       if !(params[temp].nil?)
  552.         # calculating insurance portion and patient_portion
  553.         # This routine internally creates the charge entries using a default
  554.         # unit of 1 for each selected entry
  555.         msg = Patient.charge_entry_charge_calculation(visit.patient_id,session[:practice_id],practice_cpt,visit)
  556.         error_msg << msg
  557.         new_practice_cpt_ids << practice_cpt.id    
  558.       end        
  559.     end
  560.    
  561.     if new_practice_cpt_ids != []    
  562.       ChargeEntry.delete_all(["visit_id = #{params[:visitid]} and cpt_charge_id not in (?)", new_practice_cpt_ids])
  563.     end
  564.     if error_msg.include?(false)
  565.       flash[:notice]= '<font color=red>   FeeSchedule is not available for the Selected Codes. Please add the FeeSchedules.</font>'  
  566.       redirect_to :action=>'add_cpt',:visitid=>params[:visitid],:patientid=>params[:patientid],:cntrl_name=>params[:cntrl_name],:claim_id=>params[:claim_id]
  567.     else
  568.       redirect_to :action=>'map_icd_cpt', :visitid=>params[:visitid], :patientid=>params[:patientid], :cntrl_name=>params[:cntrl_name], :claim_id=>params[:claim_id]
  569.     end
  570.   end
  571.  
  572.  
  573.  ########################################################################
  574.   #  action to map icd and cpt codes with modifiers and number of units
  575.   ########################################################################
  576.   def map_icd_cpt
  577.     @patient = Visit.find(params[:visitid]).patient
  578.     @selected_procedure_codes = Patient.selected_procedure_codes(params[:visitid])
  579.     charge_entry_ids = @selected_procedure_codes.collect{|s_p_c| s_p_c.charge_entry_id}
  580.     @selected_charge_diagnosis = ChargeDiagnostic.find(:all, :conditions => ["charge_entry_id in (?)",charge_entry_ids ])
  581.     @ccigrp_errors,@megrp_errors = NcciCcigrp.ncci_validations(@selected_procedure_codes.collect{|x|x.code})
  582.     @claim = Claim.find_by_visit_id(params[:visitid])
  583.     @visit = Visit.todays_visit(@patient.id)
  584.     begin
  585.       @selected_diagnosis_codes = Patient.selected_diagnosis_codes(params[:visitid])
  586.       @modifiers = MopConstants::CPT_MODIFIERS
  587.     rescue => e
  588.       render :text=> " #{e.message}"
  589.     end  
  590.   end
  591.  
  592.   ################################################################################################
  593.   #  action to map icd codes with check boxes and fileds to add modifiers and units for cpt_codes
  594.   ################################################################################################
  595.   def map_codes_list
  596.     begin  
  597.         @selected_procedure_codes = Patient.selected_procedure_codes(params[:visitid])
  598.         @charge_entries = ChargeEntry.find(:all,:conditions=>["visit_id=?",params[:visitid]],:include=>[:cpt_charge])
  599.         sum_of_charge_entry = 0
  600.         for charge_entry_info in @charge_entries
  601.           ChargeDiagnostic.delete_all("charge_entry_id = #{charge_entry_info.id}")
  602.           unit = "unit_" + charge_entry_info.id.to_s      
  603.           params[unit] = 1 if params[unit].empty?      
  604.           charge = params[unit].to_f * (charge_entry_info.charge/charge_entry_info.num_units)
  605.        
  606.           # updating the charge entries with multiplying units with patient portion and insurance portion
  607.           charge_entry_info.update_attributes(:num_units=> params[unit],
  608.                                               :charge => charge)
  609.           # calculating sum of charge_entry      
  610.           sum_of_charge_entry += charge
  611.           visit_id = "visit_" + charge_entry_info.id.to_s
  612.           visit_charge_ids = params[visit_id].split(',')
  613.          
  614.           count = 1
  615.           for visit_id in visit_charge_ids
  616.             temp = "check_"+ charge_entry_info.id.to_s + "_" + visit_id.to_s
  617.             if !(params[temp].nil?)
  618.               ChargeDiagnostic.create(:charge_entry_id => charge_entry_info.id,:visit_icd_info_id => visit_id,:position=>count)
  619.             end  
  620.             count = count +1                                            
  621.           end                
  622.          
  623.         end  # END for charge_entry_info in @charge_entries
  624.        
  625.         # visit insurance and patient portion calculation
  626.         Patient.visit_ins_pat_calculation(sum_of_charge_entry,params[:visitid],params[:patientid])
  627.         claim = Claim.find_by_visit_id(params[:visitid])
  628.         if claim
  629.           update_claim_dates(claim.id)
  630.         end
  631.        if params[:cntrl_name] == "claims"                              
  632.         redirect_to :controller=>'claims',:action=>'edit_claim_pdf',:visitid=>params[:visitid],:claim_id=>params[:claim_id],:error_flag=>params[:error_flag]
  633.        elsif params[:cntrl_name] == "claim_error"
  634.         redirect_to :controller=>'claims',:action=>'claim_error',:visitid=>params[:visitid],:claim_id=>params[:claim_id],:error_flag=>params[:error_flag]
  635.        else
  636.           redirect_to :controller=>"patients",:action=>"show",:id=>params[:patientid]
  637.        end
  638.      rescue => e
  639.      
  640.      render :text=> " #{e.message}"
  641.     end  
  642.   end
  643.  
  644.   #adding the modifiers for each procedure code
  645.   def update_modifiers
  646.     begin
  647.     for modifier in params[:modifier]
  648.       # gsub function used replace the "," and space values in charge_modifiers using ascii key
  649.       modifier = modifier.gsub('%2520',' ')
  650.       modifier = modifier.gsub('%252C',', ')
  651.       ChargeModifier.create(:charge_entry_id=>params[:charge_entry_id],:modifier=>modifier)
  652.     end  
  653.     @charge_entry = ChargeEntry.find(params[:charge_entry_id])
  654.     @id = "selected_modifier_" + params[:charge_entry_id]
  655.     rescue => e
  656.       render :text=> " #{e.message}"
  657.     end  
  658.   end
  659.  
  660.   ##########################################
  661.   # method to delete the selected modifiers  
  662.   ##########################################
  663.   def delete_selected_modifiers
  664.     begin
  665.       @charge_entry_modifier = ChargeModifier.find(params[:id])
  666.       @charge_entry = ChargeEntry.find(@charge_entry_modifier.charge_entry_id)
  667.       @charge_entry_modifier.destroy
  668.       @id = "selected_modifier_" + @charge_entry_modifier.charge_entry_id.to_s
  669.     rescue => e
  670.       render :text=> " #{e.message}"
  671.     end  
  672.   end
  673.  
  674.   def edit_charge_entry
  675.     charge_entry = ChargeEntry.find(params[:edit_charge_entry])
  676.     charge_entry.update_attributes(:facility_type_code=>params[:charge_entry][:facility_type_code],
  677.                                    :end_date => Patient.date_split(params[:charge_entry][:end_date]),
  678.                                    :certification_revision_date => Patient.date_split(params[:charge_entry][:certification_revision_date]),
  679.                                    :begin_therapy_date => Patient.date_split(params[:charge_entry][:begin_therapy_date]),
  680.                                    :last_certification_date => Patient.date_split(params[:charge_entry][:last_certification_date]),
  681.                                    :test_date => Patient.date_split(params[:charge_entry][:test_date]),
  682.                                    :arterial_blood_gas_test_date => Patient.date_split(params[:charge_entry][:arterial_blood_gas_test_date]),
  683.                                    :shipped_date => Patient.date_split(params[:charge_entry][:shipped_date]),
  684.                                    :onset_of_similar_illness_date => Patient.date_split(params[:charge_entry][:onset_of_similar_illness_date]),  
  685.                                    :last_xray_date => Patient.date_split(params[:charge_entry][:last_xray_date]),  
  686.                                    :acute_manifestation_date => Patient.date_split(params[:charge_entry][:acute_manifestation_date]),  
  687.                                    :initial_treatment_date => Patient.date_split(params[:charge_entry][:initial_treatment_date]),  
  688.                                    :onset_of_current_symptom_date => Patient.date_split(params[:charge_entry][:onset_of_current_symptom_date])
  689.                                    )
  690.     render :text=> '<font color=green>Service Dates Updated for the Selected CPT CODE.</font>'                                  
  691.   end
  692.  
  693.   def show_service_dates
  694.     @charge_entry = ChargeEntry.find(params[:id])
  695.     render :partial=>'edit_service_dates'
  696.   end
  697.  
  698.   # adding cpt codes through patients - EMR
  699.   def add_cptcode_charge
  700.     @practice  = Practice.find(session[:practice_id], :include => [:cpt_codes])
  701.     @selected_procedure_codes = Patient.selected_procedure_codes(params[:visitid]).collect{|x|x.cpt_code_id}  
  702.     @carriers = @practice.carriers.collect{|x|[x.id,x.name]}
  703.     @cpt_code = CptCode.find_by_code(params[:cpt_code_id])
  704.     if @cpt_code
  705.       if !@practice.cpt_codes.collect{|x|x.code}.include?(@cpt_code.code)
  706.      
  707.       if !params[:standard_charge].empty?
  708.       CptCharge.create(:practice_id=>session[:practice_id],
  709.                       :cpt_code_id=>@cpt_code.id,
  710.                       :charge=>params[:standard_charge],
  711.                       :fee_schedule_id=>FeeSchedule.find_by_practice_id_and_charge_type(session[:practice_id],'Standard').id
  712.                       )
  713.             @flag = true
  714.        else
  715.           @flag = false                
  716.        end                      
  717.        for carrier in @carriers
  718.         temp = "carrier_"+carrier[0].to_s
  719.         fee_schedule = FeeSchedule.find_by_practice_id_and_carrier_id(session[:practice_id],carrier[0])
  720.         fee_schedule = FeeSchedule.create(:charge_type=>'Allowed',
  721.                                           :carrier_id=>carrier[0],
  722.                                           :practice_id=>session[:practice_id],
  723.                                           :start_date => Time.now.at_beginning_of_year.strftime("%Y-%m-%d"),
  724.                                           :end_date => Time.now.at_beginning_of_year.strftime("%Y") + "-12-31") if !fee_schedule
  725.         CptCharge.create(:practice_id=>session[:practice_id],
  726.                         :cpt_code_id=>@cpt_code.id,
  727.                         :charge=>params[temp],
  728.                         :fee_schedule_id=>fee_schedule.id
  729.                         ) if !params[temp].empty?
  730.        end    
  731.       end            
  732.     end
  733.     @practice.reload
  734.   end
  735.  
  736.   def add_icdcode
  737.     @selected_diagnosis_codes = Patient.selected_diagnosis_codes(params[:visitid]).collect{|x|x.icd_code_id}
  738.     @practice  = Practice.find(session[:practice_id], :include => [:icd_codes])
  739.     @flag = []
  740.     for i in 1..3    
  741.       temp = "icd_code_" + i.to_s
  742.       if !params[temp].empty?
  743.         icd_code = IcdCode.find_by_code(params[temp])
  744.         if icd_code
  745.           if !@practice.icd_codes.collect{|x|x.code}.include?(icd_code.code)      
  746.             PracticeIcdList.create(:practice_id=>session[:practice_id],:icd_code_id=>icd_code.id)
  747.             @flag << '<font color=green>ICD code ' + i.to_s + ' added successfully.</font><br/>'
  748.           else        
  749.             @flag << '<font color=red>The given ICD code ' + i.to_s + ' already exists.</font><br/>'
  750.           end  
  751.         else
  752.           @flag << '<font color=red>Wrong ICD code ' + i.to_s + '.</font><br/>'
  753.         end
  754.       end
  755.       icd_code = nil
  756.     end
  757.     @practice.reload
  758.   end
  759.  
  760.   def checkout_auto_fill
  761.    if params[:patient_id]
  762.     @patient = Patient.find(params[:patient_id])
  763.     patients = Patient.find_all_by_responsible_party_id(@patient.responsible_party_id,:select=>'id')
  764.     @visits = Visit.find(:all,:conditions=>["practice_id =? and patient_id in(?) and patient_due > 0",session[:practice_id],patients])
  765.    else
  766.     patient = Patient.find_all_by_responsible_party_id(params[:rp_id],:select=>'id')
  767.     @visits = Visit.find(:all,:conditions=>["practice_id =? and patient_due > 0 and patient_id in (?)",session[:practice_id],patient])
  768.    end
  769.    @fill_amount = []
  770.    unattributed_amount = params[:amount]
  771.    for visit in @visits
  772.      @fill_amount,unattributed_amount = Payment.fill_amount_calculation(1,visit.patient_due,unattributed_amount,@fill_amount)
  773.    end
  774.     render :partial=>'patients/checkout_visit_details'
  775.   end
  776.   ##################### PRIVATE METHODS ##########################
  777.   private
  778.  
  779.   def set_visit_id
  780.     begin
  781.       @visit = (params[:id]) ? Visit.todays_visit(params[:id]) : Visit.new
  782.     rescue => e
  783.       render :text=> " #{e.message}"
  784.     end  
  785.   end
  786.  
  787. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement