diff --git a/.Rbuildignore b/.Rbuildignore
new file mode 100644
index 0000000000000000000000000000000000000000..0f63be5362248cbab21c5b841084f504e53c3b69
--- /dev/null
+++ b/.Rbuildignore
@@ -0,0 +1,6 @@
+^propre\.ecln\.Rproj$
+^\.Rproj\.user$
+^devstuff\.R$
+^data-raw$
+^extdata$
+^LICENSE\.md$
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..a65db9c215d44696a1cf568e06c044a138ddc953
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+.Rproj.user
+.Rhistory
+.RData
+.Ruserdata
+extdata/
+data/
diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 0000000000000000000000000000000000000000..01bcea375cbfb3bd901a5b57e49ef4e93db686b8
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,35 @@
+Package: propre.ecln
+Title: What the Package Does (One Line, Title Case)
+Version: 0.0.0.9000
+Authors@R: 
+    person(given = "Maël",
+           family = "THEULIERE",
+           role = c("aut", "cre"),
+           email = "mael.theuliere@gmail.com",
+           comment = c(ORCID = "0000-0002-5146-699X"))
+Description: What the package does (one paragraph).
+License: GPL (>= 3)
+Encoding: UTF-8
+LazyData: true
+Roxygen: list(markdown = TRUE)
+RoxygenNote: 7.1.1
+Imports: 
+    COGiter,
+    dplyr,
+    lubridate,
+    stringr,
+    forcats,
+    ggforce,
+    ggplot2,
+    glue,
+    gouvdown,
+    scales,
+    magrittr,
+    rlang,
+    kableExtra,
+    knitr,
+    tidyr
+Remotes: 
+    MaelTheuliere/COGiter
+Depends: 
+    R (>= 2.10)
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..175443ce8855883fcbf0122a6bfba12ac4cfb49d
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,595 @@
+GNU General Public License
+==========================
+
+_Version 3, 29 June 2007_  
+_Copyright © 2007 Free Software Foundation, Inc. &lt;<http://fsf.org/>&gt;_
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+## Preamble
+
+The GNU General Public License is a free, copyleft license for software and other
+kinds of works.
+
+The licenses for most software and other practical works are designed to take away
+your freedom to share and change the works. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change all versions of a
+program--to make sure it remains free software for all its users. We, the Free
+Software Foundation, use the GNU General Public License for most of our software; it
+applies also to any other work released this way by its authors. You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General
+Public Licenses are designed to make sure that you have the freedom to distribute
+copies of free software (and charge for them if you wish), that you receive source
+code or can get it if you want it, that you can change the software or use pieces of
+it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or
+asking you to surrender the rights. Therefore, you have certain responsibilities if
+you distribute copies of the software, or if you modify it: responsibilities to
+respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee,
+you must pass on to the recipients the same freedoms that you received. You must make
+sure that they, too, receive or can get the source code. And you must show them these
+terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: **(1)** assert
+copyright on the software, and **(2)** offer you this License giving you legal permission
+to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is
+no warranty for this free software. For both users' and authors' sake, the GPL
+requires that modified versions be marked as changed, so that their problems will not
+be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of
+the software inside them, although the manufacturer can do so. This is fundamentally
+incompatible with the aim of protecting users' freedom to change the software. The
+systematic pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we have designed
+this version of the GPL to prohibit the practice for those products. If such problems
+arise substantially in other domains, we stand ready to extend this provision to
+those domains in future versions of the GPL, as needed to protect the freedom of
+users.
+
+Finally, every program is threatened constantly by software patents. States should
+not allow patents to restrict development and use of software on general-purpose
+computers, but in those that do, we wish to avoid the special danger that patents
+applied to a free program could make it effectively proprietary. To prevent this, the
+GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+## TERMS AND CONDITIONS
+
+### 0. Definitions
+
+“This License” refers to version 3 of the GNU General Public License.
+
+“Copyright” also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+“The Program” refers to any copyrightable work licensed under this
+License. Each licensee is addressed as “you”. “Licensees” and
+“recipients” may be individuals or organizations.
+
+To “modify” a work means to copy from or adapt all or part of the work in
+a fashion requiring copyright permission, other than the making of an exact copy. The
+resulting work is called a “modified version” of the earlier work or a
+work “based on” the earlier work.
+
+A “covered work” means either the unmodified Program or a work based on
+the Program.
+
+To “propagate” a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for infringement under
+applicable copyright law, except executing it on a computer or modifying a private
+copy. Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as well.
+
+To “convey” a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays “Appropriate Legal Notices” to the
+extent that it includes a convenient and prominently visible feature that **(1)**
+displays an appropriate copyright notice, and **(2)** tells the user that there is no
+warranty for the work (except to the extent that warranties are provided), that
+licensees may convey the work under this License, and how to view a copy of this
+License. If the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+### 1. Source Code
+
+The “source code” for a work means the preferred form of the work for
+making modifications to it. “Object code” means any non-source form of a
+work.
+
+A “Standard Interface” means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of interfaces
+specified for a particular programming language, one that is widely used among
+developers working in that language.
+
+The “System Libraries” of an executable work include anything, other than
+the work as a whole, that **(a)** is included in the normal form of packaging a Major
+Component, but which is not part of that Major Component, and **(b)** serves only to
+enable use of the work with that Major Component, or to implement a Standard
+Interface for which an implementation is available to the public in source code form.
+A “Major Component”, in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system (if any) on which
+the executable work runs, or a compiler used to produce the work, or an object code
+interpreter used to run it.
+
+The “Corresponding Source” for a work in object code form means all the
+source code needed to generate, install, and (for an executable work) run the object
+code and to modify the work, including scripts to control those activities. However,
+it does not include the work's System Libraries, or general-purpose tools or
+generally available free programs which are used unmodified in performing those
+activities but which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for the work, and
+the source code for shared libraries and dynamically linked subprograms that the work
+is specifically designed to require, such as by intimate data communication or
+control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+### 2. Basic Permissions
+
+All rights granted under this License are granted for the term of copyright on the
+Program, and are irrevocable provided the stated conditions are met. This License
+explicitly affirms your unlimited permission to run the unmodified Program. The
+output from running a covered work is covered by this License only if the output,
+given its content, constitutes a covered work. This License acknowledges your rights
+of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without
+conditions so long as your license otherwise remains in force. You may convey covered
+works to others for the sole purpose of having them make modifications exclusively
+for you, or provide you with facilities for running those works, provided that you
+comply with the terms of this License in conveying all material for which you do not
+control copyright. Those thus making or running the covered works for you must do so
+exclusively on your behalf, under your direction and control, on terms that prohibit
+them from making any copies of your copyrighted material outside their relationship
+with you.
+
+Conveying under any other circumstances is permitted solely under the conditions
+stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+### 3. Protecting Users' Legal Rights From Anti-Circumvention Law
+
+No covered work shall be deemed part of an effective technological measure under any
+applicable law fulfilling obligations under article 11 of the WIPO copyright treaty
+adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention
+of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of
+technological measures to the extent such circumvention is effected by exercising
+rights under this License with respect to the covered work, and you disclaim any
+intention to limit operation or modification of the work as a means of enforcing,
+against the work's users, your or third parties' legal rights to forbid circumvention
+of technological measures.
+
+### 4. Conveying Verbatim Copies
+
+You may convey verbatim copies of the Program's source code as you receive it, in any
+medium, provided that you conspicuously and appropriately publish on each copy an
+appropriate copyright notice; keep intact all notices stating that this License and
+any non-permissive terms added in accord with section 7 apply to the code; keep
+intact all notices of the absence of any warranty; and give all recipients a copy of
+this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer
+support or warranty protection for a fee.
+
+### 5. Conveying Modified Source Versions
+
+You may convey a work based on the Program, or the modifications to produce it from
+the Program, in the form of source code under the terms of section 4, provided that
+you also meet all of these conditions:
+
+* **a)** The work must carry prominent notices stating that you modified it, and giving a
+relevant date.
+* **b)** The work must carry prominent notices stating that it is released under this
+License and any conditions added under section 7. This requirement modifies the
+requirement in section 4 to “keep intact all notices”.
+* **c)** You must license the entire work, as a whole, under this License to anyone who
+comes into possession of a copy. This License will therefore apply, along with any
+applicable section 7 additional terms, to the whole of the work, and all its parts,
+regardless of how they are packaged. This License gives no permission to license the
+work in any other way, but it does not invalidate such permission if you have
+separately received it.
+* **d)** If the work has interactive user interfaces, each must display Appropriate Legal
+Notices; however, if the Program has interactive interfaces that do not display
+Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are
+not by their nature extensions of the covered work, and which are not combined with
+it such as to form a larger program, in or on a volume of a storage or distribution
+medium, is called an “aggregate” if the compilation and its resulting
+copyright are not used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work in an aggregate
+does not cause this License to apply to the other parts of the aggregate.
+
+### 6. Conveying Non-Source Forms
+
+You may convey a covered work in object code form under the terms of sections 4 and
+5, provided that you also convey the machine-readable Corresponding Source under the
+terms of this License, in one of these ways:
+
+* **a)** Convey the object code in, or embodied in, a physical product (including a
+physical distribution medium), accompanied by the Corresponding Source fixed on a
+durable physical medium customarily used for software interchange.
+* **b)** Convey the object code in, or embodied in, a physical product (including a
+physical distribution medium), accompanied by a written offer, valid for at least
+three years and valid for as long as you offer spare parts or customer support for
+that product model, to give anyone who possesses the object code either **(1)** a copy of
+the Corresponding Source for all the software in the product that is covered by this
+License, on a durable physical medium customarily used for software interchange, for
+a price no more than your reasonable cost of physically performing this conveying of
+source, or **(2)** access to copy the Corresponding Source from a network server at no
+charge.
+* **c)** Convey individual copies of the object code with a copy of the written offer to
+provide the Corresponding Source. This alternative is allowed only occasionally and
+noncommercially, and only if you received the object code with such an offer, in
+accord with subsection 6b.
+* **d)** Convey the object code by offering access from a designated place (gratis or for
+a charge), and offer equivalent access to the Corresponding Source in the same way
+through the same place at no further charge. You need not require recipients to copy
+the Corresponding Source along with the object code. If the place to copy the object
+code is a network server, the Corresponding Source may be on a different server
+(operated by you or a third party) that supports equivalent copying facilities,
+provided you maintain clear directions next to the object code saying where to find
+the Corresponding Source. Regardless of what server hosts the Corresponding Source,
+you remain obligated to ensure that it is available for as long as needed to satisfy
+these requirements.
+* **e)** Convey the object code using peer-to-peer transmission, provided you inform
+other peers where the object code and Corresponding Source of the work are being
+offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the
+Corresponding Source as a System Library, need not be included in conveying the
+object code work.
+
+A “User Product” is either **(1)** a “consumer product”, which
+means any tangible personal property which is normally used for personal, family, or
+household purposes, or **(2)** anything designed or sold for incorporation into a
+dwelling. In determining whether a product is a consumer product, doubtful cases
+shall be resolved in favor of coverage. For a particular product received by a
+particular user, “normally used” refers to a typical or common use of
+that class of product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected to use, the
+product. A product is a consumer product regardless of whether the product has
+substantial commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+“Installation Information” for a User Product means any methods,
+procedures, authorization keys, or other information required to install and execute
+modified versions of a covered work in that User Product from a modified version of
+its Corresponding Source. The information must suffice to ensure that the continued
+functioning of the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for
+use in, a User Product, and the conveying occurs as part of a transaction in which
+the right of possession and use of the User Product is transferred to the recipient
+in perpetuity or for a fixed term (regardless of how the transaction is
+characterized), the Corresponding Source conveyed under this section must be
+accompanied by the Installation Information. But this requirement does not apply if
+neither you nor any third party retains the ability to install modified object code
+on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to
+continue to provide support service, warranty, or updates for a work that has been
+modified or installed by the recipient, or for the User Product in which it has been
+modified or installed. Access to a network may be denied when the modification itself
+materially and adversely affects the operation of the network or violates the rules
+and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with
+this section must be in a format that is publicly documented (and with an
+implementation available to the public in source code form), and must require no
+special password or key for unpacking, reading or copying.
+
+### 7. Additional Terms
+
+“Additional permissions” are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions. Additional
+permissions that are applicable to the entire Program shall be treated as though they
+were included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part may be
+used separately under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when you
+modify the work.) You may place additional permissions on material, added by you to a
+covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a
+covered work, you may (if authorized by the copyright holders of that material)
+supplement the terms of this License with terms:
+
+* **a)** Disclaiming warranty or limiting liability differently from the terms of
+sections 15 and 16 of this License; or
+* **b)** Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices displayed by works
+containing it; or
+* **c)** Prohibiting misrepresentation of the origin of that material, or requiring that
+modified versions of such material be marked in reasonable ways as different from the
+original version; or
+* **d)** Limiting the use for publicity purposes of names of licensors or authors of the
+material; or
+* **e)** Declining to grant rights under trademark law for use of some trade names,
+trademarks, or service marks; or
+* **f)** Requiring indemnification of licensors and authors of that material by anyone
+who conveys the material (or modified versions of it) with contractual assumptions of
+liability to the recipient, for any liability that these contractual assumptions
+directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered “further
+restrictions” within the meaning of section 10. If the Program as you received
+it, or any part of it, contains a notice stating that it is governed by this License
+along with a term that is a further restriction, you may remove that term. If a
+license document contains a further restriction but permits relicensing or conveying
+under this License, you may add to a covered work material governed by the terms of
+that license document, provided that the further restriction does not survive such
+relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in
+the relevant source files, a statement of the additional terms that apply to those
+files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a
+separately written license, or stated as exceptions; the above requirements apply
+either way.
+
+### 8. Termination
+
+You may not propagate or modify a covered work except as expressly provided under
+this License. Any attempt otherwise to propagate or modify it is void, and will
+automatically terminate your rights under this License (including any patent licenses
+granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a
+particular copyright holder is reinstated **(a)** provisionally, unless and until the
+copyright holder explicitly and finally terminates your license, and **(b)** permanently,
+if the copyright holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently
+if the copyright holder notifies you of the violation by some reasonable means, this
+is the first time you have received notice of violation of this License (for any
+work) from that copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of
+parties who have received copies or rights from you under this License. If your
+rights have been terminated and not permanently reinstated, you do not qualify to
+receive new licenses for the same material under section 10.
+
+### 9. Acceptance Not Required for Having Copies
+
+You are not required to accept this License in order to receive or run a copy of the
+Program. Ancillary propagation of a covered work occurring solely as a consequence of
+using peer-to-peer transmission to receive a copy likewise does not require
+acceptance. However, nothing other than this License grants you permission to
+propagate or modify any covered work. These actions infringe copyright if you do not
+accept this License. Therefore, by modifying or propagating a covered work, you
+indicate your acceptance of this License to do so.
+
+### 10. Automatic Licensing of Downstream Recipients
+
+Each time you convey a covered work, the recipient automatically receives a license
+from the original licensors, to run, modify and propagate that work, subject to this
+License. You are not responsible for enforcing compliance by third parties with this
+License.
+
+An “entity transaction” is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an organization, or
+merging organizations. If propagation of a covered work results from an entity
+transaction, each party to that transaction who receives a copy of the work also
+receives whatever licenses to the work the party's predecessor in interest had or
+could give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if the predecessor
+has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or
+affirmed under this License. For example, you may not impose a license fee, royalty,
+or other charge for exercise of rights granted under this License, and you may not
+initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging
+that any patent claim is infringed by making, using, selling, offering for sale, or
+importing the Program or any portion of it.
+
+### 11. Patents
+
+A “contributor” is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The work thus
+licensed is called the contributor's “contributor version”.
+
+A contributor's “essential patent claims” are all patent claims owned or
+controlled by the contributor, whether already acquired or hereafter acquired, that
+would be infringed by some manner, permitted by this License, of making, using, or
+selling its contributor version, but do not include claims that would be infringed
+only as a consequence of further modification of the contributor version. For
+purposes of this definition, “control” includes the right to grant patent
+sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license
+under the contributor's essential patent claims, to make, use, sell, offer for sale,
+import and otherwise run, modify and propagate the contents of its contributor
+version.
+
+In the following three paragraphs, a “patent license” is any express
+agreement or commitment, however denominated, not to enforce a patent (such as an
+express permission to practice a patent or covenant not to sue for patent
+infringement). To “grant” such a patent license to a party means to make
+such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free of charge
+and under the terms of this License, through a publicly available network server or
+other readily accessible means, then you must either **(1)** cause the Corresponding
+Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the
+patent license for this particular work, or **(3)** arrange, in a manner consistent with
+the requirements of this License, to extend the patent license to downstream
+recipients. “Knowingly relying” means you have actual knowledge that, but
+for the patent license, your conveying the covered work in a country, or your
+recipient's use of the covered work in a country, would infringe one or more
+identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you
+convey, or propagate by procuring conveyance of, a covered work, and grant a patent
+license to some of the parties receiving the covered work authorizing them to use,
+propagate, modify or convey a specific copy of the covered work, then the patent
+license you grant is automatically extended to all recipients of the covered work and
+works based on it.
+
+A patent license is “discriminatory” if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on the
+non-exercise of one or more of the rights that are specifically granted under this
+License. You may not convey a covered work if you are a party to an arrangement with
+a third party that is in the business of distributing software, under which you make
+payment to the third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties who would receive
+the covered work from you, a discriminatory patent license **(a)** in connection with
+copies of the covered work conveyed by you (or copies made from those copies), or **(b)**
+primarily for and in connection with specific products or compilations that contain
+the covered work, unless you entered into that arrangement, or that patent license
+was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied
+license or other defenses to infringement that may otherwise be available to you
+under applicable patent law.
+
+### 12. No Surrender of Others' Freedom
+
+If conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the conditions of this License, they do not excuse you from the
+conditions of this License. If you cannot convey a covered work so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not convey it at all. For example, if you
+agree to terms that obligate you to collect a royalty for further conveying from
+those to whom you convey the Program, the only way you could satisfy both those terms
+and this License would be to refrain entirely from conveying the Program.
+
+### 13. Use with the GNU Affero General Public License
+
+Notwithstanding any other provision of this License, you have permission to link or
+combine any covered work with a work licensed under version 3 of the GNU Affero
+General Public License into a single combined work, and to convey the resulting work.
+The terms of this License will continue to apply to the part which is the covered
+work, but the special requirements of the GNU Affero General Public License, section
+13, concerning interaction through a network will apply to the combination as such.
+
+### 14. Revised Versions of this License
+
+The Free Software Foundation may publish revised and/or new versions of the GNU
+General Public License from time to time. Such new versions will be similar in spirit
+to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that
+a certain numbered version of the GNU General Public License “or any later
+version” applies to it, you have the option of following the terms and
+conditions either of that numbered version or of any later version published by the
+Free Software Foundation. If the Program does not specify a version number of the GNU
+General Public License, you may choose any version ever published by the Free
+Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU
+General Public License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no
+additional obligations are imposed on any author or copyright holder as a result of
+your choosing to follow a later version.
+
+### 15. Disclaimer of Warranty
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
+QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+### 16. Limitation of Liability
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
+PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE
+OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
+WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+### 17. Interpretation of Sections 15 and 16
+
+If the disclaimer of warranty and limitation of liability provided above cannot be
+given local legal effect according to their terms, reviewing courts shall apply local
+law that most closely approximates an absolute waiver of all civil liability in
+connection with the Program, unless a warranty or assumption of liability accompanies
+a copy of the Program in return for a fee.
+
+_END OF TERMS AND CONDITIONS_
+
+## How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to
+the public, the best way to achieve this is to make it free software which everyone
+can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them
+to the start of each source file to most effectively state the exclusion of warranty;
+and each file should have at least the “copyright” line and a pointer to
+where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this
+when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type 'show c' for details.
+
+The hypothetical commands `show w` and `show c` should show the appropriate parts of
+the General Public License. Of course, your program's commands might be different;
+for a GUI interface, you would use an “about box”.
+
+You should also get your employer (if you work as a programmer) or school, if any, to
+sign a “copyright disclaimer” for the program, if necessary. For more
+information on this, and how to apply and follow the GNU GPL, see
+&lt;<http://www.gnu.org/licenses/>&gt;.
+
+The GNU General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may consider it
+more useful to permit linking proprietary applications with the library. If this is
+what you want to do, use the GNU Lesser General Public License instead of this
+License. But first, please read
+&lt;<http://www.gnu.org/philosophy/why-not-lgpl.html>&gt;.
diff --git a/NAMESPACE b/NAMESPACE
new file mode 100644
index 0000000000000000000000000000000000000000..530ca2f135052a4d5df942e1f59b37ac94f31ef6
--- /dev/null
+++ b/NAMESPACE
@@ -0,0 +1,70 @@
+# Generated by roxygen2: do not edit by hand
+
+export("%>%")
+export(FormatCaractere)
+export(FormatDate)
+export(creer_graphique_evolution_annuelle)
+export(data_prep)
+export(graphique_evolution_trim)
+export(graphique_investissement_locatif)
+export(graphique_series_temporelles)
+export(graphique_series_temporelles_prix)
+export(tableau_synthese_annuel)
+export(tableau_synthese_trimestrielle)
+importFrom(COGiter,filtrer_cog)
+importFrom(dplyr,arrange)
+importFrom(dplyr,bind_rows)
+importFrom(dplyr,case_when)
+importFrom(dplyr,distinct)
+importFrom(dplyr,filter)
+importFrom(dplyr,full_join)
+importFrom(dplyr,mutate)
+importFrom(dplyr,pull)
+importFrom(dplyr,select)
+importFrom(forcats,fct_drop)
+importFrom(forcats,fct_inorder)
+importFrom(forcats,fct_recode)
+importFrom(forcats,fct_relevel)
+importFrom(ggforce,geom_mark_circle)
+importFrom(ggplot2,aes)
+importFrom(ggplot2,coord_flip)
+importFrom(ggplot2,facet_wrap)
+importFrom(ggplot2,geom_area)
+importFrom(ggplot2,geom_bar)
+importFrom(ggplot2,geom_label)
+importFrom(ggplot2,geom_line)
+importFrom(ggplot2,geom_point)
+importFrom(ggplot2,ggplot)
+importFrom(ggplot2,guides)
+importFrom(ggplot2,labs)
+importFrom(ggplot2,margin)
+importFrom(ggplot2,position_dodge)
+importFrom(ggplot2,scale_x_date)
+importFrom(ggplot2,scale_y_continuous)
+importFrom(ggplot2,theme)
+importFrom(glue,glue)
+importFrom(gouvdown,gouv_colors)
+importFrom(gouvdown,scale_color_gouv_discrete)
+importFrom(gouvdown,scale_fill_gouv_discrete)
+importFrom(grid,unit)
+importFrom(kableExtra,add_header_above)
+importFrom(kableExtra,add_indent)
+importFrom(kableExtra,kable_styling)
+importFrom(kableExtra,row_spec)
+importFrom(knitr,kable)
+importFrom(lubridate,"%m-%")
+importFrom(lubridate,`%m+%`)
+importFrom(lubridate,days)
+importFrom(lubridate,month)
+importFrom(lubridate,quarter)
+importFrom(lubridate,year)
+importFrom(lubridate,years)
+importFrom(lubridate,ymd)
+importFrom(magrittr,"%>%")
+importFrom(rlang,.data)
+importFrom(scales,dollar_format)
+importFrom(scales,format_format)
+importFrom(stringr,str_c)
+importFrom(stringr,str_replace)
+importFrom(stringr,str_split_fixed)
+importFrom(tidyr,spread)
diff --git a/R/FormatDate.R b/R/FormatDate.R
new file mode 100644
index 0000000000000000000000000000000000000000..af565092f722c7a12f93c9885cd307542b606d29
--- /dev/null
+++ b/R/FormatDate.R
@@ -0,0 +1,64 @@
+#' Conversion d'une date au mois ou trimestre en format date au jour.
+#'
+#' @param Periode caractère une date en format anneetrimestre ou anneemois
+#' @param Periodicite caractère Trim si la date est en trimestre, Mois pour une date au mois
+#' @param sep le séparateur entre l'année et le mois/trimestre
+#'
+#' @return une date au format date
+#' @importFrom dplyr case_when
+#' @importFrom lubridate ymd days `%m+%`
+#' @importFrom stringr str_split_fixed str_c str_replace
+#' @export
+#'
+#' @examples
+#' FormatDate("2010-10", Periodicite = "Mois")
+
+#' @importFrom dplyr case_when
+#' @importFrom lubridate ymd days
+#' @importFrom stringr str_split_fixed str_c str_replace
+FormatDate<-function(Periode,Periodicite,sep="-") {
+
+  Periode1=stringr::str_split_fixed(Periode,sep,2)[,1]
+  Periode2=stringr::str_split_fixed(Periode,sep,2)[,2]
+
+  if (Periodicite=="Trim") {
+    return(
+      lubridate::ymd(dplyr::case_when(
+        Periode2 %in% c("Q1","T1","1") ~ stringr::str_c(Periode1,"0331"),
+        Periode2 %in% c("Q2","T2","2") ~ stringr::str_c(Periode1,"0630"),
+        Periode2 %in% c("Q3","T3","3") ~ stringr::str_c(Periode1,"0930"),
+        Periode2 %in% c("Q4","T4","4") ~ stringr::str_c(Periode1,"1231")
+      )
+      ))
+  }
+  if (Periodicite=="Mois") {
+    return(
+      lubridate::ymd(stringr::str_c(stringr::str_replace(Periode,sep,""),"01"))  %m+%  months(1) %m+% lubridate::days(-1)
+    )
+  }
+}
+
+
+#' conversion d'une variable date en nommage trimestriel
+#'
+#' @param Periode date à convertire
+#'
+#' @return une chaine de caractère
+#' @importFrom dplyr case_when
+#' @importFrom lubridate year month
+#' @export
+#'
+#' @examples
+#' FormatCaractere("2010-10-01")
+FormatCaractere<-function(Periode) {
+  trim<-  dplyr::case_when(
+    lubridate::month(Periode) <=3 ~ "T1",
+    lubridate::month(Periode) <=6 ~ "T2",
+    lubridate::month(Periode) <=9 ~ "T3",
+    lubridate::month(Periode) <=12 ~ "T4"
+  )
+  return(
+    paste0(lubridate::year(Periode),trim)
+  )
+}
+
diff --git a/R/creer_graphique_evolution_annuelle.R b/R/creer_graphique_evolution_annuelle.R
new file mode 100644
index 0000000000000000000000000000000000000000..988c8ce65621411cf943d31dc07e2e804907d70b
--- /dev/null
+++ b/R/creer_graphique_evolution_annuelle.R
@@ -0,0 +1,57 @@
+#' graphique barre sur un an
+#'
+#' @param data Le dataframe.
+#' @param type_logement Collectifs ou individuels.
+#' @param type_zone Liste des types de zonage à intégrer dans la facette.
+#' @param titre Le titre du graphique.
+#' @param bas_de_page Le bas de page du graphique.
+#'
+#' @return Un graphique ggplot2.
+#' @importFrom dplyr filter mutate arrange
+#' @importFrom ggplot2 ggplot aes geom_bar coord_flip geom_label facet_wrap scale_y_continuous labs position_dodge
+#' @importFrom scales format_format
+#' @importFrom lubridate %m-%
+#' @export
+creer_graphique_evolution_annuelle<-function(data = indic_ecln,
+                                             type_zone = c("R\u00e9gions","D\u00e9partements"),
+                                             type_logement = "collectif",
+                                             titre="",
+                                             bas_de_page=""){
+  indic<-c("Encours - Appartements",
+           "Mises en vente - Appartements",
+           "Ventes - Appartements")
+  if (type_logement=="individuel") {
+    indic<- c("Encours - Maisons",
+              "Mises en vente - Maisons",
+              "Ventes - Maisons")
+  }
+
+  df <- data %>%
+    dplyr::filter(.data$Indicateur %in% indic,
+                  .data$TypeZone %in% type_zone,
+                  .data$TypeIndicateur=="Cumul annuel",
+                  .data$Periode==max(.data$Periode)|.data$Periode==max(.data$Periode) %m-% years(1)) %>%
+    dplyr::mutate(Periode=FormatCaractere(.data$Periode),
+                  Indicateur=str_split_fixed(.data$Indicateur," - ",2)[,1]) %>%
+    dplyr::arrange(.data$Zone)
+
+    ggplot2::ggplot(data = df, ggplot2::aes(x=.data$Periode,weight=.data$Valeur,fill=.data$Indicateur)) +
+    ggplot2::geom_bar(position=ggplot2::position_dodge())+
+    ggplot2::coord_flip()+
+    ggplot2::geom_label(data=df,
+                        ggplot2::aes(label=format(round(.data$Valeur),big.mark = " "),
+                                     x=.data$Periode,
+                                     y=.data$Valeur,
+                                     group=.data$Indicateur),
+                        position=position_dodge(0.9),
+                        color="white",
+                        fill="grey",
+                        alpha=.2,
+                        fontface="bold",
+                        hjust=1.2
+    )+
+    ggplot2::facet_wrap(~.data$Zone,scales="free",ncol=4)+
+    ggplot2::scale_y_continuous(labels=scales::format_format(big.mark=" "))+
+    ggplot2::labs(title=titre,subtitle="R\u00e9alis\u00e9es sur les 12 derniers mois",x="Trimestre",y="",
+                  caption=bas_de_page,fill="")
+}
diff --git a/R/data_prep.R b/R/data_prep.R
new file mode 100644
index 0000000000000000000000000000000000000000..7eedd7b28af26d6c25e0b1948b5847a9c7235097
--- /dev/null
+++ b/R/data_prep.R
@@ -0,0 +1,68 @@
+#' datapreparation des données
+#'
+#' @param reg code region
+#' @param abc TRUE si on veut garder les zonages abc
+#' @param zone_a_secretiser listes des zonages à secretiser
+#' @param marches_a_secretiser liste des marchés à secretiser : individuel, collectif, tous
+#'
+#' @importFrom COGiter filtrer_cog
+#' @importFrom dplyr filter mutate arrange bind_rows
+#' @importFrom forcats fct_relevel fct_drop fct_inorder
+#' @importFrom lubridate years
+#' @importFrom stringr str_split_fixed
+#' @importFrom rlang .data
+#' @return un dataframe filtré sur la région souhaitée
+#' @export
+data_prep <- function(reg, abc = TRUE, zone_a_secretiser = "", marches_a_secretiser = "") {
+
+
+
+  if (abc == FALSE) {
+    result <- indic_ecln %>%
+      COGiter::filtrer_cog(reg = reg, garder_supra = ">") %>%
+      dplyr::mutate(TypeZone = forcats::fct_relevel(.data$TypeZone, "France", "R\u00e9gions", "D\u00e9partements", "Epci")) %>%
+      dplyr::arrange(.data$TypeZone, .data$Zone) %>%
+      dplyr::mutate(
+        Zone = forcats::fct_drop(.data$Zone),
+        Zone = forcats::fct_inorder(.data$Zone),
+        marche = stringr::str_split_fixed(.data$Indicateur, "-", n = 2)[, 2],
+        Valeur = ifelse(.data$Zone %in% zone_a_secretiser &
+                          .data$marche %in% marches_a_secretiser,
+        NA,
+        .data$Valeur
+        ),
+        TauxEvolution12Mois = ifelse(.data$Zone %in% zone_a_secretiser &
+                                       .data$marche %in% marches_a_secretiser,
+        NA,
+        .data$TauxEvolution12Mois
+        )
+      )
+  }
+  if (abc == TRUE) {
+    result <- indic_ecln %>%
+      COGiter::filtrer_cog(reg = reg, garder_supra = ">")
+
+    abc <- indic_ecln %>%
+      dplyr::filter(.data$TypeZone == "ABC")
+
+    result <- dplyr::bind_rows(result, abc)
+    dplyr::mutate(TypeZone = forcats::fct_relevel(as.factor(.data$TypeZone), "France", "R\u00e9gions", "D\u00e9partements", "Epci", "ABC")) %>%
+      dplyr::arrange(.data$TypeZone, .data$Zone) %>%
+      dplyr::mutate(
+        Zone = forcats::fct_drop(.data$Zone),
+        Zone = forcats::fct_inorder(.data$Zone),
+        marche = stringr::str_split_fixed(.data$Indicateur, "-", n = 2)[, 2],
+        Valeur = ifelse(.data$Zone %in% zone_a_secretiser &
+                          .data$marche %in% marches_a_secretiser,
+        NA,
+        .data$Valeur
+        ),
+        TauxEvolution12Mois = ifelse(.data$Zone %in% zone_a_secretiser &
+                                       .data$marche %in% marches_a_secretiser,
+        NA,
+        .data$TauxEvolution12Mois
+        )
+      )
+  }
+  return(result)
+}
diff --git a/R/globals.R b/R/globals.R
new file mode 100644
index 0000000000000000000000000000000000000000..c29f011ef37ba66ae3d43fcb652ccb73ea31e7d7
--- /dev/null
+++ b/R/globals.R
@@ -0,0 +1,3 @@
+utils::globalVariables(
+  c("liste_zone","indic_ecln","%m-%")
+)
diff --git a/R/graphique_evolution_trim.R b/R/graphique_evolution_trim.R
new file mode 100644
index 0000000000000000000000000000000000000000..895b670bfcd51a7d559435955cdf33bb23daac58
--- /dev/null
+++ b/R/graphique_evolution_trim.R
@@ -0,0 +1,102 @@
+#' graphique sur un territoire sur un indicateur en moyenne annuelle et valeur trimestrielle
+#'
+#' @param data Le dataframe avec les données ecln.
+#' @param indicateur  L'indicateur à visualiser.
+#' @param zone Le territoire sur lequel visualiser l'indicateur.
+#' @param titre Le titre du graphique.
+#'
+#' @return  un ggplot2
+#' @export
+#' @importFrom dplyr select distinct pull filter mutate
+#' @importFrom forcats fct_recode
+#' @importFrom ggforce geom_mark_circle
+#' @importFrom ggplot2 ggplot aes geom_line geom_point margin theme labs guides scale_y_continuous scale_x_date
+#' @importFrom glue glue
+#' @importFrom gouvdown gouv_colors scale_color_gouv_discrete scale_fill_gouv_discrete
+#' @importFrom grid unit
+#' @importFrom lubridate quarter year
+#' @importFrom stringr str_c
+graphique_evolution_trim <- function(data = indic_ecln,
+                                     indicateur = "Ventes - Logements",
+                                     zone = "Pays de la Loire",
+                                     titre = "Ventes de logements neufs en Pays de la Loire") {
+  per <- data %>%
+    dplyr::select(.data$Periode) %>%
+    dplyr::distinct() %>%
+    dplyr::pull(.data$Periode)
+
+  max_date <- max(per)
+
+  sous_titre <- glue::glue("Au {label_rang(lubridate::quarter(max_date))} trimestre {lubridate::year(max_date)}")
+  label <- data %>%
+    dplyr::filter(
+      .data$Zone == zone,
+      .data$Indicateur == indicateur
+    ) %>%
+    dplyr::filter(.data$Periode == max(.data$Periode)) %>%
+    dplyr::mutate(
+      Valeur = ifelse(.data$TypeIndicateur == "Cumul annuel", .data$Valeur / 4, .data$Valeur),
+      TypeIndicateur = forcats::fct_recode(.data$TypeIndicateur,
+        "Moyenne annuelle" = "Cumul annuel",
+        "Valeur trimestrielle" = "Trimestriel"
+      )
+    ) %>%
+    dplyr::mutate(
+      description = stringr::str_c(
+        format(round(.data$Valeur), big.mark = " "),
+        "\n",
+        ifelse(.data$TauxEvolution12Mois > 0, "+", ""),
+        format(round(.data$TauxEvolution12Mois, 1), big.mark = " ", decimal.mark = ","),
+        " %"
+      ),
+      label = ifelse(.data$TypeIndicateur %in% c("Valeur trimestrielle"),
+        FormatCaractere(.data$Periode),
+        "Moyenne\nannuelle"
+      )
+    )
+
+  gg <- data %>%
+    dplyr::filter(
+      .data$Zone == zone,
+      .data$Indicateur == indicateur
+    ) %>%
+    dplyr::mutate(
+      Valeur = ifelse(.data$TypeIndicateur == "Cumul annuel", .data$Valeur / 4, .data$Valeur),
+      TypeIndicateur = forcats::fct_recode(.data$TypeIndicateur,
+        "Moyenne annuelle" = "Cumul annuel",
+        "Valeur trimestrielle" = "Trimestriel"
+      )
+    ) %>%
+    ggplot2::ggplot() +
+    ggplot2::aes(x = .data$Periode, y = .data$Valeur, group = .data$TypeIndicateur, linetype = .data$TypeIndicateur, color = .data$TypeIndicateur) +
+    ggplot2::geom_line() +
+    ggplot2::geom_point(data = label, ggplot2::aes(x = .data$Periode, y = .data$Valeur, group = .data$TypeIndicateur, color = .data$TypeIndicateur)) +
+    ggforce::geom_mark_circle(
+      data = label, ggplot2::aes(
+        label = .data$label,
+        fill = .data$TypeIndicateur,
+        description = .data$description
+      ),
+      label.buffer = grid::unit(5, "mm"),
+      expand = grid::unit(2, "mm"),
+      label.margin = ggplot2::margin(2, 5, 2, 5, "mm"),
+      label.colour = "white",
+      alpha = .5,
+      label.fill = gouvdown::gouv_colors("bleu_france")
+    ) +
+    ggplot2::theme(legend.position = "bottom") +
+    gouvdown::scale_color_gouv_discrete(palette = "pal_gouv_qual2") +
+    gouvdown::scale_fill_gouv_discrete(palette = "pal_gouv_qual2") +
+    ggplot2::labs(
+      x = "",
+      y = "Nombre de ventes",
+      title = titre,
+      subtitle = sous_titre,
+      caption = "Source : ECLN\nMoyenne Annuelle : Valeur observ\u00e9e en moyenne sur les 4 derniers trimestres"
+    ) +
+    ggplot2::guides(fill = F) +
+    ggplot2::scale_y_continuous(labels = function(l) format(l, scientific = FALSE, big.mark = " ", decimal.mark = ","), limits = c(0, NA)) +
+    ggplot2::scale_x_date(date_breaks = "1 year", date_labels = "%Y", limits = c(min(per), max(per) + months(12)))
+
+  return(gg)
+}
diff --git a/R/graphique_investissement_locatif.R b/R/graphique_investissement_locatif.R
new file mode 100644
index 0000000000000000000000000000000000000000..f82df3765281d63237900952943982a787726c75
--- /dev/null
+++ b/R/graphique_investissement_locatif.R
@@ -0,0 +1,76 @@
+#' Graphique d'évolution de l'investissement locatif
+#'
+#' @param data le dataframe avec les données ecln
+#' @param type_logement Appartements ou Maisons
+#' @param type_indicateur cumul annuel ou valeur trimestrielle
+#' @param type_zone liste des types de zonage à intégrer dans la facette
+#' @param titre titre du graphique
+#' @param soustitre sous titre du graphique
+#' @param bas_de_page bas de page
+#'
+#' @return Un graphique ggplot2.
+#' @export
+#' @importFrom dplyr filter mutate
+#' @importFrom forcats fct_drop
+#' @importFrom ggplot2 ggplot aes geom_area scale_x_date scale_y_continuous labs facet_wrap
+#' @importFrom scales format_format
+#' @importFrom stringr str_split_fixed
+#'
+#' @examples
+graphique_investissement_locatif <- function(data = indic_ecln,
+                                             type_logement = "Appartements",
+                                             type_zone = c("R\u00e9gions","D\u00e9partements"),
+                                             type_indicateur = "Cumul annuel",
+                                             titre = "",
+                                             soustitre = "",
+                                             bas_de_page = "") {
+  indic <- c(
+    "Ventes hors investissement locatif - Appartements",
+    "Ventes en investissement locatif - Appartements"
+  )
+  if (type_logement == "Maisons") {
+    indic <- c(
+      "Ventes hors investissement locatif - Maisons",
+      "Ventes en investissement locatif - Maisons"
+    )
+  }
+
+  data_prep <- data %>%
+    dplyr::filter(
+      .data$Indicateur %in% indic,
+      .data$TypeIndicateur == type_indicateur,
+      .data$TypeZone %in% type_zone
+    ) %>%
+    dplyr::mutate(
+      Zone = forcats::fct_drop(.data$Zone),
+      Indicateur = stringr::str_split_fixed(.data$Indicateur, " - ", 2)[, 1]
+    )
+
+
+  p <- ggplot2::ggplot(
+    data = data_prep,
+    ggplot2::aes(
+      x = .data$Periode,
+      y = .data$Valeur,
+      color = .data$Indicateur,
+      fill = .data$Indicateur,
+      group = .data$Indicateur
+    )
+  ) +
+    ggplot2::geom_area(alpha = .5) +
+    ggplot2::scale_x_date(date_labels = "%y", date_breaks = "1 year") +
+    ggplot2::scale_y_continuous(labels = scales::format_format(big.mark = " ")) +
+    ggplot2::labs(
+      title = titre,
+      subtitle = soustitre,
+      x = "",
+      y = "",
+      fill = "",
+      color = "",
+      caption = bas_de_page
+    )
+  if (nlevels(data_prep$Zone) > 1) {
+    p <- p + ggplot2::facet_wrap(~Zone, scales = "free", ncol = 4)
+  }
+  return(p)
+}
diff --git a/R/graphique_series_temporelles.R b/R/graphique_series_temporelles.R
new file mode 100644
index 0000000000000000000000000000000000000000..6b38b31c57016f4a0710908652d02093c2a2970c
--- /dev/null
+++ b/R/graphique_series_temporelles.R
@@ -0,0 +1,45 @@
+#' graphique en série temporelle à facette
+#'
+#' @param data Le dataframe avec les données ecln.
+#' @param type_logement Appartements ou Maisons.
+#' @param indicateurs Un vecteur d'indicateur à visualiser dans le graphique.
+#' @param type_zone Liste des types de zonage à intégrer dans la facette.
+#' @param titre Le titre du graphique.
+#' @param bas_de_page Le bas de page du graphique.
+#' @param ncol_facet Le nombre de colonnes dans la facette.
+#' @return Un graphique ggplot2.
+#' @export
+#' @importFrom dplyr filter mutate
+#' @importFrom ggplot2 ggplot aes geom_line facet_wrap scale_y_continuous scale_x_date labs
+#' @importFrom gouvdown scale_color_gouv_discrete
+#' @importFrom scales format_format
+#' @examples
+graphique_series_temporelles<-function(data=indic_ecln,
+                                       type_logement="Appartements",
+                                       indicateurs = c("Encours","Mises en vente","Ventes"),
+                                       type_zone = c("R\u00e9gions","D\u00e9partements"),
+                                       titre="",
+                                       bas_de_page="",
+                                       ncol_facet=4
+){
+  indic <- paste0(indicateurs," - ",type_logement)
+  gg <- data %>%
+    dplyr::filter(.data$Indicateur %in% indic,
+                  .data$TypeZone %in% type_zone,
+                  .data$TypeIndicateur=="Cumul annuel") %>%
+    dplyr::mutate(Indicateur=str_split_fixed(.data$Indicateur," - ",2)[,1]) %>%
+    ggplot2::ggplot() +
+    ggplot2::aes(x=.data$Periode,y=.data$Valeur,color=.data$Indicateur,fill=.data$Indicateur,group=.data$Indicateur) +
+    ggplot2::geom_line(size=1.2)+
+    ggplot2::facet_wrap(~.data$Zone,scales="free",ncol=ncol_facet)+
+    ggplot2::scale_y_continuous(labels=scales::format_format(big.mark=" "),limits=c(0,NA)) +
+    ggplot2::scale_x_date(date_labels="%y",date_breaks = "1 year") +
+    gouvdown::scale_color_gouv_discrete(palette = "pal_gouv_qual2") +
+    ggplot2::labs(title=titre,
+                  x="",
+                  y="",
+                  fill="",
+                  color="",
+                  caption=bas_de_page)
+  return(gg)
+}
diff --git a/R/graphique_series_temporelles_prix.R b/R/graphique_series_temporelles_prix.R
new file mode 100644
index 0000000000000000000000000000000000000000..06c857ab5d2e605877451ea9347a8f40a8e368df
--- /dev/null
+++ b/R/graphique_series_temporelles_prix.R
@@ -0,0 +1,64 @@
+#' graphique sur l'évolution du prix de vente des biens.
+#'
+#' @param data Le dataframe.
+#' @param type_logement Appartements ou Maisons.
+#' @param type_indicateur Cumul annuel ou valeur trimestrielle.
+#' @param type_zone Liste des types de zonage à intégrer dans la facette.
+#' @param titre Le titre du graphique.
+#' @param bas_de_page Le bas de page du graphique.
+#'
+#' @return Un graphique ggplot2.
+#' @export
+#' @importFrom dplyr filter mutate
+#' @importFrom forcats fct_drop
+#' @importFrom ggplot2 ggplot aes geom_line geom_point theme scale_x_date scale_y_continuous labs facet_wrap
+#' @importFrom scales dollar_format
+#' @importFrom stringr str_split_fixed
+#' @importFrom gouvdown scale_color_gouv_discrete
+#' @examples
+graphique_series_temporelles_prix<-function(data=indic_ecln,
+                                            type_logement="Appartements",
+                                            type_zone = c("R\u00e9gions","D\u00e9partements"),
+                                            type_indicateur = "Cumul annuel",
+                                            titre="",
+                                            bas_de_page=""){
+  indic<-c("PrixM2 - Appartements")
+  if (type_logement=="Maisons") {
+    indic<- c("PrixPar - Maisons")
+  }
+
+  data_prep<-data %>%
+    dplyr::filter(.data$Indicateur %in% indic,
+                  .data$TypeIndicateur == type_indicateur,
+                  .data$TypeZone %in% type_zone) %>%
+    dplyr::mutate(Zone = forcats::fct_drop(.data$Zone),
+           Indicateur=stringr::str_split_fixed(.data$Indicateur," - ",2)[,1])
+
+
+  p<-ggplot2::ggplot(data_prep,
+                     ggplot2::aes(x=.data$Periode,
+                y=.data$Valeur,
+                color=.data$Indicateur,
+                fill=.data$Indicateur,
+                group=.data$Indicateur)) +
+    ggplot2::geom_line(size=1.2)+
+    ggplot2::geom_point(data=  data %>%
+                 dplyr::filter(.data$Indicateur %in% indic,
+                               .data$TypeIndicateur == type_indicateur,
+                               .data$TypeZone %in% type_zone,
+                               .data$Periode==max(.data$Periode)))+
+    ggplot2::theme(legend.position = "none")+
+    ggplot2::scale_x_date(date_labels="%y",date_breaks = "1 year")+
+    ggplot2::scale_y_continuous(labels=scales::dollar_format(big.mark=" ",decimal_mark=",",prefix="",suffix=" \u20ac"))+
+    gouvdown::scale_color_gouv_discrete(palette = "pal_gouv_qual2") +
+    ggplot2::labs(title=titre,
+         x="",
+         y="",
+         fill="",
+         color="",
+         caption=bas_de_page)
+  if (nlevels(data_prep$Zone)>1){
+    p<-p+ggplot2::facet_wrap(~Zone,scales="fixed",ncol=4)
+  }
+  return(p)
+}
diff --git a/R/indic_ecln.R b/R/indic_ecln.R
new file mode 100644
index 0000000000000000000000000000000000000000..44abe766f17e661ad1ec2b10536cee8003a4b90c
--- /dev/null
+++ b/R/indic_ecln.R
@@ -0,0 +1,16 @@
+#' Table contenant les différents indicateurs de la source ecln utiles pour la publication.
+#'
+#' @encoding UTF-8
+#' @format  Table de `r nrow(indic_ecln)` lignes et `r ncol(indic_ecln)` colonnes:
+#' \describe{
+#'   \item{TypeZone}{Type de territoire}
+#'   \item{CodeZone}{Code du territoire}
+#'   \item{Zone}{Libellé du territoire}
+#'   \item{TypeIndicateur}{valeur cumulée sur 12 mois ou trimestrielle}
+#'   \item{Indicateur}{Liste des indicateurs}
+#'   \item{Periode}{Trimestre d'observation}
+#'   \item{valeur}{Valeur de l'indicateur pour la modalité de variable}
+#'   \item{TauxEvolution12Mois}{Evolution de l'indicateur sur 12 mois glissant}
+#' }
+#' @source \url{https://www.statistiques.developpement-durable.gouv.fr/enquete-sur-la-commercialisation-des-logements-neufs-ecln}
+"indic_ecln"
diff --git a/R/label_rang.R b/R/label_rang.R
new file mode 100644
index 0000000000000000000000000000000000000000..97e4fe3b99725211b3017f92d7717a3cdef4b002
--- /dev/null
+++ b/R/label_rang.R
@@ -0,0 +1,12 @@
+label_rang <- function(x) {
+  if (x == 1) {
+    res <- paste0(x,"er")
+  }
+  if (x == 2) {
+    res <- paste0(x,"nd")
+  }
+  if (x > 2) {
+    res <- paste0(x,"\u00e8me")
+  }
+  return(res)
+}
diff --git a/R/tableau_synthese_annuelle.R b/R/tableau_synthese_annuelle.R
new file mode 100644
index 0000000000000000000000000000000000000000..a7474d15308dcd6312b17210a4ebed313d637e7b
--- /dev/null
+++ b/R/tableau_synthese_annuelle.R
@@ -0,0 +1,62 @@
+#' tableau de synthèse des données en cumul annuel
+#'
+#' @param data Le dataframe.
+#' @param type_logement Collectifs ou individuels.
+#' @param type_zone Liste des types de zonage à intégrer dans la facette.
+#' @return Un table kable
+#' @importFrom dplyr filter mutate pull select full_join arrange
+#' @importFrom kableExtra kable_styling row_spec add_header_above add_indent
+#' @importFrom knitr kable
+#' @importFrom stringr str_split_fixed
+#' @importFrom tidyr spread
+#' @export
+tableau_synthese_annuel<-function(data = indic_ecln,
+                                  type_zone = c("France","R\u00e9gions","D\u00e9partements"),
+                                  type_logement = "collectif"
+                                  ){
+  indic<-c("Encours - Appartements",
+           "Mises en vente - Appartements",
+           "Ventes - Appartements",
+           "PrixM2 - Appartements")
+  if (type_logement=="individuel") {
+    indic<- c("Encours - Maisons",
+              "Mises en vente - Maisons",
+              "Ventes - Maisons",
+              "PrixPar - Maisons")
+  }
+  input<-indic_ecln %>%
+    dplyr::filter(.data$Indicateur %in% indic,
+                  .data$TypeZone %in% type_zone,
+                  .data$TypeIndicateur=="Cumul annuel",
+                  .data$Periode==max(.data$Periode)) %>%
+    dplyr::mutate(Indicateur=stringr::str_split_fixed(.data$Indicateur,"-",2)[,1])
+
+  nombre_zone <- length(unique(input$CodeZone))
+  nombre_fr_dep_reg <- length(unique(input %>% dplyr::filter(.data$TypeZone %in% c("R\u00e9gions","D\u00e9partements")) %>% dplyr::pull(.data$CodeZone)))
+  res<- input %>%
+    dplyr::select(.data$TypeZone,.data$Zone,.data$Indicateur,.data$Valeur) %>%
+    tidyr::spread(.data$Indicateur,.data$Valeur) %>%
+    dplyr::full_join(
+      input %>%
+        dplyr::select(.data$TypeZone,.data$Zone,.data$Indicateur,.data$TauxEvolution12Mois) %>%
+        tidyr::spread(.data$Indicateur,.data$TauxEvolution12Mois),
+      by=c("TypeZone","Zone")
+    ) %>%
+    dplyr::arrange(.data$Zone) %>%
+    dplyr::select(2,6,10,4,8,3,7,5,9) %>%
+    knitr::kable("html",col.names=c("Zone","Sur les 12 derniers mois","Evolution sur un an (en %)",
+                             "Sur les 12 derniers mois","Evolution sur un an (en %)",
+                             "En fin de p\u00e9riode","Evolution sur un an (en %)",
+                             "Prix moyen sur les 12 derniers mois (en €)","Evolution sur un an (en %)"),
+          digits=c(0,0,1,0,1,0,1,0,1),
+          format.args=list(big.mark=" ",decimal.mark=",")) %>%
+    kableExtra::kable_styling(font_size = 12) %>%
+    kableExtra::row_spec(1:2, bold = T, background = "#f0f0f5") %>%
+    kableExtra::add_header_above(c(" "=1, "Ventes" = 2, "Mises en vente" = 2, "Encours" = 2,"Prix au m2"=2)) %>%
+    kableExtra::add_indent(c(3:nombre_zone))
+  if("ABC" %in% type_zone){
+    res<-res %>%
+      kableExtra::row_spec(nombre_fr_dep_reg:nombre_zone, bold = T, background = "#bebece")
+  }
+  return(res)
+}
diff --git a/R/tableau_synthese_trimestrielle.R b/R/tableau_synthese_trimestrielle.R
new file mode 100644
index 0000000000000000000000000000000000000000..df9cc90eb10f178ff47d0e21b8f363ebd001da7a
--- /dev/null
+++ b/R/tableau_synthese_trimestrielle.R
@@ -0,0 +1,56 @@
+#' Création du tableau de synthèse trimestrielle
+#'
+#' @param data Le dataframe.
+#' @param type_logement Collectifs ou individuels.
+#'
+#' @return un tableau kable
+#' @export
+#' @importFrom dplyr filter mutate select full_join arrange
+#' @importFrom kableExtra kable_styling row_spec add_header_above
+#' @importFrom knitr kable
+#' @importFrom stringr str_split_fixed
+#' @importFrom tidyr spread
+tableau_synthese_trimestrielle<-function(data = indic_ecln,
+                                         type_logement="collectif"){
+
+  indic<-c("Encours - Appartements",
+           "Mises en vente - Appartements",
+           "Ventes - Appartements",
+           "PrixM2 - Appartements")
+  if (type_logement=="individuel") {
+    indic<- c("Encours - Maisons",
+              "Mises en vente - Maisons",
+              "Ventes - Maisons",
+              "PrixPar - Maisons")
+  }
+  indic_ecln %>%
+    dplyr::filter(.data$Indicateur %in% indic,
+                  .data$TypeZone %in% c("France","Régions"),
+                  .data$TypeIndicateur != "Cumul annuel",
+                  .data$Periode==max(.data$Periode)) %>%
+    dplyr::mutate(Indicateur=str_split_fixed(.data$Indicateur,"-",2)[,1]) %>%
+    dplyr::select(.data$TypeZone,.data$Zone,.data$Indicateur,.data$Valeur) %>%
+    tidyr::spread(.data$Indicateur,.data$Valeur) %>%
+    dplyr::full_join(
+      indic_ecln %>%
+        dplyr::filter(.data$Indicateur %in% indic,
+                      .data$TypeZone %in% c("France","Régions"),
+                      .data$TypeIndicateur!="Cumul annuel",
+                      .data$Periode==max(.data$Periode)) %>%
+        dplyr::mutate(Indicateur=stringr::str_split_fixed(.data$Indicateur,"-",2)[,1]) %>%
+        dplyr::select(.data$TypeZone,.data$Zone,.data$Indicateur,.data$TauxEvolution12Mois) %>%
+        spread(.data$Indicateur,.data$TauxEvolution12Mois),
+      by=c("TypeZone","Zone")
+    ) %>%
+    dplyr::arrange(.data$Zone) %>%
+    dplyr::select(2,6,10,4,8,3,7,5,9) %>%
+    knitr::kable("html",col.names=c("Zone","Sur le dernier trimestre","Evolution sur un an (en %)",
+                             "Sur le dernier trimestre","Evolution sur un an (en %)",
+                             "En fin de p\u00e9riode","Evolution sur un an (en %)",
+                             "Prix moyen sur le dernier trimestre (en €)","Evolution sur un an (en %)"),
+          digits=c(0,0,1,0,1,0,1,0,1),
+          format.args=list(big.mark=" ",decimal.mark=",")) %>%
+    kableExtra::kable_styling(font_size = 12) %>%
+    kableExtra::row_spec(1:2, bold = T, background = "#f0f0f5") %>%
+    kableExtra::add_header_above(c(" "=1, "Ventes" = 2, "Mises en vente" = 2, "Encours" = 2,"Prix au m2"=2))
+}
diff --git a/R/utils-pipe.R b/R/utils-pipe.R
new file mode 100644
index 0000000000000000000000000000000000000000..e79f3d80856576d6db32c9fb05cdbc02b28f4ff8
--- /dev/null
+++ b/R/utils-pipe.R
@@ -0,0 +1,11 @@
+#' Pipe operator
+#'
+#' See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details.
+#'
+#' @name %>%
+#' @rdname pipe
+#' @keywords internal
+#' @export
+#' @importFrom magrittr %>%
+#' @usage lhs \%>\% rhs
+NULL
diff --git a/data-raw/data-raw-ecln-sas-R.R b/data-raw/data-raw-ecln-sas-R.R
new file mode 100644
index 0000000000000000000000000000000000000000..d79714716ca5e5025b0f719146710716343f8e25
--- /dev/null
+++ b/data-raw/data-raw-ecln-sas-R.R
@@ -0,0 +1,279 @@
+## code to prepare `data-raw-ecln-sas.R` dataset goes here
+
+library(magrittr)
+library(haven)
+library(readxl)
+library(lubridate)
+library(conflicted)
+# devtool::install_github("MaelTheuliere/COGiter")
+library(COGiter)
+library(purrr)
+library(dplyr)
+library(tidyr)
+library(forcats)
+library(lubridate)
+library(stringr)
+library(glue)
+library(dtplyr)
+options(scipen = 999)
+conflict_prefer("filter", "dplyr")
+conflict_prefer("lag", "dplyr")
+conflict_prefer("union", "dplyr")
+conflict_prefer("setdiff", "dplyr")
+source("R/FormatDate.R")
+
+trimestre <- fs::dir_ls(path = "extdata", type = "directory") %>%
+  stringr::str_replace_all("extdata/","") %>%
+  max()
+trimestre_date <- FormatDate(trimestre, Periodicite = "Trim", sep = "T")
+
+trimestre_min <- FormatCaractere(trimestre_date-years(5)-months(3))
+file_sas <- glue("extdata/{trimestre}/stat_info_data_regionaux.sas7bdat")
+file_redressement <- glue("extdata/{trimestre}/{trimestre}rd1-commercialisation-lgts-neufs.xls")
+
+ECLN <- read_sas(file_sas)
+# Rajout du taux de redressement sur les mises en vente et le stoc --------
+valeur_redressees <- excel_sheets(path = file_redressement)[4:length(excel_sheets(path = file_redressement))] %>%
+  map(~ read_excel(
+    path = file_redressement, sheet = .x,
+    range = "B10:Q10",
+    col_names = F
+  ) %>%
+    select(1:5, 12:14) %>%
+    setNames(nm = c(
+      "Annee", "Periode", "Mises en vente - Appartements", "c_nb_resa", "Encours - Appartements",
+      "Mises en vente - Maisons", "i_nb_resa", "Encours - Maisons"
+    )) %>%
+    mutate(
+      Periode = paste0(Annee, Periode),
+      REG = .x
+    ) %>%
+    select(REG, everything(), -Annee, -c_nb_resa, -i_nb_resa)) %>%
+  bind_rows() %>%
+  gather(Indicateur, Valeur, -REG, -Periode)
+
+# calcul des indicateurs sur la carte des communes contenue dans ecln
+# passage des données au cog à jour
+
+indic_ecln <- ECLN %>%
+  select(DEPCOM = code_insee, Periode = trim_mev, id_type_lgt, mev_t) %>%
+  as_tibble() %>%
+  filter(Periode >= trimestre_min) %>%
+  group_by(id_type_lgt, DEPCOM, Periode) %>%
+  summarise(mev_t = sum(mev_t, na.rm = T)) %>%
+  ungroup() %>%
+  full_join(ECLN %>%
+              select(DEPCOM = code_insee, Periode = trimestre_enquete, everything()) %>%
+              filter(Periode >= trimestre_min) %>%
+              mutate(
+                nb_lgt_inv = nb_lgt_inv_t1 + nb_lgt_inv_t2 + nb_lgt_inv_t3 + nb_lgt_inv_t4 + nb_lgt_inv_t5 + nb_lgt_inv_t6,
+                nb_hors_resa_inv = nb_resa - nb_lgt_inv
+              ) %>%
+              group_by(id_type_lgt, DEPCOM, Periode) %>%
+              summarise(
+                nb_resa = sum(nb_resa, na.rm = T),
+                nb_resa_inv = sum(nb_lgt_inv, na.rm = T),
+                nb_hors_resa_inv = sum(nb_hors_resa_inv, na.rm = T),
+                stock_fin = sum(stock_fin, na.rm = T),
+                prix = sum(prix, na.rm = T),
+                surface = sum(surface, na.rm = T)
+              ) %>%
+              ungroup()) %>%
+  gather(Indicateur, Valeur, mev_t:surface) %>%
+  mutate(
+    Periode = factor(Periode),
+    id_type_lgt = factor(id_type_lgt),
+    DEPCOM = factor(DEPCOM),
+    id_type_lgt = fct_recode(id_type_lgt, Maisons = "1", Appartements = "2"),
+    Indicateur = fct_recode(factor(Indicateur), `Mises en vente` = "mev_t", Ventes = "nb_resa", `Ventes en investissement locatif` = "nb_resa_inv", `Ventes hors investissement locatif` = "nb_hors_resa_inv", Encours = "stock_fin", Prix = "prix", Surface = "surface"),
+    Indicateur = str_c(Indicateur, " - ", id_type_lgt)
+  ) %>%
+  select(-id_type_lgt) %>%
+  mutate(Valeur = ifelse(is.na(Valeur),0,Valeur)) %>%
+  passer_au_cog_a_jour(code_commune = DEPCOM, aggrege = T, garder = F) %>%
+  right_join(communes %>% select(DEPCOM)) %>%
+  complete(DEPCOM, Periode, Indicateur,
+           fill = list(Valeur = 0)
+  ) %>%
+  filter(!is.na(Indicateur), !is.na(Periode)) %>%
+  passer_au_cog_a_jour(code_commune = DEPCOM, aggrege = T, garder = T) %>%
+  select(REG, DEPCOM, Periode, Indicateur, Valeur) %>%
+  mutate_if(is.character, as.factor)
+
+# On ne garde que les régions métro
+indic_ecln <- indic_ecln %>%
+  filter(!(REG %in% c("01", "02", "03", "04", "05", "06")))
+
+
+rm(ECLN)
+
+taux_redressement <- indic_ecln %>%
+  filter(
+    Indicateur %in% unique(valeur_redressees$Indicateur),
+    as.character(REG) %in% unique(valeur_redressees$REG),
+    Periode == max(as.character(Periode))
+  ) %>%
+  select(REG, Periode, Indicateur, Valeur) %>%
+  group_by(REG, Periode, Indicateur) %>%
+  summarise_all(funs(sum)) %>%
+  ungroup() %>%
+  left_join(valeur_redressees, by = c("REG", "Periode", "Indicateur")) %>%
+  mutate(taux_redressement = ifelse(Valeur.x > 0, Valeur.y / Valeur.x, 1)) %>%
+  select(REG, Periode, Indicateur, taux_redressement)
+
+indic_ecln <- indic_ecln %>%
+  left_join(taux_redressement) %>%
+  mutate(Valeur = ifelse(Periode == max(Periode) & Indicateur %in% unique(valeur_redressees$Indicateur),
+                         Valeur * taux_redressement,
+                         Valeur
+  )) %>%
+  select(-taux_redressement, -REG) %>%
+  mutate_if(is.character, as.factor)
+
+
+# Calcul sur total logements ----------------------------------------------
+
+
+indic_ecln <- bind_rows(
+  indic_ecln,
+  indic_ecln %>%
+    mutate(Indicateur = str_split_fixed(Indicateur, " - ", 2)[, 1] %>% str_c(" - Logements") %>% as.factor()) %>%
+    group_by_if(is.factor) %>%
+    summarise_all(funs(sum(., na.rm = T))) %>%
+    ungroup()
+) %>%
+  mutate_if(is.character, as.factor)
+
+# Aggrégation de l'ensemble des calculs sur les zones -----------------------------------
+indic_ecln <- indic_ecln %>%
+  group_split(Periode) %>%
+  furrr::future_map_dfr(cogifier)
+
+# Rajout des zones abc
+# update 2019
+# zonage_abc_r52<-zonage_abc_r52 %>%
+#   passer_au_cog_a_jour(aggrege = F,garder_info_supra = F) %>%
+#   distinct() %>%
+#   arrange(DEPCOM,zonage_abc) %>%
+#   group_by(DEPCOM) %>%
+#   slice(1) %>%
+#   ungroup()
+
+
+indic_ecln_abc <- indic_ecln %>%
+  filter(TypeZone == "Communes", CodeZone %in% (liste_zone %>%
+                                                  filter(str_detect(REG, "52"), TypeZone == "Communes") %>%
+                                                  pull(CodeZone))) %>%
+  left_join(zonage_abc, by = c("CodeZone" = "DEPCOM")) %>%
+  select(zonage_abc, Periode, Indicateur, Valeur) %>%
+  rename(CodeZone = zonage_abc) %>%
+  mutate(
+    Zone = CodeZone,
+    TypeZone = "ABC"
+  ) %>%
+  group_by(TypeZone, Zone, CodeZone, Periode, Indicateur) %>%
+  summarise(Valeur = sum(Valeur)) %>%
+  ungroup()
+
+# indic_ecln_pinel <- indic_ecln %>%
+#   filter(TypeZone == "Communes", CodeZone %in% (liste_zone %>%
+#     filter(str_detect(REG, "52"), TypeZone == "Communes") %>%
+#     pull(CodeZone))) %>%
+#   left_join(zonage_pinel_r52, by = c("CodeZone" = "DEPCOM")) %>%
+#   select(zonage_pinel, Periode, Indicateur, Valeur) %>%
+#   rename(CodeZone = zonage_pinel) %>%
+#   mutate(
+#     Zone = CodeZone,
+#     TypeZone = "Pinel"
+#   ) %>%
+#   group_by(TypeZone, Zone, CodeZone, Periode, Indicateur) %>%
+#   summarise(Valeur = sum(Valeur)) %>%
+#   ungroup()
+
+# Aggrégation de l'ensemble des calculs sur les zones -----------------------------------
+
+
+indic_ecln <- bind_rows(indic_ecln, indic_ecln_abc)%>%
+  arrange(TypeZone, Zone, CodeZone, Indicateur, Periode) %>%
+  filter(TypeZone != "Communes")
+
+rm(list=setdiff(ls(),c("indic_ecln","FormatDate")))
+
+# Utilisation du package dtplyr pour la performance
+
+indicateurs_non_sommables <- str_subset(levels(indic_ecln$Indicateur),"Encours")
+
+indic_ecln <- indic_ecln %>%
+  lazy_dt() %>%
+  group_by(TypeZone, Zone, CodeZone, Indicateur) %>%
+  mutate(Valeur_cumul = Valeur + lag(Valeur) + lag(Valeur, 2) + lag(Valeur, 3)
+  ) %>%
+  ungroup() %>%
+  mutate(Valeur_cumul=ifelse(Indicateur %in% indicateurs_non_sommables,Valeur,Valeur_cumul)) %>%
+  as_tibble()
+
+
+# Calcul des valeurs trimestrielles et cumul annuel ---------------------------
+
+
+indic_ecln_trim <- indic_ecln %>%
+  select(-Valeur_cumul) %>%
+  mutate(Indicateur = str_replace_all(Indicateur, " - ", "_")) %>%
+  spread(Indicateur, Valeur, fill = 0) %>%
+  mutate(
+    PrixM2_Maisons = Prix_Maisons / Surface_Maisons,
+    PrixM2_Appartements = Prix_Appartements / Surface_Appartements,
+    PrixM2_Logements = Prix_Logements / Surface_Logements,
+    PrixPar_Maisons = Prix_Maisons / Ventes_Maisons,
+    PrixPar_Appartements = Prix_Appartements / Ventes_Appartements,
+    PrixPar_Logements = Prix_Logements / Ventes_Logements
+  ) %>%
+  gather(Indicateur, Valeur, Encours_Appartements:PrixPar_Logements) %>%
+  mutate(
+    Indicateur = str_replace_all(Indicateur, "_", " - "),
+    Periode = FormatDate(Periode, Periodicite = "Trim", sep = "T"),
+    Source = "ECLN",
+    TypeIndicateur = "Trimestriel"
+  ) %>%
+  filter(Periode > "2010-01-01")
+
+indic_ecln_cumul <- indic_ecln %>%
+  select(-Valeur) %>%
+  mutate(Indicateur = str_replace_all(Indicateur, " - ", "_")) %>%
+  spread(Indicateur, Valeur_cumul, fill = 0) %>%
+  mutate(
+    PrixM2_Maisons = Prix_Maisons / Surface_Maisons,
+    PrixM2_Appartements = Prix_Appartements / Surface_Appartements,
+    PrixM2_Logements = Prix_Logements / Surface_Logements,
+    PrixPar_Maisons = Prix_Maisons / Ventes_Maisons,
+    PrixPar_Appartements = Prix_Appartements / Ventes_Appartements,
+    PrixPar_Logements = Prix_Logements / Ventes_Logements
+  ) %>%
+  gather(Indicateur, Valeur, Encours_Appartements:PrixPar_Logements) %>%
+  mutate(
+    Indicateur = str_replace_all(Indicateur, "_", " - "),
+    Periode = FormatDate(Periode, Periodicite = "Trim", sep = "T"),
+    Source = "ECLN",
+    TypeIndicateur = "Cumul annuel"
+  ) %>%
+  filter(Periode > "2011-01-01")
+
+# Aggrétation finale -----
+
+TauxEvolution12Mois <- function(.data) {
+  .data %>%
+    arrange(Source, TypeZone, Zone, CodeZone, TypeIndicateur, Indicateur) %>%
+    select(Source, TypeZone, Zone, CodeZone, TypeIndicateur, Indicateur, Periode, Valeur) %>%
+    group_by(Source, TypeZone, Zone, CodeZone, TypeIndicateur, Indicateur) %>%
+    mutate(TauxEvolution12Mois = round(100 * Valeur / lag(Valeur, 4) - 100, 1)) %>%
+    ungroup()
+}
+indic_ecln_cumul <- TauxEvolution12Mois(indic_ecln_cumul)
+indic_ecln_trim <- TauxEvolution12Mois(indic_ecln_trim)
+
+indic_ecln <- bind_rows(indic_ecln_cumul, indic_ecln_trim) %>%
+  mutate_if(is.character, as.factor) %>%
+  mutate(TypeZone = fct_relevel(TypeZone, "France", "Régions", "Départements", "Epci", "ABC"))
+
+
+usethis::use_data(indic_ecln, overwrite = TRUE)
diff --git a/devstuff.R b/devstuff.R
new file mode 100644
index 0000000000000000000000000000000000000000..e6f9fc4e33dfdabae64789c37f44efd68019897e
--- /dev/null
+++ b/devstuff.R
@@ -0,0 +1,25 @@
+usethis::create_package(".")
+usethis::use_gpl3_license()
+usethis::use_build_ignore("devstuff.R")
+usethis::use_data_raw("data-raw-ecln-sas.R")
+usethis::use_build_ignore("extdata/")
+usethis::use_r("FormatDate.R")
+usethis::use_package('dplyr')
+usethis::use_package('lubridate')
+usethis::use_package('stringr')
+usethis::use_r("creer_graphique_evolution_annuelle")
+usethis::use_r('data_prep')
+usethis::use_r('globals')
+usethis::use_r("graphique_series_temporelles")
+usethis::use_r("graphique_evolution_trim")
+usethis::use_r("label_rang")
+usethis::use_pipe()
+usethis::use_r("indic_ecln")
+usethis::use_r("graphique_investissement_locatif.R")
+devtools::check()
+usethis::use_r("graphique_series_temporelles_prix")
+usethis::use_r("tableau_synthese_annuelle")
+usethis::use_package('kableExtra')
+usethis::use_package('knitr')
+usethis::use_package('tidyr')
+usethis::use_r("tableau_synthese_trimestrielle")
diff --git a/man/FormatCaractere.Rd b/man/FormatCaractere.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..70ec83216b5c96e2f017bc41dbfa936c3a73e3d8
--- /dev/null
+++ b/man/FormatCaractere.Rd
@@ -0,0 +1,20 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/FormatDate.R
+\name{FormatCaractere}
+\alias{FormatCaractere}
+\title{conversion d'une variable date en nommage trimestriel}
+\usage{
+FormatCaractere(Periode)
+}
+\arguments{
+\item{Periode}{date à convertire}
+}
+\value{
+une chaine de caractère
+}
+\description{
+conversion d'une variable date en nommage trimestriel
+}
+\examples{
+FormatCaractere("2010-10-01")
+}
diff --git a/man/FormatDate.Rd b/man/FormatDate.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..5b8a2aa1eff764a959d93c55643c38c2fb9162f7
--- /dev/null
+++ b/man/FormatDate.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/FormatDate.R
+\name{FormatDate}
+\alias{FormatDate}
+\title{Conversion d'une date au mois ou trimestre en format date au jour.}
+\usage{
+FormatDate(Periode, Periodicite, sep = "-")
+}
+\arguments{
+\item{Periode}{caractère une date en format anneetrimestre ou anneemois}
+
+\item{Periodicite}{caractère Trim si la date est en trimestre, Mois pour une date au mois}
+
+\item{sep}{le séparateur entre l'année et le mois/trimestre}
+}
+\value{
+une date au format date
+}
+\description{
+Conversion d'une date au mois ou trimestre en format date au jour.
+}
+\examples{
+FormatDate("2010-10", Periodicite = "Mois")
+}
diff --git a/man/creer_graphique_evolution_annuelle.Rd b/man/creer_graphique_evolution_annuelle.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..2dc8809a34495e440862737da6f928a1f984c868
--- /dev/null
+++ b/man/creer_graphique_evolution_annuelle.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/creer_graphique_evolution_annuelle.R
+\name{creer_graphique_evolution_annuelle}
+\alias{creer_graphique_evolution_annuelle}
+\title{graphique barre sur un an}
+\usage{
+creer_graphique_evolution_annuelle(
+  data = indic_ecln,
+  type_zone = c("Régions", "Départements"),
+  type_logement = "collectif",
+  titre = "",
+  bas_de_page = ""
+)
+}
+\arguments{
+\item{data}{Le dataframe.}
+
+\item{type_zone}{Liste des types de zonage à intégrer dans la facette.}
+
+\item{type_logement}{Collectifs ou individuels.}
+
+\item{titre}{Le titre du graphique.}
+
+\item{bas_de_page}{Le bas de page du graphique.}
+}
+\value{
+Un graphique ggplot2.
+}
+\description{
+graphique barre sur un an
+}
diff --git a/man/data_prep.Rd b/man/data_prep.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..37a21ff8255583bb8e0b426e98e98396ab9202bd
--- /dev/null
+++ b/man/data_prep.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/data_prep.R
+\name{data_prep}
+\alias{data_prep}
+\title{datapreparation des données}
+\usage{
+data_prep(reg, abc = TRUE, zone_a_secretiser = "", marches_a_secretiser = "")
+}
+\arguments{
+\item{reg}{code region}
+
+\item{abc}{TRUE si on veut garder les zonages abc}
+
+\item{zone_a_secretiser}{listes des zonages à secretiser}
+
+\item{marches_a_secretiser}{liste des marchés à secretiser : individuel, collectif, tous}
+}
+\value{
+un dataframe filtré sur la région souhaitée
+}
+\description{
+datapreparation des données
+}
diff --git a/man/graphique_evolution_trim.Rd b/man/graphique_evolution_trim.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..59d1e135acf5d165bb62c32b97b344d46a226dc3
--- /dev/null
+++ b/man/graphique_evolution_trim.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/graphique_evolution_trim.R
+\name{graphique_evolution_trim}
+\alias{graphique_evolution_trim}
+\title{graphique sur un territoire sur un indicateur en moyenne annuelle et valeur trimestrielle}
+\usage{
+graphique_evolution_trim(
+  data = indic_ecln,
+  indicateur = "Ventes - Logements",
+  zone = "Pays de la Loire",
+  titre = "Ventes de logements neufs en Pays de la Loire"
+)
+}
+\arguments{
+\item{data}{Le dataframe avec les données ecln.}
+
+\item{indicateur}{L'indicateur à visualiser.}
+
+\item{zone}{Le territoire sur lequel visualiser l'indicateur.}
+
+\item{titre}{Le titre du graphique.}
+}
+\value{
+un ggplot2
+}
+\description{
+graphique sur un territoire sur un indicateur en moyenne annuelle et valeur trimestrielle
+}
diff --git a/man/graphique_investissement_locatif.Rd b/man/graphique_investissement_locatif.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..6737a593d7ed9ec44ec58fe185cf42f83fe231e1
--- /dev/null
+++ b/man/graphique_investissement_locatif.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/graphique_investissement_locatif.R
+\name{graphique_investissement_locatif}
+\alias{graphique_investissement_locatif}
+\title{Graphique d'évolution de l'investissement locatif}
+\usage{
+graphique_investissement_locatif(
+  data = indic_ecln,
+  type_logement = "Appartements",
+  type_zone = c("Régions", "Départements"),
+  type_indicateur = "Cumul annuel",
+  titre = "",
+  soustitre = "",
+  bas_de_page = ""
+)
+}
+\arguments{
+\item{data}{le dataframe avec les données ecln}
+
+\item{type_logement}{Appartements ou Maisons}
+
+\item{type_zone}{liste des types de zonage à intégrer dans la facette}
+
+\item{type_indicateur}{cumul annuel ou valeur trimestrielle}
+
+\item{titre}{titre du graphique}
+
+\item{soustitre}{sous titre du graphique}
+
+\item{bas_de_page}{bas de page}
+}
+\value{
+Un graphique ggplot2.
+}
+\description{
+Graphique d'évolution de l'investissement locatif
+}
diff --git a/man/graphique_series_temporelles.Rd b/man/graphique_series_temporelles.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..a3c6b09ba65472db00a4ecf2a662b244a5fdc088
--- /dev/null
+++ b/man/graphique_series_temporelles.Rd
@@ -0,0 +1,37 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/graphique_series_temporelles.R
+\name{graphique_series_temporelles}
+\alias{graphique_series_temporelles}
+\title{graphique en série temporelle à facette}
+\usage{
+graphique_series_temporelles(
+  data = indic_ecln,
+  type_logement = "Appartements",
+  indicateurs = c("Encours", "Mises en vente", "Ventes"),
+  type_zone = c("Régions", "Départements"),
+  titre = "",
+  bas_de_page = "",
+  ncol_facet = 4
+)
+}
+\arguments{
+\item{data}{Le dataframe avec les données ecln.}
+
+\item{type_logement}{Appartements ou Maisons.}
+
+\item{indicateurs}{Un vecteur d'indicateur à visualiser dans le graphique.}
+
+\item{type_zone}{Liste des types de zonage à intégrer dans la facette.}
+
+\item{titre}{Le titre du graphique.}
+
+\item{bas_de_page}{Le bas de page du graphique.}
+
+\item{ncol_facet}{Le nombre de colonnes dans la facette.}
+}
+\value{
+Un graphique ggplot2.
+}
+\description{
+graphique en série temporelle à facette
+}
diff --git a/man/graphique_series_temporelles_prix.Rd b/man/graphique_series_temporelles_prix.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..745fe3209407127374eca6306510a439ae0ed43f
--- /dev/null
+++ b/man/graphique_series_temporelles_prix.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/graphique_series_temporelles_prix.R
+\name{graphique_series_temporelles_prix}
+\alias{graphique_series_temporelles_prix}
+\title{graphique sur l'évolution du prix de vente des biens.}
+\usage{
+graphique_series_temporelles_prix(
+  data = indic_ecln,
+  type_logement = "Appartements",
+  type_zone = c("Régions", "Départements"),
+  type_indicateur = "Cumul annuel",
+  titre = "",
+  bas_de_page = ""
+)
+}
+\arguments{
+\item{data}{Le dataframe.}
+
+\item{type_logement}{Appartements ou Maisons.}
+
+\item{type_zone}{Liste des types de zonage à intégrer dans la facette.}
+
+\item{type_indicateur}{Cumul annuel ou valeur trimestrielle.}
+
+\item{titre}{Le titre du graphique.}
+
+\item{bas_de_page}{Le bas de page du graphique.}
+}
+\value{
+Un graphique ggplot2.
+}
+\description{
+graphique sur l'évolution du prix de vente des biens.
+}
diff --git a/man/indic_ecln.Rd b/man/indic_ecln.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..c0bf90f55e932ffcca73eb2cdbe710453b054a02
--- /dev/null
+++ b/man/indic_ecln.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/indic_ecln.R
+\docType{data}
+\encoding{UTF-8}
+\name{indic_ecln}
+\alias{indic_ecln}
+\title{Table contenant les différents indicateurs de la source ecln utiles pour la publication.}
+\format{
+Table de 92664 lignes et 10 colonnes:
+\describe{
+\item{TypeZone}{Type de territoire}
+\item{CodeZone}{Code du territoire}
+\item{Zone}{Libellé du territoire}
+\item{TypeIndicateur}{valeur cumulée sur 12 mois ou trimestrielle}
+\item{Indicateur}{Liste des indicateurs}
+\item{Periode}{Trimestre d'observation}
+\item{valeur}{Valeur de l'indicateur pour la modalité de variable}
+\item{TauxEvolution12Mois}{Evolution de l'indicateur sur 12 mois glissant}
+}
+}
+\source{
+\url{https://www.statistiques.developpement-durable.gouv.fr/enquete-sur-la-commercialisation-des-logements-neufs-ecln}
+}
+\usage{
+indic_ecln
+}
+\description{
+Table contenant les différents indicateurs de la source ecln utiles pour la publication.
+}
+\keyword{datasets}
diff --git a/man/pipe.Rd b/man/pipe.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..0eec752616534f156cac398f07bef8cc3f527935
--- /dev/null
+++ b/man/pipe.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utils-pipe.R
+\name{\%>\%}
+\alias{\%>\%}
+\title{Pipe operator}
+\usage{
+lhs \%>\% rhs
+}
+\description{
+See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details.
+}
+\keyword{internal}
diff --git a/man/tableau_synthese_annuel.Rd b/man/tableau_synthese_annuel.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..680cec671e3f6aa30362712b941fdb0f1eb75e64
--- /dev/null
+++ b/man/tableau_synthese_annuel.Rd
@@ -0,0 +1,25 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tableau_synthese_annuelle.R
+\name{tableau_synthese_annuel}
+\alias{tableau_synthese_annuel}
+\title{tableau de synthèse des données en cumul annuel}
+\usage{
+tableau_synthese_annuel(
+  data = indic_ecln,
+  type_zone = c("France", "Régions", "Départements"),
+  type_logement = "collectif"
+)
+}
+\arguments{
+\item{data}{Le dataframe.}
+
+\item{type_zone}{Liste des types de zonage à intégrer dans la facette.}
+
+\item{type_logement}{Collectifs ou individuels.}
+}
+\value{
+Un table kable
+}
+\description{
+tableau de synthèse des données en cumul annuel
+}
diff --git a/man/tableau_synthese_trimestrielle.Rd b/man/tableau_synthese_trimestrielle.Rd
new file mode 100644
index 0000000000000000000000000000000000000000..99bc62e1ddc46ee1fd4242bbd35ef837ad135a79
--- /dev/null
+++ b/man/tableau_synthese_trimestrielle.Rd
@@ -0,0 +1,19 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tableau_synthese_trimestrielle.R
+\name{tableau_synthese_trimestrielle}
+\alias{tableau_synthese_trimestrielle}
+\title{Création du tableau de synthèse trimestrielle}
+\usage{
+tableau_synthese_trimestrielle(data = indic_ecln, type_logement = "collectif")
+}
+\arguments{
+\item{data}{Le dataframe.}
+
+\item{type_logement}{Collectifs ou individuels.}
+}
+\value{
+un tableau kable
+}
+\description{
+Création du tableau de synthèse trimestrielle
+}
diff --git a/propre.ecln.Rproj b/propre.ecln.Rproj
new file mode 100644
index 0000000000000000000000000000000000000000..69fafd4b6dddad27500cfc67efb9fb16e86a96bd
--- /dev/null
+++ b/propre.ecln.Rproj
@@ -0,0 +1,22 @@
+Version: 1.0
+
+RestoreWorkspace: No
+SaveWorkspace: No
+AlwaysSaveHistory: Default
+
+EnableCodeIndexing: Yes
+UseSpacesForTab: Yes
+NumSpacesForTab: 2
+Encoding: UTF-8
+
+RnwWeave: Sweave
+LaTeX: pdfLaTeX
+
+AutoAppendNewline: Yes
+StripTrailingWhitespace: Yes
+LineEndingConversion: Posix
+
+BuildType: Package
+PackageUseDevtools: Yes
+PackageInstallArgs: --no-multiarch --with-keep.source
+PackageRoxygenize: rd,collate,namespace