ATION","InvoicePayment_ID":"2340388000075781715","Invoice_Number":"2060842","Invoice_Applied":"1115.72","Balance":"1115.72","Invoice_Applied_BCY":"21019.83","Invoice_Amount":"1115.72","Invoice_Amount_BCY":"21908.84","Invoice_Exch_Rate":"19.636500","Tipo":"Pago","Batch":"71"}, {"payment_number":"34613","payment_id":"2340388000075781545","P_Date":"16-Jul-25","exchange_rate":"18.839700","amount":"1931.05","amount_bcy":"36380.40","reference_number":"IN158JUL25","currency_code":"USD","CustomerID_B":"2340388000001153229","Nombre_Cliente":"06955 TAYLOR WESSING LLP","InvoicePayment_ID":"2340388000075781552","Invoice_Number":"2059517","Invoice_Applied":"1931.05","Balance":"1931.05","Invoice_Applied_BCY":"36380.40","Invoice_Amount":"1931.05","Invoice_Amount_BCY":"39588.46","Invoice_Exch_Rate":"20.501000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34649","payment_id":"2340388000075819836","P_Date":"17-Jul-25","exchange_rate":"18.717800","amount":"2774.71","amount_bcy":"51936.47","reference_number":"IN182JUL25","currency_code":"USD","CustomerID_B":"2340388000016487333","Nombre_Cliente":"17872 CHANG TSI & PARTNERS LIMITED","InvoicePayment_ID":"2340388000075819859","Invoice_Number":"2060480","Invoice_Applied":"622.92","Balance":"622.92","Invoice_Applied_BCY":"11659.69","Invoice_Amount":"622.92","Invoice_Amount_BCY":"12176.72","Invoice_Exch_Rate":"19.547800","Tipo":"Pago","Batch":"71"}, {"payment_number":"34649","payment_id":"2340388000075819836","P_Date":"17-Jul-25","exchange_rate":"18.717800","amount":"2774.71","amount_bcy":"51936.47","reference_number":"IN182JUL25","currency_code":"USD","CustomerID_B":"2340388000016487333","Nombre_Cliente":"17872 CHANG TSI & PARTNERS LIMITED","InvoicePayment_ID":"2340388000075819871","Invoice_Number":"2061353","Invoice_Applied":"1114.38","Balance":"1114.38","Invoice_Applied_BCY":"20858.74","Invoice_Amount":"1114.38","Invoice_Amount_BCY":"21720.60","Invoice_Exch_Rate":"19.491200","Tipo":"Pago","Batch":"71"}, {"payment_number":"34676","payment_id":"2340388000075931523","P_Date":"18-Jul-25","exchange_rate":"18.768500","amount":"1431.72","amount_bcy":"26871.24","reference_number":"IN208JUL25","currency_code":"USD","CustomerID_B":"2340388000042631318","Nombre_Cliente":"19779 HILGERS GRABEN PLLC","InvoicePayment_ID":"2340388000075931530","Invoice_Number":"2061326","Invoice_Applied":"1431.72","Balance":"1431.72","Invoice_Applied_BCY":"26871.24","Invoice_Amount":"1431.72","Invoice_Amount_BCY":"27905.94","Invoice_Exch_Rate":"19.491200","Tipo":"Pago","Batch":"71"}, {"payment_number":"34696","payment_id":"2340388000075947434","P_Date":"18-Jul-25","exchange_rate":"18.768500","amount":"250.00","amount_bcy":"4692.13","reference_number":"IN207JUL25","currency_code":"USD","CustomerID_B":"2340388000026992043","Nombre_Cliente":"18634 Fisher & Paykel Healthcare Limited","InvoicePayment_ID":"2340388000075947441","Invoice_Number":"2061963","Invoice_Applied":"250.00","Balance":"250.00","Invoice_Applied_BCY":"4692.13","Invoice_Amount":"250.00","Invoice_Amount_BCY":"4815.95","Invoice_Exch_Rate":"19.263800","Tipo":"Pago","Batch":"71"}, {"payment_number":"34699","payment_id":"2340388000075946578","P_Date":"18-Jul-25","exchange_rate":"1.000000","amount":"19459.49","amount_bcy":"19459.49","reference_number":"BM087JUL25","currency_code":"MXN","CustomerID_B":"2340388000001135007","Nombre_Cliente":"05064 ADVANCED METHODS CO. SRL CV","InvoicePayment_ID":"2340388000075946585","Invoice_Number":"2063802","Invoice_Applied":"19459.49","Balance":"19459.49","Invoice_Applied_BCY":"19459.49","Invoice_Amount":"19459.49","Invoice_Amount_BCY":"19459.49","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34677","payment_id":"2340388000075931606","P_Date":"18-Jul-25","exchange_rate":"18.768500","amount":"821.46","amount_bcy":"15417.57","reference_number":"IN203JUL25","currency_code":"USD","CustomerID_B":"2340388000001167641","Nombre_Cliente":"08581 FRANKFURT KURNIT KLEIN & SELZ PC","InvoicePayment_ID":"2340388000075931620","Invoice_Number":"2059579","Invoice_Applied":"371.46","Balance":"371.46","Invoice_Applied_BCY":"6971.75","Invoice_Amount":"371.46","Invoice_Amount_BCY":"7687.25","Invoice_Exch_Rate":"20.694700","Tipo":"Pago","Batch":"71"}, {"payment_number":"34714","payment_id":"2340388000075987101","P_Date":"21-Jul-25","exchange_rate":"18.720000","amount":"1736.88","amount_bcy":"32514.39","reference_number":"IN222JUL25","currency_code":"USD","CustomerID_B":"2340388000001109534","Nombre_Cliente":"02481 BAYERISCHE MOTOREN WERKE AKTIENGESELLSCHAFT","InvoicePayment_ID":"2340388000075987108","Invoice_Number":"2063406","Invoice_Applied":"1736.88","Balance":"1736.88","Invoice_Applied_BCY":"32514.39","Invoice_Amount":"1736.88","Invoice_Amount_BCY":"32573.45","Invoice_Exch_Rate":"18.754000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34737","payment_id":"2340388000076015436","P_Date":"18-Jul-25","exchange_rate":"1.000000","amount":"4176.00","amount_bcy":"4176.00","reference_number":"BV052JUL25","currency_code":"MXN","CustomerID_B":"2340388000062001472","Nombre_Cliente":"20873 FRANQUICIAS ENVIOEXPRESS, S.A. DE C.V.","InvoicePayment_ID":"2340388000076015443","Invoice_Number":"2064200","Invoice_Applied":"4176.00","Balance":"4176.00","Invoice_Applied_BCY":"4176.00","Invoice_Amount":"4176.00","Invoice_Amount_BCY":"4176.00","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34742","payment_id":"2340388000076024220","P_Date":"18-Jul-25","exchange_rate":"1.000000","amount":"133523.38","amount_bcy":"133523.38","reference_number":"BV051JUL25","currency_code":"MXN","CustomerID_B":"2340388000001141563","Nombre_Cliente":"05736 LABORATORIOS LIOMONT, S.A. DE C.V.","InvoicePayment_ID":"2340388000076024283","Invoice_Number":"2062670","Invoice_Applied":"5452.00","Balance":"5452.00","Invoice_Applied_BCY":"5452.00","Invoice_Amount":"5452.00","Invoice_Amount_BCY":"5452.00","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34742","payment_id":"2340388000076024220","P_Date":"18-Jul-25","exchange_rate":"1.000000","amount":"133523.38","amount_bcy":"133523.38","reference_number":"BV051JUL25","currency_code":"MXN","CustomerID_B":"2340388000001141563","Nombre_Cliente":"05736 LABORATORIOS LIOMONT, S.A. DE C.V.","InvoicePayment_ID":"2340388000076024271","Invoice_Number":"2062674","Invoice_Applied":"1015.00","Balance":"1015.00","Invoice_Applied_BCY":"1015.00","Invoice_Amount":"1015.00","Invoice_Amount_BCY":"1015.00","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34742","payment_id":"2340388000076024220","P_Date":"18-Jul-25","exchange_rate":"1.000000","amount":"133523.38","amount_bcy":"133523.38","reference_number":"BV051JUL25","currency_code":"MXN","CustomerID_B":"2340388000001141563","Nombre_Cliente":"05736 LABORATORIOS LIOMONT, S.A. DE C.V.","InvoicePayment_ID":"2340388000076024280","Invoice_Number":"2062672","Invoice_Applied":"14227.12","Balance":"14227.12","Invoice_Applied_BCY":"14227.12","Invoice_Amount":"14227.12","Invoice_Amount_BCY":"14227.12","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34742","payment_id":"2340388000076024220","P_Date":"18-Jul-25","exchange_rate":"1.000000","amount":"133523.38","amount_bcy":"133523.38","reference_number":"BV051JUL25","currency_code":"MXN","CustomerID_B":"2340388000001141563","Nombre_Cliente":"05736 LABORATORIOS LIOMONT, S.A. DE C.V.","InvoicePayment_ID":"2340388000076024259","Invoice_Number":"2062675","Invoice_Applied":"3993.30","Balance":"3993.30","Invoice_Applied_BCY":"3993.30","Invoice_Amount":"3993.30","Invoice_Amount_BCY":"3993.30","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34743","payment_id":"2340388000076066605","P_Date":"21-Jul-25","exchange_rate":"18.720000","amount":"100.00","amount_bcy":"1872.00","reference_number":"IN225JUL25","currency_code":"USD","CustomerID_B":"2340388000001119317","Nombre_Cliente":"03366 MORGAN, LEWIS & BOCKIUS LLP (WASHINGTON)","InvoicePayment_ID":"2340388000076066612","Invoice_Number":"2061643","Invoice_Applied":"100.00","Balance":"100.00","Invoice_Applied_BCY":"1872.00","Invoice_Amount":"100.00","Invoice_Amount_BCY":"1931.98","Invoice_Exch_Rate":"19.319800","Tipo":"Pago","Batch":"71"}, {"payment_number":"34766","payment_id":"2340388000076067779","P_Date":"22-Jul-25","exchange_rate":"18.645500","amount":"150.00","amount_bcy":"2796.83","reference_number":"IN227JUL25","currency_code":"USD","CustomerID_B":"2340388000017641946","Nombre_Cliente":"18035 BARKER BRETTELL SWEDEN AB","InvoicePayment_ID":"2340388000076067786","Invoice_Number":"2062944","Invoice_Applied":"150.00","Balance":"150.00","Invoice_Applied_BCY":"2796.83","Invoice_Amount":"150.00","Invoice_Amount_BCY":"2848.08","Invoice_Exch_Rate":"18.987200","Tipo":"Pago","Batch":"71"}, {"payment_number":"34790","payment_id":"2340388000076191155","P_Date":"23-Jul-25","exchange_rate":"1.000000","amount":"38666.66","amount_bcy":"38666.66","reference_number":"BV060JUL25","currency_code":"MXN","CustomerID_B":"2340388000049932477","Nombre_Cliente":"20242 LIFEX DISTRIBUCION, S.A.P.I. DE C.V.","InvoicePayment_ID":"2340388000076191162","Invoice_Number":"2063607","Invoice_Applied":"38666.66","Balance":"38666.66","Invoice_Applied_BCY":"38666.66","Invoice_Amount":"38666.66","Invoice_Amount_BCY":"38666.66","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34807","payment_id":"2340388000076293149","P_Date":"24-Jul-25","exchange_rate":"18.573500","amount":"2090.33","amount_bcy":"38824.74","reference_number":"IN260JUL25","currency_code":"USD","CustomerID_B":"2340388000001103190","Nombre_Cliente":"00988 HUGO BOSS AG","InvoicePayment_ID":"2340388000076293176","Invoice_Number":"2064121","Invoice_Applied":"425.00","Balance":"425.00","Invoice_Applied_BCY":"7893.74","Invoice_Amount":"425.00","Invoice_Amount_BCY":"7930.29","Invoice_Exch_Rate":"18.659500","Tipo":"Pago","Batch":"71"}, {"payment_number":"34807","payment_id":"2340388000076293149","P_Date":"24-Jul-25","exchange_rate":"18.573500","amount":"2090.33","amount_bcy":"38824.74","reference_number":"IN260JUL25","currency_code":"USD","CustomerID_B":"2340388000001103190","Nombre_Cliente":"00988 HUGO BOSS AG","InvoicePayment_ID":"2340388000076293179","Invoice_Number":"2064119","Invoice_Applied":"78.94","Balance":"78.94","Invoice_Applied_BCY":"1466.19","Invoice_Amount":"78.94","Invoice_Amount_BCY":"1472.98","Invoice_Exch_Rate":"18.659500","Tipo":"Pago","Batch":"71"}, {"payment_number":"34806","payment_id":"2340388000076251954","P_Date":"24-Jul-25","exchange_rate":"1.000000","amount":"5381.76","amount_bcy":"5381.76","reference_number":"BM106JUL25","currency_code":"MXN","CustomerID_B":"2340388000001241779","Nombre_Cliente":"16338 MERCADOLIBRE, S.A. DE C.V., INSTITUCIÓN DE FONDOS DE PAGO ELECTRÓNICO","InvoicePayment_ID":"2340388000076251968","Invoice_Number":"2061902","Invoice_Applied":"2088.00","Balance":"2088.00","Invoice_Applied_BCY":"2088.00","Invoice_Amount":"2088.00","Invoice_Amount_BCY":"2088.00","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34807","payment_id":"2340388000076293149","P_Date":"24-Jul-25","exchange_rate":"18.573500","amount":"2090.33","amount_bcy":"38824.74","reference_number":"IN260JUL25","currency_code":"USD","CustomerID_B":"2340388000001103190","Nombre_Cliente":"00988 HUGO BOSS AG","InvoicePayment_ID":"2340388000076293188","Invoice_Number":"2064118","Invoice_Applied":"100.00","Balance":"100.00","Invoice_Applied_BCY":"1857.35","Invoice_Amount":"100.00","Invoice_Amount_BCY":"1865.95","Invoice_Exch_Rate":"18.659500","Tipo":"Pago","Batch":"71"}, {"payment_number":"34846","payment_id":"2340388000076319930","P_Date":"25-Jul-25","exchange_rate":"18.553800","amount":"438.62","amount_bcy":"8138.07","reference_number":"IN276JUL25","currency_code":"USD","CustomerID_B":"2340388000005952430","Nombre_Cliente":"16998 GRIFFITH HACK","InvoicePayment_ID":"2340388000076319937","Invoice_Number":"2062257","Invoice_Applied":"438.62","Balance":"438.62","Invoice_Applied_BCY":"8138.07","Invoice_Amount":"438.62","Invoice_Amount_BCY":"8391.55","Invoice_Exch_Rate":"19.131700","Tipo":"Pago","Batch":"71"}, {"payment_number":"34865","payment_id":"2340388000076324030","P_Date":"24-Jul-25","exchange_rate":"1.000000","amount":"2958.00","amount_bcy":"2958.00","reference_number":"BV068JUL25","currency_code":"MXN","CustomerID_B":"2340388000001195347","Nombre_Cliente":"11824 SERVICIOS CORPORATIVOS BAL SA DE CV","InvoicePayment_ID":"2340388000076324037","Invoice_Number":"2063729","Invoice_Applied":"2958.00","Balance":"2958.00","Invoice_Applied_BCY":"2958.00","Invoice_Amount":"2958.00","Invoice_Amount_BCY":"2958.00","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34878","payment_id":"2340388000076350237","P_Date":"28-Jul-25","exchange_rate":"18.557000","amount":"36329.02","amount_bcy":"674157.62","reference_number":"IN294JUL25","currency_code":"USD","CustomerID_B":"2340388000022179945","Nombre_Cliente":"18205 SOURCE IP","InvoicePayment_ID":"2340388000076350327","Invoice_Number":"2050736","Invoice_Applied":"745.45","Balance":"745.45","Invoice_Applied_BCY":"13833.32","Invoice_Amount":"745.45","Invoice_Amount_BCY":"14472.91","Invoice_Exch_Rate":"19.415000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34877","payment_id":"2340388000076345449","P_Date":"25-Jul-25","exchange_rate":"1.000000","amount":"12647.48","amount_bcy":"12647.48","reference_number":"BM118JUL25","currency_code":"MXN","CustomerID_B":"2340388000069358048","Nombre_Cliente":"21129 MERZ PHARMA S.A. DE C.V.","InvoicePayment_ID":"2340388000076345456","Invoice_Number":"2061355","Invoice_Applied":"12647.48","Balance":"12647.48","Invoice_Applied_BCY":"12647.48","Invoice_Amount":"12647.48","Invoice_Amount_BCY":"12647.48","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34878","payment_id":"2340388000076350237","P_Date":"28-Jul-25","exchange_rate":"18.557000","amount":"36329.02","amount_bcy":"674157.62","reference_number":"IN294JUL25","currency_code":"USD","CustomerID_B":"2340388000022179945","Nombre_Cliente":"18205 SOURCE IP","InvoicePayment_ID":"2340388000076350360","Invoice_Number":"2057753","Invoice_Applied":"2041.12","Balance":"2041.12","Invoice_Applied_BCY":"37877.06","Invoice_Amount":"2041.12","Invoice_Amount_BCY":"41859.29","Invoice_Exch_Rate":"20.508000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34892","payment_id":"2340388000076385669","P_Date":"28-Jul-25","exchange_rate":"1.000000","amount":"380506.69","amount_bcy":"380506.69","reference_number":"BV078JUL25","currency_code":"MXN","CustomerID_B":"2340388000001206030","Nombre_Cliente":"12900 PRODUCTOS FARMACEUTICOS S.A. DE C.V.","InvoicePayment_ID":"2340388000076385676","Invoice_Number":"2064214","Invoice_Applied":"380506.69","Balance":"380506.69","Invoice_Applied_BCY":"380506.69","Invoice_Amount":"380506.69","Invoice_Amount_BCY":"380506.69","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34900","payment_id":"2340388000076383848","P_Date":"03-Jul-25","exchange_rate":"1.000000","amount":"81200.00","amount_bcy":"81200.00","reference_number":"A001JUL25","currency_code":"MXN","CustomerID_B":"2340388000001165626","Nombre_Cliente":"08313 TV AZTECA, S.A.B. DE C.V.","InvoicePayment_ID":"2340388000076383855","Invoice_Number":"2062385","Invoice_Applied":"81200.00","Balance":"81200.00","Invoice_Applied_BCY":"81200.00","Invoice_Amount":"81200.00","Invoice_Amount_BCY":"81200.00","Invoice_Exch_Rate":"1.000000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34929","payment_id":"2340388000076431444","P_Date":"29-Jul-25","exchange_rate":"18.726700","amount":"17696.34","amount_bcy":"331394.05","reference_number":"IN304JUL25","currency_code":"USD","CustomerID_B":"2340388000001247042","Nombre_Cliente":"16827 Albrecht Jung GmbH & Co. KG C\/O Dannemann, Siemsen, Bigler & Ipanema Moreira","InvoicePayment_ID":"2340388000076431495","Invoice_Number":"2059198","Invoice_Applied":"32.95","Balance":"32.95","Invoice_Applied_BCY":"617.04","Invoice_Amount":"32.95","Invoice_Amount_BCY":"670.82","Invoice_Exch_Rate":"20.358700","Tipo":"Pago","Batch":"71"}, {"payment_number":"34920","payment_id":"2340388000076446926","P_Date":"29-Jul-25","exchange_rate":"18.726700","amount":"645.44","amount_bcy":"12086.96","reference_number":"IN314JUL25","currency_code":"USD","CustomerID_B":"2340388000005389005","Nombre_Cliente":"09594 L.V.M.H. - Comptabilité fournisseurs","InvoicePayment_ID":"2340388000076446940","Invoice_Number":"2064127","Invoice_Applied":"425.00","Balance":"425.00","Invoice_Applied_BCY":"7958.85","Invoice_Amount":"425.00","Invoice_Amount_BCY":"7930.29","Invoice_Exch_Rate":"18.659500","Tipo":"Pago","Batch":"71"}, {"payment_number":"34929","payment_id":"2340388000076431444","P_Date":"29-Jul-25","exchange_rate":"18.726700","amount":"17696.34","amount_bcy":"331394.05","reference_number":"IN304JUL25","currency_code":"USD","CustomerID_B":"2340388000001247042","Nombre_Cliente":"16827 Albrecht Jung GmbH & Co. KG C\/O Dannemann, Siemsen, Bigler & Ipanema Moreira","InvoicePayment_ID":"2340388000076431510","Invoice_Number":"2057818","Invoice_Applied":"281.64","Balance":"281.64","Invoice_Applied_BCY":"5274.19","Invoice_Amount":"281.64","Invoice_Amount_BCY":"5754.83","Invoice_Exch_Rate":"20.433300","Tipo":"Pago","Batch":"71"}, {"payment_number":"34929","payment_id":"2340388000076431444","P_Date":"29-Jul-25","exchange_rate":"18.726700","amount":"17696.34","amount_bcy":"331394.05","reference_number":"IN304JUL25","currency_code":"USD","CustomerID_B":"2340388000001247042","Nombre_Cliente":"16827 Albrecht Jung GmbH & Co. KG C\/O Dannemann, Siemsen, Bigler & Ipanema Moreira","InvoicePayment_ID":"2340388000076431498","Invoice_Number":"2056629","Invoice_Applied":"3058.81","Balance":"3058.81","Invoice_Applied_BCY":"57281.42","Invoice_Amount":"3058.81","Invoice_Amount_BCY":"63122.52","Invoice_Exch_Rate":"20.636300","Tipo":"Pago","Batch":"71"}, {"payment_number":"34908","payment_id":"2340388000076418401","P_Date":"29-Jul-25","exchange_rate":"18.726700","amount":"12770.74","amount_bcy":"239153.82","reference_number":"IN318JUL25","currency_code":"USD","CustomerID_B":"2340388000005361393","Nombre_Cliente":"09773 D YOUNG & CO LLP (LONDON)","InvoicePayment_ID":"2340388000076418423","Invoice_Number":"2061592","Invoice_Applied":"2612.13","Balance":"2612.13","Invoice_Applied_BCY":"48916.57","Invoice_Amount":"2612.13","Invoice_Amount_BCY":"50602.97","Invoice_Exch_Rate":"19.372300","Tipo":"Pago","Batch":"71"}, {"payment_number":"34952","payment_id":"2340388000076414739","P_Date":"30-Jul-25","exchange_rate":"18.764200","amount":"1108.78","amount_bcy":"20805.37","reference_number":"IN326JUL25","currency_code":"USD","CustomerID_B":"2340388000001121174","Nombre_Cliente":"03673 MARSHALL, GERSTEIN & BORUN LLP","InvoicePayment_ID":"2340388000076414750","Invoice_Number":"2060588","Invoice_Applied":"586.50","Balance":"586.50","Invoice_Applied_BCY":"11005.20","Invoice_Amount":"586.50","Invoice_Amount_BCY":"11528.83","Invoice_Exch_Rate":"19.657000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34957","payment_id":"2340388000076472268","P_Date":"30-Jul-25","exchange_rate":"18.764200","amount":"2354.34","amount_bcy":"44177.31","reference_number":"IN323JUL25","currency_code":"USD","CustomerID_B":"2340388000057595074","Nombre_Cliente":"20696 THE J. PAUL GETTY TRUST C\/O WILSON SONSINI","InvoicePayment_ID":"2340388000076472290","Invoice_Number":"2063250","Invoice_Applied":"684.78","Balance":"684.78","Invoice_Applied_BCY":"12849.35","Invoice_Amount":"684.78","Invoice_Amount_BCY":"12849.90","Invoice_Exch_Rate":"18.765000","Tipo":"Pago","Batch":"71"}, {"payment_number":"34953","payment_id":"2340388000076414867","P_Date":"30-Jul-25","exchange_rate":"18.764200","amount":"1266.31","amount_bcy":"23761.29","reference_number":"IN327JUL25","currency_code":"USD","CustomerID_B":"2340388000001148314","Nombre_Cliente":"06435 GUCCIO GUCCI S.P.A.","InvoicePayment_ID":"2340388000076414874","Invoice_Number":"2061660","Invoice_Applied":"1266.31","Balance":"1266.31","Invoice_Applied_BCY":"23761.29","Invoice_Amount":"1266.31","Invoice_Amount_BCY":"24464.86","Invoice_Exch_Rate":"19.319800","Tipo":"Pago","Batch":"71"}, {"payment_number":"35013","payment_id":"2340388000076548578","P_Date":"31-Jul-25","exchange_rate":"18.796000","amount":"4923.09","amount_bcy":"92534.40","r "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Anio de vigencia."); $Resultado = json_encode($j_array); // echo $Resultado; return; } if($mesCata == "") { $j_array = array('code' => "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Mes de vigencia."); $Resultado = json_encode($j_array); // echo $Resultado; return; } if($tipoEnvio == "") { $j_array = array('code' => "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Tipo de Envio."); $Resultado = json_encode($j_array); // echo $Resultado; return; } if($csvFileName == "") { $j_array = array('code' => "400", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Nombre del Archivo CSV a procesar."); $Resultado = json_encode($j_array); // echo $Resultado; return $Resultado; } if($organi_id_ZB == "") { $j_array = array('code' => "306", "message" => "ERROR - [wsBalanzaComp_v14] Parametros incompletos para el Servicio Web, faltan el Organization ID de Books"); $Resultado = json_encode($j_array); // echo $Resultado; return $Resultado; } $dirBase = realpath("../"); ### DEFINICIÓN DE CONSTANTES ################################################### $SendaCVS = "archs_csv/"; $SendaXML = "archs_xml/"; $SendaZIP = "archs_zip/"; #---------------------------------------------------------------- # Creamos la conexión a la base de datos #---------------------------------------------------------------- $conn = mysqli_connect("127.0.0.1", "aptuslegal", "#Aptus2021#", "vendorbills"); if (!$conn) { echo "Error: No se pudo conectar a MySQL." . PHP_EOL; echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL; exit; } #---------------------------------------------------------------- # Traemos los valores de conexión utilizando el organizationId #---------------------------------------------------------------- $sql = 'SELECT * FROM conndetails WHERE organization_id = ' . $organi_id_ZB; if($result = $conn->query($sql)) { $row = $result->fetch_assoc(); } else exit('No se ejecuto la consulta'); #---------------------------------------------------------------- # Cerramos la conexión #---------------------------------------------------------------- mysqli_close($conn); #---------------------------------------------------------------- # Variables para Zoho Workdrive #---------------------------------------------------------------- $wdrv_parent_id = $row['zworkdrvbalcom_id']; $woa_RefreshToken = $row['zworkdrv_rtoken']; $woa_ClientId = $row['zworkdrvclient_id']; $woa_ClientSecret = $row['zworkdrvclient_secret']; $woa_RedirectUri = $row['RedirectUri']; $woa_AuthUrl = 'https://accounts.zoho.com/oauth/v2/token'; $woa_GrantType = "refresh_token"; #---------------------------------------------------------------- # RFC de la Organización #---------------------------------------------------------------- $regFeCa = $row['rfc']; #== Creación de la variable de tipo DOM, aquí se conforma el XML a timbrar posteriormente. $xml = new DOMdocument('1.0', 'UTF-8'); $root = $xml->createElement("BCE:Balanza"); $root = $xml->appendChild($root); #== Apertura, lectura y conversión de CSV a JSON. $fileName = $SendaCVS.$csvFileName; $csvToJson = csvToJson($fileName); $arrayJson = json_decode( $csvToJson, true ); // Invertimos el orden del arreglo para los calculos. $jsonArray = array_reverse($arrayJson, true); // Inicialización de variables $currentLevel1 = ''; $currentLevel2 = ''; $accumulators = [ 'level1' => ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0], 'level2' => ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0], 'level3' => ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0] ]; // Procesar cada cuenta foreach($jsonArray as $item => $value) { $codCue = substr($value['account_code'],0,3); if(!is_numeric($codCue)) continue; $parts = explode('-', $value['account_code']); $level1 = $parts[0]; $level2 = $parts[1]; $level3 = $parts[2]; // Determinar nivel de la cuenta if($level3 != '000') { // Nivel 3 (subcuenta) if($currentLevel2 != $level1.'-'.$level2) { // Nueva cuenta de nivel 2, reiniciar acumuladores $accumulators['level3'] = ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0]; $currentLevel2 = $level1.'-'.$level2; } // Acumular valores para nivel 3 $accumulators['level3']['saldoIni'] += floatval($value['opening_balance']); $accumulators['level3']['debe'] += floatval($value['debit_total']); $accumulators['level3']['haber'] += floatval($value['credit_total']); $accumulators['level3']['saldoFin'] += floatval($value['closing_balance']); // Actualizar arrayDetalle para esta cuenta updateArrayDetalle($arrayDetalle, $value['account_code'], $value); } elseif($level2 != '00') { // Nivel 2 (cuenta intermedia) if($currentLevel1 != $level1) { // Nueva cuenta de nivel 1, reiniciar acumuladores $accumulators['level2'] = ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0]; $currentLevel1 = $level1; } // Sumar acumulados de nivel 3 a nivel 2 $jsonArray[$item]['opening_balance'] = number_format($accumulators['level3']['saldoIni'], 2, '.', ''); $jsonArray[$item]['debit_total'] = number_format($accumulators['level3']['debe'], 2, '.', ''); $jsonArray[$item]['credit_total'] = number_format($accumulators['level3']['haber'], 2, '.', ''); $jsonArray[$item]['closing_balance'] = number_format($accumulators['level3']['saldoFin'], 2, '.', ''); // Acumular para nivel 2 (suma de sus subcuentas + su propio valor si tiene) $accumulators['level2']['saldoIni'] += $accumulators['level3']['saldoIni'] + floatval($value['opening_balance']); $accumulators['level2']['debe'] += $accumulators['level3']['debe'] + floatval($value['debit_total']); $accumulators['level2']['haber'] += $accumulators['level3']['haber'] + floatval($value['credit_total']); $accumulators['level2']['saldoFin'] += $accumulators['level3']['saldoFin'] + floatval($value['closing_balance']); // Reiniciar acumuladores de nivel 3 $accumulators['level3'] = ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0]; // Actualizar arrayDetalle updateArrayDetalle($arrayDetalle, $value['account_code'], $jsonArray[$item]); } else { // Nivel 1 (cuenta principal) // Sumar acumulados de nivel 2 a nivel 1 $jsonArray[$item]['opening_balance'] = number_format($accumulators['level2']['saldoIni'], 2, '.', ''); $jsonArray[$item]['debit_total'] = number_format($accumulators['level2']['debe'], 2, '.', ''); $jsonArray[$item]['credit_total'] = number_format($accumulators['level2']['haber'], 2, '.', ''); $jsonArray[$item]['closing_balance'] = number_format($accumulators['level2']['saldoFin'], 2, '.', ''); // Actualizar arrayDetalle updateArrayDetalle($arrayDetalle, $value['account_code'], $jsonArray[$item]); // Reiniciar acumuladores $accumulators['level2'] = ['saldoIni' => 0, 'debe' => 0, 'haber' => 0, 'saldoFin' => 0]; $currentLevel1 = ''; $currentLevel2 = ''; } } // Función auxiliar para actualizar arrayDetalle function updateArrayDetalle(&$arrayDetalle, $accountCode, $values) { $clave = array_search($accountCode, array_column($arrayDetalle, 'NumCta')); if ($clave !== false) { $arrayDetalle[$clave]['SaldoIni'] = round(floatval($values['opening_balance']), 2); $arrayDetalle[$clave]['Debe'] = round(floatval($values['debit_total']), 2); $arrayDetalle[$clave]['Haber'] = round(floatval($values['credit_total']), 2); $arrayDetalle[$clave]['SaldoFin'] = round(floatval($values['closing_balance']), 2); } } #== Se crea e inserta el primer nodo donde se declaran los namespaces ====== cargaAttNodo($root, array("Version"=>"1.3", "RFC"=>$regFeCa, "Mes"=>$mesCata, "Anio"=>$anioCat, "TipoEnvio"=>$tipoEnvio,"xsi:schemaLocation"=>"http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion/BalanzaComprobacion_1_3.xsd", "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "xmlns:BCE"=>"http://www.sat.gob.mx/esquemas/ContabilidadE/1_3/BalanzaComprobacion") ); $arrayToCSV = Array(); $arrayToCSV[] = array('NumCta','SaldoIni', 'Debe', 'Haber', 'SaldoFin', 'ClaveSat'); foreach($arrayDetalle as $item => $value) { if($value['ClaveSat'] != "") { $codCue = substr($value['NumCta'],0,3); if(is_numeric($codCue)) { $cuentas = $xml->createElement("BCE:Ctas"); $cuenta = $root->appendChild($cuentas); cargaAttNodo($cuenta, array( "SaldoFin"=>$value['SaldoFin'], "Haber"=>$value['Haber'], "Debe"=>$value['Debe'], "SaldoIni"=>$value['SaldoIni'], "NumCta"=>$value['NumCta'] ) ); // Creamos el array para el archivo CSV $arrayToCSV[] = array($value['NumCta'],$value['SaldoIni'], $value['Debe'], $value['Haber'], $value['SaldoFin'], $value['ClaveSat']); } } } #=== Se guarda el archivo .XML de la Balanza de Comprobación ======================= $xmlFilesPath = 'archs_xml/'; $csvFilesPath = 'archs_csv/'; $zipFilesPath = 'archs_zip/'; if($tipoEnvio == "N") { $file_name_with_full_path = $xmlFilesPath.$regFeCa.$anioCat.$mesCata."BN.xml"; $file_name_csv_full_path = $csvFilesPath.$regFeCa.$anioCat.$mesCata."BN.csv"; } else { $file_name_with_full_path = $xmlFilesPath.$regFeCa.$anioCat.$mesCata."BC.xml"; $file_name_csv_full_path = $csvFilesPath.$regFeCa.$anioCat.$mesCata."BC.csv"; } #=== Si existe el archivo CSV se elimina para crear el nuevo ======================= if(!file_exists($file_name_csv_full_path)){ unlink($file_name_csv_full_path); } $fp = fopen($file_name_csv_full_path, 'w'); foreach ($arrayToCSV as $fields) { fputcsv($fp, $fields); } fclose($fp); #=== Si existe el archivo XML se elimina para crear el nuevo ======================= if(!file_exists($file_name_with_full_path)){ unlink($file_name_with_full_path); } #=== Se guarda el archivo XML creado ======================= $cfdi = $xml->saveXML(); $xml->formatOutput = true; $xml->save($file_name_with_full_path); unset($xml); #=== Se dan permisos de escritura al archivo .xml. ========================= if($tipoEnvio == "N") { chmod($SendaXML.$regFeCa.$anioCat.$mesCata."BN.xml", 0777); } else { chmod($SendaXML.$regFeCa.$anioCat.$mesCata."BC.xml", 0777); } #=== Se procede a crear el archivo ZIP del Catalogo de Cuentas ========================= $zip = new ZipArchive(); $zipFilesPath = 'archs_zip/'; if($tipoEnvio == "N") { $nombreArchivoZip = $zipFilesPath.$regFeCa.$anioCat.$mesCata."BN.zip"; $nameArchZip = $regFeCa.$anioCat.$mesCata."BN.zip"; } else { $nombreArchivoZip = $zipFilesPath.$regFeCa.$anioCat.$mesCata."BC.zip"; $nameArchZip = $regFeCa.$anioCat.$mesCata."BC.zip"; } #=== Si existe el archivo ZIP se elimina para crear el nuevo ======================= if(!file_exists($nombreArchivoZip)){ unlink($nombreArchivoZip); } if (!$zip->open($nombreArchivoZip, ZipArchive::CREATE | ZipArchive::OVERWRITE)) { exit("Error abriendo ZIP en $nombreArchivoZip"); } $nombre = basename($file_name_with_full_path); $zip->addFile($file_name_with_full_path, $nombre); $resultado = $zip->close(); if (!$resultado) { // echo "Error creando archivo"; exit("Error creando archivo ZIP"); } #=== FIN DEL PROCESO ======================= $resultData = array( 'xmlFilesPath' => $xmlFilesPath, 'xmlFileName' => $regFeCa.$anioCat.$mesCata."BN.xml", 'csvFilesPath' => $csvFilesPath, 'csvFileName' => $regFeCa.$anioCat.$mesCata."BN.csv", 'zipFilesPath' => $zipFilesPath, 'zipFileName' => $regFeCa.$anioCat.$mesCata."BN.zip", 'totalCargos' => round($totalCargos,2), 'totalAbonos' => round($totalAbonos,2), 'totalCuentas' => $Account1count, 'cantidadDeudoras' => 333); if($tipoEnvio == "N") { $j_array = array('code' => "200", 'message' => 'Proceso de creacion de Archivo (NORMAL) de Balanza de Comprobacion fue exitoso', 'data' => $resultData); } else { $j_array = array('code' => "200", 'message' => "Proceso de creacion de Archivo (COMPLEMENTARIO) de Balanza de Comprobacion fue exitoso", 'data' => $resultData); } $Resultado = json_encode($j_array); echo $Resultado; return $Resultado; ### FUNCIONES DEL MÓDULO ######################################################### # Funcion para convertir CSV a formato JSON function csvToJson($fname) { if (!($fp = fopen($fname, 'r'))) { die("No se pudo abrir el arcivo CSV..."); } $key = fgetcsv($fp,"1024",","); $json = array(); while ($row = fgetcsv($fp,"1024",",")) { $json[] = array_combine($key, $row); } fclose($fp); return json_encode($json); } # Función que integra los nodos al archivo .XML function cargaAttNodo(&$nodo, $attr){ global $xmldoc; foreach ($attr as $key => $val){ $val = preg_replace('/\s\s+/', ' ', $val); $val = trim($val); if (strlen($val)>0){ $val = utf8_encode(str_replace("|","/",$val)); $nodo->setAttribute($key,$val); } } }