diff --git a/composer.json b/composer.json
index 47ad7fb50636b18c6491e8713440af09f86541cf..1a26d4246206f65382c2f634e198c7ff7728908b 100644
--- a/composer.json
+++ b/composer.json
@@ -13,7 +13,8 @@
     "siu-toba/framework": "^3.2",
     "siu/instalador": "^1.5",
     "siu/toba-db": "^1.0.3",
-    "siu-toba/jasper": "5.6.1"    
+    "siu-toba/jasper": "5.6.1",
+    "siu/api-afip": "^1.1"    
   },
   "config": {
      "bin-dir": "./bin" 
diff --git a/metadatos/componentes/toba_ei_formulario/dump_102000003.sql b/metadatos/componentes/toba_ei_formulario/dump_102000003.sql
index 3308b45f826547071d64e462e6ee751f6205b81d..c15a172de6b88ce00dea58ffd83b39d8526e7ec1 100644
--- a/metadatos/componentes/toba_ei_formulario/dump_102000003.sql
+++ b/metadatos/componentes/toba_ei_formulario/dump_102000003.sql
@@ -102,7 +102,7 @@ INSERT INTO apex_objeto_ut_formulario (objeto_ut_formulario_proyecto, objeto_ut_
 	NULL, --clase
 	NULL, --auto_reset
 	'100%', --ancho
-	'150px', --ancho_etiqueta
+	'180px', --ancho_etiqueta
 	'0', --expandir_descripcion
 	NULL, --campo_bl
 	NULL, --scroll
@@ -387,15 +387,15 @@ INSERT INTO apex_objeto_ei_formulario_ef (objeto_ei_formulario_fila, objeto_ei_f
 	'Razón Social', --etiqueta
 	NULL, --etiqueta_estilo
 	NULL, --descripcion
-	NULL, --colapsado
-	NULL, --desactivado
+	'0', --colapsado
+	'0', --desactivado
 	NULL, --estilo
 	NULL, --total
 	NULL, --inicializacion
-	NULL, --permitir_html
-	NULL, --deshabilitar_rest_func
+	'0', --permitir_html
+	'0', --deshabilitar_rest_func
 	NULL, --estado_defecto
-	NULL, --solo_lectura
+	'0', --solo_lectura
 	'0', --solo_lectura_modificacion
 	NULL, --carga_metodo
 	NULL, --carga_clase
@@ -413,7 +413,7 @@ INSERT INTO apex_objeto_ei_formulario_ef (objeto_ei_formulario_fila, objeto_ei_f
 	'0', --carga_permite_no_seteado
 	NULL, --carga_no_seteado
 	NULL, --carga_no_seteado_ocultar
-	NULL, --edit_tamano
+	'40', --edit_tamano
 	NULL, --edit_maximo
 	NULL, --edit_mascara
 	NULL, --edit_unidad
@@ -468,15 +468,15 @@ INSERT INTO apex_objeto_ei_formulario_ef (objeto_ei_formulario_fila, objeto_ei_f
 	'Domicilio Comercial', --etiqueta
 	NULL, --etiqueta_estilo
 	NULL, --descripcion
-	NULL, --colapsado
-	NULL, --desactivado
+	'0', --colapsado
+	'0', --desactivado
 	NULL, --estilo
 	NULL, --total
 	NULL, --inicializacion
-	NULL, --permitir_html
-	NULL, --deshabilitar_rest_func
+	'0', --permitir_html
+	'0', --deshabilitar_rest_func
 	NULL, --estado_defecto
-	NULL, --solo_lectura
+	'0', --solo_lectura
 	'0', --solo_lectura_modificacion
 	NULL, --carga_metodo
 	NULL, --carga_clase
@@ -545,19 +545,19 @@ INSERT INTO apex_objeto_ei_formulario_ef (objeto_ei_formulario_fila, objeto_ei_f
 	'email', --columnas
 	'0', --obligatorio
 	'0', --oculto_relaja_obligatorio
-	'6', --orden
+	'7', --orden
 	'Email', --etiqueta
 	NULL, --etiqueta_estilo
 	NULL, --descripcion
-	NULL, --colapsado
-	NULL, --desactivado
+	'0', --colapsado
+	'0', --desactivado
 	NULL, --estilo
 	NULL, --total
 	NULL, --inicializacion
-	NULL, --permitir_html
-	NULL, --deshabilitar_rest_func
+	'0', --permitir_html
+	'0', --deshabilitar_rest_func
 	NULL, --estado_defecto
-	NULL, --solo_lectura
+	'0', --solo_lectura
 	'0', --solo_lectura_modificacion
 	NULL, --carga_metodo
 	NULL, --carga_clase
@@ -575,7 +575,88 @@ INSERT INTO apex_objeto_ei_formulario_ef (objeto_ei_formulario_fila, objeto_ei_f
 	'0', --carga_permite_no_seteado
 	NULL, --carga_no_seteado
 	NULL, --carga_no_seteado_ocultar
-	NULL, --edit_tamano
+	'40', --edit_tamano
+	NULL, --edit_maximo
+	NULL, --edit_mascara
+	NULL, --edit_unidad
+	NULL, --edit_rango
+	NULL, --edit_filas
+	NULL, --edit_columnas
+	NULL, --edit_wrap
+	NULL, --edit_resaltar
+	NULL, --edit_ajustable
+	NULL, --edit_confirmar_clave
+	NULL, --edit_expreg
+	NULL, --popup_item
+	NULL, --popup_proyecto
+	NULL, --popup_editable
+	NULL, --popup_ventana
+	NULL, --popup_carga_desc_metodo
+	NULL, --popup_carga_desc_clase
+	NULL, --popup_carga_desc_include
+	NULL, --popup_puede_borrar_estado
+	NULL, --fieldset_fin
+	NULL, --check_valor_si
+	NULL, --check_valor_no
+	NULL, --check_desc_si
+	NULL, --check_desc_no
+	NULL, --check_ml_toggle
+	NULL, --fijo_sin_estado
+	NULL, --editor_ancho
+	NULL, --editor_alto
+	NULL, --editor_botonera
+	NULL, --editor_config_file
+	NULL, --selec_cant_minima
+	NULL, --selec_cant_maxima
+	NULL, --selec_utilidades
+	NULL, --selec_tamano
+	NULL, --selec_ancho
+	NULL, --selec_serializar
+	NULL, --selec_cant_columnas
+	NULL, --upload_extensiones
+	NULL, --punto_montaje
+	NULL  --placeholder
+);
+INSERT INTO apex_objeto_ei_formulario_ef (objeto_ei_formulario_fila, objeto_ei_formulario, objeto_ei_formulario_proyecto, identificador, elemento_formulario, columnas, obligatorio, oculto_relaja_obligatorio, orden, etiqueta, etiqueta_estilo, descripcion, colapsado, desactivado, estilo, total, inicializacion, permitir_html, deshabilitar_rest_func, estado_defecto, solo_lectura, solo_lectura_modificacion, carga_metodo, carga_clase, carga_include, carga_dt, carga_consulta_php, carga_sql, carga_fuente, carga_lista, carga_col_clave, carga_col_desc, carga_maestros, carga_cascada_relaj, cascada_mantiene_estado, carga_permite_no_seteado, carga_no_seteado, carga_no_seteado_ocultar, edit_tamano, edit_maximo, edit_mascara, edit_unidad, edit_rango, edit_filas, edit_columnas, edit_wrap, edit_resaltar, edit_ajustable, edit_confirmar_clave, edit_expreg, popup_item, popup_proyecto, popup_editable, popup_ventana, popup_carga_desc_metodo, popup_carga_desc_clase, popup_carga_desc_include, popup_puede_borrar_estado, fieldset_fin, check_valor_si, check_valor_no, check_desc_si, check_desc_no, check_ml_toggle, fijo_sin_estado, editor_ancho, editor_alto, editor_botonera, editor_config_file, selec_cant_minima, selec_cant_maxima, selec_utilidades, selec_tamano, selec_ancho, selec_serializar, selec_cant_columnas, upload_extensiones, punto_montaje, placeholder) VALUES (
+	'102000032', --objeto_ei_formulario_fila
+	'102000003', --objeto_ei_formulario
+	'pirapire', --objeto_ei_formulario_proyecto
+	'domicilio_comercial_nombre', --identificador
+	'ef_editable', --elemento_formulario
+	'domicilio_comercial_nombre', --columnas
+	'0', --obligatorio
+	'0', --oculto_relaja_obligatorio
+	'6', --orden
+	'Domicilio Comercial', --etiqueta
+	NULL, --etiqueta_estilo
+	NULL, --descripcion
+	'0', --colapsado
+	'0', --desactivado
+	NULL, --estilo
+	NULL, --total
+	NULL, --inicializacion
+	'0', --permitir_html
+	'0', --deshabilitar_rest_func
+	NULL, --estado_defecto
+	'0', --solo_lectura
+	'0', --solo_lectura_modificacion
+	NULL, --carga_metodo
+	NULL, --carga_clase
+	NULL, --carga_include
+	NULL, --carga_dt
+	NULL, --carga_consulta_php
+	NULL, --carga_sql
+	NULL, --carga_fuente
+	NULL, --carga_lista
+	NULL, --carga_col_clave
+	NULL, --carga_col_desc
+	NULL, --carga_maestros
+	NULL, --carga_cascada_relaj
+	'0', --cascada_mantiene_estado
+	'0', --carga_permite_no_seteado
+	NULL, --carga_no_seteado
+	NULL, --carga_no_seteado_ocultar
+	'40', --edit_tamano
 	NULL, --edit_maximo
 	NULL, --edit_mascara
 	NULL, --edit_unidad
diff --git a/php/afip.php b/php/afip.php
new file mode 100644
index 0000000000000000000000000000000000000000..7876150d84cdd3ced1b0cbcd773f37d29c92b029
--- /dev/null
+++ b/php/afip.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ *
+ */
+class Afip
+{
+    protected $afip;
+    protected $afip_config;
+    protected $padron_cuatro;
+
+    public function __construct()
+    {
+        $afip_ini = new toba_ini(toba::instalacion()->get_path_carpeta_instalacion()."/afip.ini");
+        $this->afip_config = $afip_ini->get_datos_entrada('afip_config');
+
+        if (isset($this->afip_config['cuit']) && isset($this->afip_config['cert']) && isset($this->afip_config['key'])) {
+            $config = [
+                'CUIT' => $this->afip_config['cuit'],
+                'production' => $this->afip_config['produccion'],
+                'cert' => $this->afip_config['cert'],
+                'key' => $this->afip_config['key'],
+                'token_dir' => $this->afip_config['token_dir']
+            ];
+
+            try {
+                $this->afip = new \SIU\Afip\Afip($config);
+                $this->padron_cuatro = new \SIU\Afip\WebService\PadronAlcanceCuatro($this->afip);
+            } catch (\Exception $e) {
+                toba::notificacion()->warning($e->getMessage());
+                toba::logger()->info($e->getMessage());
+            }
+        }
+    }
+
+    /**
+     * Valida si esta configurado el WS de AFIP y si las credenciales configuradas
+     * se conectan correctamente.
+     *
+     * @return     \|boolean  ( description_of_the_return_value )
+     */
+    public function conectado()
+    {
+        $res = false;
+
+        if (isset($this->afip_config['cuit']) && isset($this->afip_config['cert']) && isset($this->afip_config['key'])) {
+            try {
+                $res = $this->padron_cuatro->getEstadoServicio();
+
+                $datos = get_object_vars($res);
+
+                if ($datos['appserver'] == 'OK' && $datos['authserver'] == 'OK' && $datos['dbserver'] == 'OK') {
+                    $res = true;
+                }
+            } catch (\Exception $e) {
+                toba::notificacion()->warning($e->getMessage());
+                toba::logger()->info($e->getMessage());
+            }
+        }
+
+        return $res;
+    }
+
+    public function get_contribuyente_detalle($cuit)
+    {
+        $datos = [];
+
+        if (isset($this->datos[$cuit])) {
+            return $this->datos[$cuit];
+        }
+
+        $cuit_sin_guiones = str_replace('-', '', $cuit);
+        $res = $this->padron_cuatro->getContribuyenteDetalle($cuit_sin_guiones);
+
+        if (is_object($res)) {
+            $datos = $this->datos[$cuit] = get_object_vars($res);
+        }
+
+        return $datos;
+    }
+
+    public function get_opciones_domicilios($cuit)
+    {
+        $datos = $this->get_contribuyente_detalle($cuit);
+
+        $prov_domicilios = [];
+
+        if (!isset($datos['domicilio'])) {
+            return $prov_domicilios;
+        }
+
+        if (is_array($datos['domicilio'])) {
+            foreach ($datos['domicilio'] as $domicilio) {
+                $domicilios[] = get_object_vars($domicilio);
+            }
+        } elseif (is_object($datos['domicilio'])) {
+            $domicilios[] = get_object_vars($datos['domicilio']);
+        }
+
+        if (isset($domicilios)) {
+            $domi = [];
+
+            foreach ($domicilios as $domicilio) {
+                $domi["direccion"] = null;
+                $domi["direccion"] .= (isset($domicilio["direccion"])) ? $domicilio["direccion"] : "";
+                $domi["direccion"] .= (isset($domicilio["descripcionProvincia"])) ? " ".$domicilio["descripcionProvincia"] : "";
+                $domi["direccion"] .= (isset($domicilio["localidad"])) ? " ".$domicilio["localidad"] : "";
+                $domi["direccion"] = utf8_decode($domi["direccion"]);
+                $prov_domicilios[] = $domi;
+            }
+        }
+
+        return $prov_domicilios;
+    }
+}
diff --git a/php/comprobantes/ci_generar_comprobante.php b/php/comprobantes/ci_generar_comprobante.php
index 0b769d949eace9e9a8d8035540496ae797a8d2e7..5abdff0a94a8bb1058cd386ff7e4408e8da5d031 100644
--- a/php/comprobantes/ci_generar_comprobante.php
+++ b/php/comprobantes/ci_generar_comprobante.php
@@ -1,7 +1,7 @@
 <?php
 class ci_generar_comprobante extends pirapire_ci
 {
-    
+    protected $s__domicilios;
     //-----------------------------------------------------------------------------------
     //---- form_emisor ------------------------------------------------------------------
     //-----------------------------------------------------------------------------------
@@ -35,6 +35,10 @@ class ci_generar_comprobante extends pirapire_ci
 
     public function conf__form_receptor(form_receptor $form)
     {
+        if (is_array($this->s__domicilios)) {
+            $this->dep('form_receptor')->ef('domicilio_comercial')->set_opciones($this->s__domicilios);
+        }
+
         $datos = $this->cn()->get_datos_receptor();
 
         if (is_array($datos)) {
@@ -44,6 +48,9 @@ class ci_generar_comprobante extends pirapire_ci
 
     public function evt__form_receptor__modificacion($datos)
     {
+        if (isset($this->s__domicilios[$datos['domicilio_comercial']])) {
+            $datos['domicilio_comercial_nombre'] = $this->s__domicilios[$datos['domicilio_comercial']];
+        }
         $this->cn()->set_datos_receptor($datos);
     }
 
@@ -126,6 +133,42 @@ class ci_generar_comprobante extends pirapire_ci
 
         $respuesta->set($item);
     }
+
+    public function ajax__get_datos_receptor_afip($parametros, toba_ajax_respuesta $respuesta)
+    {
+        $this->s__domicilios = $datos = [];
+        $afip = new \Afip();
+
+        if ($afip->conectado() && $parametros['tipo_doc'] == constantes::get('AFIP_TIPO_DOC_CUIT')) {
+            $datos_receptor = $afip->get_contribuyente_detalle($parametros['nro_doc']);
+         
+            if (isset($datos_receptor) && is_array($datos_receptor)) {
+                $datos_receptor_domicilios = $afip->get_opciones_domicilios($parametros['nro_doc']);
+
+                if (is_array($datos_receptor_domicilios)) {
+                    foreach ($datos_receptor_domicilios as $domicilio) {
+                        $this->s__domicilios[] = $domicilio['direccion'];
+                    }
+                    $datos['domicilios'] = $this->s__domicilios;
+                    $this->dep('form_receptor')->ef('domicilio_comercial')->set_opciones($this->s__domicilios);
+                }
+            }
+        
+            if (isset($datos_receptor['email']->direccion)) {
+                $datos['email'] = utf8_decode($datos_receptor['email']->direccion);
+            }
+
+            if (isset($datos_receptor['razonSocial'])) {
+                $datos['razon_social'] = utf8_decode($datos_receptor['razonSocial']);
+            } elseif (isset($datos_receptor['apellido'])) {
+                $datos['razon_social'] = utf8_decode($datos_receptor['apellido']).' '.utf8_decode($datos_receptor['nombre']);
+            }
+        }
+
+        $respuesta->set($datos);
+    }
+
+
     //-----------------------------------------------------------------------------------
     //---- Eventos ----------------------------------------------------------------------
     //-----------------------------------------------------------------------------------
diff --git a/php/comprobantes/cn_generar_comprobante.php b/php/comprobantes/cn_generar_comprobante.php
index d577647707ce0c058b4311317cbd5a5668d0eea0..c58a372bf7e8a9511acdbc761c2d0ccdcba960b5 100644
--- a/php/comprobantes/cn_generar_comprobante.php
+++ b/php/comprobantes/cn_generar_comprobante.php
@@ -79,7 +79,7 @@ class cn_generar_comprobante extends pirapire_cn
         $datos_receptor = [
             "nombre"=> $this->s__datos_receptor['razon_social'],
             "apellido"=> $this->s__datos_receptor['razon_social'],
-            "domicilio"=> $this->s__datos_receptor['domicilio_comercial'],
+            "domicilio"=> $this->s__datos_receptor['domicilio_comercial_nombre'],
             "razon_social"=> $this->s__datos_receptor['razon_social'],
             "condicion_iva"=> $this->s__datos_receptor['condicion_iva'],
             "tipo_documento"=> $this->s__datos_receptor['tipo_doc'],
@@ -184,7 +184,7 @@ class cn_generar_comprobante extends pirapire_cn
         $venta_sq['medio_pago'] = constantes::get('SQ_MEDIO_PAGO_EFECTIVO');
         $venta_sq['canal_venta'] = constantes::get('SQ_CANAL_VENTA_VIRTUAL');
         $venta_sq['realizada_en'] = $datos_emisor['fecha_comprobante'];
-        $venta_sq['unidad_venta'] = 'e51edbd1-021e-4b96-9d16-d5ed948ff115';
+        $venta_sq['unidad_venta'] = 'ff996fc6-9140-48c4-a4a2-1d507a82cb40';
         $venta_sq['id_referencia'] = null;
         $venta_sq['importe_total'] = $importe;
         $venta_sq['condicion_venta'] = constantes::get('SQ_CONDICION_VENTA_CONTADO');
diff --git a/php/comprobantes/form_receptor.php b/php/comprobantes/form_receptor.php
index e8a42427d04e4c08d988cafec30afc90c57678a2..2cad2777c3f4c10ca5ba1b9e5ed63f6af2190d42 100644
--- a/php/comprobantes/form_receptor.php
+++ b/php/comprobantes/form_receptor.php
@@ -1,6 +1,65 @@
 <?php
 class form_receptor extends pirapire_ei_formulario
 {
-}
+    //-----------------------------------------------------------------------------------
+    //---- JAVASCRIPT -------------------------------------------------------------------
+    //-----------------------------------------------------------------------------------
+
+    public function extender_objeto_js()
+    {
+        echo "{$this->objeto_js}.ini = function()
+        {
+            if(this.ef('domicilio_comercial').tiene_estado())
+            {
+                this.ef('domicilio_comercial').mostrar();
+                this.ef('domicilio_comercial_nombre').ocultar();
+            }else{
+                this.ef('domicilio_comercial').ocultar();
+                this.ef('domicilio_comercial_nombre').mostrar();
+            }
+        };";
+
+        echo "
+        //---- Procesamiento de EFs --------------------------------
+        
+        {$this->objeto_js}.evt__nro_doc__procesar = function(es_inicial)
+        {
+            var nro_doc = this.ef('nro_doc');
+            var tipo_doc = this.ef('tipo_doc');
+        
+            if(!es_inicial && nro_doc.tiene_estado()){
+                var nro_doc = nro_doc.get_estado();
+                var tipo_doc = tipo_doc.get_estado();
+            
+                var parametros = { nro_doc: nro_doc, tipo_doc: tipo_doc};
 
-?>
\ No newline at end of file
+                this.controlador.ajax('get_datos_receptor_afip', parametros, this, this.actualizar_datos_receptor );
+            }
+
+            {$this->objeto_js}.actualizar_datos_receptor = function(datos)
+            {
+                this.ef('email').set_estado('');
+                this.ef('razon_social').set_estado('');
+                this.ef('domicilio_comercial_nombre').set_estado('');
+                this.ef('domicilio_comercial').resetear_estado();
+                
+                if(datos.email){
+                    this.ef('email').set_estado(datos.email);
+                }
+                if(datos.razon_social){
+                    this.ef('razon_social').set_estado(datos.razon_social);
+                }
+
+                if(Array.isArray(datos.domicilios) && datos.domicilios.length > 0){
+                    this.ef('domicilio_comercial').mostrar();
+                    this.ef('domicilio_comercial_nombre').ocultar();
+                    this.ef('domicilio_comercial').set_opciones(datos.domicilios);   
+                }else{
+                    this.ef('domicilio_comercial').ocultar();
+                    this.ef('domicilio_comercial_nombre').mostrar();
+                }
+            }
+        }
+        ";
+    }
+}
diff --git a/php/constantes.php b/php/constantes.php
index 15f6530e745a86e2a3daffdafd877c3bc75b365b..6e3bf1f88e9e2e38b73693b527e7f410e3a0d158 100644
--- a/php/constantes.php
+++ b/php/constantes.php
@@ -7,6 +7,7 @@ class constantes
         ,'AFIP_CONCEPTO_PROD_SERV' => array('valor' => 3)
         ,'AFIP_CONCEPTO_SERV' => array('valor' => 2)
         ,'AFIP_CONCEPTO_OTRO' => array('valor' => 4)
+        ,'AFIP_TIPO_DOC_CUIT' => array('valor' => 80)
         ,'SQ_ESTADO_VENTA_COBRADA' => array('valor' => 2)
         ,'SQ_CONCEPTO_COBRANZA_NETO' => array('valor' => 1)
         ,'SQ_MEDIO_PAGO_EFECTIVO' => array('valor' => 1)
diff --git a/php/pirapire_autoload.php b/php/pirapire_autoload.php
index 446d4275e5ac3e8e441c25ed171f0894f5831062..f237ba00700b65cafc6ed9b9869745797e512721 100644
--- a/php/pirapire_autoload.php
+++ b/php/pirapire_autoload.php
@@ -22,6 +22,7 @@ class pirapire_autoload
 		'cn_administrar_productos' => 'administrar_productos_servicios/productos/cn_administrar_productos.php',
 		'ci_administrar_servicios' => 'administrar_productos_servicios/servicios/ci_administrar_servicios.php',
 		'cn_administrar_servicios' => 'administrar_productos_servicios/servicios/cn_administrar_servicios.php',
+		'Afip' => 'afip.php',
 		'ci_generar_comprobante' => 'comprobantes/ci_generar_comprobante.php',
 		'cn_generar_comprobante' => 'comprobantes/cn_generar_comprobante.php',
 		'form_emisor' => 'comprobantes/form_emisor.php',