cl.sii.dte
Class Timbre

java.lang.Object
  |
  +--cl.sii.dte.Timbre

public class Timbre
extends Object

Esta clase es utilizada tanto para generar como verificar timbres según ha definido SII.

Para generar, instancie la clase y enseguida complete los campos necesarios con las funciones set*, para finalmente firmar el timbre con la funcion sign. El elemento XML según el formato definido por SII representativo del timbre se obtiene con la función getDOMElement.

Para verificar, instancie la clase y cargue el timbre con la funcion setDOMElement o loadXML

. La verificación se realiza utilizando la función verify.

Se debe tener presente que la función verify, verifica que el timbre está correcto para un determinado CAF, pero no verifica el CAF. Para verificar el código, obténgalo con getCodigo() e invoque su funcion verify de Codigo.

Version:
1.0
Author:
Tomas Barros bbarros@nic.cl
See Also:
Codigo

Field Summary
private  Codigo codigo
           
private  RUT emisor
           
private  Date fecha
           
private  Date fechaFirma
           
private  String firmaAlg
           
private  byte[] firmaValue
           
private  Integer folio
           
private  String item
           
static org.jdom.output.XMLOutputter out
           
private  String razonSocial
           
private  RUT receptor
           
private  SimpleDateFormat sdf
           
private  SimpleDateFormat sdfirma
           
private  Integer tipo
           
private  Integer total
           
private  String version
           
 
Constructor Summary
Timbre()
          Crea un nuevo objeto Timbre.
Timbre(Codigo codigo)
          Crea un nuevo timbre, utilizando un codigo de autorización.
 
Method Summary
private  boolean filled()
          Verifica si el timbre tiene todos los datos necesarios (sin incluir la firma)
private  String genCode()
          Genera el string que debe ser firmado con los datos del timbre
private  org.jdom.Element genDOMCode()
          Obtiene el elemento XML que debe ser firmado.
private  org.jdom.Element genDOMCode(org.jdom.Namespace ns)
          Genera el elemento XML que representa los datos del timbre para ser incluído en el documento.
 Codigo getCodigo()
          Obtiene el código autorizador del timbre (CAF)
 org.jdom.Element getDOMElement(String tagName, org.jdom.Namespace ns)
          Obtiene el elemento XML representativo del timbre a incluir en la versión XML del DTE.
 RUT getEmisor()
          Retorna el emisor
 Date getFecha()
          Obtiene la fecha del timbre
 String getFechaAsString()
          Obtiene la fecha del timbre como string
 Date getFechaFirma()
          Obtiene la fecha de firma del timbre
 String getFechaFirmaAsString()
          Obtiene la fecha de firma del timbre como string
 Integer getFolio()
          Obtiene el folio del documento
 String getItem()
           
 String getPDF417()
          Obtiene el string a colocar en el código de barras PDF417 a incluir en la versión impresa del Documento Tributario Electrónico
private  org.jdom.Element getPureDOMElement()
          Obtiene el XML puro del timbre, es decir, sin namespace ni identación.
 String getRazonSocial()
           
 RUT getReceptor()
          Retorna el receptor
 Integer getTipo()
          Obtiene el tipo de documento
 Integer getTotal()
          Obtiene el valor total del documento
 String getVersion()
          Obtiene la versión del timbre
