<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<h4>Debts(Total: {{debtTotal | number:numberFormat}})</h4>
<fims-case-credit-factor-form #debtForm [factorName]="'DEBT'" [factors]="debts"></fims-case-credit-factor-form>
<h4>Incomes(Total: {{incomeTotal | number:numberFormat}})</h4>
<fims-case-credit-factor-form #incomeForm [factorName]="'INCOME'" [factors]="incomeSources"></fims-case-credit-factor-form>
<h3>Ratio</h3>
{{ratio | number:numberFormat}}
