dhammaorg / matta-nuu

1 stars 0 forks source link

Calculs des coûts et consommations #7

Open Vichearith opened 3 months ago

Vichearith commented 3 months ago

Description : Lister et implémenter divers calculs pour l'optimisation des coûts et consommations.

Tâches :

Priorité : Moyenne

Vichearith commented 2 months ago

J'ai essayé d'écrire la démarche de calcul nécessaire pour calculer la consommation des produits hors recette à partir des JSON présents sur Matta Nuu, avec l'exemple du "Café soluble Maxwell House Qté Filtre - pot de 200g". J'ai du mal à voir si c'est correct ou pas. Preneur de vos retours. @seballot @Focus-Pacifique

Démarche de Calcul Révisée

  1. Achats :

    • Utiliser les données de la table orders pour obtenir les quantités achetées.
  2. Stocks :

    • Utiliser les données de la table inventories pour obtenir les niveaux de stock initial et final.
  3. Sessions :

    • Utiliser les données de la table sessions pour calculer le nombre total d'étudiants et le nombre total de jours.
  4. Calcul de la consommation totale :

    • Consommation totale = Stock initial + Total des achats - Stock final
  5. Calcul de la consommation par jour pour 10 étudiants :

    • Consommation par étudiant par jour = Consommation totale / Total des étudiants
    • Consommation par jour pour 10 étudiants = Consommation par étudiant par jour * 10
  6. Calcul du coût pour 10 étudiants :

    • Assumer un coût unitaire fictif de 5 euros par pot.
    • Coût pour 10 étudiants = Consommation par jour pour 10 étudiants * Coût unitaire du produit

Script Ruby

Voici le script Ruby basé sur les données JSON fournies, utilisant les mêmes étapes de calcul que celles utilisées dans le script Python.

require 'json'

# Charger les données JSON
orders = JSON.parse(File.read('/mnt/data/orders.json'))
inventories = JSON.parse(File.read('/mnt/data/inventories.json'))
sessions = JSON.parse(File.read('/mnt/data/sessions.json'))
products = JSON.parse(File.read('/mnt/data/products.json'))

# Identification du produit
product_id = 424
product_name = "Café soluble Maxwell House Qté Filtre - pot de 200g"
product_price = 5.0  # Assumer un prix fictif de 5 euros par pot

# Étape 1 : Quantité achetée
total_purchases = orders.reduce(0) do |sum, order|
  if order['values'] && order['values'][product_id.to_s] && order['values'][product_id.to_s]['value']
    sum + order['values'][product_id.to_s]['value']
  else
    sum
  end
end

# Étape 2 : Stock initial et final
initial_stock = inventories.reduce(0) do |sum, inventory|
  if inventory['values'] && inventory['values'][product_id.to_s] && inventory['values'][product_id.to_s]['amount']
    sum + inventory['values'][product_id.to_s]['amount']
  else
    sum
  end
end
final_stock = initial_stock  # Hypothèse basée sur les données disponibles

# Étape 3 : Nombre total d'étudiants et nombre total de jours
total_students = 0
total_days = 0

sessions.each do |session|
  session['events'].each do |event|
    days = event['days'] || []
    total_days += days.size
    total_students += days.size * 10  # Valeur fictive de 10 étudiants par jour
  end
end

# Calcul de la consommation
total_consumed = total_purchases + initial_stock - final_stock
consumption_per_student_per_day = total_consumed.to_f / total_students
consumption_per_day_for_10_students = consumption_per_student_per_day * 10

# Étape 5 : Calcul du coût pour 10 étudiants
cost_for_10_students = consumption_per_day_for_10_students * product_price

puts "Total des achats : #{total_purchases} pots"
puts "Stock initial : #{initial_stock} pots"
puts "Stock final : #{final_stock} pots"
puts "Consommation totale : #{total_consumed} pots"
puts "Nombre total d'étudiants : #{total_students}"
puts "Nombre total de jours : #{total_days}"
puts "Consommation par jour pour 10 étudiants : #{consumption_per_day_for_10_students} pots"
puts "Coût pour 10 étudiants par jour : #{cost_for_10_students} euros"
seballot commented 2 months ago

Yop !

Chaud le Eric ! je savais pas que tu codais du ruby :)

total_purchases c'est bon. Juste quand implémenté de manière générique dans Matta-Nuu il faudra prendre en compte le fait qu'on peut convertir pendant l'order l'unité du produit : i.e manager son café en kg, et dans la commande convertir en pot de 200g. Y'a une config sur le produit pour ça

initial_stock ça c'est pas correct, car tu somme tous les inventaires fait (faut prend juste ceux fait au jour "initial stock") et tu ne prend pas en compte la valeur session.stocks[inital_stock][café soluble]. Pareil pour le stock final.

Mais pourquoi faire ce script externe à partir des données JSON plutot que le faire dans Matta-Nuu, ou y'a déjà tout un tas de helper pour le calcul des stocks/achats/inventaires? c'était juste pour tester?

Vichearith commented 2 months ago

C'est ChatGPT ;) Je l'ai pas fait dans Matta-Nuu car je n'ai pas creusé le code existant plus que ça, c'était plutôt pour tester et essayer de filer un petit coup de main sur le sujet

Focus-Pacifique commented 2 months ago

J'ai commencé la semaine dernière à m'occuper des prix et coûts. C'est en cours

ousabd commented 5 days ago

Question coûts, le plus important pour l'intendance est de visualiser le coût prévisionnel d'une commande lors de l'édition du bon de commande, afin que l'on puisse l'ajuster et s'assurer d'atteindre le franco. Cette information n'a pas besoin d'apparaître dans le pdf.