demarches-normaliennes/app/lib/api_entreprise/entreprise_adapter.rb
2024-08-22 09:26:48 +02:00

86 lines
2.8 KiB
Ruby

# frozen_string_literal: true
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