Class: Cpro::Resources::Annuaire

Inherits:
Base
  • Object
show all
Defined in:
lib/cpro/resources/annuaire.rb

Constant Summary collapse

TOTAL_KEY =
"nombre_total_resultats"
SIRET_LENGTH =
14
SIREN_LENGTH =
9
OPERATEURS_SIRET =

Chaque champ filtrable n'admet qu'un seul opérateur : l'appelant fournit siret: "70204275500240" et l'opérateur attendu est déduit d'ici.

siret et siren divergent du swagger, qui les déclare en contient. Le serveur refuse cette forme par un 400 « Failed to read HTTP message » — une erreur de désérialisation, levée avant tout traitement — et n'accepte que strict, sur les trois recherches de l'Annuaire. Vérifié en sandbox le 27/08/2026 ; ce sont des identifiants, une recherche partielle n'y a de toute façon pas de sens.

{
  "siret" => "strict",
  "siren" => "strict",
  "denomination" => "contient",
  "localite" => "contient",
  "codePostal" => "contient",
  "lignesAdresse" => "contient",
  "subDivisionPays" => "contient",
  "typeEtablissement" => "strict",
  "etatAdministratif" => "strict"
}.freeze
OPERATEURS_SIREN =
{
  "siren" => "strict",
  "raisonSociale" => "contient",
  "typeEntite" => "strict",
  "etatAdministratif" => "strict"
}.freeze
OPERATEURS_CODE_ROUTAGE =
{
  "siret" => "strict",
  "identifiantRoutage" => "contient",
  "libelleCodeRoutage" => "contient",
  "localite" => "contient",
  "codePostal" => "contient",
  "lignesAdresse" => "contient",
  "etatAdministratif" => "strict"
}.freeze

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from Cpro::Resources::Base

Instance Method Details

#find_by_siren(siren, **options) ⇒ Object



53
54
55
56
# File 'lib/cpro/resources/annuaire.rb', line 53

def find_by_siren(siren, **options)
  path = "siren/code-insee:#{normalize(siren, SIREN_LENGTH, "SIREN")}"
  Entities::UniteLegale.new(get(path, query(options)))
end

#find_by_siret(siret, **options) ⇒ Object



48
49
50
51
# File 'lib/cpro/resources/annuaire.rb', line 48

def find_by_siret(siret, **options)
  path = "siret/code-insee:#{normalize(siret, SIRET_LENGTH, "SIRET")}"
  Entities::Etablissement.new(get(path, query(options)))
end

#healthcheckObject



80
81
82
# File 'lib/cpro/resources/annuaire.rb', line 80

def healthcheck
  get("healthcheck")
end

#search_code_routage(filtres: {}, **options) ⇒ Object

Seul accès au libellé d'un code routage et à son gestionEngagementJuridique : la consultation unitaire GET /code-routage/siret:…/code:… ne retourne que ses lignes d'annuaire, soit moins que find_by_siret. Filtrer sur siret pour se limiter à une structure, faute de quoi la réponse balaie tout l'annuaire.



75
76
77
78
# File 'lib/cpro/resources/annuaire.rb', line 75

def search_code_routage(filtres: {}, **options)
  payload = post("code-routage/recherche", search_body(OPERATEURS_CODE_ROUTAGE, filtres, options))
  Entities::ResultatRecherche.new(payload, item_class: Entities::CodeRoutage, total_key: TOTAL_KEY)
end

#search_siren(filtres: {}, **options) ⇒ Object



66
67
68
69
# File 'lib/cpro/resources/annuaire.rb', line 66

def search_siren(filtres: {}, **options)
  payload = post("siren/recherche", search_body(OPERATEURS_SIREN, filtres, options))
  Entities::ResultatRecherche.new(payload, item_class: Entities::UniteLegale, total_key: TOTAL_KEY)
end

#search_siret(filtres: {}, **options) ⇒ Object

filtres est un mot-clé et non un positionnel : avec search_siret(filtres, **options), un appel de la forme search_siret(siren: "702042755") verrait tous ses mots-clés partir dans options sous Ruby 3 et lèverait une ArgumentError.



61
62
63
64
# File 'lib/cpro/resources/annuaire.rb', line 61

def search_siret(filtres: {}, **options)
  payload = post("siret/recherche", search_body(OPERATEURS_SIRET, filtres, options))
  Entities::ResultatRecherche.new(payload, item_class: Entities::Etablissement, total_key: TOTAL_KEY)
end