Register program project error i cant see

Tell us what’s happening:
I have been working on this for two days I changed my program completely because the first time i wrote my code it would not even work no idea why so I watched a tutorial and worked side by side with it I got the most i could from it. So this is what i got now it clears three of the six problems on the bottom. The three it doesn’t come back is open and closed which didnt make sense because insufficent works just fine is it that my computers too old… ugh let me step back and come back to it tomorrow any feed back is appreciated thank you in advance ppl…

Your code so far


// VALUE IS IN PENNIES TO AVOID ROUNDING ERRORS.
const BILLS = [
 ["ONE HUNDRED", 10000],
 ["TWENTY", 2000],
 ["TEN", 1000],
 ["FIVE", 500],
 ["ONE", 100],
 ["QUARTER", 25],
 ["DIME", 10],
 ["NICKEL", 5],
 ["PENNY", 1],
];

// RETURNS TRUE IF THEIRS CORRECT CHANGE FOR BILL IN CASH DRAW
function iHaveChange (billsValue, myBILLSchange, requiredChange) {
 return myBILLSchange >= billsValue && requiredChange - billsValue >= 0;
}

function iHaveNoBILLS (myCash) {
 let iHaveChange = false;
 Object.keys(myCash).forEach(key => {
   if (myCash[key] > 0) {
     iHaveChange = true;
   }
 });
 return iHaveChange;
}

// CONVERTS ["PENNY", 1.01] TO ["PENNY", 101]
function cidToObject (cid) {
 const myCash = {};
 cid.forEach(money => {
   myCash[money[0]] = parseInt(money[1] * 100);
 });
 return myCash;
}
// RETURNS CORRECT CHANGE FOR GIVEN PURCHASE
function checkCashRegister (price, cash, cid) {
 let requiredChange = cash * 100 - price * 100;
 let myCash = cidToObject(cid);
 let clientCash = {};
 let i = 0;

 // NO CHANGE? DONE.
 if (requiredChange === 0) {
   return {
     status: "CLOSED",
     change: cid
   };
 }

 // GIVE CHANGE IN DESCENDING ORDER FROM BIG -> TO SMALL BILLS
 while(i < BILLS.length && requiredChange > 0) {
   let billsName = BILLS[i][0];
   let billsValue = BILLS[i][i];

   if (iHaveChange(billsValue, myCash[billsName], requiredChange)) { 
     clientCash[billsName] = 0;

     while(iHaveChange(billsValue, myCash[billsName], requiredChange)) {
       clientCash[billsName] += billsValue / 100;
       myCash[billsName] = parseInt(myCash[billsName] - billsValue);
       requiredChange -= billsValue;
     }
   }
   i++;
 }

 // HANDLE RETURNS OBJECT
 if (requiredChange === 0) {
   if (iHaveNoBILLS(myCash)) {
     return {
       status: "CLOSED",
       change: cid
     };
   }
   return {
    status: "OPEN",
    change: Object.keys(clientCash).map(key => {
      let arr = [key, clientCash[key]];
      return arr;
    })}; 
}
return {
  status: "INSUFFICIENT_FUNDS",
  change: []
};
}  

checkCashRegister(19.5, 20, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 OPR/66.0.3515.44 (Edition Campaign 34).

Challenge: Cash Register

Link to the challenge: