86 lines
2.8 KiB
Ruby
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
|