lunes, 23 de diciembre de 2013

Programa cálculo IBAN en Java

Buenas, en este post cuelgo una propuesta de solución de un programa para calcular el IBAN de una cuenta corriente. 
He añadido la opción de seleccionar un país de una lista de países para poder calcular el IBAN según el formato establecido a la cuenta de casa país. Cada país tiene un formato específico de cuenta corriente con un número de dígitos y/o carácteres. Básicamente el cálculo consiste en añadir a la cuenta corriente el código del país y los dos dígitos de control del IBAN.

Si la cuenta es española el programa además la validará y calculará el código SWIFT o BIC. El módulo para calcular el código SWIFT está sólo preparado para una serie de bancos, básicamente los más conocidos, pero como cuelgo el código es sólo añadir más bancos. Verás que es un método que recibe como parámetro el banco y tiene un switch que permitirá retornar el código SWIFT asociado a cada banco, cada más fácil.
El proyecto ha sido escrito usando Netbeans y el link para la descarga es el siguiente (en la carpeta 'dist' el ejecutable por si sólo quieres ver el programa):



https://sites.google.com/site/raul252/catalog/CalculoIBAN.rar?attredirects=0&d=1
Eso sí es un proyecto aún en fase beta y si alguien quiere colaborar añadiendo más cosas -como el código está disponible pues es sólo continuarlo- y quiere aportarlo a los demás pues podríamos ir añadiendo más código, como validaciones de cuentas extranjeras, y perfeccionando el programa. Además advierto que este proyecto es para usos educativos y no lo recomiendo usar aún en producción porque no está totalmente testeado.

lunes, 4 de noviembre de 2013

Oficina Virtual de Aplazamientos de Hacienda: consideraciones sobre el aplazamiento y fraccionamiento de deudas

Buenas en este post voy a tratar el tema del aplazamiento y fraccionamiento de deudas en Hacienda. Ante falta transitoria de tesorería puede ser una alternativa para ganar un poco de tiempo para tener liquidez.

Llegados a este punto merece plantearse dónde se va el dinero, ya que hay que analizar si es un problema transitorio por el hecho que, por ejemplo, un cliente no ha pagado o ha habido un pago que no estaba planeado, o ya se está convirtiendo en un problema permanente y aquí habría que analizar más a fondo la estructura de la empresa y plantearse por qué no queda dinero pues pagar el IVA (que se paga sobre el valor añadido y para la empresa es neutral), las retenciones (analizar el importe de los gastos sujetos a retención como nóminas, profesionales, etc…), dividendos (analizar por qué hay gastos no deducibles que se pagan por la empresa).
Lógicamente esto lo comento bajo una perspectiva de reducir los gastos, pero también hay que plantearse la perspectiva de los ingresos, es decir, gano muy poco como para cubrir mis costes. Entonces tendríamos que mirar nuestros márgenes, ganar poder de mercado, estar en las últimas fases de la cadena del valor añadido, es decir, que me relacione directamente con los clientes, posicionarme correctamente y no tener miedo a buscar nuevos mercados en otros sitios.
 
Pero bueno vamos a lo que nos interesa que es explicaros un poco como Hacienda da financiación no bancaria a empresas a un tipo de interés simple –no compuesto- del 5 % anual y sin aval para deudas inferiores a los 18.000 €, y con aval para deudas superiores–aquí hay que ir con mucho cuidado porque yo como economista recomiendo nunca avalar ya que es muy peligroso- y con tipo de interés del 4%.
 
¿Cómo se calculan los intereses del aplazamiento o de demora?
Pues con la típica regla de 3 tan famosa de la ESO:
 
365 días                                                -->   5 % de interés
Días que solicitamos aplazamiento   -->  x % de interés,
 
despejamos la x,
x (tipo de interés) = (días que solicitamos aplazamiento * 0,05) / 365
interés  = importe deuda * x (tipo de interés)

 
Pues bien si hemos aplazado toda la deuda en una sola cuota o hemos aplazado la deuda en varios plazos, cada pago lo multiplicamos por x y obtenemos la cantidad de intereses. Deuda más intereses es el total a ingresar. De todas maneras en la concesión del aplazamiento ya te lo detallan y yo más abajo he puesto un ejemplo.
Lógicamente aplazando deudas no hay periodo de apremio y a la hora de pedir el certificado positivo o el de contratistas y subcontratistas no habrá problemas.
Si te deniegan el aplazamiento porque o tienes deudas ya aplazadas o has querido aplazar retenciones del alquiler u otras deudas no aplazables (todo y que la consideración va variando por parte de Hacienda y ante la situación de falta de tesorería se está dando más margen) te darán de nuevo un periodo voluntario de pago (básicamente hasta el próximo 5 o 20 del mes siguiente a la confirmación de recepción de la notificación -y si no quieres recibirla el plazo es el mismo-) en el que sólo pagarás la deuda más los intereses de demora sin recargo alguno.
Una cosa interesante es que no has de aplazar todo. Si tienes tesorería pero el pago de impuestos te puede hacer que no puedas hacer frente a tus deudas a corto plazo (fondo de maniobra negativo) puedes aplazar una parte. Aquí hay que comparar entre lo que te cobra el banco por esa financiación y el 5% anual de Hacienda para deudas inferiores a 18.000 €.
Los aplazamientos es mejor solicitarlos a la hora de presentar un impuesto ya que el proceso es más simple. Primero vamos a analizar las opciones disponibles para la presentación de la declaración del modelo 111 de retenciones:
  1. A Ingresar: ingresas con el NRC.
  2. Domiciliación del importe a ingresar: domicilias el impuesto en la cuenta de la empresa según el plazo establecido para poder presentar domiciliaciones. Se cargará a las 8 de la mañana del último día de presentación del impuesto todo y que el banco no tendrá que pagarlo a Hacienda hasta dentro de 10 días -este es un tema para tratar a la hora de decirles que gracias a tu empresa están dándole negocio bancario y que te mejore condiciones-.
  3. Ingreso en Cuenta Corriente Tributaria: sólo si has solicitado estar en el sistema de CCT.
  4. Solicitud de aplazamiento o fraccionamiento. Aquí es. Vamos a solicitar el NRR.
  5. Reconocimiento de deuda con solicitud de compensación. Reconoces que tienes esta deuda con el fisco y solicitas que te la compensen con otra que el fisco tiene a tu favor.
  6. Reconocimiento de deuda. Reconoces que tienes una deuda que no vas a pagar para que como administrador no te acusen de no proceder de forma adecuada y tengas que responder con tu patrimonio personal. Facilitas el trabajo a Hacienda para que ya te prepare la notificación de la providencia de apremio.
  7. Ingresos parciales: pides varios NRC para pagar usando varias cuentas. Ideal si no quieres llamar al Banco de España para que te haga una transferencia directa entre cuentas.
  8. Ingreso y compensación: ingresas una parte con NRC y pides compensación de otra parte porte lo que tienes que ingresar es superior a lo que te debe Hacienda.
  9. Ingreso y aplazamiento: ingresas una parte con NRC y aplazas otra parte con NRR.
  10. Ingreso y reconocimiento de deuda: ingresas una parte con NRC y le dices a Hacienda que la otra parte no la vas a ingresar para que te prepare la providencia de apremio. Como digo sólo tiene sentido el decir a Hacienda que te envíe la carta en la que te avisa que te va a embargar si eres administrador y no quieres responder por mala administración con tu patrimonio personal.
Supongamos que el importe de las retenciones Modelo 111 es de 1.500 € que vamos a aplazar –no aplaces 80 € porque no te lo van a conceder ya que no demuestras falta transitoria de liquidez-. Una vez presentado el impuesto con solicitud de aplazamiento aparecerá un enlace en el que tramitar el aplazamiento pero si no te aparece el aplazamiento se puede tramitar desde este enlace.

Vamos a la oficina virtual a Aplazamiento y fraccionamiento de deudas,

Presentamos la solicitud de aplazamiento.
 
Y rellenamos el alta. Lo más importante es:
  1. Deuda: número de referencia de la deuda que lo has obtenido a la hora de presentar el impuesto con solicitud de aplazamiento.
  2. Importe: el importe de la deuda. En nuestro caso 1.500 €
  3. Tipo de garantías: Exención para deudas inferiores a los 18.000 €
  4. Datos domiciliación bancaria: donde se te cargará cada uno de los plazos el 05 o el 20 del mes a partir en el que has decidido aplazar.
  5. Propuesta de pago: pues en cuántos plazos, en 1, en 2, en 5 plazos de 300 €, por ejemplo en nuestro caso.
  6. Periodicidad: un solo plazo, cada mes, cada año, etc… en nuestro caso cada mes, por ejemplo.
  7. Motivo de la solicitud: falta transitoria de liquidez, que queda bien. Pero no digas nada como permanente, que vas a cerrar,… porque si detectan que tu falta de liquidez es preocupante te lo denegaran.
  8. Fecha del primer cargo. Aplacemos sabiendo que el tipo de interés de demora es del 5 % anual por lo que puedes hacer un cálculo fácil de los intereses. Siempre o será el día 05 o el día 20 del mes elegido. En mi ejemplo será el 05/11/2013.
Una vez aquí toca esperar y a ver si lo conceden o lo deniegan. Si lo deniegan habrá que pagar intereses de demora por los días entre el día siguiente al vencimiento del período voluntario de presentación del impuesto y el día en el que se pague la deuda. Si nos lo conceden ellos nos harán ya el cálculo de los intereses de demora según el 5 % anual. Veamos cómo seria en nuestro caso la liquidación:
DETALLE DE LA LIQUIDACIÓN

Cuotafecha desdefecha hastaDíasTipo interésInteresesTotal interesesTotal liquidación
30023/07/201305/11/201310654,364,36304,36
30023/07/201305/12/201313655,595,59305,59
30023/07/201305/01/201416756,866,86306,86
30023/07/201305/02/201419858,148,14308,14
30023/07/201305/03/201422659,299,29309,29
30023/07/201305/04/2014257510,5610,56310,56
180044,791844,79
Como vemos, la deuda era de 1800 € pero hemos acabado pagando 44,79 € de más por intereses, vamos 2 buenos gin tonics.
Para gestionar los aplazamientos concedidos tenemos este enlace:
 Y podemos ver las deudas, acuerdos y obtener cartas de pagos
Bueno qué es lo qué pasa si no se paga. Pues bien continuamos con este tema en el siguiente post donde veremos las distintas casuísticas que nos dice la Ley General Tributaria.

martes, 24 de septiembre de 2013

Bases de datos embebidas en Java: Derby vs HSQLDB

Buenas en este nuevo post voy a tratar el tema de bases de datos locales en Java. Para ello me voy a centrar en el vídeo que voy colgar donde voy a repasar cómo conectarse a una base de datos usando Netbeans, crear tablas, ejecutar comandos para añadir, eliminar y modificar datos y poder usar esa base de datos en una aplicación que diseñemos nosotros.

Para ello voy a analizar la pestaña de ‘Prestaciones’ de Netbeans en la que tenemos el nodo ‘Bases de datos’
Voy a empezar comentando cómo conectarse a una base de datos MySQL situada en un servidor, ya sea local a través de wamp o en red. Como sabes, de vídeos explicando cómo conectarse a un servidor MySQL hay muchos. De hecho puedes crear tu base de datos usando wamp y conectándote al PhpMyAdmin, donde dispones de un entorno muy completo para trabajar con ella, y luego conectarte a través de Netbeans para, por ejemplo, visualizar los datos y de paso probar que la cadena de conexión es correcta para usarla en tu aplicación.
Pero yo en lo que me quiero centrar es en el uso de bases de datos locales o embebidas en Java. Si para .NET está Access o SQLCompact, para Android tenemos SQLLite, para Java hay dos motores famosos para poder usar bases de datos locales que son Apache Derby o DbDerby y HSQLDB.
Voy a explicar cómo Netbeans te puede ayudar en la creación de un proyecto con un formulario maestro-detalle en el que podrás trabajar con tu base de datos embebida (también podrías configurarlo para usar una base de datos MySQL situada en un servidor). Para ello usaremos la API de persistencia para Java JPA. Netbeans nos creará la unidad de persistencia y las clases de entidad a partir de la base de datos que usemos. JPA es un modelo de persistencia para mapear bases de datos relaciones en Java. Vamos a persistir (guardar) los datos que están en los objetos de nuestra aplicación en una base de datos relacional.
Anteriormente a JPA el trabajo con bases de datos era creando los métodos que hacían las diferentes operaciones con la base de datos escribiendo directamente las sentencias SQL en el código de nuestra aplicación. Para crear una aplicación tipo CRUD pues se creaba un método para conectarse a la base datos, otros para insertar un registro, otro para eliminar un registro y otro para actualizar un registro dado. Aquí hay una captura del proyecto pero en el link de más abajo está. Uso un formulario simple con unos jTextFields, un JTable (cuyo modelo será un AbstractDataModel) y un botón para crear nuevo registro, otro para eliminar registro y otro para guardar los cambios. El proyecto usa Java 7, ya que verás que el Class.forName no lo uso y eso es novedad en la versión 7 de Java (en pocas palabras que en versiones anteriores de Java no funcionará).


En este link está el código de los proyectos creados en el videotutorial y verás que hay un proyecto de aplicación para java llamado DerbyJavaApplication con un formulario en el que vamos a usar una base de datos Derby a la antigua usanza, es decir, escribiendo el código SQL para que nos conectemos a la base de datos (de paso también verificaremos que existe y si no existe la crearemos, junto con una tabla llamada clientes en el esquema APP), actualicemos, eliminemos y salvemos los datos. El código está disponible pero en el siguiente post lo explicaré más al detalle.

miércoles, 17 de julio de 2013

Bases de datos locales y uso del app.config con .NET: Access vs SQLCompact

Buenas en este post voy a empezar a fondo con el tema de las bases de datos locales en .NET y en Java. Primero voy a tratar cómo utilizar bases de datos locales en aplicaciones de escritorio de Windows Forms en .NET y en el siguiente post trataré lo mismo pero con WPF y en siguientes empezaré con bases de datos tanto situadas en servidores como locales a las que nuestra aplicación se conectará.
Idea clara: vamos a crear aplicaciones con bases de datos locales. Instalo la aplicación en un ordenador y ésta accederá a su base de datos local. Otra alternativa sería usar SQL Server o MySQL como proveedor de bases de datos y entonces tendríamos una o varias aplicaciones clientes que se conectarían a un servidor donde estarían almacenados los datos y trabajarían con ellos. En ambos tipos de aplicaciones el acceso a los datos se puede hacer de forma conectada (es decir crear conexión, crear comando, abrir conexión, ejecutar comando, cerrar conexión, etc… En pocas palabras si por lo que sea se corta la conexión con la base de datos en cualquier momento la aplicación fallará) o de forma desconectada (trabajar con datasets y dataadapters, es decir, tenemos una copia en memoria de nuestros datos en el dataset con los que trabajaremos y el dataadapter será el encargado se sincronizar la copia en memoria con los datos de la base datos cuando se requiera).
En el vídeo que voy a colgar voy a explicar cómo crear, configurar y publicar varios proyectos de aplicaciones para Windows Forms que usan bases de datos locales y me voy a centrar en las dos más conocidas: Access y SQLCompact. Para usar una base de datos Access la tenemos que crear primero ya sea en Access directamente y añadirla al proyecto. El IDE ajudará en el proceso de agregar un nuevo origen de datos a nuestro proyecto.
Pues bien aquí viene la chicha, porque de conectarse a una base de datos en .NET hay mil y un post, pero… qué pasa si quiero ocultar la contraseña de la base de datos que usará mi aplicación y que por defecto, y atendiendo a las buenas prácticas de programación, se me guardará en el archivo app.config o en [NombreDeMiAplicación].vshost.exe que se genera en la carpeta bin/Debug o bin/Release una vez compilemos el proyecto, y añadirla en tiempo de ejecución.
Normalmente los usuarios finales de las aplicaciones no sabrán que en ese archivo estará el id y el password de la base de datos pero es bueno no jugársela. ¿Cuál es la solución que podemos usar para que esa información esté oculta? Pues la mejor es encriptar la cadena de conexión y otra información sensible en el archivo app.config.
Pues bien la pregunta ahora es cómo la desencripto en tiempo de ejecución. Bueno dependerá del tipo proyecto. Si el proyecto que tienes es el tipo proyecto que creas tú desde cero sin usar ningún asistente, pues en el método que crees para recuperar la cadena de conexión podrás aprovechar para desencriptarla y ya la podrás usar. El código sería similar a éste de aquí:
Private _cadenaConexion As String
Private _factory As DbProviderFactory = Nothing

