private APUnitTaxCalculationInfo prepareUnitCalcInfo(
      final Property property, final Floor floor, final BoundaryCategory boundaryCategory) {
    final APUnitTaxCalculationInfo unitTaxCalculationInfo = new APUnitTaxCalculationInfo();
    BigDecimal builtUpArea = BigDecimal.ZERO;
    BigDecimal floorMrv = BigDecimal.ZERO;
    BigDecimal floorBuildingValue = BigDecimal.ZERO;
    BigDecimal floorSiteValue = BigDecimal.ZERO;
    BigDecimal floorGrossArv = BigDecimal.ZERO;
    BigDecimal floorDepreciation = BigDecimal.ZERO;
    BigDecimal floorNetArv = BigDecimal.ZERO;

    builtUpArea = BigDecimal.valueOf(floor.getBuiltUpArea().getArea());
    floorMrv = calculateFloorMrv(builtUpArea, boundaryCategory);
    floorBuildingValue = calculateFloorBuildingValue(floorMrv);
    floorSiteValue = calculateFloorSiteValue(floorMrv);
    floorGrossArv = floorBuildingValue.multiply(new BigDecimal(12));
    floorDepreciation = calculateFloorDepreciation(floorGrossArv, floor);
    if (property.getPropertyDetail().isStructure())
      floorNetArv = floorGrossArv.subtract(floorDepreciation);
    else
      floorNetArv =
          floorSiteValue
              .multiply(new BigDecimal(12))
              .add(floorGrossArv.subtract(floorDepreciation));
    unitTaxCalculationInfo.setFloorNumber(FLOOR_MAP.get(floor.getFloorNo()));
    unitTaxCalculationInfo.setBaseRateEffectiveDate(boundaryCategory.getFromDate());
    unitTaxCalculationInfo.setBaseRate(
        BigDecimal.valueOf(boundaryCategory.getCategory().getCategoryAmount()));
    unitTaxCalculationInfo.setMrv(floorMrv);
    unitTaxCalculationInfo.setBuildingValue(floorBuildingValue);
    unitTaxCalculationInfo.setSiteValue(floorSiteValue);
    unitTaxCalculationInfo.setGrossARV(floorGrossArv);
    unitTaxCalculationInfo.setDepreciation(floorDepreciation);
    unitTaxCalculationInfo.setNetARV(floorNetArv.setScale(0, BigDecimal.ROUND_HALF_UP));
    return unitTaxCalculationInfo;
  }