function getObjetoFactura($json, $factura)
{
    $factura->encabezado = getComprobante($json);
    $factura->partidas = fac_getPartidas($json, $factura);
    $factura->impuestos = fac_getFactImpuestos($json, $factura);
    $factura->impuestosTrasladados = fac_getFactImpuestosTrasladados($json, $factura);
    $factura->impuestosRetenidos = fac_getFactImpuestosRetenidos($json, $factura);
    $factura->exito = true;
    return $factura;
}
function getObjetoFactura($bufferarray, $factura)
{
    //separa secciones.
    $seccionesFactura = array();
    $seccion = array();
    foreach ($bufferarray as $buffer) {
        if (strstr($buffer[0], "¬") || strstr($buffer[0], "~") || strstr($buffer[0], "?")) {
            array_push($seccionesFactura, $seccion);
            $seccion = array();
        }
        array_push($seccion, $buffer);
    }
    array_push($seccionesFactura, $seccion);
    //seccion 1 es ENCABEZADO.
    $factura->encabezado = getComprobante($seccionesFactura[1][0]);
    if ($factura->encabezado == null) {
        echo "****ENCABEZADO EQUIVOCADO****";
        return null;
    }
    if (is_numeric($seccionesFactura[1][0][88])) {
        $factura->descuentos = getFactDescuentos($seccionesFactura[1][0]);
    }
    $factura->partidas = getPartidas($seccionesFactura[2]);
    if ($factura->partidas == null) {
        echo "****partidas equivocadas****";
        return null;
    }
    if (count($seccionesFactura) > 4) {
        $factura->partidas = getPartidasFaltantes($seccionesFactura[4], $factura->partidas);
    }
    $factura->impuestos = getFactImpuestos($seccionesFactura[3]);
    $factura->encabezado->totalTraslados = 0;
    $factura->encabezado->totalRetenciones = 0;
    if (count($factura->impuestos) > 0) {
        foreach ($factura->impuestos as $imp) {
            if (strtoupper($imp->funcion) == "T") {
                array_push($factura->impuestosTrasladados, $imp);
                $factura->encabezado->totalTraslados += doubleval($imp->monto);
            } elseif (strtoupper($imp->funcion) == "R") {
                array_push($factura->impuestosRetenidos, $imp);
                $factura->encabezado->totalRetenciones += doubleval($imp->monto);
            }
        }
    }
    $factura->addendaht = getAddenda($seccionesFactura[1][0]);
    if ($factura->addendaht == null) {
        echo "****error en datos de addenda****";
        return null;
    }
    return $factura;
}