Last active
February 16, 2025 12:16
-
-
Save skelz0r/220c7eb6f861d54ca673d352e2066b89 to your computer and use it in GitHub Desktop.
Extraction liens capitalistiques depuis la liasse fiscale d'API Entreprise
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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