Merge pull request #9613 from demarches-simplifiees/8742-effectifs
tech: utilise l'api entreprise v3 pour récupérer les effectifs mensuels et annuels
This commit is contained in:
commit
7ae66d0360
12 changed files with 91 additions and 47 deletions
|
@ -1,8 +1,7 @@
|
|||
class APIEntreprise::EffectifsJob < APIEntreprise::Job
|
||||
def perform(etablissement_id, procedure_id)
|
||||
find_etablissement(etablissement_id)
|
||||
# may 2020 is at the moment the most actual info for effectifs endpoint
|
||||
etablissement_params = APIEntreprise::EffectifsAdapter.new(etablissement.siret, procedure_id, "2020", "05").to_params
|
||||
etablissement = Etablissement.find(etablissement_id)
|
||||
etablissement_params = APIEntreprise::EffectifsAdapter.new(etablissement.siret, procedure_id, *get_current_valid_month_for_effectif).to_params
|
||||
etablissement.update!(etablissement_params)
|
||||
end
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ class APIEntreprise::API
|
|||
TVA_NAME = "v3/european_commission/unites_legales/%{id}/numero_tva"
|
||||
EXERCICES_RESOURCE_NAME = "v3/dgfip/etablissements/%{id}/chiffres_affaires"
|
||||
RNA_RESOURCE_NAME = "v4/djepva/api-association/associations/open_data/%{id}"
|
||||
EFFECTIFS_RESOURCE_NAME = "v2/effectifs_mensuels_acoss_covid"
|
||||
EFFECTIFS_ANNUELS_RESOURCE_NAME = "v2/effectifs_annuels_acoss_covid/%{id}"
|
||||
EFFECTIFS_RESOURCE_NAME = "v3/gip_mds/etablissements/%{id}/effectifs_mensuels"
|
||||
EFFECTIFS_ANNUELS_RESOURCE_NAME = "v3/gip_mds/unites_legales/%{id}/effectifs_annuels"
|
||||
ATTESTATION_SOCIALE_RESOURCE_NAME = "v4/urssaf/unites_legales/%{id}/attestation_vigilance"
|
||||
ATTESTATION_FISCALE_RESOURCE_NAME = "v4/dgfip/unites_legales/%{id}/attestation_fiscale"
|
||||
BILANS_BDF_RESOURCE_NAME = "v3/banque_de_france/unites_legales/%{id}/bilans"
|
||||
|
@ -50,13 +50,14 @@ class APIEntreprise::API
|
|||
call_with_siret(RNA_RESOURCE_NAME, siret)
|
||||
end
|
||||
|
||||
def effectifs(siren, annee, mois)
|
||||
endpoint = [EFFECTIFS_RESOURCE_NAME, annee, mois, "entreprise", "%{id}"].join('/')
|
||||
call_with_siret(endpoint, siren)
|
||||
def effectifs(siret, annee, mois)
|
||||
endpoint = [EFFECTIFS_RESOURCE_NAME, mois, "annee", annee].join('/')
|
||||
call_with_siret(endpoint, siret)
|
||||
end
|
||||
|
||||
def effectifs_annuels(siren)
|
||||
call_with_siret(EFFECTIFS_ANNUELS_RESOURCE_NAME, siren)
|
||||
def effectifs_annuels(siren, annee)
|
||||
endpoint = [EFFECTIFS_ANNUELS_RESOURCE_NAME, annee].join('/')
|
||||
call_with_siret(endpoint, siren)
|
||||
end
|
||||
|
||||
def attestation_sociale(siren)
|
||||
|
|
|
@ -9,18 +9,24 @@ class APIEntreprise::EffectifsAdapter < APIEntreprise::Adapter
|
|||
private
|
||||
|
||||
def get_resource
|
||||
api(@procedure_id).effectifs(siren, @annee, @mois)
|
||||
api(@procedure_id).effectifs(@siret, @annee, @mois)
|
||||
end
|
||||
|
||||
def process_params
|
||||
if data_source[:effectifs_mensuels].present?
|
||||
{
|
||||
entreprise_effectif_mensuel: data_source[:effectifs_mensuels],
|
||||
entreprise_effectif_mois: data_source[:mois],
|
||||
entreprise_effectif_annee: data_source[:annee]
|
||||
}
|
||||
else
|
||||
{}
|
||||
data = data_source.fetch(:data, nil)
|
||||
Sentry.with_scope do |scope|
|
||||
scope.set_tags(siret: @siret)
|
||||
scope.set_extras(source: data)
|
||||
effectifs = data&.fetch(:effectifs_mensuels, nil)&.first
|
||||
if effectifs.present?
|
||||
{
|
||||
entreprise_effectif_mensuel: effectifs[:value],
|
||||
entreprise_effectif_mois: effectifs[:mois],
|
||||
entreprise_effectif_annee: effectifs[:annee]
|
||||
}
|
||||
else
|
||||
{}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,23 +1,34 @@
|
|||
class APIEntreprise::EffectifsAnnuelsAdapter < APIEntreprise::Adapter
|
||||
def initialize(siret, procedure_id)
|
||||
def initialize(siret, procedure_id, year = default_year)
|
||||
@siret = siret
|
||||
@procedure_id = procedure_id
|
||||
@year = year
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def default_year
|
||||
Date.current.year - 1
|
||||
end
|
||||
|
||||
def get_resource
|
||||
api(@procedure_id).effectifs_annuels(siren)
|
||||
api(@procedure_id).effectifs_annuels(siren, @year)
|
||||
end
|
||||
|
||||
def process_params
|
||||
if data_source[:effectifs_annuels].present?
|
||||
{
|
||||
entreprise_effectif_annuel: data_source[:effectifs_annuels],
|
||||
entreprise_effectif_annuel_annee: data_source[:annee]
|
||||
}
|
||||
else
|
||||
{}
|
||||
data = data_source.fetch(:data, nil)
|
||||
Sentry.with_scope do |scope|
|
||||
scope.set_tags(siret: @siret)
|
||||
scope.set_extras(source: data)
|
||||
effectifs = data&.fetch(:effectifs_annuel, nil)&.first
|
||||
if effectifs.present?
|
||||
{
|
||||
entreprise_effectif_annuel: effectifs[:value],
|
||||
entreprise_effectif_annuel_annee: effectifs[:annee]
|
||||
}
|
||||
else
|
||||
{}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -112,10 +112,10 @@ def add_identite_etablissement(pdf, etablissement)
|
|||
|
||||
if @include_infos_administration
|
||||
if etablissement.entreprise_effectif_mensuel.present?
|
||||
format_in_2_columns(pdf, "Effectif mensuel #{try_format_mois_effectif(etablissement)} (URSSAF) ", number_with_delimiter(etablissement.entreprise_effectif_mensuel.to_s))
|
||||
format_in_2_columns(pdf, "Effectif mensuel #{try_format_mois_effectif(etablissement)} de l'établissement (URSSAF ou MSA) ", number_with_delimiter(etablissement.entreprise_effectif_mensuel.to_s))
|
||||
end
|
||||
if etablissement.entreprise_effectif_annuel_annee.present?
|
||||
format_in_2_columns(pdf, "Effectif moyen annuel #{etablissement.entreprise_effectif_annuel_annee} (URSSAF) ", number_with_delimiter(etablissement.entreprise_effectif_annuel.to_s))
|
||||
format_in_2_columns(pdf, "Effectif moyen annuel #{etablissement.entreprise_effectif_annuel_annee} de l'unité légale (URSSAF ou MSA) ", number_with_delimiter(etablissement.entreprise_effectif_annuel.to_s))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -57,11 +57,11 @@
|
|||
= humanized_entreprise_etat_administratif(etablissement)
|
||||
|
||||
- if profile == 'instructeur'
|
||||
= render Dossiers::RowShowComponent.new(label: "Effectif mensuel #{try_format_mois_effectif(etablissement)} (URSSAF)") do |c|
|
||||
= render Dossiers::RowShowComponent.new(label: "Effectif mensuel #{try_format_mois_effectif(etablissement)} de l'établissement (URSSAF ou MSA)") do |c|
|
||||
- c.with_value do
|
||||
%p= etablissement.entreprise_effectif_mensuel
|
||||
|
||||
= render Dossiers::RowShowComponent.new(label: "Effectif moyen annuel #{etablissement.entreprise_effectif_annuel_annee} (URSSAF)") do |c|
|
||||
= render Dossiers::RowShowComponent.new(label: "Effectif moyen annuel #{etablissement.entreprise_effectif_annuel_annee} de l'unité légale (URSSAF ou MSA)") do |c|
|
||||
- c.with_value do
|
||||
%p= etablissement.entreprise_effectif_annuel
|
||||
|
||||
|
|
|
@ -1,6 +1,17 @@
|
|||
{
|
||||
"siren": "418166096",
|
||||
"annee": "2020",
|
||||
"mois": "02",
|
||||
"effectifs_mensuels": 100.5
|
||||
"data": {
|
||||
"siret": "41816609600069",
|
||||
"effectifs_mensuels": [
|
||||
{
|
||||
"regime": "regime_general",
|
||||
"value": 12.34,
|
||||
"nature": "effectif_moyen_mensuel",
|
||||
"annee": "2020",
|
||||
"mois": "02",
|
||||
"date_derniere_mise_a_jour": "2018-01-01"
|
||||
}
|
||||
]
|
||||
},
|
||||
"links": {},
|
||||
"meta": {}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,16 @@
|
|||
{
|
||||
"siren": "418166096",
|
||||
"annee": "2019",
|
||||
"effectifs_annuels": 100.5
|
||||
"data": {
|
||||
"siren": "418166096",
|
||||
"annee": "2017",
|
||||
"effectifs_annuel": [
|
||||
{
|
||||
"regime": "regime_general",
|
||||
"value": 100.5,
|
||||
"nature": "effectif_moyen_annuel",
|
||||
"date_derniere_mise_a_jour": "2018-01-01"
|
||||
}
|
||||
]
|
||||
},
|
||||
"links": {},
|
||||
"meta": {}
|
||||
}
|
||||
|
|
|
@ -2,17 +2,21 @@ RSpec.describe APIEntreprise::EffectifsAnnuelsJob, type: :job do
|
|||
let(:etablissement) { create(:etablissement, siret: siret) }
|
||||
let(:siret) { '41816609600069' }
|
||||
let(:siren) { '418166096' }
|
||||
let(:now) { Date.parse("2021/02/13") }
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:procedure_id) { procedure.id }
|
||||
let(:body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') }
|
||||
let(:status) { 200 }
|
||||
|
||||
before do
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}/)
|
||||
Timecop.freeze(now)
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/gip_mds\/unites_legales\/#{siren}\/effectifs_annuels\/2020/)
|
||||
.to_return(body: body, status: status)
|
||||
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
|
||||
end
|
||||
|
||||
after { Timecop.return }
|
||||
|
||||
subject { APIEntreprise::EffectifsAnnuelsJob.new.perform(etablissement.id, procedure_id) }
|
||||
|
||||
it 'updates etablissement' do
|
||||
|
|
|
@ -6,12 +6,12 @@ RSpec.describe APIEntreprise::EffectifsJob, type: :job do
|
|||
let(:procedure_id) { procedure.id }
|
||||
let(:now) { Time.zone.local(2020, 3, 12) }
|
||||
let(:annee) { "2020" }
|
||||
let(:mois) { "05" }
|
||||
let(:mois) { "02" }
|
||||
let(:body) { File.read('spec/fixtures/files/api_entreprise/effectifs.json') }
|
||||
let(:status) { 200 }
|
||||
|
||||
before do
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}/)
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/gip_mds\/etablissements\/#{siret}\/effectifs_mensuels\/#{mois}\/annee\/#{annee}/)
|
||||
.to_return(body: body, status: status)
|
||||
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
|
||||
end
|
||||
|
@ -23,6 +23,6 @@ RSpec.describe APIEntreprise::EffectifsJob, type: :job do
|
|||
|
||||
it 'updates etablissement' do
|
||||
subject
|
||||
expect(Etablissement.find(etablissement.id).entreprise_effectif_mensuel).to eq(100.5)
|
||||
expect(Etablissement.find(etablissement.id).entreprise_effectif_mensuel).to eq(12.34)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,7 @@ describe APIEntreprise::EffectifsAdapter do
|
|||
subject { adapter.to_params }
|
||||
|
||||
before do
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}/)
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/gip_mds\/etablissements\/#{siret}\/effectifs_mensuels\/#{mois}\/annee\/#{annee}/)
|
||||
.to_return(body: body, status: status)
|
||||
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
|
||||
end
|
||||
|
@ -23,7 +23,7 @@ describe APIEntreprise::EffectifsAdapter do
|
|||
end
|
||||
|
||||
it "renvoie les effectifs du mois demandé" do
|
||||
expect(subject[:entreprise_effectif_mensuel]).to eq(100.5)
|
||||
expect(subject[:entreprise_effectif_mensuel]).to eq(12.34)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
describe APIEntreprise::EffectifsAnnuelsAdapter do
|
||||
let(:siret) { '41816609600069' }
|
||||
let(:siren) { '418166096' }
|
||||
let(:annee) { 2017 }
|
||||
let(:procedure) { create(:procedure) }
|
||||
let(:procedure_id) { procedure.id }
|
||||
let(:adapter) { described_class.new(siret, procedure_id) }
|
||||
let(:adapter) { described_class.new(siret, procedure_id, annee) }
|
||||
subject { adapter.to_params }
|
||||
|
||||
before do
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}/)
|
||||
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v3\/gip_mds\/unites_legales\/#{siren}\/effectifs_annuels\/#{annee}/)
|
||||
.to_return(body: body, status: status)
|
||||
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(false)
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue