diff --git a/README.md b/README.md
index 177f908..793ecd5 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ This application is able to perform calculations with regards to taxes and
profit from FII and Stocks transactions in the [B3](http://www.b3.com.br/en_us/)
.
-This system is up and running in [here](http://jaimedantas.com/b3).
+This system is up and running [here](http://jaimedantas.com/b3).
## Index
@@ -21,7 +21,7 @@ This system is up and running in [here](http://jaimedantas.com/b3).
* Stock Tax Calculator microservice (in progress..)
* [Frontend](fii-tax-calculator/README.md)
-#### Tecnologies:
+#### Tecnologies
###### Backend:
* Spring Boot 2.2.2
* Swagger 2
@@ -31,17 +31,17 @@ This system is up and running in [here](http://jaimedantas.com/b3).
* HTML 5
* JavaScript
-## Documentation:
+## Documentation
You can browser through the Swagger documentation for this API in the link below.
`http://jaimedantas.com/fii`
## Versioning
This project uses [GitHub](https://github.com/jaimedantas/fii-tax-calculator) for versioning.
- For the versions available, see the [tags on this repository]().
+ For the versions available, see the [tags on this repository](https://github.com/jaimedantas/b3-tax-calculator/tags).
## Author
-* [Jaime Dantas](https://jaimedantas.com/) - _Initial work, Development, Test, Documentation_
+* [Jaime Dantas](https://jaimedantas.com/) - _Initial work, development, test, documentation_
See also the list of [contributors](CONTRIBUTORS.txt) who participated in this project.
diff --git a/fii-tax-calculator/README.md b/fii-tax-calculator/README.md
index 54069b5..2ffb3bf 100644
--- a/fii-tax-calculator/README.md
+++ b/fii-tax-calculator/README.md
@@ -11,31 +11,31 @@ This application is able to perform calculations with regards to taxes and
profit from a FII transaction in the [B3](http://www.b3.com.br/en_us/)
.
-This microservice is up and running in [here](http://jaimedantas.com/b3).
+This microservice is up and running [here](http://jaimedantas.com/b3).
-###### Tecnologies:
+###### Tecnologies
* Spring Boot 2.2.2
* Swagger 2
* JUnit
-## Documentation:
+## Documentation
You can browser through the Swagger documentation for this API in the link below.
`http://jaimedantas.com/fii`
-## Build:
+## Build
```
mvn clean install
```
-## Run:
+## Run
```
java -jar fii-tax-calculator-0.0.1-SNAPSHOT.jar
```
## Usege
-This microservice will run on port 8081 by default.
+This microservice will run in the port 8081 by default.
To access the swagger interface, go to:
```
http://localhost:8081/swagger-ui.html
diff --git a/fii-tax-calculator/pom.xml b/fii-tax-calculator/pom.xml
index ef57c58..8e14cf2 100644
--- a/fii-tax-calculator/pom.xml
+++ b/fii-tax-calculator/pom.xml
@@ -10,7 +10,7 @@
com.jaimedantas
fii-tax-calculator
- 0.0.1-SNAPSHOT
+ 0.0.2-SNAPSHOT
fii-tax-calculator
Tax calculator for FII in Brazil
@@ -60,6 +60,12 @@
+
+ junit
+ junit
+ test
+
+
diff --git a/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculator.java b/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculator.java
index ddbd0ec..75476ce 100644
--- a/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculator.java
+++ b/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculator.java
@@ -14,20 +14,26 @@ public FiiTax calculeFiiTaxes(FiiData fiiData){
FiiTax result = new FiiTax();
BigDecimal netProfitValue = CalculationEngine.subtract(fiiData.getTotalValueSold(), fiiData.getTotalValueBought());
- BigDecimal emolumentosTaxes = CalculationEngine.multiply(fiiData.getTotalValueBought(),B3Taxes.EMOLUMENTOS.atomicValue);
- BigDecimal liquidacaoTaxes = CalculationEngine.multiply(fiiData.getTotalValueBought(),B3Taxes.LIQUIDACAO.atomicValue);
- BigDecimal IRRFTaxes = CalculationEngine.multiply(fiiData.getTotalValueBought(),B3Taxes.IRRF.atomicValue);
- BigDecimal totalTaxes = CalculationEngine.add(emolumentosTaxes,liquidacaoTaxes, IRRFTaxes);
+
+ BigDecimal emolumentosTaxesBuy = CalculationEngine.multiply(fiiData.getTotalValueBought(),B3Taxes.EMOLUMENTOS.atomicValue);
+ BigDecimal liquidacaoTaxesBuy = CalculationEngine.multiply(fiiData.getTotalValueBought(),B3Taxes.LIQUIDACAO.atomicValue);
+ BigDecimal emolumentosTaxesSell = CalculationEngine.multiply(fiiData.getTotalValueSold(),B3Taxes.EMOLUMENTOS.atomicValue);
+ BigDecimal liquidacaoTaxesSell = CalculationEngine.multiply(fiiData.getTotalValueSold(),B3Taxes.LIQUIDACAO.atomicValue);
+ BigDecimal IRRFTaxes = CalculationEngine.multiply(fiiData.getTotalValueSold(),B3Taxes.IRRF.atomicValue);
+
+ BigDecimal totalTaxes = CalculationEngine.add(emolumentosTaxesBuy,liquidacaoTaxesBuy, IRRFTaxes,
+ emolumentosTaxesSell, liquidacaoTaxesSell);
BigDecimal realProfitAfterTaxes = CalculationEngine.subtract(netProfitValue, totalTaxes);
BigDecimal fixTax = CalculationEngine.multiply(realProfitAfterTaxes,B3Taxes.FIX_TAX.atomicValue);
- result.setEmolumentosFee(emolumentosTaxes);
- result.setLiquidacaoFee(liquidacaoTaxes);
+ result.setEmolumentosFee(CalculationEngine.add(emolumentosTaxesBuy,emolumentosTaxesSell));
+ result.setLiquidacaoFee(CalculationEngine.add(emolumentosTaxesBuy,liquidacaoTaxesSell));
result.setIRRFFee(IRRFTaxes);
result.setFixedTax(fixTax);
BigDecimal totalProfit = CalculationEngine.subtract(netProfitValue, totalTaxes, fixTax);
- BigDecimal totalProfitPercentage = CalculationEngine.divide(totalProfit, fiiData.getTotalValueBought());
+ BigDecimal totalProfitPercentage = CalculationEngine.divide(totalProfit, CalculationEngine.add(fiiData.getTotalValueBought(),
+ liquidacaoTaxesBuy, emolumentosTaxesBuy));
result.setTotalTaxes(totalTaxes);
result.setTotalProfitValue(totalProfit);
diff --git a/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/exception/RestExceptionHandler.java b/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/exception/RestExceptionHandler.java
index fb035d3..f9b0c07 100644
--- a/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/exception/RestExceptionHandler.java
+++ b/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/exception/RestExceptionHandler.java
@@ -5,18 +5,13 @@
import org.slf4j.LoggerFactory;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
-import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import com.jaimedantas.fiitaxcalculator.model.Error;
-import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
-import javax.servlet.http.HttpServletRequest;
-
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
diff --git a/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngine.java b/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngine.java
index e3ce190..1898985 100644
--- a/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngine.java
+++ b/fii-tax-calculator/src/main/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngine.java
@@ -21,6 +21,10 @@ public static BigDecimal add(BigDecimal arg1, BigDecimal arg2, BigDecimal arg3,
return add(add(arg1, arg2, arg3), arg4);
}
+ public static BigDecimal add(BigDecimal arg1, BigDecimal arg2, BigDecimal arg3, BigDecimal arg4, BigDecimal arg5){
+ return add(add(arg1, arg2, arg3, arg4), arg4, arg5);
+ }
+
public static BigDecimal subtract(BigDecimal arg1, BigDecimal arg2){
return arg1.subtract(arg2).setScale(2, RoundingMode.HALF_UP);
}
diff --git a/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculatorTest.java b/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculatorTest.java
index 0ef84f5..0bfb364 100644
--- a/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculatorTest.java
+++ b/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/business/TaxCalculatorTest.java
@@ -22,8 +22,8 @@ void shouldCalculateTaxForFiiXPLG11() {
fiiData.setTotalValueSold(new BigDecimal("3013.71"));
BigDecimal expectedTotalProfitPercentage = new BigDecimal("0.34");
- BigDecimal expectedTotalProfitValue = new BigDecimal("713.55");
- BigDecimal expectedTDarf = new BigDecimal("178.39");
+ BigDecimal expectedTotalProfitValue = new BigDecimal("712.66");
+ BigDecimal expectedTDarf = new BigDecimal("178.17");
TaxCalculator taxCalculator = new TaxCalculator();
@@ -44,12 +44,13 @@ void shouldCalculateTaxForFiiXPML11() {
fiiData.setQuantityBought(47);
fiiData.setQuantitySold(47);
fiiData.setSoldPriceUnit(new BigDecimal("138.99"));
- fiiData.setTotalValueBought(new BigDecimal("5168.59"));
+ fiiData.setTotalValueBought(new BigDecimal("5295.93"));
fiiData.setTotalValueSold(new BigDecimal("6532.53"));
- BigDecimal expectedTotalProfitPercentage = new BigDecimal("0.21");
- BigDecimal expectedTotalProfitValue = new BigDecimal("1089.64");
- BigDecimal expectedTDarf = new BigDecimal("272.41");
+ BigDecimal expectedTotalProfitPercentage = new BigDecimal("0.19");
+ BigDecimal expectedTotalProfitValue = new BigDecimal("985.82");
+ //darf xpml: 246.93
+ BigDecimal expectedTDarf = new BigDecimal("246.46");
TaxCalculator taxCalculator = new TaxCalculator();
diff --git a/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/controller/RestControllerTest.java b/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/controller/RestControllerTest.java
new file mode 100644
index 0000000..9ff1181
--- /dev/null
+++ b/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/controller/RestControllerTest.java
@@ -0,0 +1,45 @@
+package com.jaimedantas.fiitaxcalculator.controller;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.jaimedantas.fiitaxcalculator.model.FiiData;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+
+import java.math.BigDecimal;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@RunWith(SpringRunner.class)
+@WebMvcTest(RestController.class)
+public class RestControllerTest {
+
+ @Autowired
+ private MockMvc mvc;
+
+ @Test
+ public void shoudCallApiAndReturnSucess() throws Exception {
+
+ FiiData imput = new FiiData();
+ imput.setTotalValueSold(new BigDecimal("9029"));
+ imput.setTotalValueBought(new BigDecimal("1029"));
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ String json = objectMapper.writeValueAsString(imput);
+
+ this.mvc.perform(post("/tax/fii")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(json))
+ .andExpect(status().is2xxSuccessful());
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngineTest.java b/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngineTest.java
index 8d91403..1ca6375 100644
--- a/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngineTest.java
+++ b/fii-tax-calculator/src/test/java/com/jaimedantas/fiitaxcalculator/ultils/CalculationEngineTest.java
@@ -31,6 +31,68 @@ void shouldDivideTwoBigDecimals() {
assertEquals(expected, result);
}
+ @Test
+ void shouldAddThreeBigDecimals() {
+ BigDecimal num1 = new BigDecimal("10.00");
+ BigDecimal num2 = new BigDecimal("20.00");
+ BigDecimal num3 = new BigDecimal("21943.00");
+ BigDecimal expected = new BigDecimal("21973.00");
+
+ BigDecimal result = CalculationEngine.add(num1, num2, num3);
+
+ assertEquals(expected, result);
+ }
+
+ @Test
+ void shouldAddFourBigDecimals() {
+ BigDecimal num1 = new BigDecimal("10.00");
+ BigDecimal num2 = new BigDecimal("20.00");
+ BigDecimal num3 = new BigDecimal("2199.00");
+ BigDecimal num4 = new BigDecimal("329.00");
+ BigDecimal expected = new BigDecimal("2558.00");
+
+ BigDecimal result = CalculationEngine.add(num1, num2, num3, num4);
+
+ assertEquals(expected, result);
+ }
+
+ @Test
+ void shouldAddFiveBigDecimals() {
+ BigDecimal num1 = new BigDecimal("10.00");
+ BigDecimal num2 = new BigDecimal("20.00");
+ BigDecimal num3 = new BigDecimal("2199.00");
+ BigDecimal num4 = new BigDecimal("329.00");
+ BigDecimal num5 = new BigDecimal("323400");
+ BigDecimal expected = new BigDecimal("326287.00");
+
+ BigDecimal result = CalculationEngine.add(num1, num2, num3, num4, num5);
+
+ assertEquals(expected, result);
+ }
+
+ @Test
+ void shouldSubtractTwoBigDecimals() {
+ BigDecimal num1 = new BigDecimal("10.00");
+ BigDecimal num2 = new BigDecimal("20.00");
+ BigDecimal expected = new BigDecimal("-10.00");
+
+ BigDecimal result = CalculationEngine.subtract(num1, num2);
+
+ assertEquals(expected, result);
+ }
+
+ @Test
+ void shouldSubtractThreeBigDecimals() {
+ BigDecimal num1 = new BigDecimal("450.00");
+ BigDecimal num2 = new BigDecimal("20.00");
+ BigDecimal num3 = new BigDecimal("10.00");
+ BigDecimal expected = new BigDecimal("420.00");
+
+ BigDecimal result = CalculationEngine.subtract(num1, num2, num3);
+
+ assertEquals(expected, result);
+ }
+
@Test
void shouldDivideBigdecimalWithATooBigBigdecimal() {
BigDecimal num1 = new BigDecimal("10.00");
diff --git a/frontend/README.md b/frontend/README.md
index 56474bc..f9c45a2 100644
--- a/frontend/README.md
+++ b/frontend/README.md
@@ -3,9 +3,9 @@
Frontend of the [B3 Tax Calculator](../README.md).
-This service is up and running in [here](http://jaimedantas.com/b3).
+This service is up and running [here](http://jaimedantas.com/b3).
-###### Tecnologies:
+###### Tecnologies
* HTML 5
* JavaScript