Skip to content

Instantly share code, notes, and snippets.

@skelz0r
Last active February 16, 2025 12:16
Show Gist options
  • Save skelz0r/220c7eb6f861d54ca673d352e2066b89 to your computer and use it in GitHub Desktop.
Save skelz0r/220c7eb6f861d54ca673d352e2066b89 to your computer and use it in GitHub Desktop.
Extraction liens capitalistiques depuis la liasse fiscale d'API Entreprise
siren='130025265'
year='2023'
liasses_fiscales = lookup_data("/v3/dgfip/unites_legales/#{siren}/liasses_fiscales/#{year}")
imprimes = %w[
2059F
2059G
]
declarations = liasses_fiscales['data']['declarations'].select { |declaration| imprimes.include?(declaration['numero_imprime']) }
def extract_values(declaration, code)
declaration['donnees'].find { |d| d['code_absolu'] == code }&.dig('valeurs') || []
end
def build_pourcentage(pourcentage)
pourcentage.nil? ? nil : pourcentage.to_f / 100
end
def build_actionnaires(declarations)
actionnaires = []
declaration = declarations.find { |d| d['numero_imprime'] == '2059F' }
sirens = extract_values(declaration, '2005724')
denominations = extract_values(declaration, '2005722')
formes = extract_values(declaration, '2008006')
pourcentages = extract_values(declaration, '2005726')
nombres_parts = extract_values(declaration, '2005725')
noms_physiques = extract_values(declaration, '2005734')
noms_maritaux = extract_values(declaration, '2005735')
pourcentages_physiques = extract_values(declaration, '2005738')
nombres_parts_physiques = extract_values(declaration, '2005737')
dates_naissance = extract_values(declaration, '2005746')
pays_physiques = extract_values(declaration, '2015509')
adresse_numero = extract_values(declaration, '2005727')
adresse_voie = extract_values(declaration, '2005729')
adresse_lieu_dit_hameau = extract_values(declaration, '2005730')
adresse_code_postal = extract_values(declaration, '2005731')
adresse_ville = extract_values(declaration, '2005732')
adresse_pays = extract_values(declaration, '2005733')
adresse_physique_numero = extract_values(declaration, '2005739')
adresse_physique_voie = extract_values(declaration, '2005741')
adresse_physique_lieu_dit_hameau = extract_values(declaration, '2005742')
adresse_physique_code_postal = extract_values(declaration, '2015508')
adresse_physique_ville = extract_values(declaration, '2015507')
adresse_physique_pays = extract_values(declaration, '2015509')
sirens.each_with_index do |siren, index|
actionnaire = {
type: 'personne_morale',
pourcentage: build_pourcentage(pourcentages[index]),
nombre_parts: nombres_parts[index]&.to_i,
personne_physique_attributs: {
nom: nil,
nom_marital: nil,
date_naissance: nil,
adresse: {
numero: nil,
voie: nil,
lieu_dit_hameau: nil,
code_postal: nil,
ville: nil,
pays: nil
}
},
personne_morale_attributs: {
siren: siren,
denomination: denominations[index],
forme_juridique: formes[index],
adresse: {
numero: adresse_numero[index],
voie: adresse_voie[index],
lieu_dit_hameau: adresse_lieu_dit_hameau[index],
code_postal: adresse_code_postal[index],
ville: adresse_ville[index],
pays: adresse_pays[index]
}
}
}
actionnaires << actionnaire
end
noms_physiques.each_with_index do |nom, index|
actionnaire = {
type: 'personne_physique',
pourcentage: build_pourcentage(pourcentages_physiques[index]),
nombre_parts: nombres_parts_physiques[index]&.to_i,
personne_physique_attributs: {
nom: nom,
nom_marital: noms_maritaux[index],
date_naissance: dates_naissance[index],
adresse: {
numero: adresse_physique_numero[index],
voie: adresse_physique_voie[index],
lieu_dit_hameau: adresse_physique_lieu_dit_hameau[index],
code_postal: adresse_physique_code_postal[index],
ville: adresse_physique_ville[index],
pays: adresse_physique_pays[index]
}
},
personne_morale_attributs: {
siren: nil,
denomination: nil,
forme_juridique: nil,
adresse: {
numero: nil,
voie: nil,
lieu_dit_hameau: nil,
code_postal: nil,
ville: nil,
pays: nil
}
}
}
actionnaires << actionnaire
end
end
def build_participations(declarations)
participations = []
declaration = declarations.find { |d| d['numero_imprime'] == '2059G' }
sirens = extract_values(declaration, '2005836')
denominations = extract_values(declaration, '2005834')
formes = extract_values(declaration, '2008007')
pourcentages = extract_values(declaration, '2005844')
adresse_numero = extract_values(declaration, '2005837')
adresse_voie = extract_values(declaration, '2005839')
adresse_lieu_dit_hameau = extract_values(declaration, '2005840')
adresse_code_postal = extract_values(declaration, '2005841')
adresse_ville = extract_values(declaration, '2005842')
adresse_pays = extract_values(declaration, '2005843')
sirens.each_with_index do |siren, index|
participation = {
siren: siren,
denomination: denominations[index],
forme_juridique: formes[index],
pourcentage: build_pourcentage(pourcentages[index]),
adresse: {
numero: adresse_numero[index],
voie: adresse_voie[index],
lieu_dit_hameau: adresse_lieu_dit_hameau[index],
code_postal: adresse_code_postal[index],
ville: adresse_ville[index],
pays: adresse_pays[index]
}
}
participations << participation
end
participations
end
lien_capitalistiques = {
actionnaires: build_actionnaires(declarations),
participations: build_participations(declarations)
}
print JSON.pretty_generate(lien_capitalistiques)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment