| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) • Contacts (contacts) |
| Community Apps Dependencies | Show |
| Lines of code | 6238 |
| Technical Name |
ple_cash_book |
| License | OPL-1 |
| Website | https://www.ganemo.co |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) • Contacts (contacts) |
| Community Apps Dependencies | Show |
| Lines of code | 6238 |
| Technical Name |
ple_cash_book |
| License | OPL-1 |
| Website | https://www.ganemo.co |
PLE Cash & Bank
SUNAT Electronic Book Compliance
Generate the official Cash & Bank Register (Libro Caja y Bancos) in TXT format, ready to present to SUNAT via the PLE electronic book program. Mandatory for companies with complete accounting in Peru.
What We're Solving
----------------
TXT 1.1 — Cash Report
Automatically generates the Cash Register report in SUNAT's required TXT format. Extracts journal entries from cash-type accounts, including account codes, document types, correlatives, dates, descriptions, debit/credit amounts, and operation codes — all structured per SUNAT specifications.
TXT 1.2 — Bank Report
Generates the Bank Account Register
report with bank-specific fields like SUNAT bank codes, account numbers,
payment methods, operation descriptions, and reconciliation data.
Pulls bank identification from Peru's official bank catalog via l10n_pe.
Secure SQL Queries
All database queries use parameterized SQL to prevent SQL injection vulnerabilities. Date ranges and company IDs are passed as parameters, not interpolated strings — ensuring data integrity and security.
Multi-Company Ready
Supports multi-company environments
natively. Reports filter data by the active company using Odoo's
company_root_id JSONB field on account codes, ensuring each company
generates its own isolated PLE reports.
Setup & User Manual
Step-by-Step implementation
1. Prerequisites & Initial Configuration
Complete all steps below before generating your first PLE report. Each step is critical — missing any will result in empty or incomplete reports.
Step 1.1 — Install Dependencies
This module requires the following modules to be installed before installation:
ple_purchase_book— Provides the base PLE report framework (ple.report.base) and shared SQL functions.invoice_type_document— Provides document type integration for serie/correlative fields on journal entries.l10n_pe(Peruvian Localization) — Must already be active with the Peruvian chart of accounts loaded. It provides the bank catalog with SUNAT codes (l10n_pe_edi_code).
Step 1.2 — Configure Company Settings
The PLE reports need your company's contributor type defined. This determines how correlative numbers appear in the TXT file.
- Go to Settings → Companies → Your Company.
- Find the field "PLE Contributor Type"
(
ple_type_contributor). - Set it to one of the following:
- CUO — Standard companies: Uses unique operation codes
from journal entries (
ple_correlative). - RER — Simplified regime: Fills correlative as
M-RERfor all entries.
- CUO — Standard companies: Uses unique operation codes
from journal entries (
- Ensure the company has a valid RUC (Peruvian tax ID) set in the VAT field.
ple_type_contributor is not set, the
correlative column in the TXT will be empty, which causes SUNAT PLE validation
errors.
Step 1.3 — Tag Accounts in Chart of Accounts
This is the most important step. The module selects journal entries
based on the ple_selection field on each account. If no accounts are
tagged, the report will be empty.
- Go to Accounting → Configuration → Chart of Accounts.
- For each cash account (e.g., 1011 — Caja, 1012 — Fondo Fijo):
- Set "PLE Selection" to "1.1 Cash & Bank Book: Cash".
- For each bank account (e.g., 1041 — Cuentas Corrientes):
- Set "PLE Selection" to "1.2 Cash & Bank Book: Bank Accounts".
Step 1.4 — Link Bank Accounts (For TXT 1.2 Only)
For the Bank Report (TXT 1.2) to include bank codes and account numbers, you must configure the relationship chain:
- In the Chart of Accounts, open each bank-tagged account.
- Set the "Bank Account" (
bank_id) field to the correspondingres.partner.bankrecord (your company's bank account number). - That bank account must be linked to a Bank (res.bank) that has
a valid SUNAT code (
l10n_pe_edi_code).
l10n_pe module. Go to Contacts → Configuration →
Banks to verify they have codes assigned (e.g., "02" for BCP, "03"
for Interbank).
Step 1.5 — Configure Payment Methods (Medio de Pago)
When registering payments against bank journals, the "Payment Method (Medio de Pago)" field becomes visible. This maps to SUNAT's payment method catalog.
- This field (
means_payment_id) defaults to code "003" (Transferencia de fondos) automatically. - When registering a payment, if the journal type is Bank, the field becomes visible. Change it if needed (e.g., "001" for Cash, "007" for Check).
- If the journal type is Cash, the field is hidden since cash payments don't require a SUNAT payment method.
inv computed field on the payment
register wizard.
Report Conditions Checklist
A journal entry (account.move.line) will appear in the report
only if ALL of the following conditions are met:
| # | Condition | Where to Configure | Applies To |
|---|---|---|---|
| 1 | Account has ple_selection = 'cash' or 'bank' |
Chart of Accounts → PLE Selection field | Both |
| 2 | Journal entry is in Posted state | Validate/Post the journal entries | Both |
| 3 | Entry date is within the report's date range | Report form: Period (Start → End) | Both |
| 4 | Entry belongs to the same company as the report | Automatic (multi-company rule) | Both |
| 5 | Account is assigned to the report's company | Chart of Accounts → Allowed Companies | Both |
| 6 | Account has bank_id linked (for bank code/account number)
|
Chart of Accounts → Bank Account field | Bank only |
| 7 | Payment has means_payment_id (for payment method column)
|
Payment registration → Payment Method field | Bank only |
ple_selection field.
Smart Defaults & Auto-Fill
When you create a new report, the following fields are pre-filled to save time:
Period Dates
Start Date → 1st day of the
previous month.
End Date → Last day of the previous month.
Example: If today is Feb 14, defaults to Jan 1 → Jan 31.
Auto-Adjust End Date
When you change the Start Date, the
End Date automatically updates to the last day of that
month.
Example: Change Start to Mar 15 → End becomes Mar 31.
Submission State
Estado de Envío defaults to "Empresa
o Entidad Operativa" — the standard value for active companies.
Change only if your company has a special SUNAT status.
2. Generating PLE Reports — Step by Step
Complete workflow from creation to SUNAT submission:
Step 2.1 — Create Report
Navigate to Accounting → PLE → Cash & Bank Book. Click New. The Period fields auto-fill to the previous month. Verify Company is correct — it filters to your active company. Adjust dates if you need a different period.
Step 2.2 — Generate Data
Click Generate Report. The system executes SQL queries that scan all posted journal entries in Cash/Bank accounts within your date range. Both TXT and Excel files are generated simultaneously for Cash (1.1) and Bank (1.2) sections.
Step 2.3 — Download & Review
Download the Excel files for internal review — they contain the same data in a human-readable format. Download the TXT files for SUNAT upload. Each section (Cash / Bank Accounts) has its own pair of files. If a section has no records, a message will indicate it.
Step 2.4 — Declare & Close
After uploading the TXT files to SUNAT's PLE program and confirming acceptance: click Declare to SUNAT to mark the report as Declared. If you need to make corrections, click Return to Draft to rollback, modify entries, and regenerate.
Report Lifecycle (States)
3. TXT 1.1 — Cash Book — Field Mapping (19 Columns)
Complete column reference for Libro Caja y Bancos — Detalle de los Movimientos del Efectivo. Each row maps a TXT column to its SQL data source and explains the population logic.
| # | SUNAT Field Name | TXT Key | Data Source | Population Logic & Conditionals | Fallback |
|---|---|---|---|---|---|
| 1 | Periodo | period |
account_move_line.date |
Formatted as YYYYMM00 using
TO_CHAR(date, 'YYYYMM00'). The last two digits are always
00 per SUNAT spec. |
Empty string |
| 2 | CUO (Código Único de Operación) | cuo |
account_move.name |
The journal entry name with all /, -, and
spaces removed. Example: INV/2026/00001 →
INV202600001. |
— |
| 3 | Número Correlativo del Asiento | correlative |
res_company.ple_type_contributor +
account_move_line.ple_correlative |
Conditional logic: • If ple_type_contributor = 'CUO' → Uses
ple_correlative from the first move line of the journal
entry.• If ple_type_contributor = 'RER' → Fixed string
M-RER.• Otherwise → Empty string. |
M000000001 |
| 4 | Código Cuenta Contable | account_code |
account_account.code_store |
Account code from the JSONB field code_store, keyed by
active company root ID. All /, -, and
. characters are stripped. Example: 10.11 →
1011. |
Empty string |
| 5 | Código Unidad de Operación | unit_operation_code |
SQL function get_unit_operation_code(move_id) |
Custom SQL function that resolves the operation unit code for the journal entry. Returns the code associated with the analytic distribution of the move. | Empty string |
| 6 | Código Centro de Costos | cost_center_code |
Hardcoded '' |
Always empty. Cost center codes are not currently populated in this module. Reserved for future implementation. | Empty string |
| 7 | Tipo de Moneda de Origen | currency_name |
res_currency.name |
ISO 4217 currency code from the move line's currency. Joined via
account_move_line.currency_id. |
PEN |
| 8 | Tipo de Comprobante de Pago | type_payment_document |
l10n_latam_document_type.code |
SUNAT document type code from the move line's
l10n_latam_document_type_id. Example: 01 =
Factura, 03 = Boleta. |
00 |
| 9 | Número Serie del Comprobante | serie |
account_move_line.serie_correlative |
Conditional logic: • If serie_correlative is NOT NULL → Splits by
-, takes the first part, strips spaces,
truncated to 4 characters.• Otherwise → 0000.
|
0000 |
| 10 | Número del Comprobante de Pago | document_number |
account_move_line.serie_correlative |
Conditional logic: • If serie_correlative is NOT NULL → Splits by
-, takes the second part, strips spaces,
truncated to 8 characters.• Otherwise → 00000000.
|
00000000 |
| 11 | Fecha Contable | accounting_date |
account_move.date |
Formatted as DD/MM/YYYY. The accounting date of the parent
journal entry. |
Empty string |
| 12 | Fecha de Vencimiento | date_due |
account_move.invoice_date_due |
Formatted as DD/MM/YYYY. The due date from the journal
entry. May be empty for non-invoice entries. |
Empty string |
| 13 | Fecha de la Operación o Emisión | operation_date |
account_move.date |
Formatted as DD/MM/YYYY. Same as accounting date (column
11). Represents the effective operation date. |
Empty string |
| 14 | Glosa de la Operación | gloss |
account_move.ref or account_move_line.name
|
Conditional logic: • If account_move.ref is NOT NULL → Uses the move's
ref (reference) field.• Otherwise → Uses the first 200 characters of the move line's name (label).
|
— |
| 15 | Glosa Referencial | referential_gloss |
account_move_line.name |
The move line's label/description. Used as a secondary reference text. | Empty string |
| 16 | Debe (Debit) | debit |
account_move_line.debit |
Formatted via UDF_numeric_char() SQL function which
converts the numeric value to a string with 2 decimal places. Example:
1500.5 → 1500.50. |
0.00 |
| 17 | Haber (Credit) | credit |
account_move_line.credit |
Same formatting as Debit (column 16) via
UDF_numeric_char(). |
0.00 |
| 18 | Dato Estructurado | data_structured |
SQL function data_structured_cash() + Python
post-processing |
Complex conditional logic (Python post-processing): The SQL function data_structured_cash(serie_correlative)
returns a pipe-delimited string split by **-**.Python parses this and applies rules: • If journal type = sale AND document type = F → Code 140100• If journal type = purchase AND document type = F: - Sub-type F → Code 080100- Other sub-types → Code 080200Final format: {code}&{field5}&{sanitized_name}&{correlative}• If no structured data available → Empty string. |
Empty string |
| 19 | Estado de la Operación | state |
Hardcoded 1 |
Always 1 (active/valid operation). Set during Python
post-processing, not from SQL. Per SUNAT spec: 1 = Active,
8 = Modified, 9 = Deleted. |
1 |
|. Each row ends with | followed by \r\n
(CRLF). The complete template is:
period|cuo|correlative|account_code|unit_operation_code|cost_center_code|currency_name|type_payment_document|serie|document_number|accounting_date|date_due|operation_date|gloss|referential_gloss|debit|credit|data_structured|state|
4. TXT 1.2 — Bank Accounts — Field Mapping (15 Columns)
Complete column reference for Libro Caja y Bancos — Detalle de los Movimientos de la Cuenta Corriente. This report contains bank-specific fields not present in TXT 1.1.
| # | SUNAT Field Name | TXT Key | Data Source | Population Logic & Conditionals | Fallback |
|---|---|---|---|---|---|
| 1 | Periodo | period |
account_move_line.date |
Formatted as YYYYMM00. Same logic as TXT 1.1 column 1. |
Empty string |
| 2 | CUO (Código Único de Operación) | cuo |
account_move.name |
Same logic as TXT 1.1 column 2. Journal entry name with /,
-, spaces removed. |
— |
| 3 | Número Correlativo del Asiento | correlative |
res_company.ple_type_contributor |
Same conditional logic as TXT 1.1 column 3: CUO →
ple_correlative, RER → M-RER. |
M000000001 |
| 4 | Código de la Entidad Financiera | bank_code |
res_bank.l10n_pe_edi_code |
Join chain: account_account.bank_id →
res_partner_bank.bank_id →
res_bank.l10n_pe_edi_code.SUNAT bank catalog code. Example: 02 = BCP, 03
= Interbank, 11 = BBVA.Requires Step 1.4 configuration (bank account linked on the accounting account). |
Empty string |
| 5 | Código de la Cuenta Bancaria | account_bank_code |
res_partner_bank.acc_number |
Join chain: account_account.bank_id →
res_partner_bank.acc_number.The company's bank account number. Example: 19123456789012.Requires Step 1.4 configuration. |
Empty string |
| 6 | Fecha de la Operación | date |
account_move_line.date |
Formatted as DD/MM/YYYY. The accounting date of the move
line. |
— |
| 7 | Medio de Pago | payment_method |
payment_methods_codes.code |
Join chain: account_move_line.payment_id →
account_payment.means_payment_id →
payment_methods_codes.code.SUNAT payment method code. Example: 001 = Efectivo,
003 = Transferencia, 007 = Cheque.Only populated when the move line is linked to a payment ( payment_id IS NOT NULL).
|
003 |
| 8 | Descripción de la Operación Bancaria | operation_description |
account_move_line.name |
The move line's label/description. Used as the operation narrative for the bank statement. | - |
| 9 | Tipo de Documento del Girador | partner_type_document |
l10n_latam_identification_type.l10n_pe_vat_code |
Join chain: account_move_line.partner_id →
res_partner.l10n_latam_identification_type_id →
l10n_latam_identification_type.l10n_pe_vat_code.SUNAT identification type code. Example: 6 = RUC,
1 = DNI, 4 = Carnet de Extranjería.
|
- |
| 10 | Número de Documento del Girador | partner_document_number |
res_partner.vat |
The partner's tax identification number (RUC, DNI, etc.). Comes from the
move line's partner_id. |
- |
| 11 | Nombre Completo del Girador | partner_name |
res_partner.name |
Full name of the partner associated with the move line. For companies: the commercial name. | VARIOS |
| 12 | Número de Transacción Bancaria | transaction_number |
account_move.ref or account_move.name |
Conditional logic (SQL + Python): SQL step: • If account_move.ref IS NOT NULL →
validate_string(ref, 20) (truncated to 20 chars).• Else if account_move.name IS NOT NULL →
validate_string(name, 20).• Otherwise → Empty string. Python post-processing: All non-alphanumeric characters, spaces, and line breaks are removed via re.sub(r"[^a-zA-Z0-9]", "", name).
|
Empty string |
| 13 | Debe (Debit) | debit |
account_move_line.debit |
Formatted via UDF_numeric_char(). Same as TXT 1.1 column
16. |
0.00 |
| 14 | Haber (Credit) | credit |
account_move_line.credit |
Formatted via UDF_numeric_char(). Same as TXT 1.1 column
17. |
0.00 |
| 15 | Estado de la Operación | state |
Hardcoded 1 |
Always 1 (active). Set in Python, same as TXT 1.1 column
19. |
1 |
| delimited with CRLF
line endings. Template:
period|cuo|correlative|bank_code|account_bank_code|date|payment_method|operation_description|partner_type_document|partner_document_number|partner_name|transaction_number|debit|credit|state|
SQL Helper Functions Used
UDF_numeric_char(value)— Converts a numeric to a formatted string with 2 decimal places.get_unit_operation_code(move_id)— Resolves the operation unit code for a journal entry.
data_structured_cash(serie_correlative)— Returns structured data string for cross-referencing with other PLE books.validate_string(text, max_length)— Truncates and sanitizes text to a maximum length.
Global Ready | Multi-Language Support
This module is fully translated into English and Spanish (en_US, es_ES, es_PE, es_MX), ensuring a professional experience for international organizations.
Why Choose Ganemo?
----------------
Ganemo is the world's leading Odoo App developer and a multi-award-winning Gold Partner. For over 5 years, we have been recognized as the #1 seller of high-quality apps on the Odoo App Store. Trusted as the "Best Partner" in USA, Mexico, Chile, Spain, Colombia, Ecuador, and Peru, we deliver robust, secure, and localization-compliant solutions for global businesses.
Get a Quote & Resolve Commercial Doubts
Join thousands of satisfied clients on Odoo. Contact our sales team directly.
Official WhatsApp
Fastest response time.
LINK
+1 (828) 672-6150
Book a Demo
Let's explore your needs.
LINK
Schedule Meeting
Need More? We Do It All
Professional Odoo Services
ERP Implementation
Transform your business with a full Odoo implementation. We analyze, configure, and train your team to maximize productivity. From Accounting to Inventory, we handle the complexity so you can focus on growth.
Module Dev & Migration
Need a custom feature? Or stuck on an older version? We develop high-performance custom modules and migrate your existing code to Odoo 19 with zero data loss. Expert developers at your service.
QA / User Testing Scenarios
Enterprise Validation Plan
Scenario 1: Generate Cash Report (TXT 1.1)
- Go to Accounting > PLE > Libro Caja y Bancos.
- Create a new record. Set Start Date and End Date for the period.
- Click Generar Reporte.
- Result: The Cash TXT and Excel files should appear for download. Verify the TXT contains valid SUNAT-formatted data with pipe separators.
Scenario 2: Generate Bank Report (TXT 1.2)
- Ensure at least one bank-type account has a Bank entity linked with a valid SUNAT code.
- Create journal entries in that bank account for the target period.
- Generate the report as in Scenario 1.
- Result: The Bank TXT file should include the bank code, account number, and payment method columns. Verify against SUNAT's format specification.
Scenario 3: Report Lifecycle (States)
- Create and generate a report → State should be load.
- Click Declarar a SUNAT → State should be closed.
- Click Regresar a Borrador → State should return to draft.
- Result: Buttons visibility should change correctly at each state.
Scenario 4: Payment Method on Register
- Go to an invoice and click Register Payment.
- Select a Bank journal → The Payment Method (Medio de Pago) field should appear.
- Switch to a Cash journal → The field should be hidden.
- Result: The
invcomputed field correctly toggles visibility based on journal type.
Scenario 5: Empty Report (No Matching Records)
- Create a new report for a period where no posted journal entries exist in Cash/Bank accounts.
- Click Generate Report.
- Result: The report should generate successfully but show an informational message: "No hay contenido en el registro...". TXT files should contain the header without data rows. The Excel files should reflect zero rows.
Scenario 6: Multi-Company Isolation
- Log in to Company A. Create and generate a PLE Cash report.
- Switch to Company B. Navigate to Cash & Bank Book.
- Result: You should only see reports belonging to Company B. Company A's reports must not be visible. Each report's TXT file should contain only data from the respective company.
Scenario 7: Default Date Period Verification
- Navigate to Cash & Bank Book and click New.
- Result: The Start Date should default to the 1st day of the previous month and the End Date to the last day of the previous month. Example: If today is Feb 14, defaults should be Jan 1 → Jan 31.
- Verify the Estado de Envío defaults to "Empresa o Entidad Operativa".
Scenario 8: Date Constraint Validation
- Create a new report. Set Start Date = Feb 28 and End Date = Feb 01 (end before start).
- Attempt to save the record.
- Result: The system should block the save with a validation error: "The end date must be equal to or after the start date.". The report must not be created.
Scenario 9: Search View — Filters & Grouping
- Go to the Cash & Bank Book list view.
- Test each quick filter: Draft, Generated, Declared. Verify only matching records appear.
- Test Group By → Company, State, Period (Month). Verify records group correctly.
- Use the search bar to search by Company name and Start Date.
- Result: All filters, groupings, and searches should work independently and in combination.
Scenario 10: Payment Method on Direct Payment
- Go to Accounting → Payments and create a new payment directly (not from an invoice).
- Select a Bank journal.
- Result: The means_payment_id field should default to code "003" (Transferencia de fondos). The field should be editable.
- Switch to a Cash journal → The field value persists but is less relevant for cash operations.
Scenario 11: Bank Account Configuration Cascade
- Go to Chart of Accounts. Select a bank-tagged account (ple_selection = bank).
- Set the Bank Account field to a valid
res.partner.bankrecord. - Generate a PLE Cash & Bank report for a period with entries in that account.
- Result: The Bank TXT file should show the SUNAT bank code
(
l10n_pe_edi_code) and account number (acc_number) in the corresponding columns. - Remove the Bank Account link and regenerate. The bank code and account columns should now be empty.
Scenario 12: Report Re-generation (Overwrite)
- Generate a report for January 2026. Note the TXT file names and contents.
- Post a new journal entry in a Cash account dated January 2026.
- Click Return to Draft on the existing report, then Generate Report again.
- Result: The regenerated files should now include the new entry. Previous file data is fully overwritten — no duplicate accumulation.
FAQ & Troubleshooting
Common Resolutions
Bank code is empty in the TXT file?
Reason: The bank entity linked to the account may not have a SUNAT code assigned.
Fix: Go to
Contacts > Configuration > Banks and ensure the bank has a valid
l10n_pe_edi_code. The Peruvian localization module should have populated
this automatically.
Report generates empty files?
Reason: No journal entries exist for the selected date range in cash or bank accounts.
Fix: Verify that posted journal entries exist in Cash/Bank accounts within the date range. Also check that the correct company is selected.
SQL error when generating report?
Reason: A stored SQL function may not be loaded.
Fix:
Upgrade the module (-u ple_cash_book) to reload the SQL functions from the
sql/ directory. The functions data_structured_cash,
find_full_reconcile, get_unit_operation_code, and
UDF_numeric_char must exist in the database.
Is this compatible with Multi-company?
Answer: Yes!
Detail:
Each report filters by the active company using company_root_id. Data from
other companies is automatically excluded. Each company generates its own PLE files.
Payment method field not visible during payment?
Answer: The "Medio de Pago" field only appears when the selected journal's type is Bank.
Detail:
This behavior is intentional. Cash payments don't require a SUNAT payment method code.
If you're using a Bank journal and still don't see it, check that the
invoice_type_document module is installed — it provides the view extension.
How do I change the PLE contributor type (CUO/RER)?
Answer: Go to Settings → Companies → Your Company and update the ple_type_contributor field.
Detail:
This field controls how the correlative column is filled in TXT files:
CUO uses
the journal entry's ple_correlative, while RER fills all
entries
with M-RER. The field is provided by the ple_purchase_book
base module.
Can I regenerate a report that was already declared?
Answer: Yes, but you must first return it to Draft.
Detail: Click Return to Draft to unlock the report. Then click Generate Report again. The new data will overwrite the previous files. This is useful if you posted new entries after the initial generation.
The report shows data from other companies?
Answer: This should not happen. A record rule restricts visibility.
Detail:
The module includes a ir.rule that filters reports by
company_id in company_ids. If you see cross-company data, verify that:
(a) the record rule XML is loaded, (b) you are not a superuser (superusers bypass
rules),
and (c) the module was updated after the security file was added.
What do the TXT filename codes mean?
Answer: The filenames follow SUNAT's naming convention for PLE files.
Structure:
LE{RUC}{YYYYMM00}{011100}{OperInd}{Content}{Currency}{1}.TXT
Example: LE20551583041202601000101110011.TXT — This is a Cash report (0101)
for RUC 20551583041, period Jan 2026, with content (1) in PEN (1).
Date fields auto-fill with the wrong period?
Answer: The defaults are based on the server's current date, not the user's local timezone.
Detail: If the server is in UTC and your local time is past midnight but UTC isn't, the "previous month" calculation may differ by one day. This is standard Odoo behavior. Simply adjust the dates manually if needed.
Can I use this module in Community edition?
Answer: Yes, this module is fully compatible with Odoo Community.
Detail: The module uses only standard ORM, SQL queries, and base Accounting features. No Enterprise-only dependencies (like consolidation, analytic plans, or inter-company) are required. License: LGPL-3.
What's the difference between Cash and Bank sections?
Answer: They correspond to different SUNAT PLE sub-registers with different columns.
Detail:
Cash (TXT 1.1) covers accounts tagged as
ple_selection = 'cash' — typically petty cash and cash registers.
Bank (TXT 1.2) covers accounts tagged as
ple_selection = 'bank' — with additional columns for bank code, account
number, and payment method.
Both are generated simultaneously from a single report record.
Commercial & Sales
For inquiries about licenses, demos, or partnerships.
Official WhatsApp
Fastest response time.
LINK
+1 (828) 672-6150
Book a Demo
Let's explore your needs.
LINK
Technical Support
Existing customers regarding module functionality.
© 2026 Ganemo. All rights reserved. visit ganemo.com
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module