private  boolean isCorrespondingCodigo()
          Verifica si el CAF presente en el timbre es el correcto que lo autoriza
 void loadXML(String data)
          Carga un timbre desde un string que contiene el XML de un elemento timbre
 void setCodigo(Codigo codigo)
          Asigna el código autorizador del timbre
 void setDOMElement(org.jdom.Element data)
          Carga un timbre desde un Elemento XML que contiene un timbre según la definición de SII
 void setEmisor(RUT emisor)
          Asigna el emisor
 void setEmisor(String emisor)
          Asigna el emisor
 void setFecha(Date fecha)
          Asigna la fecha del timbre
 void setFecha(String fecha)
          Asigna la fecha del timbre en base a un string
 void setFechaFirma(Date fechaFirma)
          Asigna la fecha de firma del timbre
 void setFechaFirma(String fechaFirma)
          Asigna la fecha de firma del timbre en base a un string
 void setFolio(Integer folio)
          Asigna el folio del documento
 void setItem(String string)
           
 void setRazonSocial(String string)
           
 void setReceptor(RUT receptor)
          Asigna el receptor
 void setReceptor(String receptor)
          Asigna el receptor
 void setTipo(Integer tipo)
          Asigna el tipo de documento
 void setTotal(Integer total)
          Asigna el valor total del documento
 void setVersion(String version)
          Asigna la versión del timbre
 void sign(PrivateKey pKey)
          Firma el timbre con la llave privada del contribuyente
private  boolean signed()
          Verifica si el timbre ha sido firmado.
 boolean verify()
          Verifica si el timbre está correcto según la autorización en el CAF
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

emisor

private RUT emisor

receptor

private RUT receptor

tipo

private Integer tipo

folio

private Integer folio

fecha

private Date fecha

razonSocial

private String razonSocial

total

private Integer total

item

private String item

version

private String version

codigo

private Codigo codigo

fechaFirma

private Date fechaFirma

sdf

private SimpleDateFormat sdf

sdfirma

private SimpleDateFormat sdfirma

firmaAlg

private String firmaAlg

firmaValue

private byte[] firmaValue

out

public static org.jdom.output.XMLOutputter out
Constructor Detail

Timbre

public Timbre(Codigo codigo)
Crea un nuevo timbre, utilizando un codigo de autorización.

Este constructor asigna automáticamente la fecha a la fecha actual de creación, la versión, ademas del emisor y tipo de documento los cuales están contenidos en el código.

Parameters:
codigo - El código autorizador de este timbre

Timbre

public Timbre()
Crea un nuevo objeto Timbre. Asigna la versión y la fecha a la fecha actual de creación

Method Detail

getEmisor

public RUT getEmisor()
Retorna el emisor

Returns:
el rut del emisor

setEmisor

public void setEmisor(RUT emisor)
Asigna el emisor

Parameters:
emisor - el rut del emisor

setEmisor

public void setEmisor(String emisor)
               throws RUTException
Asigna el emisor

Parameters:
emisor - el rut del emisor
Throws:
RUTException - en caso que el string del RUT esté mal formado

getReceptor

public RUT getReceptor()
Retorna el receptor

Returns:
el rut del receptor

setReceptor

public void setReceptor(RUT receptor)
Asigna el receptor

Parameters:
receptor - el rut del emisor

setReceptor

public void setReceptor(String receptor)
                 throws RUTException
Asigna el receptor

Parameters:
receptor - el rut del emisor
Throws:
RUTException - en caso que el string del RUT esté mal formado

getTipo

public Integer getTipo()
Obtiene el tipo de documento

Returns:
el tipo del documento

setTipo

public void setTipo(Integer tipo)
Asigna el tipo de documento

Parameters:
tipo - el tipo de documento

getFolio

public Integer getFolio()
Obtiene el folio del documento

Returns:
el número de folio del documento

setFolio

public void setFolio(Integer folio)
Asigna el folio del documento

Parameters:
folio - el número de folio del documento

getRazonSocial

public String getRazonSocial()
Returns:

setRazonSocial

public void setRazonSocial(String string)
Parameters:
string -

getTotal

public Integer getTotal()
Obtiene el valor total del documento

Returns:
el valor total del documento

setTotal

public void setTotal(Integer total)
Asigna el valor total del documento


getItem

public String getItem()
Returns:

setItem

public void setItem(String string)
Parameters:
string -

getVersion

public String getVersion()
Obtiene la versión del timbre

Returns:
la versión del timbre

setVersion

public void setVersion(String version)
Asigna la versión del timbre

Parameters:
version - la versión del timbre

getFecha

public Date getFecha()
Obtiene la fecha del timbre

Returns:
la fecha del timbre

setFecha

public void setFecha(Date fecha)
Asigna la fecha del timbre

Parameters:
fecha - la fecha del timbre

setFecha

public void setFecha(String fecha)
              throws ParseException
Asigna la fecha del timbre en base a un string

Parameters:
fecha - la fecha en formato AAAA-MM-DD
Throws:
ParseException - en caso que el formato del string no sea correcto

getFechaAsString

public String getFechaAsString()
Obtiene la fecha del timbre como string

Returns:
la fecha del timbre en formato AAAA-MM-DD

getCodigo

public Codigo getCodigo()
Obtiene el código autorizador del timbre (CAF)

Returns:
el código autorizador del timbre
See Also:
Codigo

setCodigo

public void setCodigo(Codigo codigo)
Asigna el código autorizador del timbre

Parameters:
codigo - el código autorizador del timbre
See Also:
Codigo

getFechaFirma

public Date getFechaFirma()
Obtiene la fecha de firma del timbre

Returns:
la fecha de firma del timbre

setFechaFirma

public void setFechaFirma(Date fechaFirma)
Asigna la fecha de firma del timbre

Parameters:
fechaFirma - la fecha de firma del timbre

setFechaFirma

public void setFechaFirma(String fechaFirma)
                   throws ParseException
Asigna la fecha de firma del timbre en base a un string

Parameters:
fechaFirma - la fecha en formato AAAA-MM-DDTHH:MI:SS
Throws:
ParseException - en caso que el formato del string no sea correcto

getFechaFirmaAsString

public String getFechaFirmaAsString()
Obtiene la fecha de firma del timbre como string

Returns:
fecha de firma del timbre en formato AAAA-MM-DDTHH:MM:SS

filled

private boolean filled()
Verifica si el timbre tiene todos los datos necesarios (sin incluir la firma)

Returns:
true si esta completo o false en caso contrario

signed

private boolean signed()
                throws TimbreException
Verifica si el timbre ha sido firmado. Solo verifica la prescencia de una firma pero no si esta está correcta

Returns:
true si ya tiene una firma o false en caso contrario
Throws:
TimbreNotCompleteFilledException - en caso que el código no esté completo
TimbreException
See Also:
filled(), verify()

genCode

private String genCode()
                throws TimbreException,
                       CodigoException
Genera el string que debe ser firmado con los datos del timbre

Returns:
String el string a ser firmado
Throws:
TimbreException - en caso que no se hayan asignado todos los valores necesarios del timbre
CodigoException - en caso de haber problemas con el CAF

genDOMCode

private org.jdom.Element genDOMCode()
                             throws TimbreException,
                                    CodigoException
Obtiene el elemento XML que debe ser firmado. Esta funcion es utilizada por la funcion genCode.

Returns:
Element el elemento XML a firmar
Throws:
TimbreException - en caso que no se hayan asignado todos los valores necesarios del timbre
CodigoException - en caso de haber problemas con el timbre
See Also:
genCode()

genDOMCode

private org.jdom.Element genDOMCode(org.jdom.Namespace ns)
                             throws TimbreException,
                                    CodigoException
Genera el elemento XML que representa los datos del timbre para ser incluído en el documento. Es utilizada por la funcion getDOMElement.

Parameters:
ns - el namespace de la definición del timbre
Returns:
Element el elemento generado
Throws:
TimbreException - en caso que los valores del timbre no estén completos
CodigoException - en caso de haber problemas con el CAF

isCorrespondingCodigo

private boolean isCorrespondingCodigo()
                               throws TimbreException
Verifica si el CAF presente en el timbre es el correcto que lo autoriza

Returns:
true si el CAF corresponde al timbre o false en caso contrario
Throws:
TimbreException - si el timbre no está completo
See Also:
filled()

getPureDOMElement

private org.jdom.Element getPureDOMElement()
                                    throws TimbreException,
                                           CodigoException
Obtiene el XML puro del timbre, es decir, sin namespace ni identación. Esta función es utilizada por getPDF417.

Returns:
Element el elemento que representa el timbre
Throws:
TimbreException - en caso que el timbre no esté completo o no haya sido firmado
CodigoException - en caso de haber problemas con el CAF
See Also:
getPDF417()

getPDF417

public String getPDF417()
                 throws TimbreException,
                        CodigoException
Obtiene el string a colocar en el código de barras PDF417 a incluir en la versión impresa del Documento Tributario Electrónico

Returns:
String el string a incluir en el PDF417
Throws:
TimbreException - en caso que el timbre no esté completo o no haya sido firmado
CodigoException - en caso de haber problemas con el CAF

getDOMElement

public org.jdom.Element getDOMElement(String tagName,
                                      org.jdom.Namespace ns)
                               throws TimbreException,
                                      CodigoException
Obtiene el elemento XML representativo del timbre a incluir en la versión XML del DTE.

Returns:
Element el elemento XML representativo del timbre
Throws:
TimbreException - en caso de que el timbre no esté completo o no haya sido firmado
CodigoException - en caso de haber problemas con el CAF

setDOMElement

public void setDOMElement(org.jdom.Element data)
                   throws TimbreException,
                          CodigoException,
                          ParseException,
                          NoSuchAlgorithmException
Carga un timbre desde un Elemento XML que contiene un timbre según la definición de SII

Parameters:
data - El elemento XML (DOM Element) del timbre
Throws:
TimbreException - en caso que el elemento de entrada no esté bien estructurado (no corresponda a un timbre)
CodigoException - en caso que el algoritmo de la llave pública del contribuyente no esté soportado en esta versión u otro problema en el CAF que contiene el timbre
NoSuchAlgorithmException - en caso que la JVM no tenga implementados los algoritmos criptográficos necesarios
ParseException

sign

public void sign(PrivateKey pKey)
          throws InvalidKeyException,
                 SignatureException,
                 NoSuchAlgorithmException,
                 TimbreException,
                 CodigoException
Firma el timbre con la llave privada del contribuyente

Parameters:
pKey - la llave privada del contribuyente
Throws:
TimbreException - en caso que el codigo no corresponda al timbre (por ser de otro tipo de documento o estar fuera del rango autorizado), o en caso que la llave privada no corresponda a la pública contenida en el CAF. También en el caso que no se hayan asignado todos los valores del timbre
InvalidKeyException - en caso de haber problemas con la llave privada
SignatureException - en caso de haber problemas firmando
NoSuchAlgorithmException - en caso que el algoritmo de firma no sea soportdo en esta versión
CodigoException - en caso de haber problemas con el CAF

loadXML

public void loadXML(String data)
             throws TimbreException,
                    CodigoException,
                    ParseException,
                    NoSuchAlgorithmException
Carga un timbre desde un string que contiene el XML de un elemento timbre

Parameters:
data - el string con el elemento en formato XML
Throws:
TimbreException - en caso que el elemento de entrada no esté bien estructurado (no corresponda a un timbre)
CodigoException - en caso que el algoritmo de la llave pública del contribuyente no esté soportado en esta versión u otro problema en el CAF que contiene el timbre
NoSuchAlgorithmException - en caso que la JVM no tenga implementados los algoritmos criptográficos necesarios
ParseException

verify

public boolean verify()
               throws TimbreException,
                      CodigoException,
                      NoSuchAlgorithmException,
                      InvalidKeyException
Verifica si el timbre está correcto según la autorización en el CAF

Returns:
true si se verifica el timbre o false en caso contrario
Throws:
TimbreException - si el código no corresponde al timbre, si el timbre no tiene todos sus valores asignados, si el timbre no ha sido firmado o si el algoritmo de firma no está soportado en esta versión del timbre
NoSuchAlgorithmException - si el algoritmo de firma del timbre no está soportado en esta JVM
InvalidKeyException - si hay problemas con la llave pública contenida en el código
CodigoException