Private Sub ConfigurarAcceso()
Try
Dim proveedor As String = ConfigurationManager.ConnectionStrings("BaseConnectionString").ProviderName
Me._cadenaConexion = ConfigurationManager.ConnectionStrings("BaseConnectionString").ConnectionString

'Aquí iría el código para desencriptar los datos de la cadena de conexión
 
Me._cadenaConexion = …

Me._factory = DbProviderFactories.GetFactory(proveedor)
Catch ex As ConfigurationErrorsException
Throw New MiBaseDatosException("Error al acceder a la configuración del acceso a datos.", ex)
End Try
End Sub

Pero qué es lo que pasa cuando has creado un proyecto para Windows Forms y has usado el asistente para que te cree un dataset y un dataadapter y te das cuenta que si ejecutas el proyecto no funciona porque la cadena de conexión está encriptada o le falta añadir la contraseña como en el ejemplo que pongo. Pues nada verás si abres el dataset con el diseñador y haces click en el TableAdapter la cadena de conexión la recoge no del archivo app.config sino de My.Settings
Pues bien podríamos ser chapuceros y borrar el nodo del archivo app.config y más feliz que una pediz  o podríamos usar las buenas prácticas y ejemplo encriptar esa sección del app.config o eliminar la contraseña. Luego vamos a nuestro proyecto y hacemos click con el botón derecho para ver las propiedades en “Configuración”  “Ver Código” y podemos pegar un código como este para añadir el password a la cadena de conexión:
Partial Friend NotInheritable Class MySettings

Default Public Overrides Property Item(ByVal propertyName As String) As Object

Get
If propertyName = "BaseConnectionString" Then
Return MyBase.Item(propertyName) & ";Jet OLEDB:Database Password=admin;"
End If
Return MyBase.Item(propertyName)
End Get

Set(ByVal value As Object)
MyBase.Item(propertyName) = value
End Set

End Property

End Class
 
 

Por último qué pasa si usamos Entity FrameWork  y queremos desencriptar la cadena de conexión o añadir la contraseña a la cadena de conexión que aparece en nuestro archivo app.config. Verás que aquí como puedo no usaré Access sino SQLCompact como base de datos.
Pues una de las tantas maneras es crear una función que me devolverá la conexión ya desencriptada o con la contraseña en nuestro caso:

Private Function getConnection(name As String) As String

Dim connectionString = ConfigurationManager.ConnectionStrings(name).ConnectionString
Dim builder = New EntityConnectionStringBuilder(connectionString)

builder.ProviderConnectionString = builder.ProviderConnectionString & ";Password=estrella;"

Return builder.ToString()

End Function
Y luego ya en el código al crear una nueva instancia de nuestra entidad pues usamos una de las sobrecargas del método constructor que me permitirá pasarle ya cadena de conexión ya lista para usar (porque me la ha devuelto la función getConnection que hemos creado antes.
Dim db As New baseEntities(getConnection("baseEntities"))
Pues bien en el siguiente vídeo voy a concretar todos estos temas ya que hay amplio contenido.

En el siguiente post continuaré con acceso a bases de datos locales en WPF, que proporcinará unas interfaces mucho más modernas para nuestras aplicaciones y entonces entraremos al mundo de las bases locales en Java usando Hibernate y JPA. Tengo pensado desarrollar otra aplicación en Java para hacer facturas y listar datos. Quiero desarrollar la típica aplicación de facturación en Java y luego desarrollar alguna que otra aplicación contable así útil que me quite trabajo.

sábado, 6 de julio de 2013

Entidades inactivas y la cuota de autónomos del socio-administrador

Buenas en este post voy a hablar un poco sobre cuando una empresa se deja inactiva. Dejar inactiva una empresa lo que significa es que ya no está de alta ejerciendo una actividad y la única obligación fiscal que tendrá es la presentación del Impuesto sobre Sociedades -donde sólo aparecerán pues los movimientos que ha habido en la cuenta bancaria de la empresa a efectos de añadir alguna comisión bancaria o algún otro ingreso financiero por el efectivo disponible en la cuenta, vamos prácticamente 0, o la contabilización de alguna devolución pendiente por parte de la administración pública de la etapa en la que la empresa estaba ejerciendo una actividad- y por el otro lado, la obligación de presentar los Libros y Cuentas Anuales –con todo lo que comporta como, por ejemplo, el tener presente no superar los límites de capital mínimo para que no te obliguen a disolver la empresa-.

Pues bien, ¿qué es lo que pasa con los seguros sociales del administrador? Pues bien si un administrador no ejerce más actividad que la de la mera aprobación de las cuentas no teniendo asignada ninguna retribución no tiene por qué pagar el recibo de autónomos.  Si hablamos de socios tenemos dos tipos: los socios capitalistas que aportan dinero a la sociedad siendo unos meros rentitas a efectos de cobrar dividendos por sus acciones o participaciones, y los socios que prestan servicios a la sociedad o/y que poseen el Control Efectivo de la sociedad. Sólo los socios que poseen el Control Efectivo de una sociedad están obligados a cotizar en el RETA pudiendo estar el resto en el Régimen General.
En este enlace de la Tesorería se deja claro cuando se tiene el Control Efectivo de una sociedad que cito aquí:
Continuando con este tema en el que se deja inactiva la sociedad y el socio se quiere dar de baja de la obligación de pagar el autónomo -que es un tema muy común sobre todo en sociedades unipersonales en la que el único socio tiene el control efectivo y es a su vez el único administrador-, en algunas delegaciones de la Tesorería lo pueden poner difícil para aceptar esta baja, pero es lógico el poder darse de baja sin tener que esperar a la disolución de la sociedad -presentando entonces el balance de disolución y la escritura de disolución de la empresa-, ya que en ese período en el que la sociedad no ejerce actividad el socio está soportando unos costes no ejerciendo la sociedad actividad alguna.

Pero aquí hay otro tema: ¿para qué quieres dejar la empresa inactiva? Si estás a la expectativa de que la cosa mejore y estás esperando un poco a ver si aparecen esas posibilidades reales de ganar dinero con ella pues es una buena opción dejarla inactiva todo y el tener que presentar Libros y Cuentas. Pero si lo que pretendes es dejar la sociedad en una especie de limbo es mala idea, por el coste que supone cada año el Registro Mercantil, y sobre todo porque el plazo de prescripción no empieza estando la empresa inactiva. No te olvides que para poder disolver una sociedad todos los Libros y Cuentas han de estar presentados, por lo que si piensas que inactiva ya está bien y me olvido de ella lo que pasará es que pasados unos años quedrás disolverla y tendrás que presentar todo lo pendiente.

Pues bien vamos a rellenar un 036 para dejar inactiva una sociedad que se dedica al transporte de mercancías por ferrocarril vía convencial. En la página de Hacienda vamos a Modelos y Formularios y buscamos el 036 que rellenito quedaría:
Y el TA521-5 de baja del socio/administrador como autónomo sería el siguiente:

sábado, 1 de junio de 2013

Crear un pdf en JAVA con iText

Buenas ahora le toca el turno a hacer lo mismo que hemos hecho con .NET con JAVA. Vamos a crear un pdf usando la librería iText. Como veremos el código es similar al que hemos usado para la aplicación que crea pdfs que hemos desarrollado en .NET. Voy a explicar cómo crear una aplicación en JAVA que se conectará a una base de datos JavaDB en un servidor y que mostrará los datos en un Formulario Maestro-Detalle. Pues bien en función de los datos seleccionados por el usuario crearemos en tipo de ejecución un pdf.  Es un proyecto muy simple y además aprovecho y cuelgo el proyecto el proyecto acabado de la aplicación que calcula la retribución en especie por el uso del coche de la empresa con fines privados y añado la posibilidad de crear facturas para justificar el IVA repercutido al trabajador. Está disponible en este enlace. Si alguien quiere el proyecto en NetBeans que me lo diga y lo subo también. Bueno la creación de pdfs quedaría de esta manera:
Pero he de reconocer que el proyecto de aplicación para calcular las retribuciones en especie por el uso privativo del coche muy simple y no serviría para entregar a un cliente. ¿El motivo? Lógicamente las facturas tienen que tener un número correlativo. No vale pasar de la 5 a la 10. Además si vemos que nos hemos equivocado en algo pues tendríamos que generar de nuevo la factura rellenando todos los datos. En pocas palabras haría falta una base de datos.
Pues bien ahora cuelgo el vídeo donde explico la parte de crear pdfs en JAVA con iText.

Pues bien ese será el tema que abordaremos después de exámenes, como hacer que los datos se guarden en nuestras bases de datos y para ello quiero hablar sobre cómo usar JAVA con MySQL, con Derby (tanto para bases de datos embebidas como en un server) y con Hsqldb. Estas dos últimas son ideales para tener bases de datos locales para nuestras aplicaciones de escritorio.  Pero no quiero adelantar temas lo que si que quiero decir que me centraré en explicar el uso de bases de datos: tanto situadas en un servidor y que nuestra aplicación sea una especie de cliente que se conecta al servidor y trabaja con los datos, como de aplicaciones de escritorio que usan bases de datos locales. Para ello quiero repasar como ejecutar comandos en nuestro código JAVA, que es lo más básico, y lo que actualmente se usa cada vez más que es JPA e Hibernate para persitencia de datos en nuestras aplicaciones. Suena feo pero será muy interesante.

viernes, 24 de mayo de 2013

¿Me han calculado bien las retenciones?

Buenas, en este post voy a introducir tema de actualidad que está relacionado con el inicio de la campaña de la renta y la puesta a disposición del borrador de la declaración con los datos fiscales que obran en poder de la Agencia Tributaria. Bueno, ¿y esos datos de donde se sacan? Los datos provienen de los resúmenes anuales que las empresas y profesionales presentan a lo largo del mes de enero: el 180 y 190 para retenciones, el 390 para el IVA, el 193 para rendimientos del capital mobiliario, etc.

Pues es muy importante revisar los datos fiscales porque esos datos provienen de otras personas y el error humano siempre es posible. La Agencia Tributaria simplemente te los muestra lo que ellos han declarado para que tú los compruebes pues con tus certificados de retenciones (que cabe remarcar que no tienen validez legal ninguna ni ningún formato legal, sólo es a título informativo) y con tus facturas o con todas tus nóminas del año anterior.
Cuidado porque hay varias claves según lo que se perciba. Clave A para rendimientos del trabajo personal o nóminas, retribuciones de actividades económicas o facturas es la clave G, A2 dividendos, etc…
Una inmensa mayoría de los contribuyentes tuvieron el año anterior retribuciones del trabajo personal (clave A) y en los datos fiscales pueden ver el bruto de su nómina y las retenciones. Aquí empieza la duda: me han retenido correctamente o he sido yo el que no he informado a la empresa de algún cambio en mi situación personal y familiar a través del modelo 145. Pues bien el trabajador debe informar de cualquier cambio en su situación personal presentando el modelo 145 a la empresa en el momento en el que se produce la variación. Lógicamente te pueden estar reteniendo de más cuando no sería necesario. A la empresa le es indiferente retenerte más o menos ya que lo que se te retiene se lo ingresa mensual o trimestralmente a Hacienda.
En este enlace está el programa que nos permitirá calcular la retención global que deberás tener durante todo el año cuando percibes Rendimientos de Trabajo Personal, es decir, cuando tienes una nómina. Con este programa el trabajador puede saber en todo momento el % de retención que le corresponde e informar mediante el modelo 145 de cualquier variación.  El programa te pedirá el importe bruto. El bruto no es lo que ves en el banco ya que aquí se le resta la retención y el 6,35 % (puede ser diferente según el tipo de contrato) de la Seguridad Social a cargo del trabajador. El importe de la seguridad social si no lo sabes mira en tus nóminas o en tu certificado de retenciones pero suele ser un 6,35 % del bruto, pero según el tipo de contrato puede variar un poco. Para más info mira en este link.
El tan conocido 2% de retención en los contratos de duración inferior al año, que es correcto, puede ocasionar que te toque pagar lo que no te han retenido cuando haces la Renta. O también puedes avisar si ves que en tu nómina no te están reteniendo correctamente ya que las regulaciones de retenciones en diciembre no quedan muy bien.
Bueno pues vamos a hacer un supuesto práctico en el que un trabajador  prevé tener unos ingresos brutos durante el 2013 de 24.500 €. No está casado (clave 3) ni tiene ascendientes ni descendientes a su cargo ni tampoco tiene un préstamo hipotecario constituido antes del 2013. Pues vamos a calcular la retención definitiva que te tendría que salir para el año 2013.
En ‘Datos Personales’ es donde se rellenan los sus datos como su NIF y el año de nacimiento y la situación en la que se encuentra. Si pasas el cursor por encima de cada checkbox verás una pequeña descripción.
En ‘Ascendientes’ y ‘Descendientes’ se rellena si tiene hijos o padres a su cargo.
 ‘En Datos económicos’ es donde rellenamos el bruto de su nómina y la seguridad social en este caso.
 ‘En datos regularización’ pues se rellenarían si por ejemplo hay un cambio en la situación del trabajador informada a través del modelo 145 que obliga a recalcular las retenciones.
Pues bien nada más simple pulsas en ‘Resultados’ y el programa te calculará la retención que deberías tener durante el año, en este caso un 16 %, para que en renta si no tienes pues más rendimientos ni te salga a pagar ni a devolver. Como ves te está haciendo una predeclaración de la Renta.

sábado, 11 de mayo de 2013

Que lo sepas… validar NIF, NIE y CIF en JAVA gracias a la AEAT

Buenas, a veces a los programadores nos gusta escribir código pensando que la funcionalidad que nosotros queremos para nuestra aplicación no ha sido desarrollada. Pues bien a veces estamos haciendo doblemente el trabajo ya que es posible que lo que nosotros queramos hacer ya exista y se puede reaprovechar. Un ejemplo es como validar un NIF, un NIE y un CIF. Verás un montón de páginas con diversos tipos de algoritmos de validación de un NIF, que puedes también reutilizar en tus aplicaciones. Eso sí nadie te garantiza que sean 100 % correctos, para ello hay que analizarlos línea por línea y testearlos haciendo varias pruebas. Pues bien para las empresas que desarrollan software la AEAT ha proporcionado un archivo .jar con un método que podremos usar para conseguir validar un NIF, un NIE y un CIF. Campo que siempre suele aparecer en casi todo formulario que se precie y cuya validación es un poco farragosa. Pues bien nada más simple: agregas el archivo .jar a la liblioteca del tu proyecto y añades el paquete a tu proyecto mediante un import.

El zip con todo lo proporcionado por la AEAT está disponible en este link.
En el zip hay un archivo con documentación muy útil y hasta con un ejemplo de código, pero el nif pásalo con letras en mayúsculas para que funcione bien.

String cad = “000000000”;
Validador val = new Validador();
int ret = val.checkNif(cad);
if( ret > 0) {
// NIF_OK
}
else {
// NIF_MAL
}
...que por ejemplo en un función quedaría:
  public boolean EsValido(String nif) {

        Validador val = new Validador();

        int ret = val.checkNif(nif);

        if (ret > 0) {
        // NIF_OK
            return true;
        } else {
        // NIF_MAL
            return false;
        }
    }
Si el contenido de la variable nif lo obtienes, por ejemplo, de un control jTextfield con el método getText() ya funcionaría y como el resultado de la validación no seria true si no es correcto, podrías avisar al usuario indicando que lo que ha introducido no es válido.