Class: Cpro::Cdv::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/cpro/cdv/message.rb

Overview

Construit un message de cycle de vie au format CDAR D22B, conforme à l'Annexe A de la norme AFNOR XP Z12-012 (feuillet « CDV FE - CDAR »).

L'ordre des éléments suit celui du feuillet, qui liste les données dans l'ordre du schéma : faute de XSD dans les documents disponibles, c'est le meilleur signal dont on dispose.

Constant Summary collapse

NAMESPACES =

Relevés du XSD CDAR D22B (CrossDomainAcknowledgementAndResponse_100pD22B.xsd).

{
  "xmlns:rsm" => "urn:un:unece:uncefact:data:standard:CrossDomainAcknowledgementAndResponse:100",
  "xmlns:ram" => "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100",
  "xmlns:qdt" => "urn:un:unece:uncefact:data:standard:QualifiedDataType:100",
  "xmlns:udt" => "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100"
}.freeze
PROFIL =

MDT-3, BR-FR-CDV-02

"urn.cpro.gouv.fr:1p0:CDV:invoice"
PROCESSUS =

MDT-2, BR-FR-CDV-CL-01

"REGULATED"
SCHEME_SIRET =

ICD 6523

"0009"
ROLE_VENDEUR =

BR-FR-CDV-CL-02/03/07

"SE"
ROLE_ACHETEUR =

BR-FR-CDV-CL-04

"BY"
SCHEME_ADRESSAGE =

EAS : adresse annuaire national, MDT-73-1

"0225"
FORMAT_DATE_HEURE =

UNTDID 2379 : AAAAMMJJHHMMSS

"204"
FORMAT_DATE =

AAAAMMJJ

"102"
TYPE_MONTANT_ENCAISSE =

MDT-207, BR-FR-CDV-14

"MEN"
TYPE_REFERENCE_FACTURE =

MDT-97, règle G7.14 : URN du type d'objet sur lequel porte le cycle de vie.

"urn.cpro.gouv.fr:1p0:CDV:einvoicingF2"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(facture:, statut:, emetteur: nil, destinataire: nil, motif: nil, montant: nil, taux_tva: nil, identifiant: nil, horodatage: nil, type_reference: TYPE_REFERENCE_FACTURE, raison_sociale_emetteur: nil, raison_sociale_destinataire: nil, adressage_destinataire: nil) ⇒ Message

Returns a new instance of Message.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/cpro/cdv/message.rb', line 35

def initialize(facture:, statut:, emetteur: nil, destinataire: nil, motif: nil,
               montant: nil, taux_tva: nil, identifiant: nil, horodatage: nil,
               type_reference: TYPE_REFERENCE_FACTURE, raison_sociale_emetteur: nil,
               raison_sociale_destinataire: nil, adressage_destinataire: nil)
  @facture = facture
  @statut = Statut[statut]
  @emetteur = emetteur || facture.siret_vendeur
  @raison_sociale_emetteur = raison_sociale_emetteur || facture.raison_sociale_vendeur
  @destinataire = destinataire || facture.siret_acheteur
  @raison_sociale_destinataire = raison_sociale_destinataire || facture.raison_sociale_acheteur
  @adressage_destinataire = adressage_destinataire || facture.id_adressage_acheteur
  @motif = motif
  @montant = montant
  @taux_tva = taux_tva
  @type_reference = type_reference
  @identifiant = identifiant
  @horodatage = horodatage
  valider!
end

Instance Attribute Details

#factureObject (readonly)

Returns the value of attribute facture.



33
34
35
# File 'lib/cpro/cdv/message.rb', line 33

def facture
  @facture
end

#statutObject (readonly)

Returns the value of attribute statut.



33
34
35
# File 'lib/cpro/cdv/message.rb', line 33

def statut
  @statut
end

Instance Method Details

#horodatageObject



59
60
61
# File 'lib/cpro/cdv/message.rb', line 59

def horodatage
  @horodatage ||= Time.now.utc
end

#identifiantObject



55
56
57
# File 'lib/cpro/cdv/message.rb', line 55

def identifiant
  @identifiant ||= "CDV-#{facture.numero}-#{@statut.code}"
end

#nom_fichierObject



76
77
78
# File 'lib/cpro/cdv/message.rb', line 76

def nom_fichier
  "#{identifiant}.xml"
end

#to_xmlObject



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/cpro/cdv/message.rb', line 63

def to_xml
  document = REXML::Document.new
  document << REXML::XMLDecl.new("1.0", "UTF-8")
  racine = document.add_element("rsm:CrossDomainAcknowledgementAndResponse", NAMESPACES)
  contexte(racine)
  document_echange(racine)
  accuse(racine)

  rendu = +""
  REXML::Formatters::Pretty.new(2).tap { |f| f.compact = true }.write(document, rendu)
  "#{rendu}\n"
end