<?php
/*
🎯 OBJETIVO:
Escribir una función en PHP puro que procese un listado de órdenes y devuelva
un reporte resumido por categorías, con los montos totales ya calculados.
⚠️ REGLAS IMPORTANTES DEL EJERCICIO:
- Solo puedes usar PHP puro (sin librerías ni frameworks).
- NO puedes modificar el arreglo $orders que se proporciona.
- NO se permite usar IA, buscar en Google ni consultar navegadores.
- Solo puedes consultar la documentación oficial de PHP.
✅ INSTRUCCIONES PASO A PASO:
1. Modifica la función llamada `processSales($orders)` que reciba el arreglo de órdenes.
2. La función debe devolver un arreglo asociativo con los resultados procesados.
3. Al final del script, se imprime el resultado en formato JSON legible (eso ya está hecho abajo).
📋 REGLAS DE NEGOCIO (LO QUE DEBE HACER TU FUNCIÓN):
1. FILTRAR ÓRDENES:
- Solo se procesan las órdenes cuyo 'status' sea exactamente 'completed'.
- Las demás se ignoran por completo.
2. CALCULAR EL TOTAL NETO DE CADA ORDEN:
- Toma el campo 'total' de la orden.
- Si el total es mayor a 1000, aplica un descuento del 10% (multiplica por 0.9).
- Si es menor o igual a 1000, no hay descuento (se queda igual).
- Al resultado anterior (con o sin descuento) le sumas un impuesto del 16%
(multiplica por 1.16 para obtener el neto final).
- Ejemplo rápido: Para total = 1200 → descuento 10% → 1080 → +16% = 1252.80
3. DISTRIBUIR ESE NETO ENTRE LOS ÍTEMS DE LA ORDEN:
- Una vez que tengas el neto de la orden (después de descuento e impuesto),
debes repartirlo proporcionalmente entre los productos (items) que la componen.
- La proporción se basa en el precio original de cada producto respecto al total de la orden.
- Fórmula para cada ítem:
monto_item = neto_orden * (precio_item / total_orden)
- "total_orden" es el campo 'total' que aparece en la orden (NO la suma manual de precios).
- Redondea cada monto a 2 decimales.
📌 Ejemplo para entenderlo mejor:
- Orden con total 1200, dos ítems: Laptop (1000) y Mouse (200).
- Neto calculado antes: 1252.80
- Proporción Laptop: 1252.80 * (1000 / 1200) = 1044.00
- Proporción Mouse: 1252.80 * (200 / 1200) = 208.80
- Ambos montos suman exactamente el neto (1044 + 208.80 = 1252.80).
4. AGRUPAR POR CATEGORÍA:
- Suma todos los montos distribuidos que pertenezcan a la misma categoría
(campo 'category' de cada ítem).
- En el ejemplo, ambos ítems son "electronics", así que la categoría
"electronics" acumularía 1252.80 desde esta orden. Luego se suma lo que
venga de otras órdenes.
5. ORDENAR EL RESULTADO:
- El arreglo final debe ordenarse de mayor a menor monto total por categoría.
6. FORMATO DE DINERO:
- Todos los valores monetarios deben estar redondeados a 2 decimales.
- Al usar json_encode con JSON_PRETTY_PRINT se verán con decimales correctamente.
📤 SALIDA ESPERADA (ESTRUCTURA):
Después de procesar los datos de ejemplo, el resultado debe ser este:
{
"electronics": 2818.80,
"furniture": 928.00
}
💡 NOTA: Los valores de salida se calculan aplicando todas las reglas anteriores
a las órdenes de ejemplo. Puedes verificar paso a paso para estar seguro.
================================================================================
*/
$orders = [
[
'id' => 1,
'status' => 'completed',
'total' => 1200,
'items' => [
['name' => 'Laptop', 'category' => 'electronics', 'price' => 1000],
['name' => 'Mouse', 'category' => 'electronics', 'price' => 200]
]
],
[
'id' => 2,
'status' => 'pending',
'total' => 500,
'items' => [
['name' => 'Chair', 'category' => 'furniture', 'price' => 500]
]
],
[
'id' => 3,
'status' => 'completed',
'total' => 800,
'items' => [
['name' => 'Desk', 'category' => 'furniture', 'price' => 800]
]
],
[
'id' => 4,
'status' => 'completed',
'total' => 1500,
'items' => [
['name' => 'Phone', 'category' => 'electronics', 'price' => 1500]
]
]
];
// ============================================================================
// ESPACIO PARA ESCRIBIR SU LÓGICA AQUÍ
// ============================================================================
function processSales($orders)
{
if($orders == 'completed')
{
if($orders->total > 1000)
{
$nvototal = $orders->total * 0.9;
}
elseif ($orders->total <= 1000)
{
$nvototal = $orders->total;
}
$neto = $nvototal * 1.16;
$monto_item = $neto * ($orders->price / $nvototal);
}
return ;
}
// ============================================================================
// EJECUCIÓN Y VALIDACIÓN (No modificar)
// ============================================================================
$resultado = processSales($orders);
echo json_encode($resultado, JSON_PRETTY_PRINT) . PHP_EOL;
To embed this project on your website, copy the following code and paste it into your website's HTML: