class APIEntreprise::EntrepriseAdapter < APIEntreprise::Adapter # Doc métier : https://entreprise.api.gouv.fr/catalogue/insee/unites_legales # Swagger : https://entreprise.api.gouv.fr/developpeurs/openapi#tag/Informations-generales/paths/~1v3~1insee~1sirene~1unites_legales~1%7Bsiren%7D/get private def get_resource api(@procedure_id).entreprise(siren) end def process_params params = data_source[:data] return {} if params.nil? Sentry.with_scope do |scope| scope.set_tags(siret: @siret) scope.set_extras(source: params) params = params.slice(*attr_to_fetch) params[:etat_administratif] = map_etat_administratif(data_source) if params.present? && valid_params?(params) params[:date_creation] = Time.zone.at(params[:date_creation]).to_datetime if params[:date_creation].present? forme_juridique = params.extract! :forme_juridique if forme_juridique.present? params[:forme_juridique] = forme_juridique[:forme_juridique][:libelle] params[:forme_juridique_code] = forme_juridique[:forme_juridique][:code] end personne_morale_attributs = params.extract! :personne_morale_attributs if personne_morale_attributs.present? params[:raison_sociale] = personne_morale_attributs[:personne_morale_attributs][:raison_sociale] end personne_physique_attributs = params.extract! :personne_physique_attributs if personne_physique_attributs.present? params[:nom] = build_nom(personne_physique_attributs) params[:prenom] = personne_physique_attributs[:personne_physique_attributs][:prenom_usuel] end tranche_effectif = params.extract! :tranche_effectif_salarie if tranche_effectif.present? params[:code_effectif_entreprise] = tranche_effectif[:tranche_effectif_salarie][:code] end params.transform_keys { |k| :"entreprise_#{k}" } else {} end end end def build_nom(personne_physique_attributs) nom_usage = personne_physique_attributs[:personne_physique_attributs][:nom_usage]&.strip nom_naissance = personne_physique_attributs[:personne_physique_attributs][:nom_naissance]&.strip return nom_usage if nom_naissance.blank? || nom_usage == nom_naissance return nom_naissance if nom_usage.blank? "#{nom_usage} (#{nom_naissance})" end def attr_to_fetch [ :siren, :forme_juridique, :personne_morale_attributs, :personne_physique_attributs, :raison_sociale, :siret_siege_social, :tranche_effectif_salarie, :date_creation ] end def map_etat_administratif(data_source) raw_value = data_source.dig(:data, :etat_administratif) # data structure will change in v3 case raw_value when 'A' then 'actif' when 'F', 'C' then 'fermé' end end end