# frozen_string_literal: true class KycService # passport front + selfie OR driver license front and back + selfie IR id card front and back + selfie REQUIRED_DOC_AMOUNT = { 'Passport': 2, 'Driver license': 3, 'Identity card': 3 }.freeze class << self def profile_step(profile) user = profile.user profile_label = user.labels.find_by(key: :profile) if profile_label.nil? # first profile everw user.labels.create(key: :profile, value: profile.state, scope: :private) else profile_label.update(value: profile.state) # re-submitted profile end return unless profile.state == 'verified' # verify treasury after profile verified KYC.const_get(Barong::App.config.kyc_provider.capitalize, false)::TreasuryWorker.perform_async(profile.id) end def document_step(document) user = document.user user_document_label = user.labels.find_by(key: document.doc_type.downcase) if user_document_label.nil? # first document ever user.labels.create(key: document.doc_type.downcase, value: document.state, scope: :private) else return if user_document_label.value == 'verified' user_document_label.update(value: document.state) # re-submitted document end end def kycaid_callback(params) 422 end def treasury_label_update(treasury) user = treasury&.user return unless user.present? treasury_label = user.labels.find_by(key: treasury.kind) if treasury_label.nil? # first profile ever user.labels.create(key: treasury.kind, value: treasury.state, scope: :private) else treasury.ownership! if treasury.state == 'processing' && treasury.result.present? # user must have just one kind of treasury and new treasury like card, must not change before verified card treasury_label.update(value: treasury.reload.state) unless treasury_label.value == 'verified' end end def phone_label_update(phone) user = phone&.user return unless user.present? phone_label = user.labels.find_by(key: phone.step) if phone_label.nil? user.labels.create(key: phone.step, value: phone.state, scope: :private) else phone_label.update(value: phone.state) end end end end