<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/index.php?action=history&amp;feed=atom&amp;title=Module_TvaNdf</id>
	<title>Module TvaNdf - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/index.php?action=history&amp;feed=atom&amp;title=Module_TvaNdf"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_TvaNdf&amp;action=history"/>
	<updated>2026-10-29T22:07:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_TvaNdf&amp;diff=66071&amp;oldid=prev</id>
		<title>AlexBordaraud: Created page with &quot;Category:Complementary modules Category:TVANDF Category:Expense reports Category:VAT management Category:Multi-VAT {{TemplateDocDevEn}} {{TemplateDocUser}}...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_TvaNdf&amp;diff=66071&amp;oldid=prev"/>
		<updated>2026-05-04T06:52:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;a href=&quot;/index.php/Category:Complementary_modules&quot; title=&quot;Category:Complementary modules&quot;&gt;Category:Complementary modules&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:TVANDF&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:TVANDF (page does not exist)&quot;&gt;Category:TVANDF&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:Expense_reports&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Expense reports (page does not exist)&quot;&gt;Category:Expense reports&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:VAT_management&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:VAT management (page does not exist)&quot;&gt;Category:VAT management&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:Multi-VAT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Multi-VAT (page does not exist)&quot;&gt;Category:Multi-VAT&lt;/a&gt; {{TemplateDocDevEn}} {{TemplateDocUser}}...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Complementary modules]]&lt;br /&gt;
[[Category:TVANDF]]&lt;br /&gt;
[[Category:Expense reports]]&lt;br /&gt;
[[Category:VAT management]]&lt;br /&gt;
[[Category:Multi-VAT]]&lt;br /&gt;
{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
=Informations=&lt;br /&gt;
&lt;br /&gt;
{{TemplateModuleInfo&lt;br /&gt;
|modulename=Tvandf&lt;br /&gt;
|editor=Alex BORDARAUD - Lysis https://lysis.net&lt;br /&gt;
|webbuy=&lt;br /&gt;
|status=stable&lt;br /&gt;
|version=1.0.5&lt;br /&gt;
|minversion=19.0&lt;br /&gt;
|maxversion=&lt;br /&gt;
|note=Module ID: 142804 ([[List_of_modules_id]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TVANDF&amp;#039;&amp;#039;&amp;#039; (technical module name: &amp;#039;&amp;#039;&amp;#039;TvaNdf&amp;#039;&amp;#039;&amp;#039;, directory &amp;lt;code&amp;gt;tvandf&amp;lt;/code&amp;gt;, ID &amp;#039;&amp;#039;&amp;#039;142804&amp;#039;&amp;#039;&amp;#039;) is a complementary Dolibarr module that transforms &amp;#039;&amp;#039;&amp;#039;multi-VAT expense report entry&amp;#039;&amp;#039;&amp;#039;. It adds a &amp;#039;&amp;#039;&amp;#039;matrix interface&amp;#039;&amp;#039;&amp;#039; allowing expense breakdown across &amp;#039;&amp;#039;&amp;#039;multiple VAT rates&amp;#039;&amp;#039;&amp;#039; with &amp;#039;&amp;#039;&amp;#039;single supporting document&amp;#039;&amp;#039;&amp;#039; for the entire group. Technically, the module uses extrafield &amp;lt;code&amp;gt;tvandf_line_group&amp;lt;/code&amp;gt; to group generated standard Dolibarr lines, providing &amp;#039;&amp;#039;&amp;#039;full compatibility&amp;#039;&amp;#039;&amp;#039; with the native accounting engine.&lt;br /&gt;
&lt;br /&gt;
=Technical Architecture=&lt;br /&gt;
&lt;br /&gt;
==Database Layer==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No core table modifications&amp;#039;&amp;#039;&amp;#039;: Uses existing &amp;lt;code&amp;gt;expensereport_det&amp;lt;/code&amp;gt; structure&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Extrafield integration&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;options_tvandf_line_group&amp;lt;/code&amp;gt; UUID links related lines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ECM compatibility&amp;#039;&amp;#039;&amp;#039;: Standard &amp;lt;code&amp;gt;fk_ecm_files&amp;lt;/code&amp;gt; reference sharing across group members&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VAT dictionary binding&amp;#039;&amp;#039;&amp;#039;: Dynamic rate columns from active &amp;lt;code&amp;gt;c_tva&amp;lt;/code&amp;gt; entries filtered by &amp;lt;code&amp;gt;mysoc-&amp;gt;country_id&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hook Implementation==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Context targeting&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;expensereportcard&amp;lt;/code&amp;gt; hook injection points&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Asset loading&amp;#039;&amp;#039;&amp;#039;: CSS/JS via &amp;lt;code&amp;gt;printCommonFooter&amp;lt;/code&amp;gt; with bootstrap data attributes&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Action buttons&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;addMoreActionsButtons&amp;lt;/code&amp;gt; for matrix toggle and add-line functions&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Permission alignment&amp;#039;&amp;#039;&amp;#039;: Respects core &amp;lt;code&amp;gt;expensereport-&amp;gt;creer&amp;lt;/code&amp;gt; rights and draft/refused workflow&lt;br /&gt;
&lt;br /&gt;
==Frontend Architecture==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;jQuery UI dialogs&amp;#039;&amp;#039;&amp;#039;: Matrix forms with VAT rate columns and shared metadata fields&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AJAX endpoints&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;ajax/expensereport_matrix.php&amp;lt;/code&amp;gt; for CRUD operations on line groups&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;File upload&amp;#039;&amp;#039;&amp;#039;: Integrated ECM document attachment with progress feedback&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;View switching&amp;#039;&amp;#039;&amp;#039;: Seamless toggle between matrix UI and standard Dolibarr line table&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
==English (Technical)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Core Problem:&amp;#039;&amp;#039;&amp;#039; Standard Dolibarr expense workflow (&amp;lt;code&amp;gt;expensereport/card.php&amp;lt;/code&amp;gt;) processes entries through &amp;lt;code&amp;gt;ExpenseReportLine&amp;lt;/code&amp;gt; objects with &amp;#039;&amp;#039;&amp;#039;one VAT rate per database row&amp;#039;&amp;#039;&amp;#039;. Multi-rate receipts require &amp;#039;&amp;#039;&amp;#039;multiple line insertions&amp;#039;&amp;#039;&amp;#039;, duplicated context fields (&amp;lt;code&amp;gt;fk_projet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;), and separate ECM document associations following native &amp;lt;code&amp;gt;fk_element&amp;lt;/code&amp;gt; patterns.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TVANDF Solution:&amp;#039;&amp;#039;&amp;#039; Hook-based matrix UI overlaying the expense card context. Dynamic VAT grid populated from active tax dictionary, generating &amp;#039;&amp;#039;&amp;#039;standard expense lines&amp;#039;&amp;#039;&amp;#039; linked via technical extrafield. ECM integration uses shared document references across grouped lines.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Technical Benefits:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Non-intrusive integration&amp;#039;&amp;#039;&amp;#039;: Hook system preserves core functionality&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Native line compatibility&amp;#039;&amp;#039;&amp;#039;: Generated &amp;lt;code&amp;gt;ExpenseReportLine&amp;lt;/code&amp;gt; objects with standard fields&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Extrafield grouping&amp;#039;&amp;#039;&amp;#039;: UUID-based line association without schema modifications&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Permission compliance&amp;#039;&amp;#039;&amp;#039;: Core rights and status workflow preservation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ECM integration&amp;#039;&amp;#039;&amp;#039;: Standard document management with reference sharing&lt;br /&gt;
&lt;br /&gt;
==Français (Technique)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Problème central :&amp;#039;&amp;#039;&amp;#039; Le workflow natif Dolibarr (&amp;lt;code&amp;gt;expensereport/card.php&amp;lt;/code&amp;gt;) traite les saisies via des objets &amp;lt;code&amp;gt;ExpenseReportLine&amp;lt;/code&amp;gt; avec &amp;#039;&amp;#039;&amp;#039;un taux de TVA par ligne en base&amp;#039;&amp;#039;&amp;#039;. Les reçus multi-taux nécessitent &amp;#039;&amp;#039;&amp;#039;plusieurs insertions de lignes&amp;#039;&amp;#039;&amp;#039;, la duplication des champs de contexte (&amp;lt;code&amp;gt;fk_projet&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;comments&amp;lt;/code&amp;gt;), et des associations ECM séparées suivant les patterns natifs &amp;lt;code&amp;gt;fk_element&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution TVANDF :&amp;#039;&amp;#039;&amp;#039; Interface matricielle basée sur hooks superposée au contexte de fiche de frais. Grille TVA dynamique alimentée depuis le dictionnaire fiscal actif, générant des &amp;#039;&amp;#039;&amp;#039;lignes de frais standard&amp;#039;&amp;#039;&amp;#039; reliées via extrafield technique. L&amp;#039;intégration ECM utilise des références de documents partagées entre lignes groupées.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Avantages techniques :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Intégration non-intrusive&amp;#039;&amp;#039;&amp;#039;: Le système de hooks préserve les fonctionnalités du cœur&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Compatibilité lignes natives&amp;#039;&amp;#039;&amp;#039;: Objets &amp;lt;code&amp;gt;ExpenseReportLine&amp;lt;/code&amp;gt; générés avec champs standards&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Regroupement par extrafield&amp;#039;&amp;#039;&amp;#039;: Association de lignes par UUID sans modifications de schéma&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Conformité permissions&amp;#039;&amp;#039;&amp;#039;: Préservation des droits et workflow de statut du cœur&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Intégration ECM&amp;#039;&amp;#039;&amp;#039;: Gestion documentaire standard avec partage de références&lt;br /&gt;
&lt;br /&gt;
=Fonctionnalités techniques=&lt;br /&gt;
&lt;br /&gt;
==Matrix UI Components==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dynamic VAT columns&amp;#039;&amp;#039;&amp;#039;: Auto-generated from &amp;lt;code&amp;gt;c_tva&amp;lt;/code&amp;gt; active entries for company country&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Shared metadata fields&amp;#039;&amp;#039;&amp;#039;: Date, expense type, project, description, quantity, mileage&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;File attachment zone&amp;#039;&amp;#039;&amp;#039;: ECM upload with &amp;lt;code&amp;gt;fk_ecm_files&amp;lt;/code&amp;gt; reference storage&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Calculation engine&amp;#039;&amp;#039;&amp;#039;: Real-time HT/TTC totals with VAT breakdown display&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Validation logic&amp;#039;&amp;#039;&amp;#039;: Field requirement checks aligned with Dolibarr expense configuration&lt;br /&gt;
&lt;br /&gt;
==Backend Processing==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Line group creation&amp;#039;&amp;#039;&amp;#039;: UUID generation and extrafield population on insert&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ECM file linking&amp;#039;&amp;#039;&amp;#039;: Document association across all group member lines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Deletion cascade&amp;#039;&amp;#039;&amp;#039;: Group-level removal with confirmation dialog&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Edit synchronization&amp;#039;&amp;#039;&amp;#039;: Metadata updates propagated to all grouped lines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Accounting integration&amp;#039;&amp;#039;&amp;#039;: Standard line generation preserving native booking logic&lt;br /&gt;
&lt;br /&gt;
==Administration Interface==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Setup tab&amp;#039;&amp;#039;&amp;#039;: Prerequisites explanation, extrafield documentation, native settings link&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;About tab&amp;#039;&amp;#039;&amp;#039;: Module metadata, version info, editor contact&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Changelog tab&amp;#039;&amp;#039;&amp;#039;: Version history from &amp;lt;code&amp;gt;ChangeLog.md&amp;lt;/code&amp;gt; with markdown rendering&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dependency checks&amp;#039;&amp;#039;&amp;#039;: Core expense report module validation&lt;br /&gt;
&lt;br /&gt;
=API Endpoints=&lt;br /&gt;
&lt;br /&gt;
==AJAX Interface (&amp;lt;code&amp;gt;ajax/expensereport_matrix.php&amp;lt;/code&amp;gt;)==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;get_state&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;: Load existing line groups with VAT rate breakdown&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;save_group&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;: Create/update line group with metadata and VAT amounts&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;delete_group&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;: Remove line group and all associated lines&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;upload_piece&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;: ECM file upload with progress tracking&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;get_vat_rates&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;: Dynamic VAT rate list for company configuration&lt;br /&gt;
&lt;br /&gt;
==Security Model==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Token validation&amp;#039;&amp;#039;&amp;#039;: CSRF protection on all AJAX endpoints&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Permission checks&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;expensereport-&amp;gt;creer&amp;lt;/code&amp;gt; validation per operation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Entity filtering&amp;#039;&amp;#039;&amp;#039;: MultiCompany support with proper data isolation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Status validation&amp;#039;&amp;#039;&amp;#039;: Draft/refused state enforcement for edit operations&lt;br /&gt;
&lt;br /&gt;
=Installation and Configuration=&lt;br /&gt;
&lt;br /&gt;
==Technical Requirements==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dolibarr version&amp;#039;&amp;#039;&amp;#039;: 19.0+ (see &amp;lt;code&amp;gt;modTvaNdf.class.php&amp;lt;/code&amp;gt; for exact version)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PHP version&amp;#039;&amp;#039;&amp;#039;: 7.1+ with standard extensions&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Database&amp;#039;&amp;#039;&amp;#039;: Compatible with all Dolibarr-supported databases&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Browser&amp;#039;&amp;#039;&amp;#039;: JavaScript-enabled for matrix UI functionality&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dependencies&amp;#039;&amp;#039;&amp;#039;: Core expense report module mandatory&lt;br /&gt;
&lt;br /&gt;
==Installation Process==&lt;br /&gt;
# Download &amp;lt;code&amp;gt;module_tvandf-x.y.z.zip&amp;lt;/code&amp;gt; (ZIP root = single &amp;lt;code&amp;gt;tvandf/&amp;lt;/code&amp;gt; directory)&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Home → Setup → Modules → Deploy/Import external module&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Activate &amp;#039;&amp;#039;&amp;#039;TVANDF&amp;#039;&amp;#039;&amp;#039;/&amp;#039;TvaNdf&amp;#039; module&lt;br /&gt;
# Verify extrafield creation: &amp;#039;&amp;#039;&amp;#039;Setup → Dictionaries → Expense report lines - Extra fields&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Configure VAT rates in &amp;#039;&amp;#039;&amp;#039;Setup → Dictionaries → VAT&amp;#039;&amp;#039;&amp;#039; for proper matrix columns&lt;br /&gt;
&lt;br /&gt;
==Configuration Notes==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Extrafield preservation&amp;#039;&amp;#039;&amp;#039;: Do not delete &amp;lt;code&amp;gt;tvandf_line_group&amp;lt;/code&amp;gt; while using matrix features&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VAT dictionary dependency&amp;#039;&amp;#039;&amp;#039;: Active rates determine available matrix columns&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ECM configuration&amp;#039;&amp;#039;&amp;#039;: Standard Dolibarr document management settings apply&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Permission setup&amp;#039;&amp;#039;&amp;#039;: Standard expense report rights control matrix access&lt;br /&gt;
&lt;br /&gt;
=Developer Information=&lt;br /&gt;
&lt;br /&gt;
==Module Structure==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Core descriptor&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;core/modules/modTvaNdf.class.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Hook implementation&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;class/actions_tvandf.class.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Matrix logic&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;lib/tvandf_matrix.lib.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AJAX handler&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;ajax/expensereport_matrix.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Frontend assets&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;js/expensereport_matrix.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;css/expensereport_matrix.css&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customization Points==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VAT rate filtering&amp;#039;&amp;#039;&amp;#039;: Modify &amp;lt;code&amp;gt;tvandf_matrix_list_vat_rates()&amp;lt;/code&amp;gt; for custom rate logic&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Extrafield naming&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;TVANDF_EXTRA_LINE_GROUP&amp;lt;/code&amp;gt; constant in &amp;lt;code&amp;gt;lib/tvandf.lib.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;UI labels&amp;#039;&amp;#039;&amp;#039;: Translation files in &amp;lt;code&amp;gt;langs/*/tvandf.lang&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Matrix layout&amp;#039;&amp;#039;&amp;#039;: CSS customization in &amp;lt;code&amp;gt;css/expensereport_matrix.css&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extension Opportunities==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Additional grouping fields&amp;#039;&amp;#039;&amp;#039;: Extend extrafield structure for complex scenarios&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Custom validation rules&amp;#039;&amp;#039;&amp;#039;: Hook into save logic for business-specific constraints&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Reporting integration&amp;#039;&amp;#039;&amp;#039;: Matrix data available through standard Dolibarr line queries&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;API expansion&amp;#039;&amp;#039;&amp;#039;: Additional endpoints for external integration needs&lt;br /&gt;
&lt;br /&gt;
=Compatibility and Limitations=&lt;br /&gt;
&lt;br /&gt;
==Dolibarr Compatibility==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Core versions&amp;#039;&amp;#039;&amp;#039;: Tested on Dolibarr 19.0 through 21.x series&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MultiCompany&amp;#039;&amp;#039;&amp;#039;: Full support with entity-based data isolation&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Accounting&amp;#039;&amp;#039;&amp;#039;: Compatible with all standard accounting export formats&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Themes&amp;#039;&amp;#039;&amp;#039;: Responsive design adapts to standard Dolibarr themes&lt;br /&gt;
&lt;br /&gt;
==Known Limitations==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JavaScript dependency&amp;#039;&amp;#039;&amp;#039;: Matrix UI requires enabled JavaScript&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Browser compatibility&amp;#039;&amp;#039;&amp;#039;: Modern browsers required for optimal experience&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Large VAT sets&amp;#039;&amp;#039;&amp;#039;: Performance considerations with 15+ active VAT rates&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mobile optimization&amp;#039;&amp;#039;&amp;#039;: Matrix interface optimized for desktop/tablet use&lt;br /&gt;
&lt;br /&gt;
=Support and Development=&lt;br /&gt;
&lt;br /&gt;
==Professional Services==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Installation assistance&amp;#039;&amp;#039;&amp;#039;: Configuration and deployment support&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Custom development&amp;#039;&amp;#039;&amp;#039;: Module extensions and integrations&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Training services&amp;#039;&amp;#039;&amp;#039;: User and administrator training programs&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Technical support&amp;#039;&amp;#039;&amp;#039;: Issue resolution and optimization guidance&lt;br /&gt;
&lt;br /&gt;
==Community Resources==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Documentation&amp;#039;&amp;#039;&amp;#039;: Complete technical documentation in module &amp;lt;code&amp;gt;doc/&amp;lt;/code&amp;gt; directory  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Issue tracking&amp;#039;&amp;#039;&amp;#039;: Report bugs and feature requests to module maintainer&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Version updates&amp;#039;&amp;#039;&amp;#039;: Regular releases with Dolibarr compatibility updates&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Code contributions&amp;#039;&amp;#039;&amp;#039;: Community patches and improvements welcome&lt;br /&gt;
&lt;br /&gt;
==Contact Information==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Developer&amp;#039;&amp;#039;&amp;#039;: Alex BORDARAUD - Lysis&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Website&amp;#039;&amp;#039;&amp;#039;: https://lysis.net&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;License&amp;#039;&amp;#039;&amp;#039;: GPLv3+&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Module ID&amp;#039;&amp;#039;&amp;#039;: 142804&lt;br /&gt;
&lt;br /&gt;
=Related Modules and Integration=&lt;br /&gt;
&lt;br /&gt;
==Dolibarr Core Integration==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[ModuleExpensesReports]]&amp;#039;&amp;#039;&amp;#039;: Core expense report functionality&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[ModuleECM]]&amp;#039;&amp;#039;&amp;#039;: Document management system integration  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[ModuleMultiCompany]]&amp;#039;&amp;#039;&amp;#039;: Multi-entity support compatibility&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[ModuleAccounting]]&amp;#039;&amp;#039;&amp;#039;: Accounting export and journal integration&lt;br /&gt;
&lt;br /&gt;
==Complementary Modules==&lt;br /&gt;
* VAT management modules for enhanced tax handling&lt;br /&gt;
* Project module integration for expense allocation&lt;br /&gt;
* HR modules for approval workflow enhancement&lt;br /&gt;
* Reporting modules for advanced expense analytics&lt;br /&gt;
&lt;br /&gt;
=Technical Reference=&lt;br /&gt;
&lt;br /&gt;
==Database Schema Extensions==&lt;br /&gt;
```sql&lt;br /&gt;
-- Extrafield on expensereport_det table&lt;br /&gt;
ALTER TABLE llx_expensereport_det_extrafields ADD COLUMN tvandf_line_group varchar(255);&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
==Key PHP Classes==&lt;br /&gt;
* &amp;lt;code&amp;gt;ActionsTvandf&amp;lt;/code&amp;gt;: Main hook implementation class&lt;br /&gt;
* &amp;lt;code&amp;gt;ExpenseReportLine&amp;lt;/code&amp;gt;: Native Dolibarr line object (preserved)&lt;br /&gt;
* &amp;lt;code&amp;gt;ExtraFields&amp;lt;/code&amp;gt;: Dolibarr extrafield management (extended)&lt;br /&gt;
&lt;br /&gt;
==JavaScript API==&lt;br /&gt;
* Matrix initialization: &amp;lt;code&amp;gt;TvandfMatrix.init()&amp;lt;/code&amp;gt;&lt;br /&gt;
* Group operations: &amp;lt;code&amp;gt;TvandfMatrix.saveGroup()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TvandfMatrix.deleteGroup()&amp;lt;/code&amp;gt;&lt;br /&gt;
* File upload: &amp;lt;code&amp;gt;TvandfMatrix.uploadFile()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Configuration Constants==&lt;br /&gt;
* &amp;lt;code&amp;gt;TVANDF_EXTRA_LINE_GROUP&amp;lt;/code&amp;gt;: Extrafield name constant&lt;br /&gt;
* Module configuration accessible via &amp;lt;code&amp;gt;$conf-&amp;gt;tvandf&amp;lt;/code&amp;gt; global&lt;br /&gt;
&lt;br /&gt;
=Version History=&lt;br /&gt;
&lt;br /&gt;
See &amp;lt;code&amp;gt;ChangeLog.md&amp;lt;/code&amp;gt; in module root for detailed version history and upgrade notes.&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
* [[List_of_modules_id|Dolibarr Module ID Registry]]&lt;br /&gt;
* [[ModuleExpensesReports|Core Expense Reports Documentation]]&lt;br /&gt;
* [[Hooks|Dolibarr Hook System Documentation]]&lt;br /&gt;
* [[ExtraFields|Dolibarr ExtraFields System]]&lt;/div&gt;</summary>
		<author><name>AlexBordaraud</name></author>
	</entry>
</feed>