# LedgerSMB

LedgerSMB es un sistema de contabilidad por partida doble en software libre. Los datos contables son almacenados en un servidor de base de datos SQL y un navegador web estándar puede ser usado como su interfaz de usuario. El sistema utiliza el lenguaje Perl y un módulo de interfaz de base de datos Perl para el procesamiento, y a PostgreSQL para el almacenamiento de datos.
LedgerSMB es distribuido bajo los términos de la GNU General Public License.

## Historia

LedgerSMB comenzó como una bifurcación (fork) del SQL-Ledger. Sin embargo, se ha bifurcado rápidamente y la futura arquitectura tiene muy poco que ver con su ascendencia.

### La controversia de la bifurcación

El proyecto comenzó cuando Chris Travers, descontento con el manejo de los errores (bug) de seguridad en el SQL-Ledger, asociado con Christopher Murtagh para producir un parche para el CVE-2006-4244. Este fue aparentemente reportado al autor del SQL-Ledger, Dieter Simader, varios meses antes a Chrises trabajando en un parche. El lanzamiento inicial de LedgerSMB tiene como su base al SQL-Ledger 2.6.16 con el parche para el CVE-2006-4244. Este lanzamiento, junto con el acceso completo del error en la lista de correo principal, hizo tensas las relaciones entre los partidarios del SQL-Ledger y los miembros del naciente proyecto LedgerSMB.
La bifurcación del LedgerSMB es considerada por algunos como parte de la razón de la cláusula anti bifurcación en la licencia de breve duración SQL-Ledger Open Source License, la licencia que fue usada para el SQL-Ledger 2.8.0.

### Próximos lanzamientos

El lanzamiento 1.1.0 combinó muchos parches que habían sido hechos para otros clientes pero no cambiaron la estructura del código de ninguna manera significativa. Para ese entonces, sin embargo, la mayor parte de los miembros principales estaban infelices con la arquitectura actual y habían decidido trabajar en refactorizar el código.
El lanzamiento 1.2.0 incluyó un número de profundas correcciones de seguridad y los principios del proceso de refactorización. Fueron centralizados el código de la matriz del impuesto y el precio. Este lanzamiento fue muy problemático y el equipo principal terminó quitando las versiones 1.2.0 y 1.2.1 de la distribución pública debido a un número de problemas en la integración con viejo y el nuevo código. Muchos miembros del equipo principal han expresado frustración al nivel de problemas, pero Chris Travers generalmente ha comparado los problemas a los de Apache 2.0, donde los cambios en arquitectura han causado lanzamientos problemáticos. Mientras que puede ser demasiado pronto de decir, la esperanza general es que la versión 1.2.x será el lanzamiento más difícil y más problemático, quizás de todos.
Al mismo tiempo, no puede ser negado que un número de problemas en la versión 1.2.0 eran el resultado de intentar hacer demasiado, demasiado rápidamente, sin la revisión adecuada. Es difícil criticar el proyecto para esto en algunos casos (como la eliminación de los problemas de la inyección SQL) pero queda por ver si el proyecto puede continuar moviéndose adelante de tal manera de prevenir que esto sea un problema en el futuro.

## Arquitectura futura

El base de código original del proyecto tenía un número de defectos. El código Perl generaba tanto solicitudes a la base de datos y páginas web por concatenación o por impresión del texto de modo que saliera como una página distinta. Aunque esto funcionaba razonablemente bien, también hizo a la interfaz muy difícil de modificar, y la interoperabilidad con los proyectos escritos en otros lenguajes era particularmente difícil.
De frente a estos desafíos, el equipo de LedgerSMB desarrolló una nueva arquitectura que aborda estos problemas agregando soporte a plantillas en la interfaz de usuario, y moviendo todas las llamadas a la base de datos a procedimientos almacenados. Aunque en estructura se asemeja estrechamente al Modelo Vista Controlador (MVC), no se divide en precisamente la misma manera que otras implementaciones MVC.
La versión 1.3 moverá varias partes importantes del software a la nueva arquitectura incluyendo las interfaces de la gerencia del contacto y administrativa.