Skip to content

Writes DRM (monthly market risk report) XML file, as required by Brazilian Central Bank (BACEN)

License

Notifications You must be signed in to change notification settings

lucasprocessi/BacenDRM.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BacenDRM.jl

License travis codecov

Writes DRM (monthly market risk report) XML file, as required by Brazilian Central Bank (BACEN)

Example

# create document with basic information
doc = BacenDRM.Documento(
    "2060",              # id_docto::String,
    "v1",                # id_docto_versao::String,
    "2020-06",           # data_base::String,
    123456,              # id_inst_financ::Int64,
    :I,                  # tipo_arq::Symbol,
    "Fulano",            # nome_contato::String,
    "555-1234",          # fone_contato::String
)

# create ItemCarteira, which is an index to document data
item_carteira = BacenDRM.ItemCarteira(
    :A20,
    nothing,
    :JM1,
    :offshore,
    :banking
)

# repeat for each vertice
codigo_vertice = 1
vertice_1 = BacenDRM.Vertice(
    100_000.0, # valor_alocado::Float64
      0.0      # valor_mam::Float64
)
push!(doc, item_carteira, codigo_vertice, vertice_1) # add Vertice
# end repeat

# two vertices
ic = BacenDRM.ItemCarteira(:A30, nothing, :ME1, :offshore, :banking)
push!(doc, ic,  3, BacenDRM.Vertice(100_000.0,  0.0))
push!(doc, ic, 12, BacenDRM.Vertice(200_000.0, 10_000.0))

# you can also build a vertice adding incrementally its values
ic = BacenDRM.ItemCarteira(:P30, nothing, :JM1, :onshore_sem_clearing, :trading)
push!(doc, ic, 1, BacenDRM.Vertice(70_000.0, 0.0))
push!(doc, ic, 1, BacenDRM.Vertice(230_000.0, 0.0))
# will result in: Vertice(300_000.0, 0.0)

# one-liner
push!(doc, BacenDRM.ItemCarteira(:D41, :C, :JM1, :onshore_clearing, :banking), 1, BacenDRM.Vertice(400_000.0, 0.0))

# hedge fund assets: data goes into ativo_fundo section
ic = BacenDRM.ItemCarteira(
    :A90,
    nothing,
    :JM1,
    :offshore,
    :banking,
    true      # is_ativo_fundo::Bool=false
)
push!(doc, ic, 1, BacenDRM.Vertice(500_000.0, 0.0))

# atividade_financeira
push!(doc, BacenDRM.ItemCarteira(:AFC, :V, :JM1, nothing, :banking), 1, BacenDRM.Vertice(600_000.0, 0.0))

# write a xml file ready to be sent to BACEN...
BacenDRM.write_xml("DRM.xml", doc)

# ... or a csv file to debug results
BacenDRM.write_csv("DRM.csv", doc)

Content of "DRM.xml"

Numbers are truncated to thousands when writing in xml.

<?xml version="1.0" encoding="UTF-8"?>
<DocDRM>
  <IdDocto>2060</IdDocto>
  <IdDoctoVersao>v1</IdDoctoVersao>
  <DataBase>2020-06</DataBase>
  <IdInstFinanc>123456</IdInstFinanc>
  <TipoArq>I</TipoArq>
  <NomeContato>Fulano</NomeContato>
  <FoneContato>555-1234</FoneContato>
  <Ativo>
    <ItemCarteira Item="A20" FatorRisco="JM1" LocalRegistro="03" CarteiraNegoc="02">
      <FluxoVertice CodVertice="01" ValorAlocado="100"/>
    </ItemCarteira>
    <ItemCarteira Item="A30" FatorRisco="ME1" LocalRegistro="03" CarteiraNegoc="02">
      <FluxoVertice CodVertice="03" ValorAlocado="100"/>
      <FluxoVertice CodVertice="12" ValorAlocado="200" ValorMaM="10"/>
    </ItemCarteira>
  </Ativo>
  <Passivo>
    <ItemCarteira Item="P30" FatorRisco="JM1" LocalRegistro="02" CarteiraNegoc="01">
      <FluxoVertice CodVertice="01" ValorAlocado="300"/>
    </ItemCarteira>
  </Passivo>
  <Derivativo>
    <ItemCarteira Item="D41" IdPosicao="C" FatorRisco="JM1" LocalRegistro="01" CarteiraNegoc="02">
      <FluxoVertice CodVertice="01" ValorAlocado="400"/>
    </ItemCarteira>
  </Derivativo>
  <AtivoFundo>
    <ItemCarteira Item="A90" FatorRisco="JM1" LocalRegistro="03" CarteiraNegoc="02">
      <FluxoVertice CodVertice="01" ValorAlocado="500"/>
    </ItemCarteira>
  </AtivoFundo>
  <AtividadeFinanceira>
    <ItemCarteira Item="AFC" IdPosicao="V" FatorRisco="JM1" CarteiraNegoc="02">
      <FluxoVertice CodVertice="01" ValorAlocado="600"/>
    </ItemCarteira>
  </AtividadeFinanceira>
</DocDRM>

Content of "DRM.csv"

secao item id_posicao fator_risco local_registro carteira_negoc v01 v02 v03 v04 v05 v06 v07 v08 v09 v10 v11 v12 v12_MaM
ativo A20 JM1 offshore banking 100000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
ativo A30 ME1 offshore banking 0.0 0.0 100000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 200000.0 10000.0
passivo P30 JM1 onshore_sem_clearing trading 300000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
derivativo D41 C JM1 onshore_clearing banking 400000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
ativo_fundo A90 JM1 offshore banking 500000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
atividade_financeira AFC V JM1 banking 600000.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

About

Writes DRM (monthly market risk report) XML file, as required by Brazilian Central Bank (BACEN)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages