// Path: production-persistence/src/main/java/entities/ShortageEntity.java
// public class ShortageEntity {
//     private String refNo;
//     private LocalDate found;
//     private long missing;
//     private LocalDate atDay;
// 
//     public ShortageEntity() {
//     }
// 
//     public String getRefNo() {
//         return this.refNo;
//     }
// 
//     public LocalDate getFound() {
//         return this.found;
//     }
// 
//     public long getMissing() {
//         return this.missing;
//     }
// 
//     public LocalDate getAtDay() {
//         return this.atDay;
//     }
// 
//     public void setRefNo(String refNo) {
//         this.refNo = refNo;
//     }
// 
//     public void setFound(LocalDate found) {
//         this.found = found;
//     }
// 
//     public void setMissing(long missing) {
//         this.missing = missing;
//     }
// 
//     public void setAtDay(LocalDate atDay) {
//         this.atDay = atDay;
//     }
// 
//     public boolean equals(Object o) {
//         if (o == this) return true;
//         if (!(o instanceof ShortageEntity)) return false;
//         final ShortageEntity other = (ShortageEntity) o;
//         if (!other.canEqual((Object) this)) return false;
//         final Object this$refNo = this.getRefNo();
//         final Object other$refNo = other.getRefNo();
//         if (this$refNo == null ? other$refNo != null : !this$refNo.equals(other$refNo)) return false;
//         final Object this$found = this.getFound();
//         final Object other$found = other.getFound();
//         if (this$found == null ? other$found != null : !this$found.equals(other$found)) return false;
//         if (this.getMissing() != other.getMissing()) return false;
//         final Object this$atDay = this.getAtDay();
//         final Object other$atDay = other.getAtDay();
//         if (this$atDay == null ? other$atDay != null : !this$atDay.equals(other$atDay)) return false;
//         return true;
//     }
// 
//     public int hashCode() {
//         final int PRIME = 59;
//         int result = 1;
//         final Object $refNo = this.getRefNo();
//         result = result * PRIME + ($refNo == null ? 43 : $refNo.hashCode());
//         final Object $found = this.getFound();
//         result = result * PRIME + ($found == null ? 43 : $found.hashCode());
//         final long $missing = this.getMissing();
//         result = result * PRIME + (int) ($missing >>> 32 ^ $missing);
//         final Object $atDay = this.getAtDay();
//         result = result * PRIME + ($atDay == null ? 43 : $atDay.hashCode());
//         return result;
//     }
// 
//     protected boolean canEqual(Object other) {
//         return other instanceof ShortageEntity;
//     }
// 
//     public String toString() {
//         return "entities.ShortageEntity(refNo=" + this.getRefNo() + ", found=" + this.getFound() + ", missing=" + this.getMissing() + ", atDay=" + this.getAtDay() + ")";
//     }
// }
// 
// Path: production-persistence/src/main/java/enums/DeliverySchema.java
// public enum DeliverySchema {
//     atDayStart, every3hours, tillEndOfDay, duringNightShift
// }
// 
// Path: production-api/src/main/java/external/CurrentStock.java
// public class CurrentStock {
//     private long level;
//     private long locked;
// 
//     public CurrentStock(long level, long locked) {
//         this.level = level;
//         this.locked = locked;
//     }
// 
//     public long getLevel() {
//         return this.level;
//     }
// 
//     public long getLocked() {
//         return this.locked;
//     }
// 
//     public boolean equals(Object o) {
//         if (o == this) return true;
//         if (!(o instanceof CurrentStock)) return false;
//         final CurrentStock other = (CurrentStock) o;
//         if (this.getLevel() != other.getLevel()) return false;
//         if (this.getLocked() != other.getLocked()) return false;
//         return true;
//     }
// 
//     public int hashCode() {
//         final int PRIME = 59;
//         int result = 1;
//         final long $level = this.getLevel();
//         result = result * PRIME + (int) ($level >>> 32 ^ $level);
//         final long $locked = this.getLocked();
//         result = result * PRIME + (int) ($locked >>> 32 ^ $locked);
//         return result;
//     }
// 
//     public String toString() {
//         return "external.CurrentStock(level=" + this.getLevel() + ", locked=" + this.getLocked() + ")";
//     }
// }


import entities.ShortageEntity;
import enums.DeliverySchema;
import external.CurrentStock;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import java.time.LocalDate;
import java.util.LinkedList;
import java.util.List;
package shortage.prediciton;



public class ShortagePredictionAlgo {
    private CurrentStock stock;
    private List<LocalDate> dates;
    private ProductionOutputs outputs;
    private Demands demandsPerDay;

// Path: production-persistence/src/main/java/entities/ShortageEntity.java
// public class ShortageEntity {
//     private String refNo;
//     private LocalDate found;
//     private long missing;
//     private LocalDate atDay;
// 
//     public ShortageEntity() {
//     }
// 
//     public String getRefNo() {
//         return this.refNo;
//     }
// 
//     public LocalDate getFound() {
//         return this.found;
//     }
// 
//     public long getMissing() {
//         return this.missing;
//     }
// 
//     public LocalDate getAtDay() {
//         return this.atDay;
//     }
// 
//     public void setRefNo(String refNo) {
//         this.refNo = refNo;
//     }
// 
//     public void setFound(LocalDate found) {
//         this.found = found;
//     }
// 
//     public void setMissing(long missing) {
//         this.missing = missing;
//     }
// 
//     public void setAtDay(LocalDate atDay) {
//         this.atDay = atDay;
//     }
// 
//     public boolean equals(Object o) {
//         if (o == this) return true;
//         if (!(o instanceof ShortageEntity)) return false;
//         final ShortageEntity other = (ShortageEntity) o;
//         if (!other.canEqual((Object) this)) return false;
//         final Object this$refNo = this.getRefNo();
//         final Object other$refNo = other.getRefNo();
//         if (this$refNo == null ? other$refNo != null : !this$refNo.equals(other$refNo)) return false;
//         final Object this$found = this.getFound();
//         final Object other$found = other.getFound();
//         if (this$found == null ? other$found != null : !this$found.equals(other$found)) return false;
//         if (this.getMissing() != other.getMissing()) return false;
//         final Object this$atDay = this.getAtDay();
//         final Object other$atDay = other.getAtDay();
//         if (this$atDay == null ? other$atDay != null : !this$atDay.equals(other$atDay)) return false;
//         return true;
//     }
// 
//     public int hashCode() {
//         final int PRIME = 59;
//         int result = 1;
//         final Object $refNo = this.getRefNo();
//         result = result * PRIME + ($refNo == null ? 43 : $refNo.hashCode());
//         final Object $found = this.getFound();
//         result = result * PRIME + ($found == null ? 43 : $found.hashCode());
//         final long $missing = this.getMissing();
//         result = result * PRIME + (int) ($missing >>> 32 ^ $missing);
//         final Object $atDay = this.getAtDay();
//         result = result * PRIME + ($atDay == null ? 43 : $atDay.hashCode());
//         return result;
//     }
// 
//     protected boolean canEqual(Object other) {
//         return other instanceof ShortageEntity;
//     }
// 
//     public String toString() {
//         return "entities.ShortageEntity(refNo=" + this.getRefNo() + ", found=" + this.getFound() + ", missing=" + this.getMissing() + ", atDay=" + this.getAtDay() + ")";
//     }
// }
// 
// Path: production-persistence/src/main/java/enums/DeliverySchema.java
// public enum DeliverySchema {
//     atDayStart, every3hours, tillEndOfDay, duringNightShift
// }
// 
// Path: production-api/src/main/java/external/CurrentStock.java
// public class CurrentStock {
//     private long level;
//     private long locked;
// 
//     public CurrentStock(long level, long locked) {
//         this.level = level;
//         this.locked = locked;
//     }
// 
//     public long getLevel() {
//         return this.level;
//     }
// 
//     public long getLocked() {
//         return this.locked;
//     }
// 
//     public boolean equals(Object o) {
//         if (o == this) return true;
//         if (!(o instanceof CurrentStock)) return false;
//         final CurrentStock other = (CurrentStock) o;
//         if (this.getLevel() != other.getLevel()) return false;
//         if (this.getLocked() != other.getLocked()) return false;
//         return true;
//     }
// 
//     public int hashCode() {
//         final int PRIME = 59;
//         int result = 1;
//         final long $level = this.getLevel();
//         result = result * PRIME + (int) ($level >>> 32 ^ $level);
//         final long $locked = this.getLocked();
//         result = result * PRIME + (int) ($locked >>> 32 ^ $locked);
//         return result;
//     }
// 
//     public String toString() {
//         return "external.CurrentStock(level=" + this.getLevel() + ", locked=" + this.getLocked() + ")";
//     }
// }


// Path: production-impl/src/main/java/shortage/prediciton/ShortagePredictionAlgo.java
import entities.ShortageEntity;
import enums.DeliverySchema;
import external.CurrentStock;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import java.time.LocalDate;
import java.util.LinkedList;
import java.util.List;

package shortage.prediciton;



public class ShortagePredictionAlgo {
    private CurrentStock stock;
    private List<LocalDate> dates;
    private ProductionOutputs outputs;
    private Demands demandsPerDay;

    public ShortagePredictionAlgo(CurrentStock stock, List<LocalDate> dates, ProductionOutputs outputs, Demands demandsPerDay) {