diff --git a/.Rhistory b/.Rhistory
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pom.xml b/pom.xml
index 6ac6648a1f51732f5fc7bb9368aab552773ab8e9..97e514e8a6751fe3fb1ae1928d12686c763754d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,15 @@
                 </execution>
               </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <inherited>true</inherited>
+                <configuration>
+                    <release>11</release>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/src/main/java/fr/ulille/iut/tva/Main.java b/src/main/java/fr/ulille/iut/tva/Main.java
index 62da555ebf892c9910b55e2700400f5229364411..703833577e48d1a73cd9b0c7e2eb340a7360dacd 100644
--- a/src/main/java/fr/ulille/iut/tva/Main.java
+++ b/src/main/java/fr/ulille/iut/tva/Main.java
@@ -16,7 +16,7 @@ import java.util.logging.Logger;
  */
 public class Main {
     // Base URI the Grizzly HTTP server will listen on
-    public static final String BASE_URI = "http://localhost:8080/myapp/";
+    public static final String BASE_URI = "http://localhost:8080/api/v1";
 
     /**
      * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
diff --git a/src/main/java/fr/ulille/iut/tva/dto/DetailTauxDto.java b/src/main/java/fr/ulille/iut/tva/dto/DetailTauxDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2ecef0b2c0b7cd0844d9b8a47796bb26e5d079a
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/dto/DetailTauxDto.java
@@ -0,0 +1,67 @@
+package fr.ulille.iut.tva.dto;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class DetailTauxDto {
+	
+	private double montantTotal;
+	private double montantTva;
+	private double somme;
+	private String tauxLabel;
+	private double tauxValue;
+	
+	public DetailTauxDto(){}
+
+	public DetailTauxDto(double montantTotal, double montantTva, double somme, String tauxLabel, double tauxValue) {
+		this.montantTotal = montantTotal;
+		this.montantTva = montantTva;
+		this.somme = somme;
+		this.tauxLabel = tauxLabel;
+		this.tauxValue = tauxValue;
+	}
+
+	public double getMontantTotal() {
+		return montantTotal;
+	}
+
+	public void setMontantTotal(double montantTotal) {
+		this.montantTotal = montantTotal;
+	}
+
+	public double getMontantTva() {
+		return montantTva;
+	}
+
+	public void setMontantTva(double montantTva) {
+		this.montantTva = montantTva;
+	}
+
+	public double getSomme() {
+		return somme;
+	}
+
+	public void setSomme(double somme) {
+		this.somme = somme;
+	}
+
+	public String getTauxLabel() {
+		return tauxLabel;
+	}
+
+	public void setTauxLabel(String tauxLabel) {
+		this.tauxLabel = tauxLabel;
+	}
+
+	public double getTauxValue() {
+		return tauxValue;
+	}
+
+	public void setTauxValue(double tauxValue) {
+		this.tauxValue = tauxValue;
+	}
+	
+	
+	
+
+}
diff --git a/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java b/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..c580b8b160ddd579ab62b7fe69645c0f2f05d361
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
@@ -0,0 +1,33 @@
+package fr.ulille.iut.tva.dto;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class InfoTauxDto {
+	
+    private String label;
+    private double taux;
+    
+    public InfoTauxDto() {}
+
+    public InfoTauxDto(String label, double taux) {
+        this.label = label;
+        this.taux = taux;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public double getTaux() {
+        return taux;
+    }
+
+    public void setTaux(double taux) {
+        this.taux = taux;
+    }
+}
diff --git a/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java b/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a8963e27703e1ee989ef81fc6cc8058d68f20db
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java
@@ -0,0 +1,12 @@
+package fr.ulille.iut.tva.ressource;
+
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Response;
+
+public class NiveauTvaInexistantException extends WebApplicationException {
+	private static final long serialVersionUID = 939875418210403804L;
+
+	public NiveauTvaInexistantException() {
+        super(Response.status(Response.Status.NOT_ACCEPTABLE).entity("Niveau de TVA inexistant\n").build());
+    }
+}
diff --git a/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java b/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
index 4c63ca69564a00810016eb92cc55ec8116b80faa..b1c8fbd0f5441a5661796adf8aa2bc97fb134bf6 100644
--- a/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
+++ b/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
@@ -1,12 +1,77 @@
 package fr.ulille.iut.tva.ressource;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import fr.ulille.iut.tva.dto.*;
 import fr.ulille.iut.tva.service.CalculTva;
 import fr.ulille.iut.tva.service.TauxTva;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
 
 /**
  * TvaRessource
  */
+@Path("tva")
 public class TvaRessource {
     private CalculTva calculTva = new CalculTva();
+    
+    @GET
+    @Path("tauxpardefaut")
+    public double getValeurTauxParDefaut() {
+    	return TauxTva.NORMAL.taux;
+    }
+    
+    @GET
+    @Path("valeur/{niveauTva}")
+    public double getValeurTaux(@PathParam("niveauTva") String niveau) {
+    	try {
+            return TauxTva.valueOf(niveau.toUpperCase()).taux; 
+        }
+        catch ( Exception ex ) {
+            throw new NiveauTvaInexistantException();
+        }
+
+    }
+    
+    @GET
+    @Path("{niveauTva}")
+    public double getMontantTotal(@PathParam("niveauTva") String niveau, @QueryParam("somme") int montant) {
+    	try {
+        	return calculTva.calculerMontant(TauxTva.fromString(niveau.toUpperCase()), montant);
+    	}catch(Exception e) {
+    		throw new NiveauTvaInexistantException();
+    	}
+    	
+    }
+    
+    @GET
+    @Path("lestaux")
+    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public List<InfoTauxDto> getInfoTaux() {
+      ArrayList<InfoTauxDto> result = new ArrayList<InfoTauxDto>();
+      for ( TauxTva t : TauxTva.values() ) {
+        result.add(new InfoTauxDto(t.name(), t.taux));
+      }
+      return result;
+    }
+    
+    @GET
+    @Path("details/{taux}")
+    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public DetailTauxDto getDetailTaux(@PathParam("taux") String niveau,@QueryParam("somme") int montant){
+    	DetailTauxDto res=new DetailTauxDto();
+    	res.setMontantTotal(calculTva.calculerMontant(TauxTva.fromString(niveau.toUpperCase()), montant));
+    	res.setMontantTva(TauxTva.fromString(niveau.toUpperCase()).taux);
+    	res.setSomme(montant);
+    	res.setTauxLabel(TauxTva.fromString(niveau.toUpperCase()).toString().toLowerCase());
+    	res.setTauxValue(TauxTva.fromString(niveau.toUpperCase()).taux);
+    	
+    	return res;
+    }
 
 }