Index: Makefile
===================================================================
--- Makefile	(revision dfabbb4ad6992bc0518565ee160fc669bb08493f)
+++ Makefile	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -67,5 +67,6 @@
 		genericFunctions.cpp \
 		formexportreport.cpp \
-		qcustomplot.cpp qrc_images.cpp \
+		qcustomplot.cpp \
+		formdescomposicion.cpp qrc_images.cpp \
 		moc_mainwindow.cpp \
 		moc_formloadmatrix.cpp \
@@ -87,5 +88,6 @@
 		moc_variablepnh.cpp \
 		moc_formexportreport.cpp \
-		moc_qcustomplot.cpp
+		moc_qcustomplot.cpp \
+		moc_formdescomposicion.cpp
 OBJECTS       = mainwindow.o \
 		main.o \
@@ -110,4 +112,5 @@
 		formexportreport.o \
 		qcustomplot.o \
+		formdescomposicion.o \
 		qrc_images.o \
 		moc_mainwindow.o \
@@ -130,5 +133,6 @@
 		moc_variablepnh.o \
 		moc_formexportreport.o \
-		moc_qcustomplot.o
+		moc_qcustomplot.o \
+		moc_formdescomposicion.o
 DIST          = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
 		/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/shell-unix.conf \
@@ -206,5 +210,6 @@
 		genericFunctions.cpp \
 		formexportreport.cpp \
-		qcustomplot.cpp
+		qcustomplot.cpp \
+		formdescomposicion.cpp
 QMAKE_TARGET  = SMSAM
 DESTDIR       = #avoid trailing-slash linebreak
@@ -236,5 +241,5 @@
 all: Makefile $(TARGET)
 
-$(TARGET): ui_formLoadMatrix.h ui_formvariablesexogenas.h ui_formexportmatrix.h ui_formencadenamientos.h ui_formcompararresultados.h ui_formcompararmnc.h ui_formincidenciai.h ui_formpreciosnohomogeneos.h ui_formexportreport.h ui_formViewMatrix.h $(OBJECTS)  
+$(TARGET): ui_formLoadMatrix.h ui_formvariablesexogenas.h ui_formexportmatrix.h ui_formencadenamientos.h ui_formcompararresultados.h ui_formcompararmnc.h ui_formincidenciai.h ui_formpreciosnohomogeneos.h ui_formexportreport.h ui_formViewMatrix.h ui_formdescomposicion.h $(OBJECTS)  
 	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
 
@@ -367,5 +372,5 @@
 dist: 
 	@test -d .tmp/SMSAM1.0.0 || mkdir -p .tmp/SMSAM1.0.0
-	$(COPY_FILE) --parents $(DIST) .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents img/images.qrc .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents mainwindow.H formloadmatrix.H formviewmatrix.H stackwidget.H accountwidget.H formvariablesexogenas.h stackvariablesexogenas.h variableexogenawidget.h formexportmatrix.h formencadenamientos.h stackencadenamientos.h encadenamientoswidget.h formcompararresultados.h formcompararmnc.h formincidenciai.h formpreciosnohomogeneos.h stackpreciosnohomogeneos.h variablepnh.h genericFunctions.h formexportreport.h qcustomplot.h .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents mainwindow.C main.C formloadmatrix.C formviewmatrix.C stackwidget.C accountwidget.C formvariablesexogenas.cpp stackvariablesexogenas.cpp variableexogenawidget.cpp formexportmatrix.cpp formencadenamientos.cpp stackencadenamientos.cpp encadenamientoswidget.cpp formcompararresultados.cpp formcompararmnc.cpp formincidenciai.cpp formpreciosnohomogeneos.cpp stackpreciosnohomogeneos.cpp variablepnh.cpp genericFunctions.cpp formexportreport.cpp qcustomplot.cpp .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents formLoadMatrix.ui formvariablesexogenas.ui formexportmatrix.ui formencadenamientos.ui formcompararresultados.ui formcompararmnc.ui formincidenciai.ui formpreciosnohomogeneos.ui formexportreport.ui formViewMatrix.ui .tmp/SMSAM1.0.0/ && (cd `dirname .tmp/SMSAM1.0.0` && $(TAR) SMSAM1.0.0.tar SMSAM1.0.0 && $(COMPRESS) SMSAM1.0.0.tar) && $(MOVE) `dirname .tmp/SMSAM1.0.0`/SMSAM1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/SMSAM1.0.0
+	$(COPY_FILE) --parents $(DIST) .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents img/images.qrc .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents mainwindow.H formloadmatrix.H formviewmatrix.H stackwidget.H accountwidget.H formvariablesexogenas.h stackvariablesexogenas.h variableexogenawidget.h formexportmatrix.h formencadenamientos.h stackencadenamientos.h encadenamientoswidget.h formcompararresultados.h formcompararmnc.h formincidenciai.h formpreciosnohomogeneos.h stackpreciosnohomogeneos.h variablepnh.h genericFunctions.h formexportreport.h qcustomplot.h formdescomposicion.h .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents mainwindow.C main.C formloadmatrix.C formviewmatrix.C stackwidget.C accountwidget.C formvariablesexogenas.cpp stackvariablesexogenas.cpp variableexogenawidget.cpp formexportmatrix.cpp formencadenamientos.cpp stackencadenamientos.cpp encadenamientoswidget.cpp formcompararresultados.cpp formcompararmnc.cpp formincidenciai.cpp formpreciosnohomogeneos.cpp stackpreciosnohomogeneos.cpp variablepnh.cpp genericFunctions.cpp formexportreport.cpp qcustomplot.cpp formdescomposicion.cpp .tmp/SMSAM1.0.0/ && $(COPY_FILE) --parents formLoadMatrix.ui formvariablesexogenas.ui formexportmatrix.ui formencadenamientos.ui formcompararresultados.ui formcompararmnc.ui formincidenciai.ui formpreciosnohomogeneos.ui formexportreport.ui formViewMatrix.ui formdescomposicion.ui .tmp/SMSAM1.0.0/ && (cd `dirname .tmp/SMSAM1.0.0` && $(TAR) SMSAM1.0.0.tar SMSAM1.0.0 && $(COMPRESS) SMSAM1.0.0.tar) && $(MOVE) `dirname .tmp/SMSAM1.0.0`/SMSAM1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/SMSAM1.0.0
 
 
@@ -401,7 +406,7 @@
 	/usr/lib/x86_64-linux-gnu/qt5/bin/rcc -name images img/images.qrc -o qrc_images.cpp
 
-compiler_moc_header_make_all: moc_mainwindow.cpp moc_formloadmatrix.cpp moc_formviewmatrix.cpp moc_stackwidget.cpp moc_accountwidget.cpp moc_formvariablesexogenas.cpp moc_stackvariablesexogenas.cpp moc_variableexogenawidget.cpp moc_formexportmatrix.cpp moc_formencadenamientos.cpp moc_stackencadenamientos.cpp moc_encadenamientoswidget.cpp moc_formcompararresultados.cpp moc_formcompararmnc.cpp moc_formincidenciai.cpp moc_formpreciosnohomogeneos.cpp moc_stackpreciosnohomogeneos.cpp moc_variablepnh.cpp moc_formexportreport.cpp moc_qcustomplot.cpp
+compiler_moc_header_make_all: moc_mainwindow.cpp moc_formloadmatrix.cpp moc_formviewmatrix.cpp moc_stackwidget.cpp moc_accountwidget.cpp moc_formvariablesexogenas.cpp moc_stackvariablesexogenas.cpp moc_variableexogenawidget.cpp moc_formexportmatrix.cpp moc_formencadenamientos.cpp moc_stackencadenamientos.cpp moc_encadenamientoswidget.cpp moc_formcompararresultados.cpp moc_formcompararmnc.cpp moc_formincidenciai.cpp moc_formpreciosnohomogeneos.cpp moc_stackpreciosnohomogeneos.cpp moc_variablepnh.cpp moc_formexportreport.cpp moc_qcustomplot.cpp moc_formdescomposicion.cpp
 compiler_moc_header_clean:
-	-$(DEL_FILE) moc_mainwindow.cpp moc_formloadmatrix.cpp moc_formviewmatrix.cpp moc_stackwidget.cpp moc_accountwidget.cpp moc_formvariablesexogenas.cpp moc_stackvariablesexogenas.cpp moc_variableexogenawidget.cpp moc_formexportmatrix.cpp moc_formencadenamientos.cpp moc_stackencadenamientos.cpp moc_encadenamientoswidget.cpp moc_formcompararresultados.cpp moc_formcompararmnc.cpp moc_formincidenciai.cpp moc_formpreciosnohomogeneos.cpp moc_stackpreciosnohomogeneos.cpp moc_variablepnh.cpp moc_formexportreport.cpp moc_qcustomplot.cpp
+	-$(DEL_FILE) moc_mainwindow.cpp moc_formloadmatrix.cpp moc_formviewmatrix.cpp moc_stackwidget.cpp moc_accountwidget.cpp moc_formvariablesexogenas.cpp moc_stackvariablesexogenas.cpp moc_variableexogenawidget.cpp moc_formexportmatrix.cpp moc_formencadenamientos.cpp moc_stackencadenamientos.cpp moc_encadenamientoswidget.cpp moc_formcompararresultados.cpp moc_formcompararmnc.cpp moc_formincidenciai.cpp moc_formpreciosnohomogeneos.cpp moc_stackpreciosnohomogeneos.cpp moc_variablepnh.cpp moc_formexportreport.cpp moc_qcustomplot.cpp moc_formdescomposicion.cpp
 moc_mainwindow.cpp: formloadmatrix.H \
 		ui_formLoadMatrix.h \
@@ -421,6 +426,7 @@
 		genericFunctions.h \
 		qcustomplot.h \
+		accountwidget.H \
+		formdescomposicion.h \
 		stackwidget.H \
-		accountwidget.H \
 		stackvariablesexogenas.h \
 		variableexogenawidget.h \
@@ -691,9 +697,12 @@
 	/usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/rodrigo/Proyectos/Matrices/mmcs -I/home/rodrigo/Proyectos/Matrices/mmcs/Eigen -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/4.9 -I/usr/include/x86_64-linux-gnu/c++/4.9 -I/usr/include/c++/4.9/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include qcustomplot.h -o moc_qcustomplot.cpp
 
+moc_formdescomposicion.cpp: formdescomposicion.h
+	/usr/lib/x86_64-linux-gnu/qt5/bin/moc $(DEFINES) -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/rodrigo/Proyectos/Matrices/mmcs -I/home/rodrigo/Proyectos/Matrices/mmcs/Eigen -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/4.9 -I/usr/include/x86_64-linux-gnu/c++/4.9 -I/usr/include/c++/4.9/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include formdescomposicion.h -o moc_formdescomposicion.cpp
+
 compiler_moc_source_make_all:
 compiler_moc_source_clean:
-compiler_uic_make_all: ui_formLoadMatrix.h ui_formvariablesexogenas.h ui_formexportmatrix.h ui_formencadenamientos.h ui_formcompararresultados.h ui_formcompararmnc.h ui_formincidenciai.h ui_formpreciosnohomogeneos.h ui_formexportreport.h ui_formViewMatrix.h
+compiler_uic_make_all: ui_formLoadMatrix.h ui_formvariablesexogenas.h ui_formexportmatrix.h ui_formencadenamientos.h ui_formcompararresultados.h ui_formcompararmnc.h ui_formincidenciai.h ui_formpreciosnohomogeneos.h ui_formexportreport.h ui_formViewMatrix.h ui_formdescomposicion.h
 compiler_uic_clean:
-	-$(DEL_FILE) ui_formLoadMatrix.h ui_formvariablesexogenas.h ui_formexportmatrix.h ui_formencadenamientos.h ui_formcompararresultados.h ui_formcompararmnc.h ui_formincidenciai.h ui_formpreciosnohomogeneos.h ui_formexportreport.h ui_formViewMatrix.h
+	-$(DEL_FILE) ui_formLoadMatrix.h ui_formvariablesexogenas.h ui_formexportmatrix.h ui_formencadenamientos.h ui_formcompararresultados.h ui_formcompararmnc.h ui_formincidenciai.h ui_formpreciosnohomogeneos.h ui_formexportreport.h ui_formViewMatrix.h ui_formdescomposicion.h
 ui_formLoadMatrix.h: formLoadMatrix.ui
 	/usr/lib/x86_64-linux-gnu/qt5/bin/uic formLoadMatrix.ui -o ui_formLoadMatrix.h
@@ -725,4 +734,7 @@
 ui_formViewMatrix.h: formViewMatrix.ui
 	/usr/lib/x86_64-linux-gnu/qt5/bin/uic formViewMatrix.ui -o ui_formViewMatrix.h
+
+ui_formdescomposicion.h: formdescomposicion.ui
+	/usr/lib/x86_64-linux-gnu/qt5/bin/uic formdescomposicion.ui -o ui_formdescomposicion.h
 
 compiler_yacc_decl_make_all:
@@ -754,6 +766,7 @@
 		genericFunctions.h \
 		qcustomplot.h \
+		accountwidget.H \
+		formdescomposicion.h \
 		stackwidget.H \
-		accountwidget.H \
 		stackvariablesexogenas.h \
 		variableexogenawidget.h \
@@ -980,6 +993,7 @@
 		genericFunctions.h \
 		qcustomplot.h \
+		accountwidget.H \
+		formdescomposicion.h \
 		stackwidget.H \
-		accountwidget.H \
 		stackvariablesexogenas.h \
 		variableexogenawidget.h \
@@ -1262,4 +1276,8 @@
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qcustomplot.o qcustomplot.cpp
 
+formdescomposicion.o: formdescomposicion.cpp formdescomposicion.h \
+		ui_formdescomposicion.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o formdescomposicion.o formdescomposicion.cpp
+
 qrc_images.o: qrc_images.cpp 
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_images.o qrc_images.cpp
@@ -1325,4 +1343,7 @@
 	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_qcustomplot.o moc_qcustomplot.cpp
 
+moc_formdescomposicion.o: moc_formdescomposicion.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_formdescomposicion.o moc_formdescomposicion.cpp
+
 ####### Install
 
Index: SMSAM.pro
===================================================================
--- SMSAM.pro	(revision dfabbb4ad6992bc0518565ee160fc669bb08493f)
+++ SMSAM.pro	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -22,5 +22,6 @@
     genericFunctions.h \
     formexportreport.h \
-    qcustomplot.h
+    qcustomplot.h \
+    formdescomposicion.h
 
 SOURCES += mainwindow.C \
@@ -45,5 +46,6 @@
     genericFunctions.cpp \
     formexportreport.cpp \
-    qcustomplot.cpp
+    qcustomplot.cpp \
+    formdescomposicion.cpp
 FORMS += formLoadMatrix.ui \
     formvariablesexogenas.ui \
@@ -55,5 +57,6 @@
     formpreciosnohomogeneos.ui \
     formexportreport.ui \
-    formViewMatrix.ui
+    formViewMatrix.ui \
+    formdescomposicion.ui
 
 INCLUDEPATH += $$PWD/Eigen
Index: formdescomposicion.cpp
===================================================================
--- formdescomposicion.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
+++ formdescomposicion.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -0,0 +1,72 @@
+/**
+    Sistema de Manejo de Matrices de Contabilidad Social, desarrollado a partir de Mayo de 2015.
+    @file formdescomposicion.cpp
+    @brief Clases y métodos del formulario que permite hacer la descomposicion
+    @date 27/09/2016
+    @author Rodrigo Boet
+    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
+*/
+#include "formdescomposicion.h"
+#include <qdebug.h>
+
+/**
+    @brief Clase principal que inicializa la interfaz
+    @date 27/09/2016
+    @author Rodrigo Boet
+    @param <parent> Recibe el widget que será el padre
+*/
+FormDescomposicion::FormDescomposicion(QWidget *parent) :
+    QWidget(parent,Qt::Tool),
+    ui(new Ui::FormDescomposicion)
+{
+    ui->setupUi(this);
+    int x = parent->pos().x() + parent->width()/2 - this->width()/2;
+    int y = parent->pos().y() + parent->height()/2 - this->height()/2;
+    this->move(x, y);
+
+    connect(ui->listAgregar,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(slotAgregar(QListWidgetItem*)));
+    connect(ui->listSeleccionado,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(slotDeseleccionar(QListWidgetItem*)));
+    connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(close()));
+}
+
+/**
+    @brief Método con el destructor de la interfaz gráfica
+    @date 27/09/2016
+*/
+FormDescomposicion::~FormDescomposicion()
+{
+    delete ui;
+}
+
+
+/**
+    @brief Método para agregar items al darle doble click
+    @date 27/09/2016
+    @param <item> Recibe el item que se le dio doble click
+*/
+void FormDescomposicion::slotAgregar(QListWidgetItem *item)
+{
+    if(ui->listSeleccionado->count()>=2)
+    {
+        QMessageBox::information(this,"Info","No se pueden seleccionar más\n de dos(2) cuentas.");
+    }
+    else
+    {
+        QString text = item->text();
+        QList<QListWidgetItem *> items = ui->listSeleccionado->findItems(text,Qt::MatchExactly);
+        if(items.size() == 0)
+        {
+            ui->listSeleccionado->addItem(text);
+        }
+    }
+}
+
+/**
+    @brief Método para eliminar items al darle doble click
+    @date 27/09/2016
+    @param <item> Recibe el item que se le dio doble click
+*/
+void FormDescomposicion::slotDeseleccionar(QListWidgetItem *item)
+{
+    item->~QListWidgetItem();
+}
Index: formdescomposicion.h
===================================================================
--- formdescomposicion.h	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
+++ formdescomposicion.h	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -0,0 +1,30 @@
+#ifndef FORMDESCOMPOSICION_H
+#define FORMDESCOMPOSICION_H
+
+#include <QtWidgets>
+#include "ui_formdescomposicion.h"
+
+namespace Ui {
+class FormDescomposicion;
+}
+
+class FormDescomposicion : public QWidget
+{
+    Q_OBJECT
+
+public:
+    explicit FormDescomposicion(QWidget *parent = 0);
+    Ui::FormDescomposicion *ui;
+    ~FormDescomposicion();
+
+private slots:
+    void slotAgregar(QListWidgetItem *);
+    void slotDeseleccionar(QListWidgetItem *);
+
+private:
+
+};
+
+
+
+#endif // FORMDESCOMPOSICION_H
Index: formdescomposicion.ui
===================================================================
--- formdescomposicion.ui	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
+++ formdescomposicion.ui	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormDescomposicion</class>
+ <widget class="QWidget" name="FormDescomposicion">
+  <property name="windowModality">
+   <enum>Qt::ApplicationModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>756</width>
+    <height>395</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Descomposición</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="1" column="0">
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0" colspan="3" alignment="Qt::AlignHCenter">
+      <widget class="QLabel" name="label">
+       <property name="font">
+        <font>
+         <pointsize>14</pointsize>
+        </font>
+       </property>
+       <property name="text">
+        <string>Seleccione las dos (2) cuentas correspondientes con Actividad y Producto</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0" rowspan="4">
+      <widget class="QListWidget" name="listAgregar"/>
+     </item>
+     <item row="7" column="2" alignment="Qt::AlignHCenter">
+      <widget class="QPushButton" name="pushButton_3">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="styleSheet">
+        <string notr="true">background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;</string>
+       </property>
+       <property name="text">
+        <string>Seleccionar</string>
+       </property>
+       <property name="default">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label_3">
+       <property name="styleSheet">
+        <string notr="true">font-weight:bold;</string>
+       </property>
+       <property name="text">
+        <string>Cuentas:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2" rowspan="4">
+      <widget class="QListWidget" name="listSeleccionado"/>
+     </item>
+     <item row="4" column="1">
+      <widget class="QPushButton" name="pushButton_2">
+       <property name="minimumSize">
+        <size>
+         <width>80</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="styleSheet">
+        <string notr="true">background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;</string>
+       </property>
+       <property name="text">
+        <string>&lt;&lt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QPushButton" name="pushButton">
+       <property name="minimumSize">
+        <size>
+         <width>80</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="styleSheet">
+        <string notr="true">background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;</string>
+       </property>
+       <property name="text">
+        <string>&gt;&gt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="2">
+      <widget class="QLabel" name="label_2">
+       <property name="styleSheet">
+        <string notr="true">font-weight:bold;</string>
+       </property>
+       <property name="text">
+        <string>Cuentas Seleccionadas:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="0" alignment="Qt::AlignHCenter">
+      <widget class="QPushButton" name="pushButton_4">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="styleSheet">
+        <string notr="true">background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;</string>
+       </property>
+       <property name="text">
+        <string>Cancelar</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: genericFunctions.cpp
===================================================================
--- genericFunctions.cpp	(revision dfabbb4ad6992bc0518565ee160fc669bb08493f)
+++ genericFunctions.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -7,4 +7,6 @@
 */
 #include <genericFunctions.h>
+
+using namespace Eigen;
 
 
@@ -79,5 +81,9 @@
         {
             int contar = CuentaFila.count(accName);
-            tw->setSpan(i,0,contar,1);
+            qDebug()<<contar;
+            if(contar>1)
+            {
+                tw->setSpan(i,0,contar,1);
+            }
             CuentaFila.removeAll(accName);
         }
@@ -94,5 +100,9 @@
         {
             int contar = CuentaColumna.count(accName);
-            tw->setSpan(0,j,1,contar);
+            qDebug()<<contar;
+            if(contar>1)
+            {
+                tw->setSpan(0,j,1,contar);
+            }
             CuentaColumna.removeAll(accName);
         }
@@ -400,5 +410,5 @@
 
 /**
-   @brief Funcion que permite
+   @brief Funcion que permite colocar filas/columnas como no editables
    @date 08/09/2016
    @author Rodrigo Boet
@@ -429,2 +439,103 @@
 }
 
+/**
+   @brief Funcion que extraer una submatriz de una tabla
+   @date 27/09/2016
+   @author Rodrigo Boet
+   @param <tw> Recibe el widget de la tabla
+   @param <nombre_fila> Recibe el nombre de la cuenta en fila
+   @param <nombre_columna> Recibe el nombre de la cuenta en columna
+   @param <matriz> Recibe la sub-matriz de donde se sacarán los valores
+   @return <result> Retorna la sub-matriz
+*/
+Eigen::MatrixXd extractSubMatriz(QTableWidget *tw, QString nombre_fila, QString nombre_columna, Eigen::MatrixXd Matrix)
+{
+    int rows = tw->rowCount();
+    Eigen::MatrixXd result;
+    int pos = 0;
+    for(int i = 2; i < rows ;i++)
+    {
+        bool entro = false;
+        int cant = 0;
+        QVector <double> values;
+        for(int j = 2; j < rows;j++)
+        {
+            if(tw->item(0,i)->text()==nombre_fila and tw->item(j,0)->text()==nombre_columna)
+            {
+                entro = true;
+                double value = Matrix(i-2,j-2);
+                values.append(value);
+                cant++;
+            }
+        }
+        if(entro)
+        {
+            result.resize(cant,cant);
+            for(int k=0;k<values.count();k++)
+            {
+                result(pos,k) = values.at(k);
+            }
+            pos++;
+        }
+    }
+    return result;
+}
+
+/**
+   @brief Funcion que extraer la diagonal principal de una matriz de Eigen
+   @date 28/09/2016
+   @author Rodrigo Boet
+   @param <matriz> Recibe la sub-matriz de donde se sacarán los valores
+   @return <resul> Retorna la suma de la diagonal
+*/
+QVector<double> extractDiagonal(Eigen::MatrixXd Matrix)
+{
+    QVector<double> result;
+    for(int i=0;i<Matrix.rows();i++)
+    {
+        for(int j=0;j<Matrix.rows();j++)
+        {
+            if(i==j)
+            {
+                result.append(Matrix(i,j));
+            }
+        }
+    }
+    return result;
+}
+
+/**
+   @brief Funcion que valida que la diagonal sea distinta de cero
+   @date 28/09/2016
+   @author Rodrigo Boet
+   @param <diagonal> Recibe el vector con la diagonal
+   @return <valida> Retorna verdadero si la diagonal es distinta de cero, falso en caso contrario
+*/
+bool validarDiagonal(QVector<double> diagonal)
+{
+    int count = diagonal.count();
+    bool valida = true;
+    for(int i=0;i<count;i++)
+    {
+        if(qAbs(diagonal.at(i))<0.00001)
+        {
+            valida = false;
+        }
+    }
+    return valida;
+}
+
+/**
+   @brief Funcion para llenar un vector con otro
+   @date 28/09/2016
+   @author Rodrigo Boet
+   @param <elements> Recibe el vector con los elementos
+   @param <vector> Recibe el vector que se llenara
+*/
+void appendElements(QVector<double> elements, QVector<double> &vector)
+{
+    foreach (double value, elements) {
+        vector.append(value);
+    }
+}
+
Index: genericFunctions.h
===================================================================
--- genericFunctions.h	(revision dfabbb4ad6992bc0518565ee160fc669bb08493f)
+++ genericFunctions.h	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -3,4 +3,5 @@
 
 #include <QtWidgets>
+#include <Eigen>
 
 //Funciones de tipo void
@@ -18,14 +19,27 @@
 void crearTablaVaciaEncadenamiento(int filas, QTableWidget *,int columnas=4);
 void RowColNoEditable(QTableWidget *tw,int inicio,int fin,int item, bool fila);
+void appendElements(QVector<double>,QVector<double>&);
+
 //Funciones de tipo Lista
 QList<QString> llenarLista(QList<QString> lista,QTableWidget *tw,int valor,int opcion);
 QStringList get_list(QTableWidget *tw, int row, int init, int end);
 QStringList ObtenerComponentes(QTableWidget *);
+
+//Funciones de tipo QVector
+QVector<double> extractDiagonal(Eigen::MatrixXd Matrix);
+
 //Funciones de tipo Entero
 int diferent_elements(QStringList my_list);
 int contarElementosMap(QMap<QString,QStringList> diccionario);
+
 //Funciones de tipo double
 double sumElements(QVector<double>);
 
+//Funciones de tipo Eigen
+Eigen::MatrixXd extractSubMatriz(QTableWidget *tw, QString nombre_fila, QString nombre_columna, Eigen::MatrixXd Matrix);
+
+//Funciones de tipo bool
+bool validarDiagonal(QVector<double>);
+
 
 #endif // GENERICFUNCTIONS_H
Index: mainwindow.C
===================================================================
--- mainwindow.C	(revision b23848ea093637d2c6af6c9deff4aef73f8eddf2)
+++ mainwindow.C	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -9,8 +9,4 @@
 
 #include "mainwindow.H"
-#include "accountwidget.H"
-#include "stackvariablesexogenas.h"
-#include "formexportmatrix.h"
-#include <stackencadenamientos.h>
 #include <QDebug>
 
@@ -387,4 +383,10 @@
     menuTools.addAction(&actionVariableExogena);
 
+    //Se agrega la acción de descomposición
+    actionDescomposicion.setText("&Descomposicion");
+    actionDescomposicion.setDisabled(true);
+
+    menuTools.addAction(&actionDescomposicion);
+
     Modelos.setTitle("&Modelos");
     Modelos.setDisabled(true);
@@ -797,6 +799,9 @@
             vector.append(QString::number(inicio));
             vector.append(QString::number(fin));
-            tw->setSpan(0,inicio-1,1,numberAccounts.count(item));
-            tw->setSpan(inicio-1,0,numberAccounts.count(item),1);
+            if(numberAccounts.count(item)>1)
+            {
+                tw->setSpan(0,inicio-1,1,numberAccounts.count(item));
+                tw->setSpan(inicio-1,0,numberAccounts.count(item),1);
+            }
         }
     }
@@ -906,5 +911,5 @@
 MainWindow::MainWindow()
     : actionNewProject(this),actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this),
-      actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this),
+      actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this), actionDescomposicion(this),
       actionCompararResultados(this),actionModeloNoClasico(this),actionCompararResultadosMNC(this),actionPHClasicoIncidencia100(this),
       actionPHCIncidenciaCuenta(this),actionPHCIncidenciaComponente(this),actionPHNoClasicoIncidencia100(this),actionPHNCIncidenciaCuenta(this),
@@ -2211,19 +2216,10 @@
 
         //Se crea la nueva pestaña
-        tabWidget->addTab(new QWidget,"Tipo de Variable");
-        int indice=ObtenerIndice("Tipo de Variable");//Se obtiene el indice de la pestaña
-        QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-        layoutCentralWidget->addWidget(tablaEE);
-        QWidget *widget = tabWidget->widget(indice);
-        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
+        createTab("Tipo de Variable",tablaEE);
+        int indice=ObtenerIndice("Tipo de Variable");
         formVariablesExogenas->close();
 
         /*                  Se crea la pestaña endogena-endogena            */
-        tabWidget->addTab(new QWidget,"Endogena-Endogena");
-        int indiceEndogeno=ObtenerIndice("Endogena-Endogena");//Se obtiene el indice de la pestaña
-        QHBoxLayout * layoutEndogeno = new QHBoxLayout;
-        layoutEndogeno->addWidget(matrizEndogena);
-        QWidget *widgetEndogeno = tabWidget->widget(indiceEndogeno);
-        widgetEndogeno->setLayout(layoutEndogeno);//Se añade el widget y layout a la pestaña creada
+        createTab("Endogena-Endogena",matrizEndogena);
 
         calcularTotalCuentas(tablaEE);
@@ -2243,4 +2239,8 @@
         connect(&actionEncadenamiento,SIGNAL(triggered()),this,SLOT(slotEncadenamientos()));
         actionEncadenamiento.setEnabled(true);
+
+        //Se activa la descomposicion
+        connect(&actionDescomposicion,SIGNAL(triggered()),this,SLOT(slotDescomposicion()));
+        actionDescomposicion.setEnabled(true);
 
         //Se activa la opción de modelo clásico
@@ -2462,10 +2462,5 @@
         titleEndogena(tablaMa);
         spanEndogenaCell(tablaMa,2,0,false);
-        tabWidget->addTab(new QWidget,"Ma");
-        int indice=ObtenerIndice("Ma");//Se obtiene el indice de la pestaña
-        QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-        layoutCentralWidget->addWidget(tablaMa);
-        QWidget *widget = tabWidget->widget(indice);
-        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
+        createTab("Ma",tablaMa,true);
 
         opcionMa = 1;
@@ -3950,12 +3945,5 @@
         sw->hide();
 
-        tabWidget->addTab(new QWidget,QString("Resultado C %1").arg(cantidadEscenarios));
-        int indice=ObtenerIndice(QString("Resultado C %1").arg(cantidadEscenarios));
-
-        QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-        layoutCentralWidget->addWidget(resultadoEscenario);
-        QWidget *widget = tabWidget->widget(indice);
-        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
-        tabWidget->setCurrentIndex(indice);
+        createTab(QString("Resultado C %1").arg(cantidadEscenarios),resultadoEscenario,true);
 
         cantidadEscenarios++;
@@ -4136,14 +4124,7 @@
     ItemsNoEditable(tablaComparar,0,2);
 
-    tabWidget->addTab(new QWidget,QString("Comparacion %1").arg(cantidadResultados));
-    int indice=ObtenerIndice(QString("Comparacion %1").arg(cantidadResultados));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(tablaComparar);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
+    createTab(QString("Comparacion %1").arg(cantidadResultados),tablaComparar,true);
 
     formCompararResultados->close();
-    tabWidget->setCurrentIndex(indice);
     cantidadResultados++;
 }
@@ -4311,10 +4292,6 @@
     titlespanMatrizExgEnd(Bn);
 
-    tabWidget->addTab(new QWidget,"Bn");
+    createTab("Bn",Bn);
     int indice=ObtenerIndice("Bn");
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(Bn);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
     tabWidget->removeTab(indice);
 
@@ -4581,10 +4558,5 @@
     }
     titlespanMatrizExgEnd(Mb);
-    tabWidget->addTab(new QWidget,"Mb");
-    int indice=ObtenerIndice("Mb");
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(Mb);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
+    createTab("Mb",Mb);
 }
 
@@ -4625,12 +4597,5 @@
         sw->hide();
 
-        tabWidget->addTab(new QWidget,QString("Resultado NC %1").arg(cantidadMNC));
-        int indice=ObtenerIndice(QString("Resultado NC %1").arg(cantidadMNC));
-
-        QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-        layoutCentralWidget->addWidget(resultadoEscenario);
-        QWidget *widget = tabWidget->widget(indice);
-        widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
-        tabWidget->setCurrentIndex(indice);
+        createTab(QString("Resultado NC %1").arg(cantidadMNC),resultadoEscenario,true);
 
         cantidadMNC++;
@@ -4833,14 +4798,7 @@
     ItemsNoEditable(tablaComparar,0,2);
 
-    tabWidget->addTab(new QWidget,QString("Comparacion MNC %1").arg(cantidadResultadosMNC));
-    int indice=ObtenerIndice(QString("Comparacion MNC %1").arg(cantidadResultadosMNC));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(tablaComparar);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
+    createTab(QString("Comparacion MNC %1").arg(cantidadResultadosMNC),tablaComparar,true);
 
     formCompararMNC->close();
-    tabWidget->setCurrentIndex(indice);
     cantidadResultadosMNC++;
 }
@@ -4863,12 +4821,5 @@
     calcularPHCIncidencia100(MatrizMi);
 
-    tabWidget->addTab(new QWidget,"PIHc100");
-    int indice=ObtenerIndice("PIHc100");
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MatrizMi);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab("PIHc100",MatrizMi,true);
     actionPHClasicoIncidencia100.setDisabled(true);
 }
@@ -4907,11 +4858,5 @@
     titleEndogena(MaT);
     spanEndogenaCell(MaT,2,0,false);
-    tabWidget->addTab(new QWidget,"Pc");
-    int indice=ObtenerIndice("Pc");
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MaT);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
+    createTab("Pc",MaT);
     opcionMAT++;
 }
@@ -5009,12 +4954,5 @@
     calcularPHCIncidenciaI(MatrizIC,cantidades);
 
-    tabWidget->addTab(new QWidget,QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta));
-    int indice=ObtenerIndice(QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MatrizIC);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab(QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta),MatrizIC,true);
     cantidadPHCindidenciaiCuenta++;
 }
@@ -5100,12 +5038,5 @@
     calcularPHCIncidenciaIComponente(MatrizIComp,tw);
 
-    tabWidget->addTab(new QWidget,QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente));
-    int indice=ObtenerIndice(QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MatrizIComp);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab(QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente),MatrizIComp,true);
     cantidadPHCindidenciaiComponente++;
 }
@@ -5207,11 +5138,5 @@
     }
     titlespanMatrizExgEnd(MbT);
-    tabWidget->addTab(new QWidget,"Pnc");
-    int indice=ObtenerIndice("Pnc");
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MbT);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
+    createTab("Pnc",MbT);
     opcionMBT++;
 }
@@ -5233,12 +5158,6 @@
     calcularPHNCIncidencia100(MatrizMi);
 
-    tabWidget->addTab(new QWidget,"PIHnc100");
-    int indice=ObtenerIndice("PIHnc100");
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MatrizMi);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab("PIHnc100",MatrizMi,true);
+
     actionPHNoClasicoIncidencia100.setDisabled(true);
 }
@@ -5363,12 +5282,5 @@
     calcularPHCIncidenciaI(MatrizIC,cantidades);
 
-    tabWidget->addTab(new QWidget,QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta));
-    int indice=ObtenerIndice(QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MatrizIC);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab(QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta),MatrizIC,true);
     cantidadPHNCindidenciaiCuenta++;
 }
@@ -5422,12 +5334,5 @@
     calcularPHCIncidenciaIComponente(MatrizIComp,tw);
 
-    tabWidget->addTab(new QWidget,QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente));
-    int indice=ObtenerIndice(QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(MatrizIComp);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab(QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente),MatrizIComp,true);
     cantidadPHNCindidenciaiComponente++;
 }
@@ -5618,11 +5523,5 @@
     if(opcionPNHT == 0)
     {
-        tabWidget->addTab(new QWidget,QString("PINH100 %1").arg(cantidadPNHincidencia100));
-        int indice=ObtenerIndice(QString("PINH100 %1").arg(cantidadPNHincidencia100));
-        QHBoxLayout * layoutCentralWidget3 = new QHBoxLayout;
-        layoutCentralWidget3->addWidget(tw);
-        QWidget *widget3 = tabWidget->widget(indice);
-        widget3->setLayout(layoutCentralWidget3);
-        tabWidget->setCurrentIndex(indice);
+        createTab(QString("PINH100 %1").arg(cantidadPNHincidencia100),tw,true);
         cantidadPNHincidencia100++;
         opcionPNHT = 1;
@@ -5781,12 +5680,5 @@
     calcularPHCIncidenciaI(PNHI,cantidades);
 
-    tabWidget->addTab(new QWidget,QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta));
-    int indice=ObtenerIndice(QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(PNHI);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab(QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta),PNHI,true);
     cantidadPNHincidenciaiCuenta++;
     FI->close();
@@ -5896,12 +5788,5 @@
     calcularPHCIncidenciaIComponente(PNHIc,tw);
 
-    tabWidget->addTab(new QWidget,QString("PINHic %1").arg(cantidadPNHincidenciaiComponente));
-    int indice=ObtenerIndice(QString("PINHic %1").arg(cantidadPNHincidenciaiComponente));
-
-    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-    layoutCentralWidget->addWidget(PNHIc);
-    QWidget *widget = tabWidget->widget(indice);
-    widget->setLayout(layoutCentralWidget);
-    tabWidget->setCurrentIndex(indice);
+    createTab(QString("PINHic %1").arg(cantidadPNHincidenciaiComponente),PNHIc,true);
     cantidadPNHincidenciaiComponente++;
     FI->close();
@@ -6098,11 +5983,5 @@
 
                 titleSeleccionar(nuevaTabla);
-                tabWidget->addTab(new QWidget,QString("Seleccion %1").arg(cantidadSelecciones));
-                int indice=ObtenerIndice(QString("Seleccion %1").arg(cantidadSelecciones));
-                QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
-                layoutCentralWidget->addWidget(nuevaTabla);
-                QWidget *widget = tabWidget->widget(indice);
-                widget->setLayout(layoutCentralWidget);
-                tabWidget->setCurrentIndex(indice);
+                createTab(QString("Seleccion %1").arg(cantidadSelecciones),nuevaTabla,true);
                 cantidadSelecciones++;
             }
@@ -6111,2 +5990,321 @@
 }
 
+/**
+    @brief Función para mostrar el formulario para la descomposicion
+    @date 27/09/2015
+    @author Rodrigo Boet
+*/
+void MainWindow::slotDescomposicion()
+{
+    formdescomposicion = new FormDescomposicion(this);
+    QStringList list;
+    foreach(int key,diccCuentasEndogenas.keys())
+    {
+        list.append(diccCuentasEndogenas[key][0]);
+    }
+    formdescomposicion->ui->listAgregar->addItems(list);
+    connect(formdescomposicion->ui->pushButton_3,SIGNAL(clicked()),this,SLOT(slotAgregarDescomposicion()));
+    formdescomposicion->show();
+}
+
+/**
+    @brief Función para seleccionar las cuentas que seran actividad/producto
+    @date 27/09/2015
+    @author Rodrigo Boet
+*/
+void MainWindow::slotAgregarDescomposicion()
+{
+    int item = formdescomposicion->ui->listSeleccionado->count();
+    if(item==2)
+    {
+        QStringList list;
+        for(int i=0;i<item;i++)
+        {
+            list.append(formdescomposicion->ui->listSeleccionado->item(i)->text());
+        }
+        if(validarDescomposicion(list))
+        {
+            QTableWidget *tw = findChild<QTableWidget *>("MatrizAn");
+            int filas = tw->rowCount();
+            Eigen::MatrixXd M1 = extractSubMatriz(tw,list.at(0),list.at(0),An);
+            Eigen::MatrixXd M2 = extractSubMatriz(tw,list.at(0),list.at(1),An);
+            Eigen::MatrixXd M3 = extractSubMatriz(tw,list.at(1),list.at(0),An);
+            Eigen::MatrixXd M4 = extractSubMatriz(tw,list.at(1),list.at(1),An);
+            QVector<double> V1 = extractDiagonal(M1);
+            QVector<double> V2 = extractDiagonal(M2);
+            QVector<double> V3 = extractDiagonal(M3);
+            QVector<double> V4 = extractDiagonal(M4);
+            QVector<double> diagonal;
+            if(validarDiagonal(V1))
+            {
+                appendElements(V1,diagonal);
+            }
+            if(validarDiagonal(V2))
+            {
+                appendElements(V2,diagonal);
+            }
+            if(validarDiagonal(V3))
+            {
+                appendElements(V3,diagonal);
+            }
+            if(validarDiagonal(V4))
+            {
+                appendElements(V4,diagonal);
+            }
+            for (int i = 2; i<filas;i++)
+            {
+                for(int j=2; j<filas;j++)
+                {
+                    if(tw->item(0,j)->text()!=list.at(0) and tw->item(0,j)->text()!=list.at(1))
+                    {
+                        if(i==j)
+                        {
+                            diagonal.append(An(i-2,j-2));
+                        }
+                    }
+                }
+            }
+            calcularA0(diagonal);
+            calcularAuxiliares();
+            calcularMatricesDescomposicion();
+
+        }
+        else
+        {
+            QMessageBox::warning(this,"Error","La cuenta Producto y Actividad\ndeben ser simétricas, ajuste la matriz\ne intente de nuevo");
+        }
+    }
+    else
+    {
+        QMessageBox::warning(this,"Alerta","Debe seleccionar dos (2) cuentas");
+    }
+
+}
+
+/**
+    @brief Función para validar que las cuentas producto y actividad sean simétricas
+    @date 28/09/2015
+    @author Rodrigo Boet
+    @param <cuentas> Recibe la lista con las cuentas
+    @return <valores> Retorna verdadera si son simétricas, falso en caso contrario
+*/
+bool MainWindow::validarDescomposicion(QStringList cuentas)
+{
+    QStringList valores;
+    foreach (int key, diccCuentasEndogenas.keys()) {
+       if (diccCuentasEndogenas[key][0]==cuentas.at(0) or diccCuentasEndogenas[key][0]==cuentas.at(1))
+       {
+           valores.append(diccCuentasEndogenas[key][1]);
+       }
+    }
+    if(valores.at(0)==valores.at(1))
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+/**
+    @brief Función para calcular A0
+    @date 28/09/2015
+    @author Rodrigo Boet
+    @param <diagonal> Recibe el valor de las diagonales
+*/
+void MainWindow::calcularA0(QVector<double> diagonal)
+{
+    A0 = MatrixXd::Identity(An.rows(),An.cols());
+    int fila = A0.rows();
+    for(int i=0;i<fila;i++)
+    {
+        for(int j=0;j<fila;j++)
+        {
+            if(i==j)
+            {
+                A0(i,j)=diagonal.at(i);
+            }
+        }
+    }
+    QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn");
+    QTableWidget *tw = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),tw);
+    noEditColZero(tw);
+    clonarTabla(MAN,tw,MAN->rowCount());
+    fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(A0(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            tw->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("A0",tw,true);
+    formdescomposicion->close();
+
+    MatrixXd ident = MatrixXd::Identity(An.rows(),An.cols());
+    M1 = ident - A0;
+    M1 = M1.inverse();
+    QTableWidget *Mm1 = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),Mm1);
+    noEditColZero(Mm1);
+    clonarTabla(MAN,Mm1,MAN->rowCount());
+    fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M1(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            Mm1->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("M1",Mm1);
+}
+
+/**
+    @brief Función para calcular los auxiliares de la descomposicion y también M2 y M3
+    @date 28/09/2015
+    @author Rodrigo Boet
+*/
+void MainWindow::calcularAuxiliares()
+{
+    MatrixXd ident = MatrixXd::Identity(A0.rows(),A0.cols());
+    MatrixXd aux = M1*(A0-An);
+    M2 = ident+aux;
+    int cantidad = diccCuentasEndogenas.count()-2;
+    MatrixXd ant = aux;
+    for(int i=0;i<cantidad;i++)
+    {
+        aux *= ant;
+        ant = aux;
+        if(i<cantidad-1)
+        {
+            M2 += aux;
+        }
+    }
+    M3 = ident - aux;
+    M3 = M3.inverse();
+    QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn");
+    QTableWidget *Mm2 = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),Mm2);
+    noEditColZero(Mm2);
+    clonarTabla(MAN,Mm2,MAN->rowCount());
+    int fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M2(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            Mm2->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("M2",Mm2);
+
+    QTableWidget *Mm3 = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),Mm3);
+    noEditColZero(Mm3);
+    clonarTabla(MAN,Mm3,MAN->rowCount());
+    fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M3(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            Mm3->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("M3",Mm3);
+}
+
+/**
+    @brief Función para calcular las matrices de Transferencia (T), Open(O) y Close(C)
+    @date 28/09/2015
+    @author Rodrigo Boet
+*/
+void MainWindow::calcularMatricesDescomposicion()
+{
+    MatrixXd ident = MatrixXd::Identity(A0.rows(),A0.cols());
+    T = M1 - ident;
+    O = (M2 - ident) * M1;
+    C = (M3 - ident) * (M2 * M1);
+
+    QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn");
+    QTableWidget *mt = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),mt);
+    noEditColZero(mt);
+    clonarTabla(MAN,mt,MAN->rowCount());
+    int fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(T(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            mt->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("T",mt);
+
+    QTableWidget *mo = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),mo);
+    noEditColZero(mo);
+    clonarTabla(MAN,mo,MAN->rowCount());
+    fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(O(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            mo->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("O",mo);
+
+    QTableWidget *mc = new QTableWidget;
+    CrearTablaVacia(MAN->rowCount(),mc);
+    noEditColZero(mc);
+    clonarTabla(MAN,mc,MAN->rowCount());
+    fila = MAN->rowCount()-1;
+    for(int i=2;i<fila;i++)
+    {
+        for(int j=2;j<fila;j++)
+        {
+            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(C(i-2,j-2),'f',precission));
+            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
+            mc->setItem(i,j,valoraInsertar);
+        }
+    }
+    createTab("C",mc);
+}
+
+/**
+    @brief Función para crear un nueva pestaña
+    @date 28/09/2015
+    @author Rodrigo Boet
+    @param <texto> Recibe el nombre de la pestaña
+    @param <tw> Recibe el widget de la tabla que se insertara
+    @param <current> recibe un booleano (verdadero si se coloca como activo, falso en caso contrario)
+*/
+void MainWindow::createTab(QString texto, QTableWidget *tw, bool current)
+{
+    tabWidget->addTab(new QWidget,texto);
+    int indice=ObtenerIndice(texto);
+
+    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
+    layoutCentralWidget->addWidget(tw);
+    QWidget *widget = tabWidget->widget(indice);
+    widget->setLayout(layoutCentralWidget);
+    if(current)
+    {
+        tabWidget->setCurrentIndex(indice);
+    }
+
+}
+
Index: mainwindow.H
===================================================================
--- mainwindow.H	(revision b23848ea093637d2c6af6c9deff4aef73f8eddf2)
+++ mainwindow.H	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -12,14 +12,23 @@
 #include <ui_formcompararresultados.h>
 #include <formcompararresultados.h>
+//Formulario para comparar el modelo no clasico
 #include <ui_formcompararmnc.h>
 #include <formcompararmnc.h>
+//Formulario de incidencias
 #include "ui_formincidenciai.h"
 #include <formincidenciai.h>
 #include <formpreciosnohomogeneos.h>
+//Formulario para exportar reporte
 #include <formexportreport.h>
 #include <ui_formexportreport.h>
+#include "accountwidget.H"
+//Formulario de descomposicon
+#include <formdescomposicion.h>
+#include <ui_formdescomposicion.h>
+
+//Funciones genericas
 #include <genericFunctions.h>
+//Librería de gráficos
 #include <qcustomplot.h>
-
 #include <sstream>
 #include <stackwidget.H>
@@ -89,4 +98,7 @@
     QAction actionPNHIncidenciaCuenta;
     QAction actionPNHIncidenciaComponente;
+
+    //Acción para la descomposición
+    QAction actionDescomposicion;
 
     QAction actionSeleccionarTabla;
@@ -127,4 +139,12 @@
     Eigen::MatrixXd MatrizMat;
     Eigen::MatrixXd MatrizMbt;
+    //Matrices para la descomposicion
+    Eigen::MatrixXd A0;
+    Eigen::MatrixXd M1;
+    Eigen::MatrixXd M2;
+    Eigen::MatrixXd M3;
+    Eigen::MatrixXd T;
+    Eigen::MatrixXd O;
+    Eigen::MatrixXd C;
 
     double total_ma;
@@ -188,4 +208,5 @@
     FormIncidenciaI *FI;
     FormPreciosNoHomogeneos * formPreciosNoHomogeneos;
+    FormDescomposicion *formdescomposicion;
 
     void initGUI();
@@ -270,4 +291,15 @@
     void determinarClasificador(QTableWidget *, int index_table, int element, int total = 0);
 
+    //Función para validar la cuenta producto/actividad
+    bool validarDescomposicion(QStringList);
+
+    //Funciones referentes a la descomposicion
+    void calcularA0(QVector<double>);
+    void calcularAuxiliares();
+    void calcularMatricesDescomposicion();
+
+    //Funcion para crear una nueva pestaña
+    void createTab(QString , QTableWidget *,bool current=false);
+
     bool ComprobarCuentas();
     int ObtenerIndice(QString );
@@ -333,4 +365,8 @@
     void calcularEscenarioNC();
     void finalizarEscenarioNC();
+
+    //Slot para descomposicion
+    void slotDescomposicion();
+    void slotAgregarDescomposicion();
 
     void slotCompararResultadosMNC();
Index: moc_formdescomposicion.cpp
===================================================================
--- moc_formdescomposicion.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
+++ moc_formdescomposicion.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -0,0 +1,114 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'formdescomposicion.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.3.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "formdescomposicion.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'formdescomposicion.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.3.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_FormDescomposicion_t {
+    QByteArrayData data[5];
+    char stringdata[67];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_FormDescomposicion_t, stringdata) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_FormDescomposicion_t qt_meta_stringdata_FormDescomposicion = {
+    {
+QT_MOC_LITERAL(0, 0, 18),
+QT_MOC_LITERAL(1, 19, 11),
+QT_MOC_LITERAL(2, 31, 0),
+QT_MOC_LITERAL(3, 32, 16),
+QT_MOC_LITERAL(4, 49, 17)
+    },
+    "FormDescomposicion\0slotAgregar\0\0"
+    "QListWidgetItem*\0slotDeseleccionar"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_FormDescomposicion[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       2,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    1,   24,    2, 0x08 /* Private */,
+       4,    1,   27,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void, 0x80000000 | 3,    2,
+    QMetaType::Void, 0x80000000 | 3,    2,
+
+       0        // eod
+};
+
+void FormDescomposicion::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        FormDescomposicion *_t = static_cast<FormDescomposicion *>(_o);
+        switch (_id) {
+        case 0: _t->slotAgregar((*reinterpret_cast< QListWidgetItem*(*)>(_a[1]))); break;
+        case 1: _t->slotDeseleccionar((*reinterpret_cast< QListWidgetItem*(*)>(_a[1]))); break;
+        default: ;
+        }
+    }
+}
+
+const QMetaObject FormDescomposicion::staticMetaObject = {
+    { &QWidget::staticMetaObject, qt_meta_stringdata_FormDescomposicion.data,
+      qt_meta_data_FormDescomposicion,  qt_static_metacall, 0, 0}
+};
+
+
+const QMetaObject *FormDescomposicion::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *FormDescomposicion::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_FormDescomposicion.stringdata))
+        return static_cast<void*>(const_cast< FormDescomposicion*>(this));
+    return QWidget::qt_metacast(_clname);
+}
+
+int FormDescomposicion::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QWidget::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 2)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 2;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 2)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 2;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE
Index: moc_mainwindow.cpp
===================================================================
--- moc_mainwindow.cpp	(revision b23848ea093637d2c6af6c9deff4aef73f8eddf2)
+++ moc_mainwindow.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -20,6 +20,6 @@
 QT_BEGIN_MOC_NAMESPACE
 struct qt_meta_stringdata_MainWindow_t {
-    QByteArrayData data[65];
-    char stringdata[1356];
+    QByteArrayData data[67];
+    char stringdata[1401];
 };
 #define QT_MOC_LITERAL(idx, ofs, len) \
@@ -69,30 +69,32 @@
 QT_MOC_LITERAL(37, 685, 19),
 QT_MOC_LITERAL(38, 705, 20),
-QT_MOC_LITERAL(39, 726, 25),
-QT_MOC_LITERAL(40, 752, 19),
-QT_MOC_LITERAL(41, 772, 20),
-QT_MOC_LITERAL(42, 793, 24),
-QT_MOC_LITERAL(43, 818, 32),
-QT_MOC_LITERAL(44, 851, 28),
-QT_MOC_LITERAL(45, 880, 36),
-QT_MOC_LITERAL(46, 917, 22),
-QT_MOC_LITERAL(47, 940, 16),
-QT_MOC_LITERAL(48, 957, 21),
-QT_MOC_LITERAL(49, 979, 25),
-QT_MOC_LITERAL(50, 1005, 33),
-QT_MOC_LITERAL(51, 1039, 29),
-QT_MOC_LITERAL(52, 1069, 37),
-QT_MOC_LITERAL(53, 1107, 20),
-QT_MOC_LITERAL(54, 1128, 16),
-QT_MOC_LITERAL(55, 1145, 13),
-QT_MOC_LITERAL(56, 1159, 24),
-QT_MOC_LITERAL(57, 1184, 28),
-QT_MOC_LITERAL(58, 1213, 14),
-QT_MOC_LITERAL(59, 1228, 32),
-QT_MOC_LITERAL(60, 1261, 15),
-QT_MOC_LITERAL(61, 1277, 36),
-QT_MOC_LITERAL(62, 1314, 20),
-QT_MOC_LITERAL(63, 1335, 11),
-QT_MOC_LITERAL(64, 1347, 8)
+QT_MOC_LITERAL(39, 726, 18),
+QT_MOC_LITERAL(40, 745, 25),
+QT_MOC_LITERAL(41, 771, 25),
+QT_MOC_LITERAL(42, 797, 19),
+QT_MOC_LITERAL(43, 817, 20),
+QT_MOC_LITERAL(44, 838, 24),
+QT_MOC_LITERAL(45, 863, 32),
+QT_MOC_LITERAL(46, 896, 28),
+QT_MOC_LITERAL(47, 925, 36),
+QT_MOC_LITERAL(48, 962, 22),
+QT_MOC_LITERAL(49, 985, 16),
+QT_MOC_LITERAL(50, 1002, 21),
+QT_MOC_LITERAL(51, 1024, 25),
+QT_MOC_LITERAL(52, 1050, 33),
+QT_MOC_LITERAL(53, 1084, 29),
+QT_MOC_LITERAL(54, 1114, 37),
+QT_MOC_LITERAL(55, 1152, 20),
+QT_MOC_LITERAL(56, 1173, 16),
+QT_MOC_LITERAL(57, 1190, 13),
+QT_MOC_LITERAL(58, 1204, 24),
+QT_MOC_LITERAL(59, 1229, 28),
+QT_MOC_LITERAL(60, 1258, 14),
+QT_MOC_LITERAL(61, 1273, 32),
+QT_MOC_LITERAL(62, 1306, 15),
+QT_MOC_LITERAL(63, 1322, 36),
+QT_MOC_LITERAL(64, 1359, 20),
+QT_MOC_LITERAL(65, 1380, 11),
+QT_MOC_LITERAL(66, 1392, 8)
     },
     "MainWindow\0slotNuevoProyecto\0\0"
@@ -116,7 +118,8 @@
     "clasico\0finalizarEscenario\0"
     "slotModeloNoClasico\0calcularEscenarioNC\0"
-    "finalizarEscenarioNC\0slotCompararResultadosMNC\0"
-    "slotVerResultadoMNC\0slotPHCIncidencia100\0"
-    "slotPHCIncidenciaiCuenta\0"
+    "finalizarEscenarioNC\0slotDescomposicion\0"
+    "slotAgregarDescomposicion\0"
+    "slotCompararResultadosMNC\0slotVerResultadoMNC\0"
+    "slotPHCIncidencia100\0slotPHCIncidenciaiCuenta\0"
     "slotCalcularPHCIncidenciaiCuenta\0"
     "slotPHCIncidenciaiComponente\0"
@@ -143,5 +146,5 @@
        0,       // classname
        0,    0, // classinfo
-      63,   14, // methods
+      65,   14, // methods
        0,    0, // properties
        0,    0, // enums/sets
@@ -151,67 +154,69 @@
 
  // slots: name, argc, parameters, tag, flags
-       1,    0,  329,    2, 0x08 /* Private */,
-       3,    0,  330,    2, 0x08 /* Private */,
-       4,    0,  331,    2, 0x08 /* Private */,
-       5,    3,  332,    2, 0x08 /* Private */,
-       6,    0,  339,    2, 0x08 /* Private */,
-       7,    0,  340,    2, 0x08 /* Private */,
-       8,    0,  341,    2, 0x08 /* Private */,
-       9,    0,  342,    2, 0x08 /* Private */,
-      10,    0,  343,    2, 0x08 /* Private */,
-      11,    0,  344,    2, 0x08 /* Private */,
-      12,    0,  345,    2, 0x08 /* Private */,
-      13,    0,  346,    2, 0x08 /* Private */,
-      14,    0,  347,    2, 0x08 /* Private */,
-      15,    0,  348,    2, 0x08 /* Private */,
-      16,    0,  349,    2, 0x08 /* Private */,
-      17,    0,  350,    2, 0x08 /* Private */,
-      18,    0,  351,    2, 0x08 /* Private */,
-      19,    0,  352,    2, 0x08 /* Private */,
-      20,    0,  353,    2, 0x08 /* Private */,
-      21,    0,  354,    2, 0x08 /* Private */,
-      22,    0,  355,    2, 0x08 /* Private */,
-      23,    0,  356,    2, 0x08 /* Private */,
-      24,    0,  357,    2, 0x08 /* Private */,
-      25,    0,  358,    2, 0x08 /* Private */,
-      26,    0,  359,    2, 0x08 /* Private */,
-      27,    2,  360,    2, 0x08 /* Private */,
-      28,    0,  365,    2, 0x08 /* Private */,
-      29,    0,  366,    2, 0x08 /* Private */,
-      30,    0,  367,    2, 0x08 /* Private */,
-      31,    0,  368,    2, 0x08 /* Private */,
-      32,    0,  369,    2, 0x08 /* Private */,
-      33,    1,  370,    2, 0x08 /* Private */,
-      33,    0,  373,    2, 0x28 /* Private | MethodCloned */,
-      35,    0,  374,    2, 0x08 /* Private */,
-      36,    0,  375,    2, 0x08 /* Private */,
-      37,    0,  376,    2, 0x08 /* Private */,
-      38,    0,  377,    2, 0x08 /* Private */,
-      39,    0,  378,    2, 0x08 /* Private */,
-      40,    0,  379,    2, 0x08 /* Private */,
-      41,    0,  380,    2, 0x08 /* Private */,
-      42,    0,  381,    2, 0x08 /* Private */,
-      43,    0,  382,    2, 0x08 /* Private */,
-      44,    0,  383,    2, 0x08 /* Private */,
-      45,    0,  384,    2, 0x08 /* Private */,
-      46,    0,  385,    2, 0x08 /* Private */,
-      47,    0,  386,    2, 0x08 /* Private */,
-      48,    0,  387,    2, 0x08 /* Private */,
-      49,    0,  388,    2, 0x08 /* Private */,
-      50,    0,  389,    2, 0x08 /* Private */,
-      51,    0,  390,    2, 0x08 /* Private */,
-      52,    0,  391,    2, 0x08 /* Private */,
-      53,    0,  392,    2, 0x08 /* Private */,
-      54,    0,  393,    2, 0x08 /* Private */,
-      55,    0,  394,    2, 0x08 /* Private */,
-      56,    0,  395,    2, 0x08 /* Private */,
-      57,    0,  396,    2, 0x08 /* Private */,
-      58,    0,  397,    2, 0x08 /* Private */,
-      59,    0,  398,    2, 0x08 /* Private */,
-      60,    0,  399,    2, 0x08 /* Private */,
-      61,    0,  400,    2, 0x08 /* Private */,
-      62,    0,  401,    2, 0x08 /* Private */,
-      63,    0,  402,    2, 0x08 /* Private */,
-      64,    0,  403,    2, 0x08 /* Private */,
+       1,    0,  339,    2, 0x08 /* Private */,
+       3,    0,  340,    2, 0x08 /* Private */,
+       4,    0,  341,    2, 0x08 /* Private */,
+       5,    3,  342,    2, 0x08 /* Private */,
+       6,    0,  349,    2, 0x08 /* Private */,
+       7,    0,  350,    2, 0x08 /* Private */,
+       8,    0,  351,    2, 0x08 /* Private */,
+       9,    0,  352,    2, 0x08 /* Private */,
+      10,    0,  353,    2, 0x08 /* Private */,
+      11,    0,  354,    2, 0x08 /* Private */,
+      12,    0,  355,    2, 0x08 /* Private */,
+      13,    0,  356,    2, 0x08 /* Private */,
+      14,    0,  357,    2, 0x08 /* Private */,
+      15,    0,  358,    2, 0x08 /* Private */,
+      16,    0,  359,    2, 0x08 /* Private */,
+      17,    0,  360,    2, 0x08 /* Private */,
+      18,    0,  361,    2, 0x08 /* Private */,
+      19,    0,  362,    2, 0x08 /* Private */,
+      20,    0,  363,    2, 0x08 /* Private */,
+      21,    0,  364,    2, 0x08 /* Private */,
+      22,    0,  365,    2, 0x08 /* Private */,
+      23,    0,  366,    2, 0x08 /* Private */,
+      24,    0,  367,    2, 0x08 /* Private */,
+      25,    0,  368,    2, 0x08 /* Private */,
+      26,    0,  369,    2, 0x08 /* Private */,
+      27,    2,  370,    2, 0x08 /* Private */,
+      28,    0,  375,    2, 0x08 /* Private */,
+      29,    0,  376,    2, 0x08 /* Private */,
+      30,    0,  377,    2, 0x08 /* Private */,
+      31,    0,  378,    2, 0x08 /* Private */,
+      32,    0,  379,    2, 0x08 /* Private */,
+      33,    1,  380,    2, 0x08 /* Private */,
+      33,    0,  383,    2, 0x28 /* Private | MethodCloned */,
+      35,    0,  384,    2, 0x08 /* Private */,
+      36,    0,  385,    2, 0x08 /* Private */,
+      37,    0,  386,    2, 0x08 /* Private */,
+      38,    0,  387,    2, 0x08 /* Private */,
+      39,    0,  388,    2, 0x08 /* Private */,
+      40,    0,  389,    2, 0x08 /* Private */,
+      41,    0,  390,    2, 0x08 /* Private */,
+      42,    0,  391,    2, 0x08 /* Private */,
+      43,    0,  392,    2, 0x08 /* Private */,
+      44,    0,  393,    2, 0x08 /* Private */,
+      45,    0,  394,    2, 0x08 /* Private */,
+      46,    0,  395,    2, 0x08 /* Private */,
+      47,    0,  396,    2, 0x08 /* Private */,
+      48,    0,  397,    2, 0x08 /* Private */,
+      49,    0,  398,    2, 0x08 /* Private */,
+      50,    0,  399,    2, 0x08 /* Private */,
+      51,    0,  400,    2, 0x08 /* Private */,
+      52,    0,  401,    2, 0x08 /* Private */,
+      53,    0,  402,    2, 0x08 /* Private */,
+      54,    0,  403,    2, 0x08 /* Private */,
+      55,    0,  404,    2, 0x08 /* Private */,
+      56,    0,  405,    2, 0x08 /* Private */,
+      57,    0,  406,    2, 0x08 /* Private */,
+      58,    0,  407,    2, 0x08 /* Private */,
+      59,    0,  408,    2, 0x08 /* Private */,
+      60,    0,  409,    2, 0x08 /* Private */,
+      61,    0,  410,    2, 0x08 /* Private */,
+      62,    0,  411,    2, 0x08 /* Private */,
+      63,    0,  412,    2, 0x08 /* Private */,
+      64,    0,  413,    2, 0x08 /* Private */,
+      65,    0,  414,    2, 0x08 /* Private */,
+      66,    0,  415,    2, 0x08 /* Private */,
 
  // slots: parameters
@@ -248,4 +253,6 @@
     QMetaType::Void,
     QMetaType::Void, QMetaType::Bool,   34,
+    QMetaType::Void,
+    QMetaType::Void,
     QMetaType::Void,
     QMetaType::Void,
@@ -325,30 +332,32 @@
         case 35: _t->calcularEscenarioNC(); break;
         case 36: _t->finalizarEscenarioNC(); break;
-        case 37: _t->slotCompararResultadosMNC(); break;
-        case 38: _t->slotVerResultadoMNC(); break;
-        case 39: _t->slotPHCIncidencia100(); break;
-        case 40: _t->slotPHCIncidenciaiCuenta(); break;
-        case 41: _t->slotCalcularPHCIncidenciaiCuenta(); break;
-        case 42: _t->slotPHCIncidenciaiComponente(); break;
-        case 43: _t->slotCalcularPHCIncidenciaiComponente(); break;
-        case 44: _t->slotCompararResultados(); break;
-        case 45: _t->slotVerResultado(); break;
-        case 46: _t->slotPHNCIncidencia100(); break;
-        case 47: _t->slotPHNCIncidenciaiCuenta(); break;
-        case 48: _t->slotCalcularPHNCIncidenciaiCuenta(); break;
-        case 49: _t->slotPHNCIncidenciaiComponente(); break;
-        case 50: _t->slotCalcularPHNCIncidenciaiComponente(); break;
-        case 51: _t->slotPNHIncudencia100(); break;
-        case 52: _t->slotCloseformPNH(); break;
-        case 53: _t->slotSelectPNH(); break;
-        case 54: _t->slotPNHIncidenciaiCuenta(); break;
-        case 55: _t->slotPNHIncidenciaiComponente(); break;
-        case 56: _t->slotSelectPNHi(); break;
-        case 57: _t->slotCalcularPNHIncidenciaiCuenta(); break;
-        case 58: _t->slotSelectPNHic(); break;
-        case 59: _t->slotCalcularPNHIncidenciaiComponente(); break;
-        case 60: _t->slotSeleccionarTabla(); break;
-        case 61: _t->abrirManual(); break;
-        case 62: _t->acercaDe(); break;
+        case 37: _t->slotDescomposicion(); break;
+        case 38: _t->slotAgregarDescomposicion(); break;
+        case 39: _t->slotCompararResultadosMNC(); break;
+        case 40: _t->slotVerResultadoMNC(); break;
+        case 41: _t->slotPHCIncidencia100(); break;
+        case 42: _t->slotPHCIncidenciaiCuenta(); break;
+        case 43: _t->slotCalcularPHCIncidenciaiCuenta(); break;
+        case 44: _t->slotPHCIncidenciaiComponente(); break;
+        case 45: _t->slotCalcularPHCIncidenciaiComponente(); break;
+        case 46: _t->slotCompararResultados(); break;
+        case 47: _t->slotVerResultado(); break;
+        case 48: _t->slotPHNCIncidencia100(); break;
+        case 49: _t->slotPHNCIncidenciaiCuenta(); break;
+        case 50: _t->slotCalcularPHNCIncidenciaiCuenta(); break;
+        case 51: _t->slotPHNCIncidenciaiComponente(); break;
+        case 52: _t->slotCalcularPHNCIncidenciaiComponente(); break;
+        case 53: _t->slotPNHIncudencia100(); break;
+        case 54: _t->slotCloseformPNH(); break;
+        case 55: _t->slotSelectPNH(); break;
+        case 56: _t->slotPNHIncidenciaiCuenta(); break;
+        case 57: _t->slotPNHIncidenciaiComponente(); break;
+        case 58: _t->slotSelectPNHi(); break;
+        case 59: _t->slotCalcularPNHIncidenciaiCuenta(); break;
+        case 60: _t->slotSelectPNHic(); break;
+        case 61: _t->slotCalcularPNHIncidenciaiComponente(); break;
+        case 62: _t->slotSeleccionarTabla(); break;
+        case 63: _t->abrirManual(); break;
+        case 64: _t->acercaDe(); break;
         default: ;
         }
@@ -381,11 +390,11 @@
         return _id;
     if (_c == QMetaObject::InvokeMetaMethod) {
-        if (_id < 63)
+        if (_id < 65)
             qt_static_metacall(this, _c, _id, _a);
-        _id -= 63;
+        _id -= 65;
     } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
-        if (_id < 63)
+        if (_id < 65)
             *reinterpret_cast<int*>(_a[0]) = -1;
-        _id -= 63;
+        _id -= 65;
     }
     return _id;
Index: ui_formdescomposicion.h
===================================================================
--- ui_formdescomposicion.h	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
+++ ui_formdescomposicion.h	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -0,0 +1,151 @@
+/********************************************************************************
+** Form generated from reading UI file 'formdescomposicion.ui'
+**
+** Created by: Qt User Interface Compiler version 5.3.2
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_FORMDESCOMPOSICION_H
+#define UI_FORMDESCOMPOSICION_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QAction>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QButtonGroup>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QListWidget>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_FormDescomposicion
+{
+public:
+    QGridLayout *gridLayout_2;
+    QGridLayout *gridLayout;
+    QLabel *label;
+    QListWidget *listAgregar;
+    QPushButton *pushButton_3;
+    QLabel *label_3;
+    QListWidget *listSeleccionado;
+    QPushButton *pushButton_2;
+    QPushButton *pushButton;
+    QLabel *label_2;
+    QPushButton *pushButton_4;
+
+    void setupUi(QWidget *FormDescomposicion)
+    {
+        if (FormDescomposicion->objectName().isEmpty())
+            FormDescomposicion->setObjectName(QStringLiteral("FormDescomposicion"));
+        FormDescomposicion->setWindowModality(Qt::ApplicationModal);
+        FormDescomposicion->resize(756, 395);
+        gridLayout_2 = new QGridLayout(FormDescomposicion);
+        gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
+        gridLayout = new QGridLayout();
+        gridLayout->setObjectName(QStringLiteral("gridLayout"));
+        label = new QLabel(FormDescomposicion);
+        label->setObjectName(QStringLiteral("label"));
+        QFont font;
+        font.setPointSize(14);
+        label->setFont(font);
+
+        gridLayout->addWidget(label, 0, 0, 1, 3, Qt::AlignHCenter);
+
+        listAgregar = new QListWidget(FormDescomposicion);
+        listAgregar->setObjectName(QStringLiteral("listAgregar"));
+
+        gridLayout->addWidget(listAgregar, 2, 0, 4, 1);
+
+        pushButton_3 = new QPushButton(FormDescomposicion);
+        pushButton_3->setObjectName(QStringLiteral("pushButton_3"));
+        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(pushButton_3->sizePolicy().hasHeightForWidth());
+        pushButton_3->setSizePolicy(sizePolicy);
+        pushButton_3->setMinimumSize(QSize(100, 30));
+        pushButton_3->setMaximumSize(QSize(150, 16777215));
+        pushButton_3->setStyleSheet(QStringLiteral("background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;"));
+        pushButton_3->setDefault(false);
+
+        gridLayout->addWidget(pushButton_3, 7, 2, 1, 1, Qt::AlignHCenter);
+
+        label_3 = new QLabel(FormDescomposicion);
+        label_3->setObjectName(QStringLiteral("label_3"));
+        label_3->setStyleSheet(QStringLiteral("font-weight:bold;"));
+        label_3->setAlignment(Qt::AlignCenter);
+
+        gridLayout->addWidget(label_3, 1, 0, 1, 1);
+
+        listSeleccionado = new QListWidget(FormDescomposicion);
+        listSeleccionado->setObjectName(QStringLiteral("listSeleccionado"));
+
+        gridLayout->addWidget(listSeleccionado, 2, 2, 4, 1);
+
+        pushButton_2 = new QPushButton(FormDescomposicion);
+        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
+        pushButton_2->setMinimumSize(QSize(80, 30));
+        pushButton_2->setMaximumSize(QSize(150, 30));
+        pushButton_2->setStyleSheet(QStringLiteral("background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;"));
+
+        gridLayout->addWidget(pushButton_2, 4, 1, 1, 1);
+
+        pushButton = new QPushButton(FormDescomposicion);
+        pushButton->setObjectName(QStringLiteral("pushButton"));
+        pushButton->setMinimumSize(QSize(80, 30));
+        pushButton->setMaximumSize(QSize(150, 30));
+        pushButton->setStyleSheet(QStringLiteral("background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;"));
+
+        gridLayout->addWidget(pushButton, 3, 1, 1, 1);
+
+        label_2 = new QLabel(FormDescomposicion);
+        label_2->setObjectName(QStringLiteral("label_2"));
+        label_2->setStyleSheet(QStringLiteral("font-weight:bold;"));
+        label_2->setAlignment(Qt::AlignCenter);
+
+        gridLayout->addWidget(label_2, 1, 2, 1, 1);
+
+        pushButton_4 = new QPushButton(FormDescomposicion);
+        pushButton_4->setObjectName(QStringLiteral("pushButton_4"));
+        sizePolicy.setHeightForWidth(pushButton_4->sizePolicy().hasHeightForWidth());
+        pushButton_4->setSizePolicy(sizePolicy);
+        pushButton_4->setMinimumSize(QSize(100, 30));
+        pushButton_4->setMaximumSize(QSize(150, 16777215));
+        pushButton_4->setStyleSheet(QStringLiteral("background-color: #358ccb; color: #fff; font-weight: bold; height: 30px; border: none; border-radius: 5px;"));
+
+        gridLayout->addWidget(pushButton_4, 7, 0, 1, 1, Qt::AlignHCenter);
+
+
+        gridLayout_2->addLayout(gridLayout, 1, 0, 1, 1);
+
+
+        retranslateUi(FormDescomposicion);
+
+        QMetaObject::connectSlotsByName(FormDescomposicion);
+    } // setupUi
+
+    void retranslateUi(QWidget *FormDescomposicion)
+    {
+        FormDescomposicion->setWindowTitle(QApplication::translate("FormDescomposicion", "Descomposici\303\263n", 0));
+        label->setText(QApplication::translate("FormDescomposicion", "Seleccione las dos (2) cuentas correspondientes con Actividad y Producto", 0));
+        pushButton_3->setText(QApplication::translate("FormDescomposicion", "Seleccionar", 0));
+        label_3->setText(QApplication::translate("FormDescomposicion", "Cuentas:", 0));
+        pushButton_2->setText(QApplication::translate("FormDescomposicion", "<<", 0));
+        pushButton->setText(QApplication::translate("FormDescomposicion", ">>", 0));
+        label_2->setText(QApplication::translate("FormDescomposicion", "Cuentas Seleccionadas:", 0));
+        pushButton_4->setText(QApplication::translate("FormDescomposicion", "Cancelar", 0));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class FormDescomposicion: public Ui_FormDescomposicion {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_FORMDESCOMPOSICION_H
