API Catalog

Network and API Catalog

Observed browser requests, backend clues, form posts, AJAX endpoints, and response behavior.

Current Status

Initial export complete. Login, dashboard, invoice/receipt creation and cancellation, article creation, and stock movement requests have been exported from Playwright. The application uses a central /ajaxserver endpoint for many asynchronous operations.

Observed Backend/Frontend Clues

Observed OfficeGest request flow diagram

EvidenceObserved DetailInterpretation
Response headersserver: nginx, x-officegest-release: stable, no-cache headers, HSTSPublic edge is nginx; OfficeGest exposes a release channel header.
Asset paths/assets/bs4/..., version query v=4.148Bootstrap 4-era UI bundle with OfficeGest version 4.148.
Frontend librariesAce, Bootstrap, jQuery/DataTables, Select2, FullCalendar, Highcharts, Dropzone, SmartWizard, BootboxServer-rendered/jQuery-heavy app with rich widgets and AJAX calls.
Application scriptsogfmin.js, oghmin.js, application.js, OfficeGest UI componentsCustom OfficeGest frontend layer on top of common JS libraries.
AnalyticsGoogle Analytics measurement ID G-G2PBZEDH13Public telemetry is active in the demo environment.

Dashboard AJAX Calls

MethodEndpointPurpose ObservedEvidence
POST/ajaxserverGeneric action endpoint used repeatedly during login/dashboard load.raw/playwright/dashboard-requests.txt
GET/ajaxserver/newsslidesNews/slide content on dashboard/login session.raw/playwright/dashboard-requests.txt
GET/ajaxserver?action=oficinas&option=marcacao_homeWorkshop appointments widget.raw/playwright/ajax-workshop-home-response.txt
GET/ajaxserver?action=oficinas&option=check_open_budget&plate=Workshop/open-budget lookup by license plate.raw/playwright/dashboard-requests.txt
GET/ajaxserver?action=getAgendaEventos...CRM agenda event feed. Response includes event title, start/end, location, entity fields, status, color, and link.raw/playwright/ajax-agenda-events-request.txt, raw/playwright/ajax-agenda-events-response.txt

CRM Operational AJAX Calls

Verified read-only. CRM panel, schedule, communications, appointments/tags, tasks, opportunities, leads, occupation, gift certificates, campaigns, pipeline, and task-type calls were captured in crm-readonly-probe-20260519T092953Z. No CRM save/send/delete/end action was submitted.

Action or endpointObserved purposeEvidence detail
getMineRelContQtdLoads current user's CRM tag/contact count for the panel.Returned 161.
getMineOportNegQtdLoads current user's open opportunity count for the panel.Returned 40.
getAgendaEventosLoads schedule events for the visible calendar range.Called with employee 1, start=2026-04-26, and end=2026-06-07.
DT_Select_CommunicationsLoads communication campaign/list rows.Returned recordsTotal: 37 with description, campaign, registration date, used channel, contacts, contact summary, and status fields.
DT_SelectMarcacoesLoads appointment/tag rows.Observed for unfinished personal appointment/tag rows with fields such as subject, type, category, entity, and dates.
gravaEventoCreates or saves an appointment/tag event.Verified create request returned appointment 434 with CodTipoEv=Appt, Realizado=F, ETarefa=F, EstadoMarca_c=2, and detail route /crm/marcacoes/view/NDM0.
UpdateRelcontactoUpdates appointment fields from detail-page inline controls.Verified appointment completion/reopen used campo=Realizado with value=T/F and campo=EstadoMarca_c with value=4/2.
DT_Select_MaracacoesNotasLoads appointment notes.Verified appointment notes workflow loaded rows with search[CodMarcacao]=434.
agregarNotaMarcacao, UpdateNotaMarcacao, delete_nota_clienteAdds, edits, and deletes appointment notes.Verified workflow created note 2, edited its subject/body, then deleted it with type=MAR.
create_relcont_entity, delete_relcont_entity, DT_load_relcont_entitiesLinks, unlinks, and verifies entities related to appointments.Verified workflow linked customer 910 to appointment 434 as relation 256, then unlinked it.
create_relcont_entity_contact, delete_relcont_entity_contLinks and unlinks contacts under an appointment entity relation.Verified workflow linked contact 23 under customer relation 258, then unlinked it.
oficinas / list_relcontacto_tiposintervencao, add_relcontacto_tiposintervencao, update_relcont_intervencao, del_relcontacto_tiposintervencaoLists, adds, edits, and deletes appointment intervention rows.Verified workflow added intervention 28, edited extra designation and minutes, verified 00h 45m total, then deleted it.
AceUpload, DT_Select_Attachments, loadAttach, editAttachment, deleteAttachmentByIdUploads, lists, loads, edits, and deletes appointment attachments.Verified workflow uploaded text attachment 192 to appointment 434, edited its description, then deleted it.
DeleteRelcontactoRecorrenciaFutura, POST /crm/marcacoes/view/{id} with repetirMarca=1Clears future recurrence rows and saves Repeat Tag recurrence settings.Verified workflow repeated appointment 434 daily with Ocurrencias=2, creating rows 435 and 436, then deleted all matching rows.
delete_marcacaoDeletes an appointment/tag event.Verified cleanup deleted appointment 434 with response {"success":true}.
verMarcacionLoads occupation/calendar day detail.Observed for May 2026 occupation context.
DT_load_relcont_entitiesLoads entities linked to a CRM relation/contact item.Returned relation/entity rows used by appointment/tag detail surfaces.
dt_tarefasLoads CRM task rows.Returned recordsTotal: 77; open-task filtering returned recordsFiltered: 38.
DT_ListaOportNegLoads business opportunity rows.Returned recordsTotal: 52 and recordsFiltered: 40 for open opportunities during the read-only probe; later used to verify created opportunity 2605-0001, won and lost closure under search[Op.Concluido_c]=T, and cleanup.
gravaOporNeg, POST /crm/oportunidadesnegocios/view/{id} with actualizarOP=2, UpdateOporNeg, oportneg / update_fase, DT_Select_OptNegFases, deleteAttachmentCascadeCreates, edits, saves observations, changes phase, verifies phase history, and deletes business opportunities.Verified workflows created opportunity 2605-0001 for customer 910, edited main detail fields, saved rich-text observations, changed phase from SG to CI, closed disposable opportunities as FEC / Fechado and PER / Perdido, then deleted them with tabela=oportneg.
graphquerys&option=getOportunidadesNegocioSegmentadasLoads segmented opportunity chart data.Observed grouped opportunity totals and accumulated estimated values by area.
DT_SelectLeadsLoads CRM lead lists.Returned 9 lead rows with description, record count, active flag, and creation date during the read-only probe; later verified disposable lead list 14 from CSV import, edited lead list 18, and cleanup.
DT_Select_Leads, leads / postNewLead, leads / postEditLead, leads / DELETE_leadLoads imported lead values, creates lead lists, edits lead-list header/status, and deletes lead lists.Verified workflow imported one CSV contact into lead list 14, opened its detail page, edited disposable lead list 18 by changing description and setting active=F, then deleted disposable rows.
DT_Select with table=vales_ofertaLoads gift certificate rows.Returned gift certificate identifiers, prefix, number, value, purchase document fields, and use-state fields; later used to verify disposable certificate AI124723000001 and cleanup.
createValesDesconto, delete with tabela=vales_ofertaCreates and deletes gift certificates.Verified workflow created one active certificate AI124723000001 and deleted it by id 123.
DT_Select with table=campanhasLoads CRM campaigns.Returned active/inactive campaign rows with code, description, objectives, dates, and active flag.
DT_Select with table=PosPipelineLoads sales pipeline steps.Returned 8 steps including description and order.
crm_tipotarefas&option=dtLoads CRM task types.Returned 10 task types with code, description, icon, color, active flag, and dates.
Sel2_Select_v2Resolves CRM selectors.Observed for employees, representatives, and task-type selectors such as crm_tipo_tarefas.
validar_dados_smsValidates SMS sender data.Read-only probe observed validation response success:false and message Invalid Sender; no SMS was sent.

Evidence: raw/playwright/workflows/crm-readonly-probe-20260519T092953Z.json and workflows/use-crm.html.

CRM Appointment Create/Delete AJAX Calls

Verified end to end. Workflow run crm-appointment-create-delete-20260519T112807Z created appointment 434, verified the list/detail surfaces, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
GET /crm/marcacoesLoads Tags/Appointments and the New appointment modal markup.The form form_novamarcacao exposed General, Third Part, Marketing, and Others tabs, plus notification checkboxes, opportunity/campaign fields, responsible employee, commercial, and booking/occupation metadata.
POST /ajaxserverCreates the appointment.Payload used action=gravaEvento, subject AI Demo CRM Appointment 20260519T112807Z, CodTipoEv=Appt, Prioridade=N, CodEmpr=1, DataContacto=19/05/2026, HoraInicio=18:10, DataFim=19/05/2026, HoraFim=18:40, Relatorio=<p>AI verified CRM appointment body</p>, ColabResp_c=1, and CodVend=1. Notification fields were omitted.
gravaEvento responseReturns the saved event id and normalized values.Returned id=434, DataContacto=2026-05-19, Realizado=F, ETarefa=F, EventoDiaTodo=F, EstadoMarca_c=2, and registration/change timestamps.
GET /crm/marcacoes/view/NDM0Loads the appointment detail page.The detail page showed the subject, General/Third Part/Marketing/Attachments/Employees/Notes/Interventions/Logs tabs, Observations, Repeat Tag, Parameters, Conditions, message/SMS surfaces, Attach, and Snapshot controls.
POST /crm/marcacoes/view/NDM0Edits the appointment detail form.Verified edit payload used update=datalocal, edited subject AI Demo CRM Appointment Edited 20260519T113608Z, CodTipoEv=Appt, Prioridade=N, DataContacto=19/05/2026, HoraInicio=18:55, DataFim=19/05/2026, HoraFim=19:35, edited local, and edited observations.
DT_SelectMarcacoesVerifies the appointment list row.Returned row 434 with codtipoev=Appt, datahinicio=2026-05-19 18:10:00, datahfim=2026-05-19 18:40:00, colab_nome=Demo, resp_nome=Demo, comercial_nome=Comercial 1, desigestado=Aprovado pelo Colaborador, and no associated entity.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}; the final list lookup found no matching id or subject.

Evidence: raw/playwright/workflows/crm-appointment-create-delete-20260519T112807Z.json and workflows/create-delete-crm-appointment.html.

CRM Appointment Edit AJAX and Page Calls

Verified end to end. Workflow run crm-appointment-edit-20260519T113608Z created appointment 434, edited its detail-page data/local form, verified the edited row, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
GET /crm/marcacoes/view/NDM0Loads the detail edit surface.Form marcacao_datalocal contains hidden update=datalocal, collaborator/employee/commercial hidden fields, all-day/confirmed/accomplished toggles, subject, receipt/delivery fields, event type, priority, initial/end dates and times, state, local, category, registration, checklist, observations, marketing fields, and related DataTable filters.
POST /crm/marcacoes/view/NDM0Saves the main appointment detail form.The browser save flow posted update=datalocal, Assunto=AI Demo CRM Appointment Edited 20260519T113608Z, CodTipoEv=Appt, Prioridade=N, DataContacto=19/05/2026, HoraInicio=18:55, DataFim=19/05/2026, HoraFim=19:35, Local=AI verified edited appointment location, and Relatorio=<p>AI verified edited CRM appointment body</p>.
DT_SelectMarcacoesVerifies edited list row.Returned row 434 with edited subject, datahinicio=2026-05-19 18:55:00, datahfim=2026-05-19 19:35:00, edited observations, realizado=F, etarefa=F, colab_nome=Demo, and comercial_nome=Comercial 1.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}; the final lookup found no matching original or edited subject.

Evidence: raw/playwright/workflows/crm-appointment-edit-20260519T113608Z.json and workflows/edit-crm-appointment.html.

CRM Appointment Complete/Reopen AJAX Calls

Verified end to end. Workflow run crm-appointment-complete-reopen-20260519T114343Z created appointment 434, marked it accomplished, verified completed state, reopened it, verified reopened state, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
GET /ajaxserver / UpdateRelcontactoMarks the appointment accomplished.Request used campo=Realizado, id=434, and value=T. The verified row then showed Realizado=T.
GET /ajaxserver / UpdateRelcontactoSets the completed appointment state.Request used campo=EstadoMarca_c, id=434, and value=4. The verified row then showed estado=4 and desigestado=Concluido.
DT_SelectMarcacoesVerifies completed list state.Returned row 434 with codtipoev=Appt, datahinicio=2026-05-19 20:00:00, datahfim=2026-05-19 20:30:00, realizado=T, estado=4, and desigestado=Concluido.
GET /ajaxserver / UpdateRelcontactoRestores approved appointment state while reopening.Request used campo=EstadoMarca_c, id=434, and value=2. The verified row then showed estado=2.
GET /ajaxserver / UpdateRelcontactoClears the accomplished flag.Request used campo=Realizado, id=434, and value=F. The verified row then showed Realizado=F and desigestado=Aprovado pelo Colaborador.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}; the final lookup found no matching row.

Evidence: raw/playwright/workflows/crm-appointment-complete-reopen-20260519T114343Z.json and workflows/complete-reopen-crm-appointment.html.

CRM Appointment Notes AJAX Calls

Verified end to end. Workflow run crm-appointment-notes-20260519T114941Z created appointment 434, added note 2, edited it, deleted it, verified the notes table after each step, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
DT_Select_MaracacoesNotasLoads appointment notes.Request used search[CodMarcacao]=434. After add, row 2 returned author (1) Demo, subject, description, notificar_venda=0, and formatted registration date.
agregarNotaMarcacaoAdds a note to an appointment.Request used CodMarcacao=434, Asunto=AI appointment note 20260519T114941Z, CodEmpr=1, note HTML, and notificar_venda=0. Response was {"success":true}.
UpdateNotaMarcacaoEdits an appointment note.Request used Id=2, edited subject, edited HTML body, and notificar_venda=0. Response was {"success":true}; the notes table returned the edited values.
delete_nota_clienteDeletes an appointment note.Request used type=MAR and id_nota=2. Response was {"success":true}; the notes table returned no row for note 2.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}.

Evidence: raw/playwright/workflows/crm-appointment-notes-20260519T114941Z.json and workflows/manage-crm-appointment-notes.html.

CRM Appointment Entity Link AJAX Calls

Verified end to end. Workflow run crm-appointment-entity-20260519T115412Z created appointment 434, linked customer 910, verified relation 256, unlinked it, verified the entity table was empty, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
create_relcont_entityLinks an entity to an appointment.Request used terc_type=C, terc_id=910, empty contacts_ids, all notification/send flags set to 0, and numrel=434. Response was {"success":true,"id":256}.
DT_load_relcont_entitiesVerifies linked appointment entities.Returned row with terc_id=910, rel_id=256, name=100 Ouvidos Lda, entity_type=C, notify_sms=0, notify_email=0, and relcont_id=434.
delete_relcont_entityUnlinks an entity from an appointment.Request used rel_id=256. Response was {"success":true}; the next entity lookup returned no row for relation 256.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}.

Evidence: raw/playwright/workflows/crm-appointment-entity-20260519T115412Z.json and workflows/link-crm-appointment-entity.html.

CRM Appointment Contact Link AJAX Calls

Verified end to end. Workflow run crm-appointment-contact-20260519T115909Z created appointment 434, linked customer relation 258, added contact 23, verified the child row, removed the contact, removed the entity relation, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
Sel2_Select_ContactosFinds contacts for an appointment entity relation.For customer 910, the selector returned contact 23, 100 Ouvidos Lda.
create_relcont_entityCreates the parent entity relation.Request linked terc_type=C, terc_id=910, and numrel=434. Response returned {"success":true,"id":258}.
create_relcont_entity_contactAdds a contact under the entity relation.Request used terc_type=C, rel_id=258, contacts_id=23, and all notification/send flags set to 0. Response returned numeric success=1, count=1, and count_success=1.
DT_load_relcont_entitiesVerifies the linked contact row.Returned child row with entity_type=T, relcont_id=434, terc_id=23, id=23, name=100 Ouvidos Lda, rel_id=258, notify_sms=0, and notify_email=0.
delete_relcont_entity_contDeletes the contact child row.Request used relcontent_id=258 and codcontacto=23. Response was {"success":true}; the next table lookup returned no contact row.
delete_relcont_entityDeletes the parent entity relation.Request used rel_id=258. Response was {"success":true}; the next table lookup returned no relation row.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}.

Evidence: raw/playwright/workflows/crm-appointment-contact-20260519T115909Z.json and workflows/link-crm-appointment-contact.html.

CRM Appointment Intervention AJAX Calls

Verified end to end. Workflow run crm-appointment-intervention-20260519T120357Z created appointment 434, added intervention 28, edited its extra designation and minutes, verified the totals, deleted the intervention row, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
Sel2_Select_arraysSearches active intervention types.Selector queried TiposIntervencao ti with tiactivo=1. The verified run used id=28, Diagnóstico.
oficinas / list_relcontacto_tiposintervencaoLoads appointment intervention rows and totals.Request used relcontacto_id=434. After update, the response returned minutosTotal=45 and horasTotal=00h 45m.
add_relcontacto_tiposintervencaoAdds an intervention row to the appointment.Request used relcontacto_id=434 and tiposintervencao_id=28. Response was {"success":true,"message":null}; the row initially returned default minutes=90.
update_relcont_intervencaoEdits intervention row fields.Requests updated name=designacao_extra to AI intervention extra 20260519T120357Z and name=minutes to 45. Both returned {"success":true}.
del_relcontacto_tiposintervencaoDeletes an intervention row.Request used relcontacto_id=434 and tiposintervencao_id=28. Response was {"success":true,"affected_rows":1}; the next list returned no row for intervention 28.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}.

Evidence: raw/playwright/workflows/crm-appointment-intervention-20260519T120357Z.json and workflows/manage-crm-appointment-interventions.html.

CRM Appointment Attachment AJAX Calls

Verified end to end. Workflow run crm-appointment-attachment-20260519T121040Z created appointment 434, uploaded text attachment 192, edited its metadata, deleted the attachment row, verified the attachments table was empty for that id, and deleted the disposable appointment.

Action or endpointObserved purposeEvidence detail
GET /crm/marcacoes/view/NDM0Loads the appointment attachment surface.The detail page exposes an Attachments tab, Attach modal, required assunto field, category selector from attach_cat, public checkbox, file input files[], and optional snapshot controls.
POST /ajaxserver / AceUploadUploads a file attachment.Multipart request used location=attachments, codempr=1, codmarcacao=434, assunto=AI appointment attachment 20260519T121040Z, public=1, and files[]. Response returned {"ok":true,"num":192} plus stored filename, MIME type text/plain, size, and upload path.
DT_Select_AttachmentsLoads appointment attachment rows.Request used order=datareg, sorder=DESC, operator=equal, and search[CodMarcacao]=434. After upload, row 192 returned description, generated filename/show name, file type, file size, public flag, and date fields.
loadAttachLoads attachment metadata into the edit modal.Request used num=192 and returned the saved attachment id, description, public flag, and category id fields.
editAttachmentSaves attachment metadata edits.Request used serialized form data with num=192, edited assunto, empty categoria, and public=1. Response was {"success":true}; the next table lookup returned the edited description.
deleteAttachmentByIdDeletes an attachment row.Request used tabela=Attach and search[Num]=192. Response was bare JSON true; the next DT_Select_Attachments lookup returned no row for attachment 192.
POST /ajaxserverDeletes the disposable appointment.Payload used action=delete_marcacao and id=434. Response was {"success":true}.

Evidence: raw/playwright/workflows/crm-appointment-attachment-20260519T121040Z.json and workflows/manage-crm-appointment-attachments.html.

CRM Appointment Repeat AJAX and Page Calls

Verified end to end. Workflow run crm-appointment-repeat-20260519T121620Z created appointment 434, opened the Repeat Tag form, saved a daily recurrence ending at two repetitions, verified rows 434, 435, and 436, then deleted all matching appointments.

Action or endpointObserved purposeEvidence detail
GET /crm/marcacoes/view/NDM0Loads the Repeat Tag modal.Form form_repetir contains NumRel, repetirMarca=1, idrecorrencia, period radios for Diary/Weekly/Monthly, end controls for date or occurrence count, subject, initial date/time, final date/time, daily all/working-day conditions, weekly weekday checkboxes, and monthly day/weekday controls.
DeleteRelcontactoRecorrenciaFuturaPreflight cleanup before saving recurrence changes.Request used numrel=434 and the form idrecorrencia. Response was {"succeeded":true,"message":null,"params":{"affected_rows":-1}}.
POST /crm/marcacoes/view/NDM0Saves recurrence settings.Payload used repetirMarca=1, SelectPeriodo=1, endRepeat=F, Ocurrencias=2, Days=T, todosD=1, DataInicio=20/05/2026, and HoraInicio=09:00. The response was HTML for the appointment detail page.
DT_SelectMarcacoesVerifies generated recurring rows.Subject lookup returned rows 436, 435, and 434. Rows 434 and 435 started 2026-05-20 09:00:00; row 436 started 2026-05-21 09:00:00.
delete_marcacaoDeletes all generated test rows.Cleanup deleted rows 436, 435, and 434. Each response was {"success":true}, and the final subject lookup returned no rows.

Evidence: raw/playwright/workflows/crm-appointment-repeat-20260519T121620Z.json and workflows/repeat-crm-appointment.html.

CRM Business Opportunity Create/Delete AJAX Calls

Verified end to end. Workflow run crm-opportunity-create-delete-20260519T122337Z created opportunity 2605-0001, opened its detail page, verified it in the opportunities DataTable, deleted it, and verified that the row no longer appeared.

Action or endpointObserved purposeEvidence detail
GET /crm/oportunidadesnegociosLoads the opportunities list and New Business Opportunity modal.Form form_novaopornegocioHEAD exposes third-party type, description, step, campaign, initial date, estimated close date, assigned collaborator, commercial, business area, estimated value, sale probability, notification checkbox, customer/supplier/prospect selector, contact, source, mailing/source contact fields, and observations.
POST /ajaxserver / gravaOporNegCreates the opportunity.Payload used TipoTerc=C, CodTerc=910, Designacao=AI Demo CRM Opportunity 20260519T122337Z, CodFaseCV=SG, DataFechoPrev=19/06/2026, CodEmpr=1, CodVend=1, AreaNegocio=3, ValorEstimado=1234.56, ProbabilVenda=25, and CodOrigemOport=O. Response returned {"success":true} with data.CodOportNeg=2605-0001.
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxOpens the created opportunity detail page.The detail route used base64 of the opportunity code and showed the created description.
DT_ListaOportNegVerifies the opportunity list row.Request used open-opportunity filters search[Op.CodEmpr]=1 and search[Op.Concluido_c]=F, plus a description-column search. The response returned row 2605-0001.
deleteAttachmentCascadeDeletes the opportunity and related attachments.Request used tabela=oportneg, search[CodOportNeg]=2605-0001, and searchAt[CodOportNeg]=2605-0001. Response was {"succeeded":true}; the final DT_ListaOportNeg lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-opportunity-create-delete-20260519T122337Z.json and workflows/create-delete-crm-opportunity.html.

CRM Business Opportunity Edit Page Calls

Verified end to end. Workflow run crm-opportunity-edit-20260519T123004Z created opportunity 2605-0001, edited the main detail form, verified the edited values in the opportunities DataTable, and deleted the disposable record.

Action or endpointObserved purposeEvidence detail
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxLoads the opportunity detail page.Main form opvalidateview contains actualizarOP=2, description, commercial, business area, third-party type/entity, contact, campaign, company, estimated close date, source, estimated value, source observations, probability, and observations fields.
POST /crm/oportunidadesnegocios/view/MjYwNS0wMDAxSaves main opportunity data.Verified payload used actualizarOP=2, edited Designacao, DataFechoPrev=20/06/2026, ValorEstimado=345.67, ProbabilVenda=45, and ObsOri=AI verified CRM opportunity edited source. The HTML response contained the edited description.
DT_ListaOportNegVerifies edited opportunity values.Edited-description lookup returned row 2605-0001 with ValorEstimado=345.67, ProbabilVenda=45, DataFechoPrev=2026-06-20, area [3] Serviços, and customer 100 Ouvidos Lda.
UpdateOporNegSaves the observations editor separately.Identified on the detail page for campo=Obs; verified in the observations workflow below.
oportneg / update_faseSaves the Change phase / data modal.Identified with serialized editafase form data; verified in the phase workflow below.
deleteAttachmentCascadeDeletes the disposable opportunity after verification.Cleanup used tabela=oportneg and search[CodOportNeg]=2605-0001; response was {"succeeded":true}.

Evidence: raw/playwright/workflows/crm-opportunity-edit-20260519T123004Z.json and workflows/edit-crm-opportunity.html.

CRM Business Opportunity Observations AJAX Calls

Verified end to end. Workflow run crm-opportunity-observations-20260519T123355Z created opportunity 2605-0001, saved rich-text observations through the separate observations editor, reloaded the detail page to confirm persistence, and deleted the disposable opportunity.

Action or endpointObserved purposeEvidence detail
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxLoads the observations editor.The detail page includes contenteditable editor #Obs and small save button #saveObs in the observations card. Initial creation can seed the field through Obs in gravaOporNeg.
UpdateOporNegSaves opportunity observations without posting the main detail form.Verified request used id=2605-0001, campo=Obs, and an HTML value containing a paragraph, bold text, and a list. The endpoint responded HTTP 200.
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxVerifies persisted rich text.After reload, #Obs contained AI edited opportunity observation 20260519T123355Z and list item Verified via UpdateOporNeg.
deleteAttachmentCascadeDeletes the disposable opportunity after verification.Cleanup used tabela=oportneg and search[CodOportNeg]=2605-0001; response was {"succeeded":true}.

Evidence: raw/playwright/workflows/crm-opportunity-observations-20260519T123355Z.json and workflows/manage-crm-opportunity-observations.html.

CRM Business Opportunity Phase AJAX Calls

Verified end to end. Workflow run crm-opportunity-phase-20260519T123715Z created opportunity 2605-0001, changed it from phase SG to open phase CI, verified detail and grid state, and deleted the disposable opportunity.

Action or endpointObserved purposeEvidence detail
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxLoads the Current situation panel and phase modal.Before change, #fase_disabled showed SEGUROS. Modal #editafase exposed faseactual, datafimfase, and obs.
oportneg / update_faseSaves the phase change.Request used id=2605-0001 and serialized form=faseactual=CI&datafimfase=20/05/2026&obs=AI opportunity phase comment 20260519T123715Z. Response returned {"success":true}.
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxVerifies detail state.After reload, #fase_disabled showed Pesquisa/Qualificar/Priorizar.
DT_ListaOportNegVerifies grid state.The opportunity row returned Fase=[CI] Pesquisa/Qualificar/Priorizar.
deleteAttachmentCascadeDeletes the disposable opportunity after verification.Cleanup used tabela=oportneg and search[CodOportNeg]=2605-0001; response was {"succeeded":true}.

Evidence: raw/playwright/workflows/crm-opportunity-phase-20260519T123715Z.json and workflows/change-crm-opportunity-phase.html.

CRM Business Opportunity Won Closure AJAX Calls

Verified end to end. Workflow run crm-opportunity-won-20260520T005645Z created opportunity 2605-0001, changed it from phase SG to closing phase FEC, verified detail, finished-list, and phase-history state, and deleted the disposable opportunity.

Action or endpointObserved purposeEvidence detail
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxLoads the Current situation panel and phase modal.The phase selector exposed SG, CI, AP, NEG, EMF, FEC, and PER. Before change, #fase_disabled showed SEGUROS.
oportneg / update_faseSaves won closure.Request used id=2605-0001 and serialized form=faseactual=FEC&datafimfase=20/05/2026&obs=AI opportunity won closure comment 20260520T005645Z. Response returned {"success":true}.
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxVerifies detail state.After reload, #fase_disabled showed Fechado and the header showed Finished: 20/05/2026.
DT_ListaOportNegVerifies finished list state.Request used search[Op.Concluido_c]=T and a description-column search. Response returned row 2605-0001 with Fase=[FEC] Fechado. The hidden type field still returned open in this demo build.
DT_Select_OptNegFasesVerifies phase history.Response returned FaseAnterior=SG, FaseActual=FEC, DesigActual=Fechado, and the closing comment.
deleteAttachmentCascadeDeletes the disposable opportunity after verification.Cleanup used tabela=oportneg and search[CodOportNeg]=2605-0001; response was {"succeeded":true}. Final finished and open list lookups returned no row.

Evidence: raw/playwright/workflows/crm-opportunity-won-20260520T005645Z.json and workflows/close-crm-opportunity-won.html.

CRM Business Opportunity Lost Closure AJAX Calls

Verified end to end. Workflow run crm-opportunity-lost-20260520T010122Z created opportunity 2605-0001, changed it from phase SG to closing phase PER, verified detail, finished-list, and phase-history state, and deleted the disposable opportunity.

Action or endpointObserved purposeEvidence detail
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxLoads the Current situation panel and phase modal.The phase selector exposed SG, CI, AP, NEG, EMF, FEC, and PER. Before change, #fase_disabled showed SEGUROS.
oportneg / update_faseSaves lost closure.Request used id=2605-0001 and serialized form=faseactual=PER&datafimfase=20/05/2026&obs=AI opportunity lost closure comment 20260520T010122Z. Response returned {"success":true}.
GET /crm/oportunidadesnegocios/view/MjYwNS0wMDAxVerifies detail state.After reload, #fase_disabled showed Perdido and the header showed Finished: 20/05/2026.
DT_ListaOportNegVerifies finished list state.Request used search[Op.Concluido_c]=T and a description-column search. Response returned row 2605-0001 with Fase=[PER] Perdido. The hidden type field still returned open in this demo build.
DT_Select_OptNegFasesVerifies phase history.Response returned FaseAnterior=SG, FaseActual=PER, DesigActual=Perdido, and the closing comment.
deleteAttachmentCascadeDeletes the disposable opportunity after verification.Cleanup used tabela=oportneg and search[CodOportNeg]=2605-0001; response was {"succeeded":true}. Final finished and open list lookups returned no row.

Evidence: raw/playwright/workflows/crm-opportunity-lost-20260520T010122Z.json and workflows/close-crm-opportunity-lost.html.

CRM Lead Create/Delete AJAX Calls

Verified end to end. Workflow run crm-lead-create-delete-20260519T124223Z created lead list 14 from a one-row CSV import, opened the detail page, verified the list row returned records=1, and deleted the disposable lead list.

Action or endpointObserved purposeEvidence detail
GET /crm/leadsLoads the lead-list page and New lead modal.Form new_lead_form contains required description, file input file_import, and an Example download. The example CSV header is nome;email;localidade;morada;pais;telemovel;ncontrib.
POST /ajaxserver / leads / postNewLeadCreates a lead list from CSV.Multipart request used description=AI Demo CRM Lead 20260519T124223Z and file_import with one CSV row. Response returned {"success":true,"result":14} and parsed columns.
GET /crm/leads/view/MTQ=Opens the imported lead list detail page.The detail page showed lead 14, the imported description, status Active, and one imported contact row with name, email, locality, address, country, mobile phone, and taxpayer number.
DT_SelectLeadsVerifies the lead-list row.Request used table=crm_leads, columns=id,description,active,records,created_at, and filter=1. Row 14 returned records=1.
leads / DELETE_leadDeletes the lead list.Request used id=14. Response returned {"success":true,"msg":"Registration Successfully Deleted"}, and the final list lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-lead-create-delete-20260519T124223Z.json and workflows/create-delete-crm-lead.html.

CRM Lead Edit AJAX Calls

Verified end to end. Workflow run crm-lead-edit-20260520T010726Z created lead list 18, edited its detail header description and Active flag, verified the lead list row and imported value row, and deleted the disposable lead list. Workflow run crm-lead-values-edit-delete-20260520T012503Z created lead list 22, edited imported row 1, bulk-removed row 2, verified the remaining row and list count, and deleted the disposable lead list.

Action or endpointObserved purposeEvidence detail
GET /crm/leads/view/MTg=Loads the lead detail page.The detail form formulario includes inline description #description_inline, checkbox #active, the imported values table ListaValuesLead, Column Map, New Import, Delete, and Save controls.
leads / postEditLeadSaves lead-list header edits.Multipart request used id=18, description=AI Demo CRM Lead Edited 20260520T010726Z, and active=F. Response returned {"success":true}.
GET /crm/leads/view/MTg=Verifies detail state.After reload, #description_inline showed the edited description and #active was unchecked.
DT_SelectLeadsVerifies list state.Row 18 returned the edited description, records=1, active=F, and updated date_alter.
DT_Select_LeadsVerifies imported values were preserved.Lookup with lead_id=18 returned the imported contact row with name, email, locality, address, country, mobile phone, and taxpayer number.
leads / updateLeadColumnValueEdits an imported lead value cell inline.Request used id=1, id_lead=22, field=nome, and value=AI Lead Row Edited 20260520T012503Z. Response was bare JSON true, and the next DT_Select_Leads lookup returned the edited name.
leads / innerLeadsDeleteRemoves selected imported lead rows.Request used ids=2 and lead=22. Response was bare JSON true. The remaining imported row was row 1, and DT_SelectLeads returned records=1.
leads / getLeadColumnSingularityValidates Column Map selector changes.The lead detail page calls this endpoint with id_lead, column_orig, and column_dest when a Column Map selector changes. The verified value-row run documented the selectors but did not change mappings because the CSV already matched expected columns.
leads / DELETE_leadDeletes the edited lead list.Request used id=18. Response returned {"success":true,"msg":"Registration Successfully Deleted"}, and the final list lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-lead-edit-20260520T010726Z.json, raw/playwright/workflows/crm-lead-values-edit-delete-20260520T012503Z.json, workflows/edit-crm-lead.html, and workflows/edit-crm-lead-values.html.

CRM Gift Certificate Create/Delete and Mark-Sold AJAX Calls

Verified end to end. Workflow run crm-gift-certificate-create-delete-20260519T124723Z created gift certificate AI124723000001, opened the detail page, verified active list state, deleted it, and confirmed the list no longer returned it. Workflow run crm-gift-certificate-mark-sold-20260520T011345Z created certificate MS011345000001, marked it sold, verified sold state, deleted it, and confirmed absence after cleanup.

Action or endpointObserved purposeEvidence detail
GET /crm/valesofertaLoads the gift certificate list and Create gift cards modal.Form formnew exposes prefixo, valor, total, and optional data_validade. The list has filters for active, sold, used, canceled, and all statuses.
createValesDescontoCreates certificates.Verified request used serialized form prefixo=AI124723&valor=1&total=1&data_validade=. Response returned {"success":true}.
DT_Select with table=vales_ofertaVerifies the created certificate row.Row 123 returned number AI124723000001, value 1, status ACT, and amount credited 0.
GET /crm/valesoferta/edit/MTIzOpens certificate detail.The detail page showed the gift-card number, active status, value, amount credited, purchase document fields, validity, and documents tab.
crm / valesoferta_mark_as_soldMarks selected certificates sold.Verified request used ids[]=124. Response returned {"succeeded":true,"message":null,"params":{"ids":["124"]}}. The list row changed from ACT to SOLD and filled purchase-side marker fields tipoop_compra=MAN, num_compra=-1, and docnumber_compra=Manual -1.
GET /crm/valesoferta/edit/MTI0Opens sold certificate detail.The detail page showed gift certificate MS011345000001 with Sold status. Amount credited stayed 0, so this does not represent payment use.
delete with tabela=vales_ofertaDeletes the disposable certificate.Request used search[id]=123. Response was bare JSON true, and the final DT_Select lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-gift-certificate-create-delete-20260519T124723Z.json, raw/playwright/workflows/crm-gift-certificate-mark-sold-20260520T011345Z.json, workflows/create-delete-gift-certificate.html, and workflows/mark-gift-certificate-sold.html.

CRM Campaign Create/Edit/Delete Calls

Verified end to end. Workflow run crm-campaign-create-edit-delete-20260519T125631Z created support-file campaign AI125631, edited its detail form, verified detail and list state, deleted it, and confirmed the list no longer returned it.

Action or endpointObserved purposeEvidence detail
GET /crm/apoio/campanhasLoads the campaign support-file list and New Campaign modal.Form campanhavalidate exposes required CodCampanha, Designacao, DataIni, DataFim, plus optional Objectivos and Descricao.
SearchIfExistCodCampanahaChecks duplicate campaign code.Verified request used id1=AI125631 and returned F, meaning the code was available.
POST /crm/apoio/campanhasCreates a campaign.Payload used CodCampanha=AI125631, description, start date 19/05/2026, end date 30/05/2026, goals, and notes. The next DT_Select lookup returned the active row.
POST /crm/apoio/campanhas/view/QUkxMjU2MzE=Updates campaign detail.Form campanhavalidateview submitted actualizarcampanaha=1, active flag T, edited description, dates, and rich-text mirrors descricao_val and objectivos_val.
DT_Select with table=campanhasVerifies campaign list state.Edited row returned description AI Demo CRM Campaign Edited 20260519T125631Z, active flag T, FDataIni=20/05/2026 00:00:00, and FDataFim=31/05/2026 00:00:00.
deleteAttachmentCascade with tabela=campanhasDeletes the disposable campaign.Request used search[CodCampanha]=AI125631 and searchAt[CodCampanha]=AI125631. Response returned {"succeeded":true}, and the final list lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-campaign-create-edit-delete-20260519T125631Z.json and workflows/create-edit-delete-crm-campaign.html.

CRM Pipeline Create/Edit/Delete Calls

Verified end to end. Workflow run crm-pipeline-create-edit-delete-20260519T130232Z created pipeline step 9, loaded its edit modal, edited it, verified list state, deleted it, and confirmed the list no longer returned it.

Action or endpointObserved purposeEvidence detail
GET /crm/apoio/pipelineLoads Pipeline Sale support-file list and New step modal.Form formPipe exposes required Designacao and optional numeric Ordem. The list columns are code, designation, order, and action buttons.
POST /crm/apoio/pipeline with DesignacaoCreates a pipeline step.Verified create used Designacao=AI Demo CRM Pipeline 20260519T130232Z and Ordem=98. The next DT_Select returned id 9.
editaPipeLoads edit modal markup for a step.Request used id=9. Response HTML included hidden id, text field editDesignacao, and numeric Ordem.
POST /crm/apoio/pipeline with editDesignacaoUpdates a pipeline step.Verified edit used id=9, editDesignacao=AI Demo CRM Pipeline Edited 20260519T130232Z, and Ordem=99. The row kept id 9.
DT_Select with table=PosPipelineVerifies pipeline rows.Request used columns=Id, Designacao, Ordem and order=Id. The edited row returned order 99.
delete with tabela=PosPipelineDeletes the disposable pipeline step.Request used search[Id]=9. Response was bare JSON true, and final list lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-pipeline-create-edit-delete-20260519T130232Z.json and workflows/create-edit-delete-crm-pipeline.html.

CRM Task Type Create/Edit/Delete Calls

Verified end to end. Workflow run crm-task-type-create-edit-delete-20260519T130724Z created task type AI0724, edited it to inactive with a different icon/color, verified the inactive filter, deleted it, and confirmed the list no longer returned it.

Action or endpointObserved purposeEvidence detail
GET /crm/apoio/tipotarefaLoads Task Type support-file list and modal form.Form tipotarefas_form exposes hidden edit, codtipoev, description, icon, color, and hidden/toggle-backed active.
crm_tipotarefas / save with edit=0Creates a task type.Verified form used codtipoev=AI0724, description, icon=fa fa-tasks, color=blue, and active=1. Response returned {"success":true}.
crm_tipotarefas / save with edit=1Updates a task type.Verified edit kept code AI0724, changed description, icon to fa fa-phone, color to red, and active to 0.
crm_tipotarefas / dtLoads and filters task types.All-status and inactive-filter lookups returned the expected row. The inactive filter uses active=0.
crm_tipotarefas / deleteDeletes the disposable task type.Request used id=AI0724. Response returned {"success":true}, and final all-status lookup returned no matching row.

Evidence: raw/playwright/workflows/crm-task-type-create-edit-delete-20260519T130724Z.json and workflows/create-edit-delete-crm-task-type.html.

CRM Communication Creation AJAX Calls

Verified end to end. Workflow run crm-communication-create-20260519T103424Z created communication draft 39, opened its detail page, and verified it through DT_Select_Communications.

Action or endpointObserved purposeEvidence detail
GET /crm/communications/newLoads the New Communication form.Rendered channel checkboxes, description, campaign selector, business-area multi-select, SMS text, sender, email subject, attachment selector, email body editor, label insertion, Cancel, and Save controls.
POST /ajaxserverCreates the communication draft.Multipart payload included action=communications, option=postNewComm, Descricao=AI Demo CRM Communication 20260519T103424Z, email channel M, AssuntoEMail=AI Demo communication subject 20260519T103424Z, and TextoMail=<p>AI verified CRM communication draft 20260519T103424Z</p>.
GET /crm/communications/view/Mzk=Opens the saved communication detail page.The detail page showed communication 39, description, Ready to Send, Email Content, List Comunication, sender, attachments, labels, and actions for Send test email, Delete, Add Contacts, Duplicate, Save, and Schedule.
DT_Select_LCommunicationsLoads the communication detail contact/list tab.Called with search[id_communication]=39 and returned an empty data array because no contacts were added.
DT_Select_CommunicationsVerifies the communications list row.Subject search returned one row with id=39, status=RDY, email=1, sms=0, totalcontactos=0, total_sent=0, and total_unsent=0.

Evidence: raw/playwright/workflows/crm-communication-create-20260519T103424Z.json and workflows/create-crm-communication.html.

CRM Communication Delete AJAX Call

Verified end to end. Workflow run crm-communication-delete-20260519T103942Z opened communication 39, deleted it from the detail page, and verified it no longer appeared in DT_Select_Communications.

Action or endpointObserved purposeEvidence detail
GET /crm/communications/view/Mzk=Loads the communication detail page.The page showed communication 39, Ready to Send, its email subject/content, and action buttons including Delete, Add Contacts, Duplicate, Save, and Schedule.
Bootbox confirmationConfirms before deleting.The dialog text was Are you sure you want to delete? and exposed Cancel and OK actions.
GET /ajaxserverDeletes the communication.Request was action=communications&option=DELETE_communication&id=39. HTTP status was 200; the captured body was empty.
RedirectReturns the browser to CRM panel.After deletion the browser ended at /crm/painelresumo/ and refreshed CRM panel lists.
DT_Select_CommunicationsVerifies deletion.Subject search for AI Demo CRM Communication 20260519T103424Z returned recordsTotal=37, recordsFiltered=0, and no rows.

Evidence: raw/playwright/workflows/crm-communication-delete-20260519T103942Z.json and workflows/delete-crm-communication.html.

CRM Communication Duplicate AJAX Call

Verified end to end. Workflow run crm-communication-duplicate-20260519T104653Z opened source communication 39, duplicated it into communication 40, verified the new row through DT_Select_Communications, and then cleaned up both disposable records.

Action or endpointObserved purposeEvidence detail
GET /crm/communications/view/Mzk=Loads the source communication detail page.The page showed source communication 39, Ready to Send, email subject/content, no contacts, and action buttons including Delete, Add Contacts, Duplicate, Save, and Schedule.
Duplicate modalCollects copy description and row-copy mode.The modal text included Are you sure you want to duplicate?, Description, Duplicate all rows, Duplicate rows sent, and Duplicate unsent lines. The verified run selected mode T.
GET /ajaxserverDuplicates the communication.Request was action=communications&option=DUPLICATE_communication&id=39&description=AI+Demo+CRM+Dup+20260519T104653Z&enviado=T. HTTP status was 200; the captured body was empty.
GET /crm/communications/view/NDA=Opens the duplicated communication detail page.The final route encoded duplicate id 40.
DT_Select_CommunicationsVerifies the duplicate row.Id search returned one row with id=40, status=RDY, email=1, sms=0, totalcontactos=0, total_sent=0, and total_unsent=0.
GET /ajaxserverCleans up disposable records.Cleanup used DELETE_communication for ids 40 and 39; both returned HTTP 200 with body true, and final searches returned recordsFiltered=0.

Evidence: raw/playwright/workflows/crm-communication-duplicate-20260519T104653Z.json and workflows/duplicate-crm-communication.html.

CRM Communication Edit AJAX Call

Verified end to end. Workflow run crm-communication-edit-20260519T105353Z opened communication 39, edited the email subject and body, saved it, verified the updated subject through DT_Select_Communications, and deleted the disposable record.

Action or endpointObserved purposeEvidence detail
GET /crm/communications/view/Mzk=Loads the communication detail page.The page showed communication 39, Ready to Send, the email editor, sender selector, attachments selector, label insertion, contact list tab, and Save/Schedule actions.
POST /ajaxserverSaves the edited communication draft.Multipart payload included action=communications, option=postEditComm, id=39, email=1, subject=AI Demo edited communication subject 20260519T105353Z, content_email=<p>AI verified edited CRM communication body 20260519T105353Z</p>, and empty Attachments.
DT_Select_CommunicationsVerifies the edited row.Id search returned one row with id=39, edited subject, status=RDY, email=1, sms=0, totalcontactos=0, total_sent=0, and total_unsent=0.
GET /ajaxserverCleans up the disposable record.Cleanup used DELETE_communication for id 39, returned HTTP 200 with body true, and the final description search returned recordsFiltered=0.

Evidence: raw/playwright/workflows/crm-communication-edit-20260519T105353Z.json and workflows/edit-crm-communication.html.

CRM Communication Schedule AJAX Call

Verified end to end. Workflow run crm-communication-schedule-20260520T015323Z created disposable communication 39 with no contacts, scheduled it for 21/05/2026 10:30, verified the queued state, and deleted it after the probe.

Action or endpointObserved purposeEvidence detail
GET /crm/communications/view/Mzk=Loads the communication detail page and Schedule modal fields.The detail page exposed #enviar_submit for Schedule, modal fields #DataInicioEnvio and #HoraInicioEnvio, and confirmation button #submit_comm.
POST /ajaxserverQueues the communication for a future send date.Multipart payload used action=communications, option=postEditComm, id=39, email=1, enviar=1, and date_to_send=21/05/2026 10:30. Response returned success=true, send=true, communication_id=39, attachments_ok=0, and attachments_not_ok=0.
DT_Select_CommunicationsVerifies the queued state.The communication row changed to status=QUE, date_to_send=2026-05-21 10:30:00, date_send empty, totalcontactos=0, total_sent=0, and total_unsent=0.
DT_Select_LCommunicationsVerifies no recipients existed in the safety probe.The recipient list returned an empty data array, so the run verified scheduling behavior without adding or sending to contacts.
GET /ajaxserverCleans up the disposable queued communication.Cleanup used communications / DELETE_communication for id 39, returned bare JSON true, and final id lookup returned recordsFiltered=0.

Evidence: raw/playwright/workflows/crm-communication-schedule-20260520T015323Z.json and workflows/schedule-crm-communication.html.

CRM Communication Add Contact AJAX Calls

Verified end to end. Workflow run crm-communication-add-contact-20260519T110037Z added one customer email contact to communication 39. Workflow run crm-communication-segment-contact-20260520T014407Z added one customer returned by research segment 5. Workflow run crm-communication-csv-import-contact-20260520T013858Z parsed and added one CSV-imported contact to communication 39. Workflow run crm-lead-add-to-communication-20260520T012943Z added one imported lead row to communication 39. These runs verified recipient rows and counters, then deleted disposable records.

Action or endpointObserved purposeEvidence detail
GET /crm/communications/view/Mzk=Loads the communication detail page and Add Contacts modal.The Add Contacts modal exposed sources for Based in Research Segment, Entities Search, Leads, and Import. The verified source was TipoOrigemEnt=D for Entities Search with Customers selected.
GET /ajaxserverSearches eligible recipients.Request used action=communications, option=getPesquisaEntidadesComm, TipoOrigemEnt=D, selectTipoT=C, email=1, and meioutiliz=M. Selected row 1240 had address comercial@guisoft.net.
POST /ajaxserverValidates selected recipients.option=postAddLCommunicationsValidate returned {"success":true,"resultado":""} for the selected user_send JSON.
POST /ajaxserverAdds selected recipients to the communication.option=postAddLCommunications, id=39, email=1, MeioUtiliz=M, MeioUtiliz2=M, and TipoOrigemEnt=D returned success=true, ok=1, and notok=0.
DT_Select_LCommunicationsVerifies the contact list row.Returned row 1171 with tipoterc=C, codterc=628, address=comercial@guisoft.net, type=email, and enviado=F.
DT_Select_CommunicationsVerifies communication counters.The communication row changed to totalcontactos=1, resumocontactos=comercial@guisoft.net, total_sent=0, and total_unsent=1.
POST /ajaxserverLoads communication counters.option=getCountersCommunication returned mail_total_unsent=1, mail_total_sent=0, and mail_total_error=0.
GET /ajaxserverSearches contacts from a research segment.Request used action=communications, option=getPesquisaEntidadesComm, TipoOrigemEnt=M, CodPesqSeg=5, selectTipoT=C, email=1, and meioutiliz=M. Response returned success=true, pesquisa_segmentos=true, and customer 906 with email geral@tecniram.pt.
POST /ajaxserverAdds selected segment recipients to the communication.option=postAddLCommunications, id=39, email=1, MeioUtiliz=M, MeioUtiliz2=M, TipoOrigemEnt=M, CodPesqSeg=5, and user_send returned success=true, ok=1, and notok=0.
DT_Select_LCommunicationsVerifies the segment-source recipient row.Returned row 1180 with codterc=906, tipoterc=C, uploaded_csv=0, address=geral@tecniram.pt, type=email, enviado=F, and terceiro=Tecniram - Soluções Informáticas e Formação Lda.
DT_Select_CommunicationsVerifies segment-source communication counters.Communication 39 returned totalcontactos=1, resumocontactos=geral@tecniram.pt, total_sent=0, and total_unsent=1.
GET /assets/csv/importar_contactos_crm.csvDownloads the import example file.The example used semicolon-separated columns nome;email;localidade;morada;pais;telemovel;ncontrib.
POST /ajaxserverParses a CSV import file for communication contacts.Multipart payload used action=communications, option=getPesquisaEntidadesCommCSV, and file field file_import. Response returned success=true with one mailing row for ai-comm-csv-import-20260520t013858z@example.net.
POST /ajaxserverAdds selected CSV import rows to the communication.option=postAddLCommunications, id=39, email=1, MeioUtiliz=M, MeioUtiliz2=M, TipoOrigemEnt=C, and user_send_import returned success=true, ok=2, and notok=0.
DT_Select_LCommunicationsVerifies the CSV-imported recipient row.Returned row 1179 with tipoterc=O, uploaded_csv=1, address=ai-comm-csv-import-20260520t013858z@example.net, type=email, enviado=F, and terceiro=AI CSV Import Contact 20260520T013858Z.
DT_Select_CommunicationsVerifies CSV-import communication counters.Communication 39 returned totalcontactos=1, resumocontactos=ai-comm-csv-import-20260520t013858z@example.net, total_sent=0, and total_unsent=1.
POST /ajaxserverAdds imported CRM lead rows to a communication.action=leads, option=addToCommunication, comm_id=39, leads_ids=1, and lead_id=23 returned {"success":true,"msg":"(1) Adicionado com sucesso","response":{"ok":1,"ok_ids":[1],"notok":0,"notok_ids":[]}}.
DT_Select_LCommunicationsVerifies the lead-source recipient row.Returned row 1177 with id_communication=39, tipoterc=L, id_lead=23, uploaded_csv=0, address=ai-lead-communication-20260520t012943z@example.net, type=email, and enviado=F.
DT_Select_CommunicationsVerifies lead-source communication counters.Communication 39 returned totalcontactos=1, resumocontactos=ai-lead-communication-20260520t012943z@example.net, total_sent=0, and total_unsent=1.

Evidence: raw/playwright/workflows/crm-communication-add-contact-20260519T110037Z.json, raw/playwright/workflows/crm-communication-segment-contact-20260520T014407Z.json, raw/playwright/workflows/crm-communication-csv-import-contact-20260520T013858Z.json, raw/playwright/workflows/crm-lead-add-to-communication-20260520T012943Z.json, workflows/add-crm-communication-contact.html, workflows/add-crm-communication-segment-contact.html, workflows/add-crm-communication-csv-contact.html, and workflows/add-crm-lead-to-communication.html.

CRM Communication Delete Contact AJAX Call

Verified end to end. Workflow run crm-communication-delete-contact-20260519T110614Z added one recipient line, deleted that recipient line from communication 39, verified contacts and counters returned to zero, and then deleted the disposable communication.

Action or endpointObserved purposeEvidence detail
DT_Select_LCommunicationsVerifies the recipient row before deletion.After setup it returned line 1172 with id_communication=39, codterc=628, tipoterc=C, address=comercial@guisoft.net, type=email, and enviado=F.
GET /ajaxserverDeletes one communication recipient row.Request was action=delete&tabela=lcommunication&search[id_communication]=39&search[id]=1172. HTTP status was 200 and body was true.
DT_Select_LCommunicationsVerifies the list row is gone.Post-delete lookup for communication 39 returned an empty data array.
DT_Select_CommunicationsVerifies communication counters returned to zero.Communication 39 returned totalcontactos=0, resumocontactos=0, total_sent=0, and total_unsent=0.
POST /ajaxserverLoads counter widgets after delete.option=getCountersCommunication returned mail_total_unsent=0, mail_total_sent=0, and mail_total_error=0.

Evidence: raw/playwright/workflows/crm-communication-delete-contact-20260519T110614Z.json and workflows/delete-crm-communication-contact.html.

CRM Communication Edit Contact AJAX Call

Verified end to end. Workflow run crm-communication-edit-contact-20260519T111049Z added one customer email recipient, edited recipient line 1173 address/content on communication 39, verified the updated row and counters, and then deleted the disposable communication.

Action or endpointObserved purposeEvidence detail
GET /ajaxserverLoads one recipient row for editing.Request used action=load, tabela=lcommunication, operator==, search[id_communication]=39, and search[id]=1173. It returned address comercial@guisoft.net, content=null, type=email, and enviado=F.
POST /ajaxserverUpdates one communication recipient row.Payload used action=communications, option=UPDATE_lcommunication, id=1173, id_communication=39, type=email, values[address]=ticketsdemo@guisoft.com, and values[content]=<p>AI verified per-recipient email body 20260519T111049Z</p>. Response was {"success":true}.
DT_Select_LCommunicationsVerifies the edited recipient row.Returned row 1173 with address=ticketsdemo@guisoft.com, type=email, and enviado=F.
DT_Select_CommunicationsVerifies communication counters and contact summary.Communication 39 returned totalcontactos=1, resumocontactos=ticketsdemo@guisoft.com, total_unsent=1, and status=RDY.
POST /ajaxserverLoads counter widgets after edit.option=getCountersCommunication returned mail_total_unsent=1, mail_total_sent=0, and mail_total_error=0.
GET /ajaxserverCleans up the disposable record.Cleanup used communications / DELETE_communication for id 39. The final id lookup returned recordsFiltered=0.

Evidence: raw/playwright/workflows/crm-communication-edit-contact-20260519T111049Z.json and workflows/edit-crm-communication-contact.html.

CRM Communication Delete All Contacts AJAX Call

Verified end to end. Workflow run crm-communication-delete-all-contacts-20260519T111724Z added one customer email recipient to communication 39, cleared all recipient lines with the list-level deletelines action, verified contacts and counters returned to zero, and then deleted the disposable communication.

Action or endpointObserved purposeEvidence detail
DT_Select_LCommunicationsVerifies the list before clearing.After setup it returned row 1174 with codterc=628, tipoterc=C, address=comercial@guisoft.net, type=email, and enviado=F.
POST /ajaxserverDeletes every communication recipient row for the communication.Payload used action=communications, option=deletelines, and num=39. HTTP status was 200 and response was {"success":true}.
DT_Select_LCommunicationsVerifies the contact list is empty.Post-delete-all lookup for communication 39 returned an empty data array.
DT_Select_CommunicationsVerifies communication counters returned to zero.Communication 39 returned totalcontactos=0, resumocontactos=0, total_sent=0, total_unsent=0, and status=RDY.
POST /ajaxserverLoads counter widgets after clearing lines.option=getCountersCommunication returned mail_total_unsent=0, mail_total_sent=0, and mail_total_error=0.
GET /ajaxserverCleans up the disposable record.Cleanup used communications / DELETE_communication for id 39. The final id lookup returned recordsFiltered=0.

Evidence: raw/playwright/workflows/crm-communication-delete-all-contacts-20260519T111724Z.json and workflows/delete-all-crm-communication-contacts.html.

CRM Communication Remove Duplicate Contacts AJAX Call

Verified end to end. Workflow run crm-communication-remove-duplicate-contacts-20260519T112153Z added the same customer email recipient twice to communication 39, verified two duplicate rows, filtered duplicates, verified one row remained, and then deleted the disposable communication.

Action or endpointObserved purposeEvidence detail
POST /ajaxserverAdds the same recipient twice.Two postAddLCommunications requests for contact 1240 both returned success=true, ok=1, and notok=0.
DT_Select_LCommunicationsVerifies duplicate rows before filtering.Before filtering, the list contained rows 1176 and 1175, both with codterc=628, tipoterc=C, address=comercial@guisoft.net, type=email, and enviado=F.
POST /ajaxserverFilters duplicate recipient rows.Payload used action=communications, option=filterduplicates, and num=39. HTTP status was 200 and response was {"success":true}.
DT_Select_LCommunicationsVerifies only one duplicate row remains.After filtering, only row 1175 remained for comercial@guisoft.net.
DT_Select_CommunicationsVerifies communication counters after filtering.Communication 39 returned totalcontactos=1, resumocontactos=comercial@guisoft.net, total_unsent=1, and status=RDY.
POST /ajaxserverLoads counter widgets after duplicate filtering.option=getCountersCommunication returned mail_total_unsent=1, mail_total_sent=0, and mail_total_error=0.
GET /ajaxserverCleans up the disposable record.Cleanup used communications / DELETE_communication for id 39. The final id lookup returned recordsFiltered=0.

Evidence: raw/playwright/workflows/crm-communication-remove-duplicate-contacts-20260519T112153Z.json and workflows/remove-duplicate-crm-communication-contacts.html.

CRM Task Creation AJAX Calls

Verified end to end. Workflow run crm-task-20260519T094141Z created task 431 and verified it through dt_tarefas.

Action or endpointObserved purposeEvidence detail
loadFormLoads the New task modal.Posted action=loadForm, form=tarefa, and id=novatarefa. The modal includes required Subject, Estimated End Date, Time, and Employee responsible fields.
Sel2_Select_v2Initializes task selectors.Observed for employee codempr=1 / Demo and task type selector table crm_tipo_tarefas.
createNovaTarefaCreates the CRM task.Payload included Assunto=AI Demo CRM Task 20260519T094141Z, data=19/05/2026, hour=16, minute=45, hora=16:45, Prioridade=N, CodTipoEv=ToDo, codempr=1, and empty tipoterc. The HTTP status was 200; verification used the task list because this response body was empty in Playwright capture.
dt_tarefasVerifies the saved task in the task list.Subject search returned one matching row: numrel=431, CodTipoEv=ToDo, FDataPrevRealiz=19/05/2026 16:45, Realizado=F, perc_execution=0, and Prioridade=N.

Evidence: raw/playwright/workflows/crm-task-20260519T094141Z.json and workflows/create-crm-task.html.

CRM Task List Filter AJAX Calls

Verified read-only. Workflow run crm-task-filter-list-20260520T015830Z queried the CRM task list filters for accomplished state and priority without creating, editing, completing, or deleting tasks.

FilterRequest detailVerified result
Open tasksdt_tarefas with columns[8][data]=Realizado and columns[8][search][value]=F.recordsFiltered=43; returned rows had Realizado=F.
Accomplished tasksdt_tarefas with columns[8][search][value]=T.recordsFiltered=40; returned rows had Realizado=T.
High prioritydt_tarefas with columns[10][data]=Prioridade and columns[10][search][value]=H.recordsFiltered=5; returned rows had Prioridade=H.
Open high prioritydt_tarefas with columns[8][search][value]=F and columns[10][search][value]=H.recordsFiltered=2; returned rows were task 410 / Visitar cliente and task 127 / Ligar ao cliente.

Evidence: raw/playwright/workflows/crm-task-filter-list-20260520T015830Z.json and workflows/filter-crm-tasks.html.

CRM Task Completion Page POST

Verified end to end. Workflow run crm-task-complete-20260519T094911Z completed task 431 and verified it through dt_tarefas.

Action or endpointObserved purposeEvidence detail
GET /crm/tarefas/view/NDMxLoads the task detail form.Rendered #marcacao_datalocal with fields for actualizartarefas, realizado, assunto, perc_execution, codtipoev, prioridade, codempr, estimated date/time, notes, entity, and contact.
POST /crm/tarefas/view/NDMxUpdates the task detail form.Payload included actualizartarefas=1, assunto=AI Demo CRM Task 20260519T094141Z Completed, perc_execution=100, codtipoev=ToDo, prioridade=N, codempr=1, data=19/05/2026, hour=16, minute=45, hora=16:45, empty note fields, and empty entity/contact fields. The page returned HTTP 200 and displayed Task Data written successfully.
dt_tarefasVerifies the completed task in the task list.Subject search returned one matching row: numrel=431, Assunto=AI Demo CRM Task 20260519T094141Z Completed, Realizado=T, perc_execution=100, and Prioridade=N.
Sel2_Select_v2 and Sel2_Select_arraysInitializes detail selectors.Observed for responsible employee Demo and task type ToDo / Tarefa.

Evidence: raw/playwright/workflows/crm-task-complete-20260519T094911Z.json and workflows/complete-crm-task.html.

CRM Task Bulk Accomplished AJAX Call

Verified end to end. Workflow run crm-task-bulk-complete-20260519T102105Z created disposable task 433, selected it in the task list, marked it Accomplished through With selected, and verified the row through dt_tarefas.

Action or endpointObserved purposeEvidence detail
createNovaTarefaCreates a disposable task for the bulk run.Payload included Assunto=AI Demo CRM Bulk Complete 20260519T102105Z, data=19/05/2026, hour=17, minute=35, hora=17:35, Prioridade=N, CodTipoEv=ToDo, and codempr=1.
Task selectionSelects the row for bulk action.The verified row checkbox value was 433; the With selected count changed to 1.
Bootbox confirmationConfirms before applying the bulk update.The dialog text was Are you sure? and exposed Cancel and OK actions.
POST /ajaxserverBulk-marks selected tasks accomplished.Payload was action=updateRelcontactoMultiple&ids=433&valor=T&campo=Realizado. Response was {"sim":1,"nao":0,"list_nao":""}.
dt_tarefasVerifies the updated task.Subject search returned one matching row with numrel=433, Realizado=T, and perc_execution=0. The bulk Accomplished action changed the completed flag but did not change percent execution in this verified run.

Evidence: raw/playwright/workflows/crm-task-bulk-complete-20260519T102105Z.json and workflows/bulk-complete-crm-task.html.

CRM Task Reopen/Edit Page POST

Verified end to end. Workflow run crm-task-reopen-20260519T095439Z reopened and edited task 431, then verified it through dt_tarefas.

Action or endpointObserved purposeEvidence detail
GET /crm/tarefas/view/NDMxLoads the task detail form.Rendered the same #marcacao_datalocal edit form used for completion, including task subject, progress, type, priority, responsible employee, date/time, notes, entity, and contact fields.
POST /crm/tarefas/view/NDMxUpdates and reopens the task.Payload included actualizartarefas=1, assunto=AI Demo CRM Task 20260519T094141Z Reopened, perc_execution=0, codtipoev=ToDo, prioridade=N, codempr=1, data=19/05/2026, hour=16, minute=45, hora=16:45, empty note fields, and empty entity/contact fields. Because realizado was unchecked, it was not included in the submitted form body.
dt_tarefasVerifies the reopened task in the task list.Subject search returned one matching row: numrel=431, Assunto=AI Demo CRM Task 20260519T094141Z Reopened, Realizado=F, perc_execution=0, and Prioridade=N.

Evidence: raw/playwright/workflows/crm-task-reopen-20260519T095439Z.json and workflows/reopen-crm-task.html.

CRM Task Delete AJAX Call

Verified end to end. Workflow run crm-task-delete-20260519T095857Z created disposable task 432, deleted it from its detail page, and verified it no longer appeared in dt_tarefas.

Action or endpointObserved purposeEvidence detail
GET /crm/tarefas/view/NDMyLoads the disposable task detail page.Rendered task 432 with the Delete button in the action bar. NDMy is the encoded route id for 432.
Bootbox confirmationConfirms before deleting.The dialog text was Are you sure you want to delete? and exposed Cancel and OK actions.
POST /ajaxserverDeletes the task.Payload was action=deleteTarefasMultiple&tarefas%5B0%5D=432. HTTP status was 200; the captured response body was empty, and the browser redirected to /crm/tarefas/.
dt_tarefasVerifies deletion.Subject search for AI Demo CRM Task Delete 20260519T095857Z returned recordsFiltered=0 and no matching rows.

Evidence: raw/playwright/workflows/crm-task-delete-20260519T095857Z.json and workflows/delete-crm-task.html.

CRM Task Bulk Delete AJAX Call

Verified end to end. Workflow run crm-task-bulk-delete-20260519T102751Z created disposable task 434, selected it in the task list, deleted it through With selected, and verified it no longer appeared in dt_tarefas.

Action or endpointObserved purposeEvidence detail
createNovaTarefaCreates a disposable task for the bulk-delete run.Payload included Assunto=AI Demo CRM Bulk Delete 20260519T102751Z, data=19/05/2026, hour=17, minute=50, hora=17:50, Prioridade=N, CodTipoEv=ToDo, and codempr=1.
Task selectionSelects the row for bulk deletion.The verified row checkbox value was 434; the With selected count changed to 1.
Bootbox confirmationConfirms before applying the bulk deletion.The dialog text was Are you sure you want to delete? and exposed Cancel and OK actions.
GET /ajaxserverBulk-deletes selected tasks.Request was action=deleteTarefasMultiple&tarefas%5B0%5D=434. Response was {"sim":1,"nao":0,"list_nao":""}.
dt_tarefasVerifies deletion.Subject search for AI Demo CRM Bulk Delete 20260519T102751Z returned recordsFiltered=0 and an empty data array.

Evidence: raw/playwright/workflows/crm-task-bulk-delete-20260519T102751Z.json and workflows/bulk-delete-crm-task.html.

CRM Task Notes Page POST

Verified end to end. Workflow run crm-task-notes-20260519T100440Z edited both additional description fields on task 431 and verified the saved notes through detail reload and dt_tarefas.

Action or endpointObserved purposeEvidence detail
GET /crm/tarefas/view/NDMxLoads note editors.The visible note editors are contenteditable areas #relatorio and #relatorio2, backed by hidden fields named relatorio and relatorio2.
POST /crm/tarefas/view/NDMxSaves task notes.Payload included encoded HTML for relatorio=<div>AI verified task note 20260519T100440Z</div> and relatorio2=<div>AI verified follow-up note 20260519T100440Z</div>, while preserving subject, progress, type, priority, responsible employee, and date/time fields.
dt_tarefasVerifies the primary note.Subject search returned one matching row with Relatorio=<div>AI verified task note 20260519T100440Z</div>. The second note was verified by reloading the detail route because it is not exposed in the task-list row.

Evidence: raw/playwright/workflows/crm-task-notes-20260519T100440Z.json and workflows/edit-crm-task-notes.html.

CRM Task Entity Link Calls

Verified end to end. Workflow run crm-task-entity-20260519T100919Z linked task 431 to customer 910 and verified the relation through detail reload and dt_tarefas.

Action or endpointObserved purposeEvidence detail
Sel2_SelectInitializes selected entity.Customer entity selection used table=clientes, id=codterc, value=Nome, operator=equal, and term=910; response text was 100 Ouvidos Lda.
getEntidadeLoads task entity summary fields.Request used tipo=C and id=910; response populated customer name, address, locality, postal code, country, VAT number, active flag, and GDPR mailing flag.
POST /crm/tarefas/view/NDMxSaves the entity relation.Payload included tipoterc=C, codterc=910, and empty codcontacto, while preserving subject, notes, progress, type, priority, responsible employee, and date/time fields.
dt_tarefasVerifies the task relation.Subject search returned one matching row with TipoTerc=C and CodTerc=910.

Evidence: raw/playwright/workflows/crm-task-entity-20260519T100919Z.json and workflows/link-crm-task-entity.html.

CRM Task Contact Link Calls

Verified end to end. Workflow run crm-task-contact-20260519T101421Z linked task 431 to contact 27 and verified the relation through detail reload and the save payload.

Action or endpointObserved purposeEvidence detail
Sel2_Select_v2Searches active contacts.The contact selector uses table=contactos, id=CodContacto, value=Nome, and active contact filtering.
getContactoLoads contact summary fields.Request used id=27; response populated AI Demo Contact 20260519T030819Z, e-mail, address, phone, mobile, VAT number, active flag, and GDPR fields.
POST /crm/tarefas/view/NDMxSaves the contact relation.Payload preserved tipoterc=C and codterc=910, and added codcontacto=27.
Detail reloadVerifies the contact relation.Reloaded task detail showed codcontacto=27, contacto_Nome=AI Demo Contact 20260519T030819Z, and the expected contact e-mail.

Evidence: raw/playwright/workflows/crm-task-contact-20260519T101421Z.json and workflows/link-crm-task-contact.html.

Invoice/Receipt Creation AJAX Calls

Verified end to end. Workflow run invoice-fr-20260519T024739Z created FR 9999/841, received 999900841%OK&=&OKDOC&=&, and reduced warehouse 1 stock for article AI-DEMO-20260519-021105 from 2 to 1.

EndpointPurpose Observed
action=Sel2_Select_ZonasFiscaisSelect2 fiscal-zone lookup initialized with term PT-MA.
action=NameEntidadesLoads billing customer data. Customer 910 returned activo: T, VAT, address, country, and commercial id.
action=DT_Select_AdiantamentosClientesChecks customer advances/open advance documents; customer 910 showed prior FR 9999/819.
action=loadTabDocumentoArtigosLoads/searches article data for document lines.
action=DT_Select_ArtigosEquivalentesLojaLoads equivalent products by article/store.
action=detalleDocumentos&option=detalle_vendasLoads related sales-document details for selected customer/article context.
action=SearchProduct / action=loadArtigoReducidoAutocomplete and reduced article metadata lookup for line insertion; returns price, VAT, stock, cost, warehouse, lot/serial flags, and accounting classification.
action=insertLinhaTabDocAdds the article line to the draft document id with article payload, customer, currency, series, date, and pricing flags.
action=listaTabDocumentoLoads document-line tab data for sales document context before and after save.
action=create_document&option=calcular_totaisCalculates gross, discounts, VAT, retention, and total. Verified total was 1.97.
action=checkProfitMarginsChecks sales margin rules and returned OK_MARGEM.
action=payment&option=validateValidates whether payment covers the document total. Before selecting a payment method the response indicated payment was below total; after adding NUM, it returned valid: true.
action=payment&option=addAdds a payment line. Verified payload used modopagamento=NUM, modobase=N, total=1.97, and entity 910.
action=saveDocumentFinalizes the invoice/receipt document. Verified response: 999900841%OK&=&OKDOC&=&.
action=payment&option=get_paymentReloads payment display on the finished document view.
action=dt_list_recalc_stock_articles_lojasVerifies stock by warehouse; after final save, article stock in warehouse 1 changed from 2 to 1.
action=DT_List_DocumentosLoads the FR list page DataTable after finalization.

Evidence: raw/playwright/vendas-fr-create-requests.txt, raw/playwright/workflows/probe-invoice-line-20260519T023511Z.json, and raw/playwright/workflows/invoice-fr-20260519T024739Z.json.

Invoice / Receipt Missing Payment Validation AJAX Calls

Verified end to end. Workflow run invoice-receipt-missing-payment-validation-20260519T184723Z attempted to finalize an FR with customer and line but no payment row, then stopped at the payment modal without final save.

Action or endpointObserved purposeEvidence detail
loadArtigoReducidoLoads the FR article line.Loaded article AI-DEMO-20260519-021105, warehouse 1, for document type FR.
insertLinhaTabDocAdds the article line into the temporary FR grid.The line grid had one row, quantity 1, and total with VAT 1.96677.
payment&option=validateChecks whether payment covers the FR total before final save.Returned valid:"NONE", troco:-1.97, and message The payment is equal to or greater than the total document.
saveDocumentFinal FR save.Not called. Payment modal remained visible with payment total 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after the stopped save attempt.Warehouse stock stayed at -3.

Evidence: raw/playwright/workflows/invoice-receipt-missing-payment-validation-20260519T184723Z.json and workflows/handle-invoice-receipt-missing-payment.html.

Simplified Invoice Missing Payment Validation AJAX Calls

Verified end to end. Workflow run simplified-invoice-missing-payment-validation-20260519T185326Z attempted to finalize an FS with customer and line but no payment row, then stopped at the payment modal without final save.

Action or endpointObserved purposeEvidence detail
loadArtigoReducidoLoads the FS article line.Loaded article AI-DEMO-20260519-021105, warehouse 1, for document type FS.
insertLinhaTabDocAdds the article line into the temporary FS grid.The line grid had one row, quantity 1, and total with VAT 1.96677.
payment&option=validateChecks whether payment covers the FS total before final save.Returned valid:"NONE", troco:-1.97, and message The payment is equal to or greater than the total document.
saveDocumentFinal FS save.Not called. Payment modal remained visible with payment total 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after the stopped save attempt.Warehouse stock stayed at -3.

Evidence: raw/playwright/workflows/simplified-invoice-missing-payment-validation-20260519T185326Z.json and workflows/handle-simplified-invoice-missing-payment.html.

Simplified Invoice Overpayment Calls

Verified end to end. Workflow run simplified-invoice-overpayment-20260519T225200Z finished an FS after entering a payment greater than the document total.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the overpayment row to the modal.Created NUM row value 2 for a document total of 1.97.
payment&option=validateChecks whether payment covers the FS total and calculates change.Returned valid:true, no errors, and troco:0.03.
saveDocumentFinal FS save.Returned document 999900009 with OKDOC and redirected to /vendas/fs/view/OTk5OTAwMDA5.
DT_List_Documentos&table=FactSimVerifies final FS list state.Returned FS 9999/9 as LIQ / Finished with total 1.97, ValorPago=1.97, and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after final save.Warehouse stock moved from -28 to -29.

Evidence: raw/playwright/workflows/simplified-invoice-overpayment-20260519T225200Z.json and workflows/create-simplified-invoice-overpayment.html.

Simplified Invoice Partial Payment Correction Calls

Verified end to end. Workflow run simplified-invoice-fix-partial-payment-20260519T225558Z edited an existing short FS payment row to the full document total, validated payment, saved the FS, and verified list state and stock movement.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the initial short payment row.Created NUM row value 1.00 against FS total 1.97.
payment&option=validateBlocks the short payment, then validates the corrected value.First returned valid:false and troco:-0.97; after editing the row, returned valid:true and troco:0.
Payment modal DOMVerifies the UI edit before final save.The existing payment input #payment_input_1 was edited from 1 to 1.97, and #payment_total became 1.97.
saveDocumentFinal FS save.Returned document 999900010 with OKDOC and redirected to /vendas/fs/view/OTk5OTAwMDEw.
DT_List_Documentos&table=FactSimVerifies final FS list state.Returned FS 9999/10 as LIQ / Finished with ValorPago=1.97 and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after final save.Warehouse stock moved from -29 to -30.

Evidence: raw/playwright/workflows/simplified-invoice-fix-partial-payment-20260519T225558Z.json and workflows/fix-simplified-invoice-partial-payment.html.

Simplified Invoice Payment Row Deletion Calls

Verified up to the save boundary. Workflow run simplified-invoice-delete-payment-row-20260519T230007Z added a cash payment row to an FS payment modal, deleted that row, and confirmed no final save or stock movement occurred.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds a payment row to the modal.Created NUM row nseq=1, value 1.97, inbox [0] Caixa 0, and estimated date 19/05/2026.
payment&option=deleteDeletes one payment row from the modal.Payload used temporary document 55591, compras=F, nseq=1, total=1.97, and edit=F.
Payment modal DOMVerifies the UI after deletion.#payment_form became empty, no .payment_form inputs remained, no .delete_payment buttons remained, and #payment_total became 0.
saveDocumentFinal FS save.Not called. No OKDOC response was captured.
dt_list_recalc_stock_articles_lojasChecks stock after payment-row deletion.Warehouse stock stayed at -30.

Evidence: raw/playwright/workflows/simplified-invoice-delete-payment-row-20260519T230007Z.json and workflows/delete-simplified-invoice-payment-row.html.

Simplified Invoice Split Payment Calls

Verified end to end. Workflow run simplified-invoice-split-payment-20260519T230345Z finished an FS with two payment rows, then verified the final FS list state and stock movement.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the first payment row.Created NUM row with value 1.
payment&option=addAdds the second payment row.Adding TRA with document total 1.97 produced remaining value 0.97.
payment&option=validateChecks whether the combined payments cover the FS total.Returned valid:true, troco:0, and HTML containing both NUM and TRA payment rows.
saveDocumentFinal FS save.Returned document 999900011 with OKDOC and redirected to /vendas/fs/view/OTk5OTAwMDEx.
DT_List_Documentos&table=FactSimVerifies final FS list state.Returned FS 9999/11 as LIQ / Finished with paid value 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after final save.Warehouse stock moved from -30 to -31.

Evidence: raw/playwright/workflows/simplified-invoice-split-payment-20260519T230345Z.json and workflows/create-simplified-invoice-split-payment.html.

Invoice / Receipt Inactive Customer Validation AJAX Calls

Verified end to end. Workflow run invoice-receipt-inactive-customer-validation-20260519T185928Z selected inactive customer 1 on an FR, inserted one line, attempted final save, and stopped without saveDocument.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads billing customer data.Customer 1 returned nome:"Consumidor Final", VAT 999999990, and activo:"F".
loadArtigoReducidoLoads the FR article line.Loaded article AI-DEMO-20260519-021105, warehouse 1, for document type FR.
insertLinhaTabDocAdds the article line into the temporary FR grid.The line grid had one row, quantity 1, and total with VAT 1.96677.
create_document&option=calcular_totaisRecalculates totals after the finalization attempt.Ran with empty codterc after the inactive customer was cleared.
checkProfitMarginsChecks sales margin rules before final save.Observed during the stopped finalization attempt.
saveDocumentFinal FR save.Not called. OfficeGest stayed on /vendas/fr/create.
dt_list_recalc_stock_articles_lojasChecks stock after the stopped save attempt.Warehouse stock stayed at -3.

Evidence: raw/playwright/workflows/invoice-receipt-inactive-customer-validation-20260519T185928Z.json and workflows/handle-invoice-receipt-inactive-customer.html.

Invoice / Receipt Partial Payment Validation AJAX Calls

Verified end to end. Workflow run invoice-receipt-partial-payment-validation-20260519T190550Z attempted to finish an FR with a NUM payment row below the document total, then stopped at the payment modal without final save.

Action or endpointObserved purposeEvidence detail
loadArtigoReducidoLoads the FR article line.Loaded article AI-DEMO-20260519-021105, warehouse 1, for document type FR.
insertLinhaTabDocAdds the article line into the temporary FR grid.The line grid had one row, quantity 1, and total with VAT 1.96677.
payment&option=addAdds a payment row to the modal.Created NUM payment row value 1 for temporary document 52444.
payment&option=validateChecks whether payment covers the FR total before final save.Returned valid:false, troco:-0.97, and message The payment is equal to or greater than the total document.
saveDocumentFinal FR save.Not called. Payment modal remained visible with payment total 1.00.
dt_list_recalc_stock_articles_lojasChecks stock after the stopped save attempt.Warehouse stock stayed at -3.

Evidence: raw/playwright/workflows/invoice-receipt-partial-payment-validation-20260519T190550Z.json and workflows/handle-invoice-receipt-partial-payment.html.

Invoice / Receipt Split Payment AJAX Calls

Verified end to end. Workflow run invoice-receipt-split-payment-20260519T191233Z finished an FR with two payment rows, then verified the final FR list state and stock movement.

Action or endpointObserved purposeEvidence detail
loadArtigoReducido / insertLinhaTabDocLoads and inserts the article line.Inserted article AI-DEMO-20260519-021105, quantity 1, total with VAT 1.96677.
payment&option=addAdds the first payment row.Created NUM row with value 1.
payment&option=addAdds the second payment row.Adding TRA with document total 1.97 produced remaining value 0.97.
payment&option=validateChecks whether the combined payments cover the FR total.Returned valid:true, troco:0, and HTML containing both NUM and TRA payment rows.
saveDocumentFinal FR save.Returned 999900846%...OKDOC and redirected to the FR view.
DT_List_DocumentosVerifies final FR list state.Returned FR 9999/846 as LIQ / Finished with paid value 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after final save.Warehouse stock moved from -4 to -5.

Evidence: raw/playwright/workflows/invoice-receipt-split-payment-20260519T191233Z.json and workflows/create-invoice-receipt-split-payment.html.

Invoice / Receipt Payment Row Deletion Calls

Verified up to the save boundary. Workflow run invoice-receipt-delete-payment-row-20260519T222826Z added a cash payment row to an FR payment modal, deleted that row, and confirmed no final save or stock movement occurred.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds a payment row to the modal.Created NUM row nseq=1, value 1.97, inbox [0] Caixa 0, and estimated date 19/05/2026.
payment&option=deleteDeletes one payment row from the modal.Payload used temporary document 55293, compras=F, nseq=1, total=1.97, and edit=F.
Payment modal DOMVerifies the UI after deletion.#payment_form became empty, no .payment_form inputs remained, no .delete_payment buttons remained, and #payment_total became 0.
saveDocumentFinal FR save.Not called. No OKDOC response was captured.
dt_list_recalc_stock_articles_lojasChecks stock after payment-row deletion.Warehouse stock stayed at -26.

Evidence: raw/playwright/workflows/invoice-receipt-delete-payment-row-20260519T222826Z.json and workflows/delete-invoice-receipt-payment-row.html.

Invoice / Receipt Partial Payment Correction Calls

Verified end to end. Workflow run invoice-receipt-fix-partial-payment-20260519T223353Z edited an existing short FR payment row to the full document total, validated payment, saved the FR, and verified list state and stock movement.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the initial short payment row.Created NUM row value 1.00 against FR total 1.97.
payment&option=validateBlocks the short payment, then validates the corrected value.First returned valid:false and troco:-0.97; after editing the row, returned valid:true and troco:0.
Payment modal DOMVerifies the UI edit before final save.The existing payment input #payment_input_1 was edited from 1 to 1.97, and #payment_total became 1.97.
saveDocumentFinal FR save.Returned document 999900847 with OKDOC and redirected to /vendas/fr/view/OTk5OTAwODQ3.
DT_List_DocumentosVerifies final FR list state.Returned FR 9999/847 as LIQ / Finished with ValorPago=1.97 and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after final save.Warehouse stock moved from -26 to -27.

Evidence: raw/playwright/workflows/invoice-receipt-fix-partial-payment-20260519T223353Z.json and workflows/fix-invoice-receipt-partial-payment.html.

Invoice / Receipt Overpayment Calls

Verified end to end. Workflow run invoice-receipt-overpayment-20260519T224642Z finished an FR after entering a payment greater than the document total.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the overpayment row to the modal.Created NUM row value 2 for a document total of 1.97.
payment&option=validateChecks whether payment covers the FR total and calculates change.Returned valid:true, no errors, and troco:0.03.
saveDocumentFinal FR save.Returned document 999900848 with OKDOC and redirected to /vendas/fr/view/OTk5OTAwODQ4.
DT_List_DocumentosVerifies final FR list state.Returned FR 9999/848 as LIQ / Finished with total 1.97, ValorPago=1.97, and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after final save.Warehouse stock moved from -27 to -28.

Evidence: raw/playwright/workflows/invoice-receipt-overpayment-20260519T224642Z.json and workflows/create-invoice-receipt-overpayment.html.

Sales Invoice Line Warehouse AJAX Calls

Verified end to end. Workflow run sales-invoice-line-warehouse-20260519T203515Z updated an FT line warehouse, handled the warehouse confirmation, saved the document, and verified the final line retained 2.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, initial warehouse 1.
updateEditableTabDocUpdates editable document-line fields.Posted campo=CodLoja, value=2, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned CodLoja=2.
saveDocumentFinal FT save after both confirmations.Returned 999901692 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1692 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-warehouse-20260519T203515Z.json and workflows/set-sales-invoice-line-warehouse.html.

Sales Invoice Line Description AJAX Calls

Verified end to end. Workflow run sales-invoice-line-description-20260519T205155Z updated an FT line custom description, saved the document, and verified the final line retained the custom text.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105; the line started with the article name and empty DesignacaoExt.
updateEditableTabDocUpdates editable document-line fields.Posted campo=DesignacaoExt and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned DesignacaoExt=Consultoria operacional OfficeGest.
saveDocumentFinal FT save.Returned 999901695 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1695 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-description-20260519T205155Z.json and workflows/change-sales-invoice-line-description.html.

Sales Invoice Line Expected Date AJAX Calls

Verified end to end. Workflow run sales-invoice-line-expected-date-20260519T210214Z updated an FT line expected date, saved the document, and verified the final line retained 2026-05-26.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105; the line started with DataPrevista=2026-05-19 00:00:00.
updateEditableTabDocUpdates editable document-line fields.Posted campo=DataPrevista, value=26/05/2026, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned DataPrevista=2026-05-26 00:00:00.
saveDocumentFinal FT save.Returned 999901697 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1697 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-expected-date-20260519T210214Z.json and workflows/set-sales-invoice-line-expected-date.html.

Sales Invoice Line Unit AJAX Calls

Verified end to end. Workflow run sales-invoice-line-unit-20260519T210702Z updated an FT line unit, saved the document, and verified the final line retained H.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105; the line started with CodUnidade=UN.
updateEditableTabDocUpdates editable document-line fields.Posted campo=CodUnidade, value=H, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned CodUnidade=H and TotalCIVA=1.96677.
saveDocumentFinal FT save.Returned 999901698 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1698 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-unit-20260519T210702Z.json and workflows/set-sales-invoice-line-unit.html.

Sales Invoice Line Unit Price AJAX Calls

Verified end to end. Workflow run sales-invoice-line-unit-price-20260519T204703Z updated an FT line unit price, saved the document, and verified the final line retained 2.5.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, initial unit price 1.599.
updateEditableTabDocUpdates editable document-line fields.Posted campo=PrecoUni, value=2.50, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned PrecoUni=2.5, ValorIVA=0.575, and TotalCIVA=3.075.
saveDocumentFinal FT save.Returned 999901694 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1694 as ABR / Open with total and pending value 3.08.

Evidence: raw/playwright/workflows/sales-invoice-line-unit-price-20260519T204703Z.json and workflows/change-sales-invoice-line-unit-price.html.

Sales Invoice Email Composer Calls

Verified up to the send boundary. Workflow run sales-invoice-prepare-email-20260519T213657Z opened the invoice email composer and confirmed no send-email request was submitted.

Action or endpointObserved purposeEvidence detail
countersLoads ticket counters attached to the document view.Called with document_type=ft and document_number=999901699.
listaTabDocumentoLoads saved invoice lines on the view page.Returned the FT line for article AI-DEMO-20260519-021105.
create_document&option=calcular_totaisRecalculates totals displayed on the saved view.Returned total 3.69, VAT 0.69, and net value 3.
documents&option=body_email_dataLoads email template/body data for the invoice email modal.Posted num=999901699, tipoop=FT, codterc=910, tipoterc=C; returned template cli_documentos referencing FT 9999/1699.

Evidence: raw/playwright/workflows/sales-invoice-prepare-email-20260519T213657Z.json and workflows/prepare-sales-invoice-email.html.

Sales Invoice SMS Composer Calls

Verified up to the send boundary. Workflow run sales-invoice-prepare-sms-20260519T214821Z opened the invoice SMS composer and confirmed no SMS send request was submitted.

Action or endpointObserved purposeEvidence detail
countersLoads ticket counters attached to the document view.Called with document_type=ft and document_number=999901699.
listaTabDocumentoLoads saved invoice lines on the view page.Returned the FT line for article AI-DEMO-20260519-021105.
create_document&option=calcular_totaisRecalculates totals displayed on the saved view.Returned total 3.69, VAT 0.69, and net value 3.
templates_sms&option=getTextoLoads SMS template text and available SMS contacts for the invoice customer.Called with table=Fact, table_entity=clientes, num=999901699, namedoc=Invoice, tipoop=FT, tipoterc=C, and id=32. Returned template cli_documentos_ft, English content 100 Ouvidos Lda999901699, and no SMS contacts.
validar_dados_sms / send SMS callsExternal-send boundary.No SMS send or validation request was submitted in the verified run.

Evidence: raw/playwright/workflows/sales-invoice-prepare-sms-20260519T214821Z.json and workflows/prepare-sales-invoice-sms.html.

Sales Invoice WhatsApp Availability Calls

Verified with caveat. Workflow run sales-invoice-whatsapp-availability-20260519T215335Z clicked the invoice WhatsApp action and confirmed the demo account returned unavailable before any composer or send request.

Action or endpointObserved purposeEvidence detail
countersLoads ticket counters attached to the document view.Called with document_type=ft and document_number=999901699.
listaTabDocumentoLoads saved invoice lines on the view page.Returned the FT line for article AI-DEMO-20260519-021105.
create_document&option=calcular_totaisRecalculates totals displayed on the saved view.Returned total 3.69, VAT 0.69, and net value 3.
chatflow&option=has-whatsapp-serviceChecks whether WhatsApp service is enabled for the account.The verified response body was false; no #sendWhatsapp modal opened.
WhatsApp send callsExternal-send boundary.No WhatsApp send request was submitted in the verified run.

Evidence: raw/playwright/workflows/sales-invoice-whatsapp-availability-20260519T215335Z.json and workflows/check-sales-invoice-whatsapp-availability.html.

Sales Invoice Duplicate Preparation Calls

Verified up to the save boundary. Workflow run sales-invoice-prepare-duplicate-20260519T215925Z opened a saved FT duplicate form and confirmed no final save request was submitted.

Action or endpointObserved purposeEvidence detail
GET /vendas/ft/dupl/OTk5OTAxNjk5Opens the source invoice as a new editable FT duplicate form.Page title became OG - Invoice [FT] and the form showed SalesInvoice New document.
listaTabDocumentoLoads the duplicated temporary line grid.Returned one copied line for article AI-DEMO-20260519-021105, Qtd=1, PrecoUni=3, PVP=3.69, IVA=23, and TotalCIVA=3.69.
DT_Select_AdiantamentosClientesLoads available customer advances.For customer 910, returned advance document FR 9999/819, which opened the Advances modal.
create_document&option=calcular_totaisRecalculates duplicate form totals.Returned net 3, VAT 0.69, and total 3.69.
saveDocumentFinal save boundary.No save, payment, print, communication, or stock request was submitted in the verified run.

Evidence: raw/playwright/workflows/sales-invoice-prepare-duplicate-20260519T215925Z.json and workflows/prepare-duplicate-sales-invoice.html.

Sales Invoice Gift Card Calls

Verified up to the save boundary. Workflow run sales-invoice-gift-card-20260520T024756Z applied an active gift certificate to an FT create form and stopped before final invoice save.

Action or endpointObserved purposeEvidence detail
createValesDescontoCreates a disposable voucher for the controlled run.Created active gift certificate IG024756000001 with value 1.
Sel2_Select_CRM_vales_ofertaLoads eligible gift certificates for the invoice modal.The selector used where[estado]=ACT.
retalho&option=save_valeofertaApplies the selected voucher to the temporary document table.Response returned success:true, valor_desconto=1, and percentagem=0.
delete with tabela=vales_ofertaCleans up the disposable voucher.Deleted voucher id 127; no invoice finalization request was submitted.

Evidence: raw/playwright/workflows/sales-invoice-gift-card-20260520T024756Z.json and workflows/apply-sales-invoice-gift-card.html.

Sales Invoice Loyalty Card Calls

Verified up to the discount boundary. Workflow run sales-invoice-loyalty-card-20260520T025748Z looked up a loyalty card on an FT create form, probed the loyalty discount-line endpoint, and stopped before final invoice save.

Action or endpointObserved purposeEvidence detail
fidelizBuscaCartaoLooks up the loyalty card for the selected invoice customer.Request used num=509031862, tipomov=C, tipoterc_prop=C, and codterc_prop=910; response returned account id 13, card id 10, state A, and qtd_pontos=0.
fidelizacao&option=add_discount_card_lineAttempts to add the loyalty discount line to the temporary document table.Response returned succeeded:false because Artigo para descontos is not configured in the demo loyalty parameters.
listaTabDocumentoReloads the temporary document rows after the boundary probe.The invoice still had one original article line; no loyalty discount row was inserted.

Evidence: raw/playwright/workflows/sales-invoice-loyalty-card-20260520T025748Z.json and workflows/use-sales-invoice-loyalty-card.html.

Sales Invoice Customer Selection Calls

Verified up to the save boundary. Workflow run sales-invoice-customer-selection-20260520T024003Z selected customer 910 on an FT create form and stopped before line insertion or save.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads billing customer data and active status.Customer 910 returned activo:"T", 100 Ouvidos Lda, VAT 509031862, address, locality, postal code, country, and salesperson id.
edi&option=get_broker_id_entityChecks broker/commercial metadata for the selected billing entity.The request used terc_id=910 and terc_type=C.
DT_Select_AdiantamentosClientesChecks customer advances/open advance documents.The request used entidade=910 and compras=F.
Sel2_Select&table=moradase / load&tabela=moradaseLoads alternate address options for the selected customer.The verified customer returned no alternate address rows, so the main customer address remained active.
saveDocumentFinal save boundary.No final save, draft save, line insertion, print, payment, or delete request was submitted.

Evidence: raw/playwright/workflows/sales-invoice-customer-selection-20260520T024003Z.json and workflows/select-sales-invoice-customer.html.

Sales Invoice Portes Calls

Verified up to the save boundary. Workflow run sales-invoice-portes-20260520T021905Z added Portes to an FT create form and stopped before final save.

Action or endpointObserved purposeEvidence detail
#btn_PortesOpens the Portes modal.The modal id was modalPortes and the numeric input was #valPortes, labelled Valor Total (S/ IVA).
#addPortesSaves the Portes value into the temporary document grid.The verified value was 5.00.
lancar_novo_portes / insertLinhaTabDocAdds the configured shipping article as a document line.The grid changed from one line to two lines and included PORTES001 / PORTES.
listaTabDocumentoReloads the temporary line grid.The Portes row returned TotalSIVA=5, IVA=23, and TotalCIVA=6.15.
saveDocumentFinal save boundary.No final save, draft save, print, payment, or delete request was submitted.

Evidence: raw/playwright/workflows/sales-invoice-portes-20260520T021905Z.json and workflows/add-sales-invoice-portes.html.

Sales Invoice VAT and Totals Calls

Verified read-only. Workflow run sales-invoice-totals-20260520T022740Z read the FT VAT/totals panels and explicitly called the totals calculator without saving the document.

Action or endpointObserved purposeEvidence detail
listaTabDocumentoLoads the current temporary document-line grid.Returned one line for article AI-DEMO-20260519-021105.
create_document&option=calcular_totaisCalculates gross/net values, discounts, VAT table, retention, profit, article quantities, and final total.Returned iliquido=1.599, iva=0.36777, retencao=0, total=1.97, and table_ivas[23] with incidence 1.599.
Visible VAT panelShows the tax-rate summary below the document lines.Displayed 23,00%, incidence 1,60 EUR, and VAT value 0,37 EUR.
Visible totals panelShows gross/net, discount, VAT, retention, and final total before save.Displayed total gross/net 1,60 EUR, VAT 0,37 EUR, retention 0,00%, and total 1,97 EUR.
saveDocumentFinal save boundary.No final save, draft save, print, payment, or delete request was submitted.

Evidence: raw/playwright/workflows/sales-invoice-totals-20260520T022740Z.json and workflows/read-sales-invoice-vat-and-totals.html.

Sales Invoice Article Search and Line Add Calls

Verified up to the save boundary. Workflow run sales-invoice-article-search-line-20260520T023231Z searched for an article inside the FT document tab, selected it, and stopped before final save.

Action or endpointObserved purposeEvidence detail
#buscaArtigoDocument-tab article search field.The verified search value was AI-DEMO-20260519-021105.
loadTabDocumentoArtigosSearches article rows for the document-line selector.Two article search requests were captured during typing and result loading.
SearchProduct / loadArtigoReducidoLoads selected article metadata.Returned data used to populate article price, VAT, warehouse, cost, and stock context.
insertLinhaTabDocCreates the temporary invoice line.The line grid returned CodArtigo=AI-DEMO-20260519-021105, quantity 1, VAT 23, and TotalCIVA=1.96677.
listaTabDocumentoReloads the temporary line grid after insertion.The verified run captured six line-load/insert-related requests.
saveDocumentFinal save boundary.No final save, draft save, print, payment, or delete request was submitted.

Evidence: raw/playwright/workflows/sales-invoice-article-search-line-20260520T023231Z.json and workflows/search-and-add-sales-invoice-article-line.html.

Sales Invoice Attachment Calls

Verified end to end. Workflow run sales-invoice-attachments-20260519T221119Z uploaded and deleted a disposable attachment from a saved FT invoice and confirmed no invoice-changing request was submitted.

Action or endpointObserved purposeEvidence detail
GET /vendas/ft/view/OTk5OTAxNjk5Loads the saved invoice attachment surface.The FT view exposed Attachements, Upload file, the Attach modal, and table columns for description, category, date, filename, MIME type, size, and public flag.
DT_Select_AttachmentsLoads saved invoice attachments.Request used search[NumDoc]=999901699 and search[tipodoc]=FT. After cleanup, the response returned {"data":[]}.
POST /ajaxserver / AceUploadUploads a file attachment to the saved invoice.Multipart request used location=attachments, codempr=1, codterc=910, tipoterc=C, numdoc=999901699, tipodoc=FT, required assunto, checked public=1, and files[]. Response returned {"ok":true,"num":193}, MIME type text/plain, and size 66.
lista_attachments_delete(193)Deletes the uploaded row after Bootbox confirmation.The UI opened Are you sure you want to delete?; accepting the prompt removed the row, and the next attachment table lookup returned no data.

Evidence: raw/playwright/workflows/sales-invoice-attachments-20260519T221119Z.json and workflows/manage-sales-invoice-attachments.html.

Sales Invoice Attachment Download Calls

Verified end to end. Workflow run sales-invoice-download-attachment-20260519T222253Z uploaded a disposable saved-FT attachment, clicked the row download action, verified the browser download, and deleted the attachment.

Action or endpointObserved purposeEvidence detail
lista_attachments_edit(193)Starts attachment file download from the row action.The browser suggested original filename sales-invoice-download-attachment-20260519T222253Z.txt and downloaded 75 bytes.
DT_Select_AttachmentsVerifies the source FT attachment row.The row for num=193 returned description AI FT attachment download 20260519T222253Z, MIME type text/plain, size 75, and public=1.
deleteAttachmentByIdCleans up the disposable attachment.The final lookup found zero rows for the downloaded attachment id, leaving the demo invoice clean.

Evidence: raw/playwright/workflows/sales-invoice-download-attachment-20260519T222253Z.json, downloaded artifact raw/playwright/downloads/sales-invoice-download-attachment-20260519T222253Z-sales-invoice-download-attachment-20260519T222253Z.txt, and workflows/download-sales-invoice-attachment.html.

Sales Invoice Attachment Edit Calls

Verified end to end. Workflow run sales-invoice-edit-attachment-20260519T221820Z uploaded a disposable saved-FT attachment, opened the edit modal, changed description and public metadata, verified the table row, and deleted the attachment.

Action or endpointObserved purposeEvidence detail
lista_attachments_edit2(193)Opens the row edit modal.The modal id was editattachment with hidden attach_id=193, required edit_attach_assunto, optional edit_attach_categoria, edit_attach_public, and save button btn_edit_attach_submit.
editAttachmentSaves attachment metadata.The verified save serialized num=193 and edited assunto=AI FT attachment edited 20260519T221820Z; because Public was unchecked, no public field was sent. Response returned {"success":true}.
DT_Select_AttachmentsVerifies the edited FT attachment row.The row for num=193 returned edited description, original show name sales-invoice-edit-attachment-20260519T221820Z.txt, MIME type text/plain, size 71, and public=0.
deleteAttachmentByIdCleans up the disposable attachment.The final lookup found zero rows for the edited attachment id, leaving the demo invoice clean.

Evidence: raw/playwright/workflows/sales-invoice-edit-attachment-20260519T221820Z.json and workflows/edit-sales-invoice-attachment.html.

Sales Invoice Public Link Calls

Verified end to end. Workflow run sales-invoice-copy-public-link-20260519T213057Z copied the public document URL from a saved FT view and verified the public document page.

Action or endpointObserved purposeEvidence detail
countersLoads ticket counters attached to the document view.Called with document_type=ft and document_number=999901699.
listaTabDocumentoLoads saved invoice lines on the view page.Returned the FT line for article AI-DEMO-20260519-021105.
create_document&option=calcular_totaisRecalculates totals displayed on the saved view.Returned total 3.69, VAT 0.69, and net value 3.
navigator.clipboard.writeTextCopies the public document URL.The click copied https://pdoc.officegest.com/rwsCRlSDlOXcA36UO7Y; no OfficeGest AJAX call was made by the copy click itself.
https://pdoc.officegest.com/...Public document view outside the authenticated demo session.Returned status 200, title OfficeGest's Public Documents, invoice FT 9999/1699, amount 3.69 EUR, and Download.

Evidence: raw/playwright/workflows/sales-invoice-copy-public-link-20260519T213057Z.json and workflows/copy-sales-invoice-public-link.html.

Public Sales Invoice Download Calls

Verified end to end. Workflow run public-sales-invoice-download-pdf-20260519T214219Z opened the public pdoc page, clicked Download, and verified the generated browser download.

Action or endpointObserved purposeEvidence detail
GET https://pdoc.officegest.com/rwsCRlSDlOXcA36UO7YLoads the public document shell outside the authenticated OfficeGest session.Returned status 200 and page title OfficeGest's Public Documents.
GET services.guisoft.pt/officegest/getpublicdoc/{token}Loads the public document metadata.Returned success:true, document FT 9999/1699, customer 100 Ouvidos Lda, total 3.69 EUR, and PDF URL democomercial.officegest.com/download/?docfl=....
POST democomercial.officegest.com/api/v2/sales/action-logLogs public document view/download attempts.The page posted both {"action":"view",...} and {"action":"download","document_type":"FT","document_number":999901699,...}. In the unauthenticated verified run, the action-log response could return 401.
GET democomercial.officegest.com/download/?docfl=...Fetches the PDF file for the public document.The Download click produced filename FT 9999_1699.pdf, 25990 bytes, and a valid %PDF-1.7 header.

Evidence: raw/playwright/workflows/public-sales-invoice-download-pdf-20260519T214219Z.json and workflows/download-public-sales-invoice-pdf.html.

Sales Invoice PDF Print AJAX Calls

Verified end to end. Workflow run sales-invoice-print-pdf-20260519T212449Z generated a PDF from a saved FT view and verified the PDF download route.

Action or endpointObserved purposeEvidence detail
countersLoads ticket counters attached to the document view.Called with document_type=ft and document_number=999901699.
listaTabDocumentoLoads saved invoice lines on the view page.Returned the FT line for article AI-DEMO-20260519-021105.
create_document&option=calcular_totaisRecalculates totals displayed on the saved view.Returned total 3.69, VAT 0.69, and net value 3.
imprimirGenerates the PDF output for the selected document.Posted num=999901699, tipoop=FT, talao=F, impressao=F, and returned FT 9999-1699.pdf.
/download/?docfl=...Downloads the generated file.Returned status 200, application/pdf, 25990 bytes, and a %PDF-1.7 header.

Evidence: raw/playwright/workflows/sales-invoice-print-pdf-20260519T212449Z.json and workflows/print-sales-invoice-pdf.html.

Sales Invoice Line Gross Price AJAX Calls

Verified end to end. Workflow run sales-invoice-line-gross-price-20260519T211156Z updated an FT line gross price, saved the document, and verified the final line retained PVP=3.69.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105; the line started with PVP=1.96677.
updateEditableTabDocUpdates editable document-line fields.Posted campo=PVP, value=3.69, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned PVP=3.69, PrecoUni=3, and TotalCIVA=3.69.
saveDocumentFinal FT save.Returned 999901699 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1699 as ABR / Open with total and pending value 3.69.

Evidence: raw/playwright/workflows/sales-invoice-line-gross-price-20260519T211156Z.json and workflows/change-sales-invoice-line-gross-price.html.

Sales Invoice Line VAT AJAX Calls

Verified end to end. Workflow run sales-invoice-line-vat-20260519T204152Z updated an FT line VAT rate, saved the document, and verified the final line retained 13.

Action or endpointObserved purposeEvidence detail
Sel2_Select_v2Looks up VAT choices from table ivas.Term 13 returned Reduzida 1 and Taxa 13%, both with iva=13.
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, initial VAT 23%.
updateEditableTabDocUpdates editable document-line fields.Posted campo=IVA, value=13, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned IVA=13 and TotalCIVA=1.80687.
saveDocumentFinal FT save.Returned 999901693 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1693 as ABR / Open with total and pending value 1.81.

Evidence: raw/playwright/workflows/sales-invoice-line-vat-20260519T204152Z.json and workflows/set-sales-invoice-line-vat.html.

Sales Invoice Line VAT Reason AJAX Calls

Verified end to end. Workflow run sales-invoice-line-vat-reason-20260519T205716Z updated an FT line VAT reason, saved the document, and verified the final line retained 7.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, initial RI=null.
updateEditableTabDocUpdates editable document-line fields.Posted campo=RI, value=7, and received {"success":{"success":true,"m13":false},"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned RI=7, with IVA=23 unchanged.
saveDocumentFinal FT save.Returned 999901696 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1696 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-vat-reason-20260519T205716Z.json and workflows/set-sales-invoice-line-vat-reason.html.

Sales Invoice Line Accounting Classification AJAX Calls

Verified end to end. Workflow run sales-invoice-line-accounting-classification-20260519T202853Z updated an FT line accounting classification, saved the document, and verified the final line retained 1.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
updateEditableTabDocUpdates editable document-line fields.Posted campo=id_classifcontab, value=1, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned id_classifcontab=1.
saveDocumentFinal FT save.Returned 999901691 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1691 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-accounting-classification-20260519T202853Z.json and workflows/set-sales-invoice-line-accounting-classification.html.

Sales Invoice Line Cost Center AJAX Calls

Verified end to end. Workflow run sales-invoice-line-cost-center-20260519T202424Z updated an FT line cost center, saved the document, and verified the final line retained 0002.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
updateEditableTabDocUpdates editable document-line fields.Posted campo=cod_centrocusto, value=0002, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned cod_centrocusto=0002.
saveDocumentFinal FT save.Returned 999901690 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1690 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-line-cost-center-20260519T202424Z.json and workflows/set-sales-invoice-line-cost-center.html.

Sales Invoice Currency AJAX Calls

Verified end to end. Workflow run sales-invoice-currency-20260519T201838Z saved an FT with currency DOL and exchange rate 1.1.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
saveDocumentFinal FT save.The encoded form payload included CodMoeda=DOL and Cambio=1.1, then returned 999901689 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1689 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-currency-20260519T201838Z.json and workflows/set-sales-invoice-currency.html.

Sales Invoice Classification AJAX Calls

Verified end to end. Workflow run sales-invoice-classification-20260519T201417Z saved an FT with classification CF / Cliente Final.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
saveDocumentFinal FT save.The encoded form payload included CodClassif=CF, then returned 999901688 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1688 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-classification-20260519T201417Z.json and workflows/set-sales-invoice-classification.html.

Sales Invoice Delivery Details AJAX Calls

Verified end to end. Workflow run sales-invoice-delivery-method-20260519T200919Z saved FT delivery method, vehicle, loading, and unloading fields.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer billing and unloading defaults.After customer 910, the form exposed unloading defaults based on the customer address.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
saveDocumentFinal FT save.The encoded form payload included CodModoExp=NV, Viatura=AI-VAN-2026, CargaMorada, CargaLocalidade, CargaCodPostal, CargaCodPais, CargaData, CargaTime, DescargaMorada, DescargaLocalidade, DescargaCodPostal, DescargaCodPais, DescargaData, and DescargaTime.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1687 as ABR / Open with total and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-delivery-method-20260519T200919Z.json and workflows/set-sales-invoice-delivery-method.html.

Sales Invoice Global Discount AJAX Calls

Verified end to end. Workflow run sales-invoice-global-discount-20260519T200434Z recalculated an FT with a document-level discount, saved it, and verified the discounted list total.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
create_document&option=calcular_totaisRecalculates document totals.Used desconto1=5; totals changed from 1.97 to 1.87.
saveDocumentFinal FT save.The encoded form payload included PerDesc=5, then returned 999901686 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1686 as ABR / Open with total and pending value 1.87.

Evidence: raw/playwright/workflows/sales-invoice-global-discount-20260519T200434Z.json and workflows/apply-sales-invoice-global-discount.html.

Sales Invoice Line Discount AJAX Calls

Verified end to end. Workflow run sales-invoice-line-discount-20260519T195856Z updated an FT line discount, saved the document, and verified the discounted total in the FT list.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, unit price 1.599, VAT 23%.
updateEditableTabDocUpdates editable document-line fields.Posted campo=Desconto1, value=10, iscompra=F, and received {"success":true,"msg":""}.
DT_TabDocumentoReloads line-grid data after the edit.The line returned Desconto1=10 and DescontoLinha=0.1599.
saveDocumentFinal FT save.Returned 999901685 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1685 as ABR / Open with total and pending value 1.77.

Evidence: raw/playwright/workflows/sales-invoice-line-discount-20260519T195856Z.json and workflows/apply-sales-invoice-line-discount.html.

Sales Invoice Fiscal Zone AJAX Calls

Verified with caveat. Workflow run sales-invoice-fiscal-zone-20260519T195158Z changed an FT fiscal zone to PT, saved the document, and verified the final view restored PT-MA for customer 910.

Action or endpointObserved purposeEvidence detail
Sel2_Select_ZonasFiscaisLooks up fiscal-zone selector values.Term PT returned PT / Portugal; observed terms also include PT-AC, PT-MA, and ES.
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, total with VAT 1.96677.
saveDocumentFinal FT save.The encoded form payload included zonafiscal=PT, then returned 999901684 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1684 as ABR / Open with total 1.97 and pending 1.97.

Evidence: raw/playwright/workflows/sales-invoice-fiscal-zone-20260519T195158Z.json and workflows/set-sales-invoice-fiscal-zone.html.

Sales Invoice Billing Address AJAX Calls

Verified end to end. Workflow run sales-invoice-billing-address-20260519T194417Z saved an FT with alternate billing name and address.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads default customer billing fields.Customer 910 initially filled name 100 Ouvidos Lda and the Moura address.
Sel2_Select&table=moradaseLoads available addresses for the selected customer.The billing selector exposed -DEF / Main Contact and -OTR / Other Addresses.
saveDocumentFinal FT save.The encoded form payload included MoradaFact=-OTR, NomeFact=AI Alternate Billing 20260519, Morada=Rua Alternativa OfficeGest 123, Localidade=Leiria, CodPostal=2400-001, and CodPais=PRT.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1682 as ABR / Open with nomefact: AI Alternate Billing 20260519.

Evidence: raw/playwright/workflows/sales-invoice-billing-address-20260519T194417Z.json and workflows/set-sales-invoice-billing-address.html.

Sales Invoice Payment Terms AJAX Calls

Verified end to end. Workflow run sales-invoice-payment-terms-20260519T193814Z changed the FT payment condition to 30, saved the document, and verified the list row showed 30 Dias.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.The line insert used formapag=30 after the payment term was changed.
saveDocumentFinal FT save.The encoded form payload included CodFormaPag=30 and DataLimitePaga=18/06/2026, then returned 999901681 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1681 as ABR / Open with fpag: 30 Dias.

Evidence: raw/playwright/workflows/sales-invoice-payment-terms-20260519T193814Z.json and workflows/set-sales-invoice-payment-terms.html.

Sales Invoice Vehicle AJAX Calls

Verified end to end. Workflow run sales-invoice-vehicle-20260519T193202Z selected customer vehicle 75-XU-14, saved an FT, and verified the final list row exposed the vehicle value.

Action or endpointObserved purposeEvidence detail
Sel2_viaturasSearches active vehicles available for the selected customer.For customer 910, returned 75-XU-14 with description Honda Vision - 2018 plus a No registration option.
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, total with VAT 1.96677.
saveDocumentFinal FT save.The encoded form payload included CodEquipExt=75-XU-14, Marca=Honda, Modelo=Vision, Versao=2018, ContKmAnt=3111111, ContKmAct=3111222, and imprimirviatura=on.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1680 as ABR / Open with codequipext_c: 75-XU-14.

Evidence: raw/playwright/workflows/sales-invoice-vehicle-20260519T193202Z.json and workflows/add-sales-invoice-vehicle.html.

Sales Invoice Vehicle Print Flag Calls

Verified read-only. Workflow run sales-invoice-vehicle-print-flag-20260520T020900Z opened the FT create page, confirmed Print vehicle data can be unchecked, and stopped before save or print.

Action or endpointObserved purposeEvidence detail
GET /vendas/ft/createLoads the sales invoice create form.The form exposed #imprimirviatura and #doc_CodEquipExt.
#imprimirviaturaControls whether vehicle data should print.The checkbox opened checked by default and became false after clearing it.
State-changing invoicing callsSafety boundary.No saveDocument, saveRascunho, imprimir, payment, line-insert, or delete request was submitted.

Evidence: raw/playwright/workflows/sales-invoice-vehicle-print-flag-20260520T020900Z.json and workflows/hide-sales-invoice-vehicle-from-printout.html.

Sales Invoice Notes AJAX Calls

Verified end to end. Workflow run sales-invoice-notes-20260519T192511Z filled a public note and internal note on an FT, saved the document, and verified both values persisted on the final view.

Action or endpointObserved purposeEvidence detail
NameEntidadesLoads customer details after selecting the invoice billing entity.Customer 910, VAT 509031862, was accepted on /vendas/ft/create.
loadArtigoReducido / insertLinhaTabDocLoads and inserts the invoice article line.Inserted article AI-DEMO-20260519-021105, quantity 1, total with VAT 1.96677.
saveDocumentFinal FT save.The encoded form payload included Obs for the public note and Obs2 for the internal note, then returned 999901679 with OKDOC.
DT_List_DocumentosVerifies final FT list state.Returned FT 9999/1679 as ABR / Open with total 1.97 and pending value 1.97.

Evidence: raw/playwright/workflows/sales-invoice-notes-20260519T192511Z.json and workflows/add-sales-invoice-notes.html.

Receipt No Documents Validation AJAX Calls

Verified end to end. Workflow run receipt-no-documents-validation-20260519T191736Z selected customer 910 but did not move any pending document into Documents, then attempted final save.

Action or endpointObserved purposeEvidence detail
loadTabDocumentoReciboInitializes the receipt document tables for the selected customer.Customer 910 was selected on /vendas/r/create.
listaTabDocumentoRecibo&estado=FLoads outstanding documents.Pending documents were available, but none were moved into Documents.
changeEstadoReciboMoves pending source rows into Documents.Not called in the empty-receipt validation run.
payment&option=validatePayment validation before receipt save.Not reached because OfficeGest stopped at ErrorNo lines.
saveDocumentReciboFinal receipt save.Not called. OfficeGest stayed on /vendas/r/create.

Evidence: raw/playwright/workflows/receipt-no-documents-validation-20260519T191736Z.json and workflows/handle-receipt-no-documents-error.html.

Customer Creation AJAX Calls

Verified end to end. Workflow run create-customer-20260519T025604Z created customer 1003, AI Demo Customer 20260519T025604Z, and verified it through the customer grid and customer master-data lookup.

Action or endpointObserved purposeEvidence detail
DT_SelectClientesLoads and filters the Customers grid.After save, a name search returned recordsFiltered: 1 and row codterc: 1003.
loadFormLoads the New Customer modal.Posted form=cliente, id=novocliente, params=btn_save_new.
entidades&option=find_customer_ncontribChecks VAT/tax-number duplication.Observed before saving VAT 590256041.
searchTelefoneClienteChecks phone and mobile values for existing customer matches.Observed for +351.244000001 and +351.919025604.
createNovoClienteCreates the customer record.Returned {"id":1003,...}, including Activo: T, CodFormaPag: PP, CodClassif: CF, CodMoedaHab: EUR, gestorcliente: 1.
NameEntidadesLoads full customer master data by id.Lookup for codID=1003 returned address, contacts, VAT, accounting account 2111101003, RGPD fields, payment defaults, and active status.

Evidence: raw/playwright/workflows/create-customer-20260519T025604Z.json and workflows/create-customer.html.

Supplier Creation AJAX Calls

Verified end to end. Workflow run create-supplier-20260519T030323Z created supplier 100, AI Demo Supplier 20260519T030323Z, and verified it through the supplier grid and supplier master-data lookup.

Action or endpointObserved purposeEvidence detail
DT_SelectFornecedoresLoads and filters the Suppliers grid.After save, name and VAT searches returned recordsFiltered: 1 and row codterc: 100.
loadFormLoads the New Supplier modal.Posted form=forn, id=novoforn, params=btn_save_new.
Sel2_SelectLooks up postal code values.Observed for table=C_Postal, term=2400-002.
createNovoFornCreates the supplier record.Payload included CodPais, NContrib, Nome, Morada, Morada2, Localidade, CodPostal, EMail, phone, mobile, and CodClassif.
entidades&option=entityContactsLoads contacts for the supplier detail page.Called with entity_type=F and entity_id=100; response included phone and SMS/mobile contact entries.
Sel2_ContasResolves the generated accounting account.Lookup for 2211100100 returned text AI Demo Supplier 20260519T030323Z.
NameEntidadesLoads full supplier master data by id.tabla=Forn returned address, contacts, VAT, accounting account, GDPR fields, and active status; tabla=Fornecedor returned [].

Evidence: raw/playwright/workflows/create-supplier-20260519T030323Z.json and workflows/create-supplier.html.

Contact Creation AJAX Calls

Verified end to end. Workflow run create-contact-20260519T030819Z created contact 27, AI Demo Contact 20260519T030819Z, and verified it through the contact grid and contact master-data lookup.

Action or endpointObserved purposeEvidence detail
DT_SelectContactosLoads and filters the Contacts grid.After save, name and VAT searches returned recordsFiltered: 1 and row codcontacto: 27.
createNovoContactoCreates the contact record.Returned {"id":27,...} with VAT, location, postal code, address, name, email, country, phone, mobile, and GDPR processing fields.
Sel2_SelectLooks up postal codes and contact selector rows.Observed for table=C_Postal, term=2400-003, and for table=contactos, term=27.
counters&option=contactosLoads counts for contact tabs.Observed for related_entities and anexos with terceiro=27.
counters&option=tickets_abertosLoads open-ticket count for the contact.Called with entity_type=T and entity_code=27.
Sel2_Select_arraysResolves the contact in all-entities selectors.Called with aent.tipo=T and returned row text AI Demo Contact 20260519T030819Z.
NameEntidadesLoads full contact master data by id.tabla=Contactos returned address, contacts, VAT, GDPR fields, and active status; tabla=Contacto returned [].

Evidence: raw/playwright/workflows/create-contact-20260519T030819Z.json and workflows/create-contact.html.

Prospect Creation AJAX Calls

Verified end to end. Workflow run create-prospect-20260519T031326Z created prospect 22, AI Demo Prospect 20260519T031326Z, and verified it through the prospect grid and prospect master-data lookup.

Action or endpointObserved purposeEvidence detail
DT_Select_ProspectsLoads and filters the Prospects grid.After save, name and VAT searches returned recordsFiltered: 1 and row codterc: 22.
loadFormLoads the New Prospect modal.Posted form=prospect, id=novoprospect, params=btn_save_new.
createNovoProspectCreates the prospect record.Returned {"id":22,...} with TipoCliente=E, TipoProv=C, CodClassif=CF, CodFormaPag=PP, Activo=T, contact fields, and RGPD defaults.
Sel2_SelectLooks up postal code values.Observed for table=C_Postal, term=2400-004.
NameEntidadesLoads full prospect master data by id.tabla=Prospect returned the created prospect. tabla=Cliente with the same id returned an unrelated customer, confirming the prospect table parameter is required.

Evidence: raw/playwright/workflows/create-prospect-20260519T031326Z.json and workflows/create-prospect.html.

Employee Creation AJAX Calls

Verified end to end. Workflow run create-employee-20260519T031958Z created employee 122, AI Demo Employee 20260519T031958Z, and verified it through the employees grid, employee selector lookup, and employee master-data lookup.

Action or endpointObserved purposeEvidence detail
dt_select_empreg_depLoads and filters the Employees grid.After save, name, name-column, and email searches returned recordsFiltered: 1 and row codempr: 122.
Sel2_Select_v2Loads the permissions dropdown and resolves employee selector rows.Permissions used table=privsgroups, id=id, and value=name. Employee selector verification used table=empreg, id=CodEmpr, value=Nome, and where[activo]=T.
/ajaxserver form post with newempregadoCreates the employee record.Payload included Nome, Morada, Localidade, CodPostal, EMail, CodPais=PT, phone/mobile prefix fields, NCaixa_c=0, and PrivGroup_c=24.
NameEntidadesLoads full employee master data by id.tabla=Empreg returned employee 122 with web-login, permission, cash-register, agenda, HR, RGPD, store-access, and series-access fields. tabla=Empregado returned [].

Evidence: raw/playwright/workflows/create-employee-20260519T031958Z.json and workflows/create-employee.html.

Commercial Record Creation AJAX Calls

Verified end to end. Workflow run create-business-20260519T032902Z created commercial record 15, AI Demo Commercial 20260519T032902Z, and verified it through the Business grid and representative selector lookup.

Action or endpointObserved purposeEvidence detail
DT_Select&table=represntLoads the Business/Commercial grid.The verified list response contained row CodRepres: 15, NContrib: 590329022, Activo: T.
loadFormOpens the New Commercial modal.The route also contains form form_nuevocomerciai in the DOM. The modal id is nuevocomerciai.
createNovoComercialCreates the commercial/representative record.Payload included NContrib, Nome, Morada, Localidade, CodPostal, CodPais=PT, EMail, phone, and mobile.
entidades&option=entityContactsLoads contact cards on the created record detail page.Called with entity_type=R and entity_id=15; response included phone and SMS/mobile contact entries.
Sel2_Select_arraysResolves the commercial record in all-entities selectors.Called with aent.tipo=R and returned the created name for id 15.
Sel2_Select_v2Resolves representative selectors.Lookup with table=represnt, id=CodRepres, value=Nome, and term=15 returned the created commercial record.
NameEntidadesCommercial table-name probes.tabla=Represnt, tabla=Repres, and tabla=Comercial returned []; this workflow should use the list and selector endpoints for verification.

Evidence: raw/playwright/workflows/create-business-20260519T032902Z.json and workflows/create-business.html.

GDPR Request Creation AJAX Calls

Verified end to end. Workflow run create-gdpr-request-20260519T033345Z created GDPR Look-up request 9, create-gdpr-portability-request-20260519T091329Z created Portability request 10, create-gdpr-anonymity-request-20260519T091554Z created Anonymity request 11, and create-gdpr-other-request-20260520T004853Z created Other request 12, all for customer 1003.

Action or endpointObserved purposeEvidence detail
gdpr&option=DT_list_gdpr_reqLoads and filters the GDPR request grid.Called with join_entities=1, date range, request type, entity type, entity, and status filters. Verified responses returned request 9, request 10, request 11, and request 12.
create_gdpr_reqCreates the GDPR request.Payload is sent as encoded form=... query data and includes terc_type=C, terc_id=1003, req_by, user_document, req_type, and req_text=<br>. Look-up used req_type=1; Portability used req_type=2; Anonymity used req_type=3; Other used req_type=1000. All responses were {"success":true}.
status_estado SQL expression in list requestDerives request status display code.The observed list columns include CASE WHEN status = 0 THEN 'I' WHEN status = 1 THEN 'D' ELSE 'E' END AS status_estado. The created request returned status=0 and status_estado=I.

Evidence: raw/playwright/workflows/create-gdpr-request-20260519T033345Z.json, raw/playwright/workflows/create-gdpr-portability-request-20260519T091329Z.json, raw/playwright/workflows/create-gdpr-anonymity-request-20260519T091554Z.json, raw/playwright/workflows/create-gdpr-other-request-20260520T004853Z.json, and workflows/create-gdpr-request.html.

Pro-Forma Invoice FP AJAX Calls

Verified end to end. Workflow run proforma-invoice-fp-20260520T002252Z created pro-forma invoice 999900066 / FP 9999/66 for customer 910. The document remained open and did not change stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=FactPLoads and verifies pro-forma invoices.Called with typesaft=WPF, tipoop=FP, actualizacc=F, recibo=F, and oficinas=F.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks customer pending documents.Called during customer selection and returned true for the demo customer.
loadArtigoReducidoLoads article data for FP.Called with query=AI-DEMO-20260519-021105, compras=F, actualizastocks=F, and tipoop=FP.
insertLinhaTabDocInserts pro-forma line.Payload used article AI-DEMO-20260519-021105, customer 910, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates FP totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
checkProfitMarginsValidates margin rules.Called before save against the temporary table.
saveDocumentSaves the FP document.Response: {"return":"999900066%OK&=&OKDOC&=&","print_documents":[]}.
dt_list_recalc_stock_articles_lojasChecks stock after save.Warehouse 1 stock stayed -41.

Evidence: raw/playwright/workflows/proforma-invoice-fp-20260520T002252Z.json and workflows/create-proforma-invoice.html.

Pro-Forma Invoice FP Cancellation AJAX Calls

Verified end to end. Workflow run cancel-proforma-invoice-fp-20260520T002319Z cancelled pro-forma invoice 999900066 / FP 9999/66 and verified stock stayed unchanged.

Action or endpointObserved purposeEvidence detail
podeAnularDocChecks cancellation permission before opening the final confirmation.Called with num=999900066 and tipoop=FP. Response body: {"succeeded":true,"message":null,"params":null}.
Sel2_Select_v2&table=motivos_docsLoads active cancellation reasons.Called with where[is_anulacao]=1, where[activo]=1, and term 1. Returned reason 1 / Erro de faturacao.
deleteDocumentCancels the pro-forma invoice.POST payload included num=999900066, tipoop=FP, id_motivo_anulacao=1, anulacao=Erro de faturacao, and tot_fin=1.97. Response body: {"success":true}.
DT_List_Documentos&table=FactPVerifies the FP list row.After cancellation, search for 999900066 returned estado=ANU, desig_estado=Canceled, total 1.97, ValorPago=0, and pending value 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after FP cancellation.Warehouse 1 stock for AI-DEMO-20260519-021105 stayed -41.

Evidence: raw/playwright/workflows/cancel-proforma-invoice-fp-20260520T002319Z.json and workflows/cancel-proforma-invoice.html.

Converted Pro-Forma FT Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-proforma-invoice-draft-20260519T170759Z created source pro-forma 999900063 / FP 9999/63, converted it into FT draft 463, and saved the draft as final invoice 999901670 / FT 9999/1670.

Action or endpointObserved purposeEvidence detail
facturardocCreates the FT draft from the source pro-forma.Payload used tipoopdest=ft, tipoop=FP, and source num=999900063. Response opened draft 463.
listaTabDocumentoLoads copied FT draft lines.The copied line preserved ndocori=999900063, tipodocori=FP, and linhandocori=1.
saveDocumentSaves the converted FT draft as a final invoice.Response was {"return":"999901670%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final FT list state.Search returned FT 9999/1670, ABR / Open, total 1.97, and paid value 0.

Evidence: raw/playwright/workflows/finalize-converted-proforma-invoice-draft-20260519T170759Z.json and workflows/finalize-converted-proforma-invoice-draft.html.

Converted Pro-Forma FR Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-proforma-invoice-receipt-draft-20260519T171230Z created source pro-forma 999900064 / FP 9999/64, converted it into FR draft 463, recorded payment, and saved the draft as final invoice / receipt 999900844 / FR 9999/844.

Action or endpointObserved purposeEvidence detail
facturardocCreates the FR draft from the source pro-forma.Payload used tipoopdest=fr, tipoop=FP, and source num=999900064. Response opened draft 463.
listaTabDocumentoLoads copied FR draft lines.The copied line preserved ndocori=999900064, tipodocori=FP, and linhandocori=1.
payment&option=addAdds the FR payment line before final save.The payment modal saved [NUM] Numerário for 1.97.
saveDocumentSaves the converted FR draft as a final invoice / receipt.Response was {"return":"999900844%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final FR list state.Search returned FR 9999/844, LIQ / Finished, total 1.97, and paid value 1.97.

Evidence: raw/playwright/workflows/finalize-converted-proforma-invoice-receipt-draft-20260519T171230Z.json and workflows/finalize-converted-proforma-invoice-receipt-draft.html.

Converted Pro-Forma ENC Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-proforma-sales-order-draft-20260519T171841Z created source pro-forma 999900065 / FP 9999/65, converted it into ENC draft 463, and saved the draft as final sales order 999900109 / ENC 9999/109.

Action or endpointObserved purposeEvidence detail
facturardocCreates the ENC draft from the source pro-forma.Payload used tipoopdest=enc, tipoop=FP, and source num=999900065. Response opened draft 463.
listaTabDocumentoLoads copied ENC draft lines.The copied line preserved ndocori=999900065, tipodocori=FP, and linhandocori=1.
saveDocumentSaves the converted ENC draft as a final sales order.Response was {"return":"999900109%&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final ENC list state.Search returned ENC 9999/109, ABR / Open, total 1.97, and paid value 0.

Evidence: raw/playwright/workflows/finalize-converted-proforma-sales-order-draft-20260519T171841Z.json and workflows/finalize-converted-proforma-sales-order-draft.html.

Simplified Invoice FS AJAX Calls

Verified end to end. Workflow run simplified-invoice-fs-20260519T043414Z created simplified invoice 999900008 / FS 9999/8 for customer 910. The document required payment, finished paid, and reduced stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=FactSimLoads and verifies simplified invoices.Called with typesaft=FS, tipoop=FS, recibo=F, and oficinas=F. Search for 999900008 returned the created FS row.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
DT_Select_AdiantamentosClientesChecks customer advances.Returned an available FR advance row for customer 910, which the workflow did not apply.
loadArtigoReducidoLoads article data for FS.Called with query=AI-DEMO-20260519-021105, compras=F, actualizastocks=T, and tipoop=FS.
insertLinhaTabDocInserts simplified invoice line.Payload used temporary table 45844, article AI-DEMO-20260519-021105, customer 910, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates FS totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
checkProfitMarginsValidates margin rules.Called against table 45844 before save.
payment&option=validateValidates whether the FS can save with current payments.First returned valid:"NONE" when no payment existed; after NUM payment it returned valid:true and troco=0.
payment&option=addAdds the cash payment line.Returned success:true and a payment form row with NUM value 1.97.
saveDocumentSaves the FS simplified invoice.Response: {"return":"999900008%OK&=&OKDOC&=&","print_documents":[]}.
payment&option=get_paymentLoads final payment card.Final view showed [NUM] Numerário, [CXC] Caixa Defeito - Caixa Colaborador Demo, date 19/05/2026, and value 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after FS finalization.Warehouse 1 stock changed from 1 to 0.

Evidence: raw/playwright/workflows/simplified-invoice-fs-20260519T043414Z.json and workflows/create-simplified-invoice.html.

Receipt R AJAX Calls

Verified end to end. Workflow run receipt-r-20260519T042639Z created receipt 999900245 / R 9999/245 and settled source invoice 999901666 / FT 9999/1666.

Action or endpointObserved purposeEvidence detail
loadTabDocumentoReciboLoads receipt working table for selected customer.Called with customer 910, temporary table 45779, tipoop=R, and date 19/05/2026.
listaTabDocumentoReciboLoads pending or selected receipt rows.estado=F returned open customer documents; estado=T returned selected-to-pay rows.
changeEstadoReciboMoves a pending source document into the receipt.Verified payload used id=45779, style=ADV2, listado[]=1, and response {"success":true}.
payment&option=addAdds the payment line.Payload used modopagamento=NUM, modobase=N, total=1.97, tipoop=R, and customer 910.
payment&option=validateChecks that receipt payment covers the selected total.Returned valid:true, troco=0, and mbway=false.
saveDocumentReciboSaves the receipt.Response: {"return":"999900245&=&OKDOC&=&&=&OKDOC&=&"}.
payment&option=get_paymentLoads final receipt payment card.Final view showed [NUM] Numerário, [CXC] Caixa Defeito - Caixa Colaborador Demo, date 19/05/2026, and value 1.97.
DT_List_Documentos&table=RecibosVerifies the receipt list.Search for 999900245 returned R 9999/245, status F / Closed, total 1.97.
DT_List_Documentos&table=FactVerifies the settled invoice.Search for 999901666 returned status LIQ / Finished, ValorPago=1.97, pending 0.00.

Evidence: raw/playwright/workflows/receipt-r-20260519T042639Z.json, raw/playwright/workflows/receipt-r-20260519T042639Z-recovery.json, and workflows/create-receipt.html.

Receipt Partial Payment Validation AJAX Calls

Verified end to end. Workflow run receipt-r-partial-payment-validation-20260519T232700Z selected source invoice 999901704 / FT 9999/1704, added NUM 1.00 against 1.97, attempted payment save, and confirmed final receipt save was blocked.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source invoice into the receipt settlement grid.Selected source FT 9999/1704 for customer 910.
payment&option=addAdds the short receipt payment row.Payload used modopagamento=NUM, total=1.00, tipoop=R, and customer 910.
payment&option=validateChecks whether current payment covers the selected receipt total.Returned valid:false, message The payment is equal to or greater than the total document, and troco=-0.97.
DT_List_Documentos&table=FactVerifies the source invoice state after blocked payment.Search for 999901704 returned status ABR / Open, ValorPago=0, pending 1.97.

Evidence: raw/playwright/workflows/receipt-r-partial-payment-validation-20260519T232700Z.json and workflows/handle-receipt-partial-payment.html.

Receipt Partial Payment Correction Calls

Verified end to end. Workflow run receipt-r-fix-partial-payment-20260519T233330Z edited an existing short R payment row to the selected invoice total, validated payment, saved the receipt, and verified source invoice settlement.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source invoice into the receipt settlement grid.Selected source FT 9999/1705 for customer 910.
payment&option=addAdds the initial short payment row.Created NUM row value 1.00 against selected total 1.97.
payment&option=validateBlocks the short payment.First returned valid:false and troco=-0.97.
payment&option=validateValidates the corrected payment.After editing the row to 1.97, returned valid:true and troco=0.
saveDocumentReciboSaves the receipt after corrected payment.Response returned 999900249 and OKDOC, then opened /vendas/r/view/OTk5OTAwMjQ5.
DT_List_Documentos&table=RecibosVerifies the receipt list.Search for 999900249 returned R 9999/249, status F / Closed, total 1.97.
DT_List_Documentos&table=FactVerifies the settled source invoice.Search for 999901705 returned status LIQ / Finished, ValorPago=1.97, pending 0.00.

Evidence: raw/playwright/workflows/receipt-r-fix-partial-payment-20260519T233330Z.json and workflows/fix-receipt-partial-payment.html.

Receipt Split Payment AJAX Calls

Verified end to end. Workflow run receipt-r-split-payment-20260519T230946Z created receipt 999900247 / R 9999/247 with NUM 1.00 plus TRA 0.97, settling source invoice 999901701 / FT 9999/1701.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source invoice into the receipt settlement grid.Selected source FT 9999/1701 for customer 910.
payment&option=addAdds the first receipt payment row.Payload used modopagamento=NUM, total=1.00, tipoop=R, and customer 910.
payment&option=addAdds the second receipt payment row.Payload used modopagamento=TRA, total=0.97, tipoop=R, and customer 910.
payment&option=validateChecks that combined payment covers the selected receipt total.Returned valid:true, troco=0, and payment total 1.97.
saveDocumentReciboSaves the receipt.Response returned 999900247 and OKDOC, then opened /vendas/r/view/OTk5OTAwMjQ3.
DT_List_Documentos&table=RecibosVerifies the receipt list.Search for 999900247 returned R 9999/247, status F / Closed, total 1.97.
DT_List_Documentos&table=FactVerifies the settled invoice.Search for 999901701 returned status LIQ / Finished, ValorPago=1.97, pending 0.00.

Evidence: raw/playwright/workflows/receipt-r-split-payment-20260519T230946Z.json and workflows/create-receipt-split-payment.html.

Receipt Overpayment AJAX Calls

Verified end to end. Workflow run receipt-r-overpayment-20260519T231638Z created receipt 999900248 / R 9999/248 with NUM 2.00 against a 1.97 value to pay, settling source invoice 999901702 / FT 9999/1702.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source invoice into the receipt settlement grid.Selected source FT 9999/1702 for customer 910.
payment&option=addAdds the overpayment row.Payload used modopagamento=NUM, total=2.00, tipoop=R, and customer 910.
payment&option=validateChecks that the payment covers the selected receipt total and calculates change.Returned valid:true, troco=0.03, and payment total 2.00.
saveDocumentReciboSaves the receipt.Response returned 999900248 and OKDOC, then opened /vendas/r/view/OTk5OTAwMjQ4.
DT_List_Documentos&table=RecibosVerifies the receipt list.Search for 999900248 returned R 9999/248, status F / Closed, total 1.97.
DT_List_Documentos&table=FactVerifies the settled invoice.Search for 999901702 returned status LIQ / Finished, ValorPago=1.97, pending 0.00.

Evidence: raw/playwright/workflows/receipt-r-overpayment-20260519T231638Z.json and workflows/create-receipt-overpayment.html.

Receipt Payment Row Deletion AJAX Calls

Verified up to the save boundary. Workflow run receipt-r-delete-payment-row-20260519T232158Z selected source invoice 999901703 / FT 9999/1703, added NUM 1.97, deleted that payment row, and confirmed the source invoice stayed open.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source invoice into the receipt settlement grid.Selected source FT 9999/1703 for customer 910.
payment&option=addAdds the receipt payment row.Payload used modopagamento=NUM, total=1.97, tipoop=R, and customer 910.
payment&option=deleteDeletes one payment row from the modal.Payload used payment table 55797, compras=F, nseq=1, total=1.97, and edit=F.
DT_List_Documentos&table=FactVerifies the source invoice state after deleting payment.Search for 999901703 returned status ABR / Open, ValorPago=0, pending 1.97.

Evidence: raw/playwright/workflows/receipt-r-delete-payment-row-20260519T232158Z.json and workflows/delete-receipt-payment-row.html.

Deferred Receipt RP AJAX Calls

Verified end to end. Workflow run deferred-receipt-rp-20260519T065002Z created deferred receipt 999900009 / RP 9999/9 and settled source invoice 999901667 / FT 9999/1667.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumRPLoads and verifies deferred receipts.Called with oficinas=F, recibo=T, actualizacc=T, typesaft=RG, tipoop=RP, and search 999900009. Returned RP 9999/9, ABR / Open, total 1.97, paid 0.00, and pending 1.97.
loadTabDocumentoReciboLoads receipt working table for selected customer.Called with customer 910, temporary table 47557, tipoop=RP, and date 19/05/2026.
listaTabDocumentoReciboLoads pending or selected receipt rows.estado=F returned open customer documents; estado=T returned selected-to-pay rows.
changeEstadoReciboMoves a pending source document into the RP.Verified payload used id=47557, style=ADV2, and selected source FT 9999/1667.
payment&option=addAdds the payment line.Payload used modopagamento=NUM, modobase=N, total=1.97, tipoop=RP, and customer 910.
payment&option=validateChecks that payment covers the selected RP total.The selected payment line was [NUM] Numerario, inbox [0] Caixa 0, value 1.97.
saveDocumentReciboSaves the deferred receipt.Response: {"return":"999900009&=&OKDOC&=&&=&OKDOC&=&","print_documents":[],"final":"&=&OKDOC&=&"}.
DT_List_Documentos&table=FactVerifies the settled invoice.Search for 999901667 returned status LIQ / Finished, ValorPago=1.97, pending 0.00.

Evidence: raw/playwright/workflows/deferred-receipt-rp-20260519T065002Z.json and workflows/create-deferred-receipt-rp.html.

Sales Utility AJAX Calls

Filter behavior verified. Lot Printing and Batch Billing were probed without executing final side-effect actions.

PageAction or endpointObserved purposeEvidence detail
/vendas/impreslotelistaImpresLoteLoads documents eligible for batch printing.Default probe sent date_filter_type=date, empty date range with 00:00 to 23:59, nserie=null, table=DocumCI, compras=F, and filtrar=T. Response returned 9 CI rows and changed the button to Print(9).
/vendas/impresloteimprimirFinal batch print action configured by page script.Observed script posts selected document ids, tipoop, oficinas=F, impressao=F, agrupar, docsagrup, tipo_impressao, archive flags derived from print type, and em_lote=T. Not executed.
/vendas/faturacaoloteget_home_news / notificationsBackground page-load AJAX.Captured during the Batch Billing probe together with the page DOM and filter interaction.
/vendas/faturacaolotefaturar_loteFinal batch invoice and email action configured by page script.Observed script posts selected docs, tipoop from tipoDoc, grouping flag agrupar, and serieDoc after confirmation. Not executed because the default filter returned 0 rows and the action may generate invoices and send email.

Evidence: raw/playwright/vendas-impreslote-interaction-probe.json, raw/playwright/vendas-faturacaolote-interaction-probe.json, workflows/use-lot-printing.html, and workflows/use-batch-billing.html.

Purchase Utility AJAX Calls

Filter behavior verified. Purchase Lot Printing was probed without executing the final print action.

PageAction or endpointObserved purposeEvidence detail
/compras/impreslotelistaImpresLoteLoads supplier documents eligible for batch printing.Default probe sent date_filter_type=date, date_time_ini=00:00, date_time_fim=23:59, empty codterc, tipoterc=F, nserie=null, table=documaft, compras=T, and filtrar=T. Response returned {"data":[]}.
/compras/impresloteget_home_news / notificationsBackground page-load AJAX.Captured during the Purchase Lot Printing probe together with the page DOM and filter interaction.

Evidence: raw/playwright/compras-impreslote-interaction-probe.json and workflows/use-purchase-lot-printing.html.

Receipt Reversal RE AJAX Calls

Verified end to end. Workflow run receipt-reversal-re-20260519T044549Z created receipt reversal 999900014 / RE 9999/14 and settled source credit note 999900058 / NC 9999/58.

Action or endpointObserved purposeEvidence detail
loadTabDocumentoReciboLoads receipt-reversal working table for the selected customer.Called with customer 910, temporary table context, tipoop=RE, and date 19/05/2026.
listaTabDocumentoReciboLoads pending or selected reversal rows.estado=F returned open credit-note rows for customer 910; estado=T returned selected reversal rows.
changeEstadoReciboMoves a pending source credit note into the reversal.Verified move selected 999900058 / NC 9999/58 and returned {"success":true}.
payment&option=addAdds the reversal payment line.Payload used modopagamento=NUM, modobase=N, total=74.91, tipoop=RE, and customer 910.
payment&option=validateChecks that the reversal payment covers the selected total.Returned valid:true, troco=0, and mbway=false.
saveDocumentReciboSaves the receipt reversal.Response: {"return":"999900014&=&OKDOC&=&&=&OKDOC&=&","final":"&=&OKDOC&=&"}.
payment&option=get_paymentLoads final reversal payment card.Final view showed [NUM] Numerário and value 74.91.
DT_List_Documentos&table=RecibosEstVerifies the RE list.Called with oficinas=F, recibo=T, actualizacc=T, typesaft=RG, and tipoop=RE. Search for 999900014 returned RE 9999/14, status F / Closed, total 74.91.
DT_List_Documentos&table=NCredVerifies the settled credit note.Search for 999900058 returned status LIQ / Finished, ValorPago=74.91, and pending 0.00.

Evidence: raw/playwright/workflows/receipt-reversal-re-20260519T044549Z.json and workflows/create-receipt-reversal.html.

Receipt R Cancellation AJAX Calls

Verified end to end. Workflow run cancel-receipt-r-20260519T235225Z created receipt 999900250 / R 9999/250, cancelled it from the R view, and verified source invoice 999901706 / FT 9999/1706 returned to open and unpaid.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source invoice into the receipt documents grid.Verified move selected only FT 9999/1706 for customer 910.
payment&option=addAdds the receipt payment line.Payload used modopagamento=NUM, modobase=N, total=1.97, tipoop=R, and customer 910.
payment&option=validateChecks that the receipt payment covers the selected total.Returned valid:true and troco=0.
saveDocumentReciboSaves the receipt.Response returned 999900250 with OKDOC. Source FT 9999/1706 became LIQ / Finished with ValorPago=1.97.
podeAnularDocChecks whether the receipt can be cancelled.Request used num=999900250 and tipoop=R. Response returned succeeded:true.
Sel2_Select_v2 with table=motivos_docsLoads cancellation reasons for the selector.The verified run selected reason id 1, Erro de faturacao.
deleteDocumentSubmits the R cancellation.Payload used action=deleteDocument, num=999900250, tipoop=R, and the serialized R form after reason selection.
DT_List_Documentos&table=RecibosVerifies the receipt row after cancellation.Search for 999900250 returned estado=ANU, desig_estado=Canceled, and total 1.97.
DT_List_Documentos&table=FactVerifies source invoice settlement reversal.Search for 999901706 returned ABR / Open, ValorPago=0, and pending value 1.97.

Evidence: raw/playwright/workflows/cancel-receipt-r-20260519T235225Z.json and workflows/cancel-receipt.html.

Receipt Reversal RE Cancellation AJAX Calls

Verified end to end. Workflow run cancel-receipt-reversal-re-20260520T000325Z created receipt reversal 999900015 / RE 9999/15, cancelled it from the RE view, and verified source credit note 999900062 / NC 9999/62 returned to open and unpaid.

Action or endpointObserved purposeEvidence detail
changeEstadoReciboMoves the source credit note into the RE documents grid.Verified move selected only NC 9999/62 for customer 910.
payment&option=addAdds the RE payment line.Payload used modopagamento=NUM, tipoop=RE, and amount 1.97.
saveDocumentReciboSaves the receipt reversal.Response returned 999900015 with OKDOC. Source NC 9999/62 became LIQ / Finished with ValorPago=1.97.
podeAnularDocChecks whether the RE can be cancelled.Request used num=999900015 and tipoop=RE.
Sel2_Select_v2 with table=motivos_docsLoads cancellation reasons for the selector.The verified run selected reason id 1, Erro de faturacao.
deleteDocumentSubmits the RE cancellation.Payload used action=deleteDocument, num=999900015, tipoop=RE, and the serialized RE form after reason selection.
DT_List_Documentos&table=RecibosEstVerifies the RE row after cancellation.Search for 999900015 returned estado=ANU, desig_estado=Canceled, and total 1.97.
DT_List_Documentos&table=NCredVerifies source credit-note settlement reversal.Search for 999900062 returned ABR / Open, ValorPago=0, and pending value 1.97.

Evidence: raw/playwright/workflows/cancel-receipt-reversal-re-20260520T000325Z.json and workflows/cancel-receipt-reversal.html.

Credit Note NC AJAX Calls

Verified end to end. Workflow run credit-note-nc-20260519T050026Z created credit note 999900059 / NC 9999/59 from source simplified invoice 999900008 / FS 9999/8.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=NCredLoads and verifies customer credit notes.Called with typesaft=NC, tipoop=NC, actualizacc=T, and search 999900059. Returned status ABR / Open, total 1.97, and pending 1.97.
Sel2_Select_v2&table=motivos_docsLoads selectable NC reasons.Called with where[is_nc]=1. Observed options included 27 / Adiantamento and 1 / Erro de faturação.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
associar_documento&option=load_modalOpens the source-document modal.Verified with tipoop=FS, customer 910, and target tipoopori=NC.
associar_documento&option=listar_documentosLists source documents available to credit.Before save it returned FS 9999/8; after save it returned {"list":[],"html":""}.
associar_documento&option=listar_tabelaLoads source lines for selected source documents.Returned the FS 9999/8 line for article AI-DEMO-20260519-021105, quantity 1, unit price 1.5991869918699, VAT 23.
associar_documento&option=save_linhasCopies selected source lines into the NC temporary document table.Payload contained the association line with source type FS, source number 999900008, source line 1, and target type NC.
create_document&option=calcular_totaisCalculates NC totals.Verified gross 1.60, VAT 0.37, total 1.97.
saveDocumentSaves the credit note.Response: {"return":"999900059%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_Documentos&table=FactSimChecks the source simplified invoice.Search for 999900008 still returned LIQ / Finished, paid 1.97, pending 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after credit-note finalization.Warehouse 1 stock changed from 0 to 1; order quantities stayed 1.

Evidence: raw/playwright/workflows/credit-note-nc-20260519T050026Z.json and workflows/create-credit-note.html.

Credit Note NC Cancellation AJAX Calls

Verified end to end. Workflow run cancel-credit-note-nc-20260520T000825Z cancelled credit note 999900062 / NC 9999/62, checked source simplified invoice 999900014 / FS 9999/14, and verified stock movement.

Action or endpointObserved purposeEvidence detail
podeAnularDocChecks cancellation permission before opening the final confirmation.Called with num=999900062 and tipoop=NC. Response body: {"succeeded":true,"message":null,"params":null}.
Sel2_Select_v2&table=motivos_docsLoads active cancellation reasons.Called with where[is_anulacao]=1, where[activo]=1, and term 1. Returned reason 1 / Erro de faturacao.
deleteDocumentCancels the credit note.POST payload included num=999900062, tipoop=NC, id_motivo_anulacao=1, anulacao=Erro de faturacao, and tot_fin=1.97. Response body: {"success":true}.
DT_List_Documentos&table=NCredVerifies the NC list row.After cancellation, search for 999900062 returned estado=ANU, desig_estado=Canceled, total 1.97, ValorPago=0, and pending value 1.97.
DT_List_Documentos&table=FactSimChecks the source simplified invoice.Search for 999900014 returned LIQ / Finished, ValorPago=1.97, and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock after NC cancellation.Warehouse 1 stock for AI-DEMO-20260519-021105 changed from -39 to -40.

Evidence: raw/playwright/workflows/cancel-credit-note-nc-20260520T000825Z.json and workflows/cancel-credit-note.html.

Debit Note ND AJAX Calls

Verified end to end. Workflow run debit-note-nd-20260520T001537Z created debit note 999900005 / ND 9999/5 from source invoice 999901707 / FT 9999/1707.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=NDebLoads and verifies customer debit notes.Called with typesaft=ND, tipoop=ND, actualizacc=T, and search 999900005. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
associar_documento&option=load_modalOpens the source-document modal.Verified with tipoop=FT, customer 910, and target tipoopori=ND.
associar_documento&option=listar_documentosLists source documents available for debit-note association.Before save it returned FT 9999/1707; after save that source was no longer returned for ND association.
associar_documento&option=listar_tabelaLoads source lines for selected source documents.Returned the FT 9999/1707 line for article AI-DEMO-20260519-021105, quantity 1, unit price 1.5991869918699, VAT 23.
associar_documento&option=save_linhasCopies selected source lines into the ND temporary document table.Payload contained the association line with source type FT, source number 999901707, source line 1, and target type ND.
create_document&option=calcular_totaisCalculates ND totals.Verified gross 1.60, VAT 0.37, total 1.97.
saveDocumentSaves the debit note.Response: {"return":"999900005%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_Documentos&table=FactChecks the source invoice.Search for 999901707 still returned ABR / Open, paid 0.00, pending 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after debit-note finalization.Warehouse 1 stock stayed -41.

Evidence: raw/playwright/workflows/debit-note-nd-20260520T001537Z.json and workflows/create-debit-note.html.

Debit Note ND Cancellation AJAX Calls

Verified end to end. Workflow run cancel-debit-note-nd-20260520T001612Z cancelled debit note 999900005 / ND 9999/5, checked source invoice 999901707 / FT 9999/1707, and verified stock stayed unchanged.

Action or endpointObserved purposeEvidence detail
podeAnularDocChecks cancellation permission before opening the final confirmation.Called with num=999900005 and tipoop=ND. Response body: {"succeeded":true,"message":null,"params":null}.
Sel2_Select_v2&table=motivos_docsLoads active cancellation reasons.Called with where[is_anulacao]=1, where[activo]=1, and term 1. Returned reason 1 / Erro de faturacao.
deleteDocumentCancels the debit note.POST payload included num=999900005, tipoop=ND, id_motivo_anulacao=1, anulacao=Erro de faturacao, and tot_fin=1.97. Response body: {"success":true}.
DT_List_Documentos&table=NDebVerifies the ND list row.After cancellation, search for 999900005 returned estado=ANU, desig_estado=Canceled, total 1.97, ValorPago=0, and pending value 1.97.
DT_List_Documentos&table=FactChecks the source invoice.Search for 999901707 returned ABR / Open, ValorPago=0, and pending value 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after ND cancellation.Warehouse 1 stock for AI-DEMO-20260519-021105 stayed -41.

Evidence: raw/playwright/workflows/cancel-debit-note-nd-20260520T001612Z.json and workflows/cancel-debit-note.html.

Shipping Doc GR AJAX Calls

Verified end to end. Workflow run shipping-doc-gr-20260519T051437Z created shipping guide 999900020 / GR 9999/20 for customer 910. The guide remained open and reduced warehouse 1 stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=GRemLoads and verifies shipping docs.Called with typesaft=GR, tipoop=GR, actualizacc=F, and search 999900020. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
loadArtigoReducidoLoads article data for GR.Called for article AI-DEMO-20260519-021105 and returned price, VAT, cost, warehouse, and stock metadata.
insertLinhaTabDocInserts the GR line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, warehouse 1, and quantity 1.
listaTabDocumentoLoads GR document lines before and after save.After line insertion it returned the article row with quantity 1, VAT 23, and total with VAT 1.967.
create_document&option=calcular_totaisCalculates GR totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GR document.Response: {"return":"999900020%OK&=&OKDOC&=&","print_documents":[]}.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 stock changed from 1 to 0; customer-order and supplier-order quantities stayed 1.

Evidence: raw/playwright/workflows/shipping-doc-gr-20260519T051437Z.json and workflows/create-shipping-doc.html.

Transportation Note GT AJAX Calls

Verified end to end. Workflow run transportation-note-gt-20260519T052242Z created transportation note 999900089 / GT 9999/89 for customer 910. The note remained open and did not change warehouse stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=GTransLoads and verifies transportation notes.Called with typesaft=GT, tipoop=GT, actualizacc=F, and search 999900089. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
loadArtigoReducidoLoads article data for GT.Called with tipoop=GT and actualizastocks=F. Returned article AI-DEMO-20260519-021105, stock 0, price, VAT, cost, warehouse, and order quantities.
insertLinhaTabDocInserts the GT line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, warehouse 1, and quantity 1.
listaTabDocumentoLoads GT document lines before and after save.After line insertion it returned the article row with quantity 1, VAT 23, stock 0, and total with VAT 1.967.
create_document&option=calcular_totaisCalculates GT totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GT document.Response: {"return":"999900089%OK&=&OKDOC&=&","print_documents":[]}.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 stock stayed 0; customer-order and supplier-order quantities stayed 1.

Evidence: raw/playwright/workflows/transportation-note-gt-20260519T052242Z.json and workflows/create-transportation-note.html.

Transportation Note GIP AJAX Calls

Verified end to end. Workflow run transportation-note-gip-20260519T052722Z created transportation note 999900018 / GIP 9999/18 for customer 910. The note remained open and reduced warehouse stock from zero to negative one.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumGIPLoads and verifies GIP transportation notes.Called with typesaft=GT, tipoop=GIP, actualizacc=F, and search 999900018. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
loadArtigoReducidoLoads article data for GIP.Called with tipoop=GIP and actualizastocks=T. Returned article AI-DEMO-20260519-021105, stock 0, price, VAT, cost, warehouse, and order quantities.
insertLinhaTabDocInserts the GIP line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, warehouse 1, and quantity 1.
listaTabDocumentoLoads GIP document lines before and after save.After final save the view showed the article row with quantity 1, VAT 23, stock -1, and total with VAT 1.967.
create_document&option=calcular_totaisCalculates GIP totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GIP document.Response: {"return":"999900018%AI-DEMO-20260519-021105:1#&=&OKDOC&=&","print_documents":[]}. This response shape differs from GT and includes an article/quantity token before OKDOC.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 stock changed from 0 to -1; customer-order and supplier-order quantities stayed 1.

Evidence: raw/playwright/workflows/transportation-note-gip-20260519T052722Z.json, recovered source raw/playwright/workflows/transportation-note-gip-20260519T052722Z-failed.json, and workflows/create-transportation-note-gip.html.

Asset Movement Guide GA AJAX Calls

Verified end to end. Workflow run asset-movement-guide-ga-20260519T053643Z created asset movement guide 999900015 / GA 9999/15 for customer 910. The guide remained open and moved one unit from warehouse 1 to warehouse 2.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=GMovArtLoads and verifies asset movement guides.Called with typesaft=GA, tipoop=GA, actualizacc=F, and search 999900015. Returned status ABR / Open, source Armazem de Entradas, destination Armazem de Monos, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
CodLojaEntradaSets destination warehouse.The verified run set CodLojaEntrada=2, and the saved list row returned codlojaentrada: 2.
loadArtigoReducidoLoads source-warehouse article data for GA.Called with tipoop=GA, actualizastocks=T, and loja=1. Returned article AI-DEMO-20260519-021105, source stock -1, price, VAT, cost, warehouse, and order quantities.
insertLinhaTabDocInserts the GA line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, source warehouse 1, and quantity 1.
listaTabDocumentoLoads GA document lines before and after save.After line insertion it returned the article row with quantity 1, VAT 23, source stock -1, and total with VAT 1.967.
create_document&option=calcular_totaisCalculates GA totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GA document.Response: {"return":"999900015%AI-DEMO-20260519-021105:1#&=&OKDOC&=&","print_documents":[]}.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 changed from -1 to -2; warehouse 2 changed from no article row / 0 to article stock 1.

Evidence: raw/playwright/workflows/asset-movement-guide-ga-20260519T053643Z.json and workflows/create-asset-movement-guide.html.

Guide to Supplier NGT AJAX Calls

Verified end to end. Workflow run guide-to-supplier-ngt-20260519T054516Z created guide to supplier 999900013 / NGT 9999/13 for supplier 100. The guide remained open and reduced warehouse 2 stock from 1 to 0.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=NGTransFLoads and verifies guide-to-supplier documents.Called with typesaft=GT, tipoop=NGT, actualizacc=F, and search 999900013. Returned status ABR / Open, total 1.51, and pending 1.51.
Sel2_Select_v2&table=fornSearches supplier entities.Verified with supplier term 100.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236, name AI Demo Supplier 20260519T030323Z, address, seller, and employee context.
loadArtigoReducidoLoads source-warehouse article data for NGT.Called with tipoop=NGT, actualizastocks=T, and loja=2. Returned source stock 1 in QtdStockLoja.
insertLinhaTabDocInserts the NGT line.Payload used the temporary document table, supplier 100, article AI-DEMO-20260519-021105, warehouse 2, and quantity 1.
create_document&option=calcular_totaisCalculates NGT totals.Verified totals were net 1.23, VAT 0.28, and total 1.51.
saveDocumentSaves the NGT document.Response: {"return":"999900013%OK&=&OKDOC&=&","print_documents":[]}. Before this response the UI required both stock-movement and final-save confirmations.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 2 changed from 1 to 0; warehouse 1 stayed -2.

Evidence: raw/playwright/workflows/guide-to-supplier-ngt-20260519T054516Z.json and workflows/create-guide-to-supplier.html.

Consignment Guide GC AJAX Calls

Verified end to end. Workflow run consignment-guide-gc-20260519T055311Z created consignment guide 999900005 / GC 9999/5 for customer 910. The guide remained open and reduced warehouse 1 stock from 2 to 1.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=GConsigLoads and verifies consignment guides.Called with typesaft=GC, tipoop=GC, actualizacc=F, and search 999900005. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
loadArtigoReducidoLoads source-warehouse article data for GC.Called for article AI-DEMO-20260519-021105, warehouse 1, and tipoop=GC. The inserted row recorded source stock 2.
insertLinhaTabDocInserts the GC line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates GC totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GC document.Response: {"return":"999900005%OK&=&OKDOC&=&","print_documents":[]}. The UI required the final Are you sure? confirmation.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 changed from 2 to 1; warehouse 2 stayed 0.

Evidence: raw/playwright/workflows/consignment-guide-gc-20260519T055311Z.json and workflows/create-consignment-guide.html.

Separation Guide GSA AJAX Calls

Verified end to end. Workflow run separation-guide-gsa-20260519T055811Z created separation guide 999900001 / GSA 9999/1 for customer 910. The guide remained open, recorded origin and destination warehouses, and did not change the stock recalculation rows.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=documgsaLoads and verifies separation guides.Called with typesaft=GA, tipoop=GSA, actualizacc=F, and search 999900001. Returned status ABR / Open, origin Armazem de Entradas, destination Armazem de Monos, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 replaced the inactive default customer and populated VAT 509031862, address, seller, and employee context.
CodLojaEntradaSets destination warehouse.The verified run set CodLojaEntrada=2, and the saved list row returned codlojaentrada: 2.
loadArtigoReducidoLoads source-warehouse article data for GSA.Called for article AI-DEMO-20260519-021105, warehouse 1, and tipoop=GSA. The inserted row recorded source stock 1.
insertLinhaTabDocInserts the GSA line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, source warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates GSA totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GSA document.Response: {"return":"999900001%OK&=&OKDOC&=&","print_documents":[]}. The UI required the final Are you sure? confirmation.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 stayed 1; warehouse 2 stayed 0.

Evidence: raw/playwright/workflows/separation-guide-gsa-20260519T055811Z.json and workflows/create-separation-guide.html.

Internal Doc GS AJAX Calls

Verified end to end. Workflow run internal-doc-gs-20260519T060333Z created internal document 999900021 / GS 9999/21 for customer 910. The document remained open, left physical stock unchanged, and increased customer-order quantity.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumGSLoads and verifies GS documents.Called with typesaft=WNE, tipoop=GS, actualizacc=F, and search 999900021. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
loadArtigoReducidoLoads source-warehouse article data for GS.Called for article AI-DEMO-20260519-021105, warehouse 1, and tipoop=GS. The inserted row recorded source stock 1.
insertLinhaTabDocInserts the GS line.Payload used the temporary document table, customer 910, article AI-DEMO-20260519-021105, warehouse 1, quantity 1, and estimated date 2026-05-19.
create_document&option=calcular_totaisCalculates GS totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the GS document.Response: {"return":"999900021%&=&OKDOC&=&","print_documents":[]}. The UI required the final Are you sure? confirmation.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 physical stock stayed 1; qtd_enc_cliente changed from 1 to 2.

Evidence: raw/playwright/workflows/internal-doc-gs-20260519T060333Z.json and workflows/create-internal-doc-gs.html.

C. Interno CI AJAX Calls

Verified end to end. Workflow run internal-invoice-ci-20260519T060951Z created internal invoice 999900009 / CI 9999/9 for customer 910. The document remained open, used vehicle/entity and delivery-method form context, and reduced warehouse 1 physical stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumCILoads and verifies CI documents.Called with oficinas=T, recibo=F, actualizacc=T, typesaft=FT, tipoop=CI, and search 999900009. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads stock-updating sales article data for CI.Called for article AI-DEMO-20260519-021105, warehouse 1, actualizastocks=T, and tipoop=CI.
insertLinhaTabDocInserts the CI line.Payload used temporary table 47273, article AI-DEMO-20260519-021105, customer 910, warehouse 1, quantity 1, payment term PP, currency EUR, and document type CI.
create_document&option=calcular_totaisCalculates CI totals.Verified totals were net 1.60, VAT 0.37, retention 0.00, and total 1.97. A first calculation request carried retencao=25, but after customer/line selection later calculations used retencao=0.
checkProfitMarginsValidates margin rules.Called against table 47273 before the final save.
saveDocumentSaves the CI document.Response: {"return":"999900009%OK&=&OKDOC&=&","print_documents":[]}. The form included TipoOp=CI, imprimirviatura=on, delivery fields, customer 910, reference AI-CI-20260519T060951Z, and totals.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 physical stock changed from 1 to 0; qtd_enc_cliente stayed 2; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/internal-invoice-ci-20260519T060951Z.json and workflows/create-internal-invoice-ci.html.

Recuperacao FTM AJAX Calls

Verified end to end. Workflow run recovery-ftm-20260519T061803Z created recovery invoice 999900016 / FTM 9999/16 for customer 910. The document remained open, used vehicle/entity and delivery-method form context, and reduced warehouse 1 physical stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumFTMLoads and verifies FTM documents.Called with oficinas=T, recibo=F, actualizacc=T, typesaft=FT, tipoop=FTM, and search 999900016. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads stock-updating sales article data for FTM.Called for article AI-DEMO-20260519-021105, warehouse 1, actualizastocks=T, and tipoop=FTM.
insertLinhaTabDocInserts the FTM line.Payload used temporary table 47295, article AI-DEMO-20260519-021105, customer 910, warehouse 1, quantity 1, payment term PP, currency EUR, and document type FTM.
create_document&option=calcular_totaisCalculates FTM totals.Verified totals were net 1.60, VAT 0.37, retention 0.00, and total 1.97.
checkProfitMarginsValidates margin rules.Called against table 47295 before the final save.
saveDocumentSaves the FTM document.Response: {"return":"999900016%OK&=&OKDOC&=&","print_documents":[]}. The form included TipoOp=FTM, imprimirviatura=on, delivery fields, customer 910, reference AI-FTM-20260519T061803Z, and totals.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 physical stock changed from 2 to 1; qtd_enc_cliente stayed 2; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/recovery-ftm-20260519T061803Z.json and workflows/create-recovery-ftm.html.

Reparacao Molde OR AJAX Calls

Verified end to end. Workflow run mold-repair-or-20260519T062304Z created mold repair document 999900003 / OR 9999/3 for customer 910. The document remained open, left physical stock unchanged, and increased customer-order quantity.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumORLoads and verifies OR documents.Called with oficinas=F, recibo=F, actualizacc=F, typesaft=WNE, tipoop=OR, and search 999900003. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads non-stock-updating article data for OR.Called for article AI-DEMO-20260519-021105, warehouse 1, actualizastocks=F, and tipoop=OR.
insertLinhaTabDocInserts the OR line.Payload used temporary table 47325, article AI-DEMO-20260519-021105, customer 910, warehouse 1, quantity 1, payment term PP, and document type OR.
create_document&option=calcular_totaisCalculates OR totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the OR document.Response: {"return":"999900003%&=&OKDOC&=&","print_documents":[]}. The UI required the final Are you sure? confirmation.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 physical stock stayed 1; qtd_enc_cliente changed from 2 to 3; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/mold-repair-or-20260519T062304Z.json and workflows/create-mold-repair-or.html.

Damages RMA AJAX Calls

Verified end to end. Workflow run damages-rma-20260519T062812Z created damages document 999900009 / RMA 9999/9 for customer 910. The document remained open, left physical stock unchanged, and increased customer-order quantity.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumRMALoads and verifies RMA documents.Called with oficinas=F, recibo=F, actualizacc=F, typesaft=WNE, tipoop=RMA, and search 999900009. Returned status ABR / Open, total 1.97, and pending 1.97.
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads non-stock-updating article data for RMA.Called for article AI-DEMO-20260519-021105, warehouse 1, actualizastocks=F, and tipoop=RMA.
insertLinhaTabDocInserts the RMA line.Payload used temporary table 47394, article AI-DEMO-20260519-021105, customer 910, warehouse 1, quantity 1, payment term PP, and document type RMA.
create_document&option=calcular_totaisCalculates RMA totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the RMA document.Response: {"return":"999900009%&=&OKDOC&=&","print_documents":[]}. The UI required the final Are you sure? confirmation.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 physical stock stayed 1; qtd_enc_cliente changed from 3 to 4; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/damages-rma-20260519T062812Z.json and workflows/create-damages-rma.html.

Zoom Level PRE AJAX Calls

Verified end to end. Workflow run zoom-level-pre-20260519T064145Z created PRE document 999900079 / PRE 9999/79 for customer 910. The document finished as paid and increased physical stock.

Action or endpointObserved purposeEvidence detail
DT_List_Documentos&table=DocumPRELoads and verifies PRE documents.Called with oficinas=F, recibo=F, actualizacc=T, typesaft=NC, tipoop=PRE, and search 999900079. Returned LIQ / Finished, total 1.97, paid 1.97, and pending 0.00.
Sel2_Select_v2&table=motivos_docsLoads PRE/NC reason options.Called with where[is_nc]=1; the verified run used reason 1, Erro de faturacao.
loadArtigoReducidoTests direct article loading for PRE.Direct insertion with tipoop=PRE returned no insertable article row, so the successful workflow used source association.
associar_documento&option=load_modalOpens source association.Loaded the association modal for source type FS, customer 910, and PRE temporary table.
associar_documento&option=listar_documentosLists eligible source documents.Probe showed source candidates for customer 910, including FS 9999/8, FT 9999/1666, and FR 9999/841.
associar_documento&option=save_linhasCopies source line into the PRE draft.Saved FS_999900008_1 for article AI-DEMO-20260519-021105, quantity 1, warehouse 1, unit price 1.60, and VAT 23%.
create_document&option=calcular_totaisCalculates PRE totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
payment&option=validateValidates payment before PRE finalization.The form opened the payment modal; after adding NUM for 1.97, save proceeded.
saveDocumentSaves the PRE document.Response: {"return":"999900079%OK&=&OKDOC&=&","print_documents":[]}.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after save.Warehouse 1 physical stock changed from 1 to 2; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/zoom-level-pre-20260519T064145Z.json and workflows/create-zoom-level-pre.html.

Quotation ORC AJAX Calls

Verified end to end. Workflow run quotation-orc-20260520T004056Z created quotation 999900095 / ORC 9999/95 for customer 910. The quotation remained open and did not change stock or order quantities.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads sales article data for the quotation.Called with query=AI-DEMO-20260519-021105, compras=F, actualizastocks=F, and tipoop=ORC.
insertLinhaTabDocInserts quotation line.Payload used temporary table 45759, article AI-DEMO-20260519-021105, customer 910, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates ORC totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
checkProfitMarginsValidates margin rules.Called against table 45759 before save.
saveDocumentSaves the ORC quotation.Response: {"return":"999900095%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosVerifies the quotation list.Search for 999900095 returned ABR / Open, ValorPago=0, total 1.97, and reference AI-ORC-20260520T004056Z.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after quotation save.Warehouse 1 physical stock stayed -41; qtd_enc_cliente stayed 5; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/quotation-orc-20260520T004056Z.json and workflows/create-quotation.html.

Quotation ORC Cancellation AJAX Calls

Verified end to end. Workflow run cancel-quotation-orc-20260520T004120Z cancelled quotation 999900095 / ORC 9999/95. The verified ORC run did not capture podeAnularDoc or a cancellation-reason lookup; the view script called btnDelete('Anular') and opened the irreversible confirmation directly.

Action or endpointObserved purposeEvidence detail
deleteDocumentCancels the ORC quotation.Payload used num=999900095, tipoop=ORC, serialized form data with empty anulacao=, and tot_fin=1.97. Response returned success.
DT_List_DocumentosVerifies list state after cancellation.Search for 999900095 returned ANU / Canceled, ValorPago=0, pending value 1.97, and reference AI-ORC-20260520T004056Z.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after cancellation.Warehouse 1 stock stayed -41; qtd_enc_cliente stayed 5; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/cancel-quotation-orc-20260520T004120Z.json and workflows/cancel-quotation.html.

Quotation ORC to Invoice FT Draft AJAX Calls

Verified to draft. Workflow run quotation-to-invoice-draft-20260519T160923Z created source quotation 999900089 / ORC 9999/89, converted it with the To convert / Invoice action, and opened FT draft 458. The FT invoice was not finalized.

Action or endpointObserved purposeEvidence detail
saveDocumentCreates the source ORC quotation.Response contained 999900089%OK&=&OKDOC&=&.
facturardocCreates the target document draft from the source quotation.Payload used tipoopdest=ft, tipoop=ORC, and num=999900089. Response was "OK:458:vendas".
listaTabDocumentoLoads copied FT draft lines after opening the draft route.The copied line preserved ndocori=999900089, tipodocori=ORC, and linhandocori=1.
dt_list_draftsChecks generated FT drafts.Called with search[TipoOp]=FT and typesaft=FT after conversion.
DT_List_DocumentosChecks source ORC state after draft creation.The source ORC row still returned ABR / Open, total 1.97, paid 0.

Evidence: raw/playwright/workflows/quotation-to-invoice-draft-20260519T160923Z.json and workflows/convert-quotation-to-invoice-draft.html.

Converted Quotation FT Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-quotation-invoice-draft-20260519T165348Z created source quotation 999900092 / ORC 9999/92, converted it into FT draft 463, and saved the draft as final invoice 999901669 / FT 9999/1669.

Action or endpointObserved purposeEvidence detail
facturardocCreates the FT draft from the source quotation.Payload used tipoopdest=ft, tipoop=ORC, and source num=999900092. Response opened draft 463.
listaTabDocumentoLoads copied FT draft lines.The copied line preserved ndocori=999900092, tipodocori=ORC, and linhandocori=1.
saveDocumentSaves the converted FT draft as a final invoice.Response was {"return":"999901669%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final FT list state.Search returned FT 9999/1669, ABR / Open, total 1.97, and paid value 0.

Evidence: raw/playwright/workflows/finalize-converted-quotation-invoice-draft-20260519T165348Z.json and workflows/finalize-converted-quotation-invoice-draft.html.

Quotation ORC to Invoice / Receipt FR Draft AJAX Calls

Verified to draft. Workflow run quotation-to-invoice-receipt-draft-20260519T162111Z created source quotation 999900090 / ORC 9999/90, converted it with the To convert / Invoice / Receipt action, and opened FR draft 460. The FR invoice / receipt was not finalized or paid.

Action or endpointObserved purposeEvidence detail
saveDocumentCreates the source ORC quotation.Response contained 999900090%OK&=&OKDOC&=&.
facturardocCreates the target document draft from the source quotation.Payload used tipoopdest=fr, tipoop=ORC, and num=999900090. Response was "OK:460:vendas".
listaTabDocumentoLoads copied FR draft lines after opening the draft route.The copied line preserved ndocori=999900090, tipodocori=ORC, and linhandocori=1.
dt_list_draftsChecks generated FR drafts.Called with search[TipoOp]=FR and typesaft=FR after conversion.
DT_List_DocumentosChecks source ORC state after draft creation.The source ORC row still returned ABR / Open, total 1.97, paid 0.

Evidence: raw/playwright/workflows/quotation-to-invoice-receipt-draft-20260519T162111Z.json and workflows/convert-quotation-to-invoice-receipt-draft.html.

Converted Quotation FR Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-quotation-invoice-receipt-draft-20260519T165805Z created source quotation 999900093 / ORC 9999/93, converted it into FR draft 463, recorded payment, and saved the draft as final invoice / receipt 999900843 / FR 9999/843.

Action or endpointObserved purposeEvidence detail
facturardocCreates the FR draft from the source quotation.Payload used tipoopdest=fr, tipoop=ORC, and source num=999900093. Response opened draft 463.
listaTabDocumentoLoads copied FR draft lines.The copied line preserved ndocori=999900093, tipodocori=ORC, and linhandocori=1.
payment&option=addAdds the FR payment line before final save.The payment modal saved [NUM] Numerário for 1.97.
saveDocumentSaves the converted FR draft as a final invoice / receipt.Response was {"return":"999900843%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final FR list state.Search returned FR 9999/843, LIQ / Finished, total 1.97, and paid value 1.97.

Evidence: raw/playwright/workflows/finalize-converted-quotation-invoice-receipt-draft-20260519T165805Z.json and workflows/finalize-converted-quotation-invoice-receipt-draft.html.

Quotation ORC to Sales Order ENC Draft AJAX Calls

Verified to draft. Workflow run quotation-to-sales-order-draft-20260519T163135Z created source quotation 999900091 / ORC 9999/91, converted it with the To convert / Internal Doc action, and opened ENC draft 462. The sales order was not finalized.

Action or endpointObserved purposeEvidence detail
saveDocumentCreates the source ORC quotation.Response contained 999900091%OK&=&OKDOC&=&.
facturardocCreates the target document draft from the source quotation.Payload used tipoopdest=enc, tipoop=ORC, and num=999900091. Response was "OK:462:vendas".
listaTabDocumentoLoads copied ENC draft lines after opening the draft route.The copied line preserved ndocori=999900091, tipodocori=ORC, and linhandocori=1.
dt_list_draftsChecks generated ENC drafts.Called with search[TipoOp]=ENC and typesaft=WNE after conversion.
DT_List_DocumentosChecks source ORC state after draft creation.The source ORC row still returned ABR / Open, total 1.97, paid 0.

Evidence: raw/playwright/workflows/quotation-to-sales-order-draft-20260519T163135Z.json and workflows/convert-quotation-to-sales-order-draft.html.

Converted Quotation ENC Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-quotation-sales-order-draft-20260519T170312Z created source quotation 999900094 / ORC 9999/94, converted it into ENC draft 463, and saved the draft as final sales order 999900108 / ENC 9999/108.

Action or endpointObserved purposeEvidence detail
facturardocCreates the ENC draft from the source quotation.Payload used tipoopdest=enc, tipoop=ORC, and source num=999900094. Response opened draft 463.
listaTabDocumentoLoads copied ENC draft lines.The copied line preserved ndocori=999900094, tipodocori=ORC, and linhandocori=1.
saveDocumentSaves the converted ENC draft as a final sales order.Response was {"return":"999900108%&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final ENC list state.Search returned ENC 9999/108, ABR / Open, total 1.97, and paid value 0.

Evidence: raw/playwright/workflows/finalize-converted-quotation-sales-order-draft-20260519T170312Z.json and workflows/finalize-converted-quotation-sales-order-draft.html.

Sales Order ENC AJAX Calls

Verified end to end. Workflow run sales-order-enc-20260520T002909Z created customer order 999900110 / ENC 9999/110 for customer 910. The order remained open and increased customer-order quantity without changing physical stock.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads sales article data for an order.Called with query=AI-DEMO-20260519-021105, compras=F, actualizastocks=F, and tipoop=ENC.
insertLinhaTabDocInserts order line.Payload used temporary table 45716, article AI-DEMO-20260519-021105, customer 910, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates ENC totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
saveDocumentSaves the ENC order.Response: {"return":"999900110%&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosVerifies the order list.Search for 999900110 returned ABR / Open, ValorPago=0, pending value 1.97, and reference AI-ENC-20260520T002909Z.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after order save.Warehouse 1 physical stock stayed -41; qtd_enc_cliente increased to 6.

Evidence: raw/playwright/workflows/sales-order-enc-20260520T002909Z.json and workflows/create-sales-order.html.

Sales Order ENC Cancellation AJAX Calls

Verified end to end. Workflow run cancel-sales-order-enc-20260520T003150Z cancelled customer order 999900110 / ENC 9999/110. Unlike FT, FP, NC, and ND cancellations, the verified ENC run did not capture podeAnularDoc or a cancellation-reason lookup; the view script called btnDelete('Anular') and opened the irreversible confirmation directly.

Action or endpointObserved purposeEvidence detail
deleteDocumentCancels the ENC order.Payload used num=999900110, tipoop=ENC, serialized form data with empty anulacao=, and tot_fin=1.97. Response returned success.
DT_List_DocumentosVerifies list state after cancellation.Search for 999900110 returned ANU / Canceled, ValorPago=0, pending value 1.97, and reference AI-ENC-20260520T002909Z.
dt_list_recalc_stock_articles_lojasChecks stock/order quantities after cancellation.Warehouse 1 physical stock stayed -41; qtd_enc_cliente changed from 6 to 5; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/cancel-sales-order-enc-20260520T003150Z.json and workflows/cancel-sales-order.html.

Sales Order ENC to Invoice FT Draft AJAX Calls

Verified to draft. Workflow run sales-order-to-invoice-draft-20260519T161456Z created source order 999900104 / ENC 9999/104, converted it with the Invoice / Invoice action, and opened FT draft 459. The FT invoice was not finalized.

Action or endpointObserved purposeEvidence detail
saveDocumentCreates the source ENC sales order.Response contained 999900104%&=&OKDOC&=&.
facturardocCreates the target document draft from the source order.Payload used tipoopdest=ft, tipoop=ENC, and num=999900104. Response was "OK:459:vendas".
listaTabDocumentoLoads copied FT draft lines after opening the draft route.The copied line preserved ndocori=999900104, tipodocori=ENC, and linhandocori=1.
dt_list_draftsChecks generated FT drafts.Called with search[TipoOp]=FT and typesaft=FT after conversion.
DT_List_DocumentosChecks source ENC state after draft creation.The source ENC row still returned ABR / Open, total 1.97, paid 0.

Evidence: raw/playwright/workflows/sales-order-to-invoice-draft-20260519T161456Z.json and workflows/convert-sales-order-to-invoice-draft.html.

Converted Sales Order FT Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-sales-order-invoice-draft-20260519T164146Z created source order 999900106 / ENC 9999/106, converted it into FT draft 463, and saved the draft as final invoice 999901668 / FT 9999/1668.

Action or endpointObserved purposeEvidence detail
facturardocCreates the FT draft from the source order.Payload used tipoopdest=ft, tipoop=ENC, and source num=999900106. Response opened draft 463.
listaTabDocumentoLoads copied FT draft lines.The copied line preserved ndocori=999900106, tipodocori=ENC, and linhandocori=1.
saveDocumentSaves the converted FT draft as a final invoice.Response was {"return":"999901668%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final FT list state.Search returned FT 9999/1668, ABR / Open, total 1.97, and paid value 0.

Evidence: raw/playwright/workflows/finalize-converted-sales-order-invoice-draft-20260519T164146Z.json and workflows/finalize-converted-sales-order-invoice-draft.html.

Sales Order ENC to Invoice / Receipt FR Draft AJAX Calls

Verified to draft. Workflow run sales-order-to-invoice-receipt-draft-20260519T162611Z created source order 999900105 / ENC 9999/105, converted it with the Invoice / Invoice / Receipt action, and opened FR draft 461. The FR invoice / receipt was not finalized or paid.

Action or endpointObserved purposeEvidence detail
saveDocumentCreates the source ENC sales order.Response contained 999900105%&=&OKDOC&=&.
facturardocCreates the target document draft from the source order.Payload used tipoopdest=fr, tipoop=ENC, and num=999900105. Response was "OK:461:vendas".
listaTabDocumentoLoads copied FR draft lines after opening the draft route.The copied line preserved ndocori=999900105, tipodocori=ENC, and linhandocori=1.
dt_list_draftsChecks generated FR drafts.Called with search[TipoOp]=FR and typesaft=FR after conversion.
DT_List_DocumentosChecks source ENC state after draft creation.The source ENC row still returned ABR / Open, total 1.97, paid 0.

Evidence: raw/playwright/workflows/sales-order-to-invoice-receipt-draft-20260519T162611Z.json and workflows/convert-sales-order-to-invoice-receipt-draft.html.

Converted Sales Order FR Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-converted-sales-order-invoice-receipt-draft-20260519T164715Z created source order 999900107 / ENC 9999/107, converted it into FR draft 463, recorded payment, and saved the draft as final invoice / receipt 999900842 / FR 9999/842.

Action or endpointObserved purposeEvidence detail
facturardocCreates the FR draft from the source order.Payload used tipoopdest=fr, tipoop=ENC, and source num=999900107. Response opened draft 463.
listaTabDocumentoLoads copied FR draft lines.The copied line preserved ndocori=999900107, tipodocori=ENC, and linhandocori=1.
payment&option=addAdds the FR payment line before final save.The payment modal saved [NUM] Numerário for 1.97.
saveDocumentSaves the converted FR draft as a final invoice / receipt.Response was {"return":"999900842%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosChecks final FR list state.Search returned FR 9999/842, LIQ / Finished, total 1.97, and paid value 1.97.

Evidence: raw/playwright/workflows/finalize-converted-sales-order-invoice-receipt-draft-20260519T164715Z.json and workflows/finalize-converted-sales-order-invoice-receipt-draft.html.

Sales Invoice FT AJAX Calls

Verified end to end. Workflow run sales-invoice-ft-20260519T040734Z created invoice 999901666 / FT 9999/1666 for customer 910. The invoice remained open and unpaid while stock decreased.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT 509031862, name 100 Ouvidos Lda, address, seller, and employee context.
DT_Select_AdiantamentosClientesChecks customer advances.Called with entidade=910 and compras=F.
findDocsPendentesChecks pending customer documents.Called with cliente=910 during customer selection.
loadArtigoReducidoLoads sales article data.Called with query=AI-DEMO-20260519-021105, compras=F, actualizastocks=T, and tipoop=FT.
insertLinhaTabDocInserts invoice line.Payload used temporary table 45602, article AI-DEMO-20260519-021105, customer 910, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates FT totals.Verified totals were net 1.60, VAT 0.37, and total 1.97.
checkProfitMarginsValidates line/document margin rules.Called against table 45602 before save.
saveDocumentSaves the FT invoice.Response: {"return":"999901666%OK&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosVerifies the invoice list.Search for 999901666 returned ABR / Open, ValorPago=0, pending value 1.97, and reference AI-FT-20260519T040734Z.
dt_list_recalc_stock_articles_lojasChecks stock after invoicing.Warehouse 1 stock changed from 2 to 1.

Evidence: raw/playwright/workflows/sales-invoice-ft-20260519T040734Z.json and workflows/create-sales-invoice.html.

Sales Invoice FT Draft Save AJAX Calls

Verified end to end. Workflow run sales-invoice-draft-ft-20260519T175248Z filled an FT invoice and saved draft 464 instead of issuing a final invoice.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=ClienteLoads customer master data.Customer 910 populated VAT, address, seller, and employee context.
loadArtigoReducidoLoads article metadata for the FT line.Called with article AI-DEMO-20260519-021105, compras=F, actualizastocks=T, and tipoop=FT.
insertLinhaTabDocCreates the temporary line-table row before save.The draft line used customer 910, warehouse 1, quantity 1, unit price 1.599, and VAT 23.
create_document&option=calcular_totaisCalculates FT totals before draft save.The verified total was 1.97.
checkProfitMarginsRuns margin validation before saving the draft.Called against the temporary line table.
saveRascunhoSaves the FT as a draft.Response was "OK:464:&=&AI-DEMO-20260519-021105:1#" and OfficeGest opened /vendas/ft/rasc/NDY0.
listaTabDocumentoReloads draft lines after opening the draft route.The draft page contained the same article line and reference AI-FT-DRAFT-20260519T175248Z.
DT_List_DocumentosChecks whether a final FT exists for the draft reference.Search for the draft reference returned no final FT rows.
dt_list_recalc_stock_articles_lojasChecks stock after draft save.Warehouse stock stayed at -1 before and after draft save.

Evidence: raw/playwright/workflows/sales-invoice-draft-ft-20260519T175248Z.json and workflows/save-sales-invoice-draft.html.

Saved Sales Invoice FT Draft Edit AJAX Calls

Verified end to end. Workflow run edit-sales-invoice-draft-20260519T180638Z opened FT draft 467, changed the reference, saved it again as a draft, and verified active draft 468.

Action or endpointObserved purposeEvidence detail
listaTabDocumentoLoads the saved draft line.Draft 467 loaded article AI-DEMO-20260519-021105, quantity 1, and customer 910.
create_document&option=calcular_totaisRecalculates totals while the edited draft is open.The verified total remained 1.97.
saveRascunhoSaves the edited draft.Response was "OK:468:&=&AI-DEMO-20260519-021105:1#"; OfficeGest opened /vendas/ft/rasc/NDY4.
DT_List_DocumentosChecks whether a final FT exists for the edited reference.Search for AI-FT-DRAFT-20260519T180605Z-EDIT returned no final FT rows.
dt_list_recalc_stock_articles_lojasChecks stock after edit re-save.Warehouse stock stayed at -3 before and after re-save.

Evidence: raw/playwright/workflows/edit-sales-invoice-draft-20260519T180638Z.json and workflows/edit-sales-invoice-draft.html.

Saved Sales Invoice FT Draft Line Add AJAX Calls

Verified end to end. Workflow run add-line-sales-invoice-draft-20260519T181220Z opened FT draft 469, added another article line, saved it again as a draft, and verified active draft 470.

Action or endpointObserved purposeEvidence detail
listaTabDocumentoLoads the saved draft line grid.Draft 469 initially had 1 row and total quantity 1.
loadArtigoReducidoLoads the article added to the saved draft.The verified run added article AI-DEMO-20260519-021105.
insertLinhaTabDocAdds the second draft line.The edited draft had 2 rows and total quantity 2 before re-save.
create_document&option=calcular_totaisRecalculates totals after the added line.Total with VAT became 3.93354.
saveRascunhoSaves the edited draft.Response was "OK:470:&=&AI-DEMO-20260519-021105:1#"; OfficeGest opened active draft /vendas/ft/rasc/NDcw.
DT_List_DocumentosChecks whether a final FT exists for the edited reference.Search for AI-FT-DRAFT-20260519T181144Z-ADDLINE returned no final FT rows.
dt_list_recalc_stock_articles_lojasChecks stock after draft line add.Warehouse stock stayed at -3 before and after re-save.

Evidence: raw/playwright/workflows/add-line-sales-invoice-draft-20260519T181220Z.json and workflows/add-line-sales-invoice-draft.html.

Saved Sales Invoice FT Draft Line Deletion AJAX Calls

Verified end to end. Workflow run delete-line-sales-invoice-draft-20260519T182132Z opened FT draft 472, deleted one article line, saved it again as a draft, and verified active draft 473.

Action or endpointObserved purposeEvidence detail
listaTabDocumentoLoads and reloads the saved draft line grid.Draft 472 initially had 2 rows and total quantity 2.
deleteLinhaDocDeletes the selected draft line.The verified run removed line sequence 2.
create_document&option=calcular_totaisRecalculates totals after the deleted line.Total with VAT became 1.96677.
saveRascunhoSaves the edited draft.Response was "OK:473:&=&AI-DEMO-20260519-021105:1#"; OfficeGest opened active draft /vendas/ft/rasc/NDcz.
DT_List_DocumentosChecks whether a final FT exists for the edited reference.Search for AI-FT-DRAFT-20260519T182039Z-ADDLINE-DELLINE returned no final FT rows.
dt_list_recalc_stock_articles_lojasChecks stock after draft line deletion.Warehouse stock stayed at -3 before and after re-save.

Evidence: raw/playwright/workflows/delete-line-sales-invoice-draft-20260519T182132Z.json and workflows/delete-line-sales-invoice-draft.html.

Saved Sales Invoice FT Draft Quantity Change AJAX Calls

Verified end to end. Workflow run change-quantity-sales-invoice-draft-20260519T182947Z opened FT draft 474, changed line quantity from 1 to 2, saved it again as a draft, and verified active draft 475.

Action or endpointObserved purposeEvidence detail
updateEditableTabDocUpdates an editable field in the draft line table.The verified run sent campo=Qtd, original quantity 1, and new value 2.
listaTabDocumentoReloads the saved draft line grid.The edited draft had 1 row and total quantity 2 before re-save.
create_document&option=calcular_totaisRecalculates totals after the quantity change.Total with VAT became 3.93354.
saveRascunhoSaves the edited draft.Response was "OK:475:&=&AI-DEMO-20260519-021105:1#"; OfficeGest opened active draft /vendas/ft/rasc/NDc1.
DT_List_DocumentosChecks whether a final FT exists for the edited reference.Search for AI-FT-DRAFT-20260519T182919Z-QTY2 returned no final FT rows.
dt_list_recalc_stock_articles_lojasChecks stock after draft quantity change.Warehouse stock stayed at -3 before and after re-save.

Evidence: raw/playwright/workflows/change-quantity-sales-invoice-draft-20260519T182947Z.json and workflows/change-quantity-sales-invoice-draft.html.

Saved Sales Invoice FT Draft Finalization AJAX Calls

Verified end to end. Workflow run finalize-saved-sales-invoice-draft-20260519T175951Z opened FT draft 465 and finalized it as invoice 999901677 / FT 9999/1677.

Action or endpointObserved purposeEvidence detail
listaTabDocumentoReloads the saved FT draft line.The draft route /vendas/ft/rasc/NDY1 loaded article AI-DEMO-20260519-021105, quantity 1, and total 1.97.
checkProfitMarginsRuns margin validation before final save.Returned the normal margin success response before finalization.
create_document&option=calcular_totaisRecalculates FT totals.Returned total 1.97, VAT 0.36777, and net 1.599.
saveDocumentSaves the draft as a final FT.Response was {"return":"999901677%AI-DEMO-20260519-021105:1#&=&OKDOC&=&","print_documents":[]}.
DT_List_DocumentosVerifies the final FT list row.Search returned FT 9999/1677, ABR / Open, total 1.97, paid 0.00, and pending 1.97.
dt_list_recalc_stock_articles_lojasChecks stock after finalization.Warehouse stock moved from -2 before finalization to -3 after finalization.

Evidence: raw/playwright/workflows/finalize-saved-sales-invoice-draft-20260519T175951Z.json and workflows/finalize-saved-sales-invoice-draft.html.

Sales Invoice No Lines Validation AJAX Calls

Verified end to end. Workflow run sales-invoice-no-lines-validation-20260519T183637Z attempted Save and Finish on a blank FT and confirmed no final save was submitted.

Action or endpointObserved purposeEvidence detail
listaTabDocumentoLoads and reloads the empty document line grid.The grid returned 0 rows.
create_document&option=calcular_totaisRecalculates totals for the empty line table.Totals remained 0.
checkProfitMarginsRuns margin validation before attempting final save.Returned the normal margin success marker.
saveDocumentFinal invoice save.Not called. The visible toast was ErrorNo lines and the page stayed on /vendas/ft/create.

Evidence: raw/playwright/workflows/sales-invoice-no-lines-validation-20260519T183637Z.json and workflows/handle-sales-invoice-no-lines-error.html.

Sales Invoice Missing Customer Validation AJAX Calls

Verified end to end. Workflow run sales-invoice-missing-customer-validation-20260519T184220Z added one FT line without a customer, attempted Save and Finish, and confirmed no final save was submitted.

Action or endpointObserved purposeEvidence detail
loadArtigoReducidoLoads the article before line insertion.Loaded article AI-DEMO-20260519-021105 for FT, warehouse 1.
insertLinhaTabDocAdds the article line into the temporary FT grid.The line grid had one row, quantity 1, and total with VAT 1.96677.
listaTabDocumentoReloads the document line grid.Reloaded the line while customer remained empty.
create_document&option=calcular_totaisRecalculates totals for the line.Totals reflected the single article line.
saveDocumentFinal invoice save.Not called. The visible toast was Error There are mandatory fields unfilled; #doc_CodTerc and #doc_NContrib were marked chosen-error.

Evidence: raw/playwright/workflows/sales-invoice-missing-customer-validation-20260519T184220Z.json and workflows/handle-sales-invoice-mandatory-fields-error.html.

Sales Invoice FT Cancellation AJAX Calls

Verified end to end. Workflow run cancel-sales-invoice-ft-20260519T172726Z created invoice 999901672 / FT 9999/1672, cancelled it from the FT view, and verified the final list state ANU / Canceled.

Action or endpointObserved purposeEvidence detail
podeAnularDocChecks whether a document can be cancelled.Request used num=999901672 and tipoop=FT. Response returned {"succeeded":true,"message":null,"params":null}.
Sel2_Select_v2 with table=motivos_docsLoads cancellation reasons for the selector.Selector filters included where[is_anulacao]=1 and where[activo]=1. The verified run selected reason id 1, Erro de faturacao.
deleteDocumentSubmits the FT cancellation.Payload used action=deleteDocument, num=999901672, tipoop=FT, and the serialized FT form after reason selection.
DT_List_DocumentosVerifies the FT row after cancellation.Search for 999901672 returned estado=ANU, desig_estado=Canceled, total 1.97, paid value 0.00, and pending value 1.97.
dt_list_recalc_stock_articles_lojasChecks stock reversal.Warehouse 1 stock for article AI-DEMO-20260519-021105 changed from -2 before cancellation to -1 after cancellation.

Evidence: raw/playwright/workflows/cancel-sales-invoice-ft-20260519T172726Z.json and workflows/cancel-sales-invoice.html.

Invoice / Receipt FR Cancellation AJAX Calls

Verified end to end. Workflow run cancel-invoice-receipt-fr-20260519T234010Z created paid invoice / receipt 999900849 / FR 9999/849, cancelled it from the FR view, and verified the final list state ANU / Canceled.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the immediate FR payment row.Request used tipoop=FR, modopagamento=NUM, customer 910, and amount 1.97.
payment&option=validateValidates the FR payment before final save.Validation returned valid:true and troco:0.
saveDocumentSaves the paid invoice / receipt.Response returned 999900849 with OKDOC and opened the final FR view.
Sel2_Select_v2 with table=motivos_docsLoads cancellation reasons for the selector.The verified run selected reason id 1, Erro de faturacao.
deleteDocumentSubmits the FR cancellation.Payload used action=deleteDocument, num=999900849, tipoop=FR, and the serialized FR form after reason selection.
DT_List_DocumentosVerifies the FR row after cancellation.Search for 999900849 returned estado=ANU, desig_estado=Canceled, total 1.97, paid value 1.97, and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock reversal.Warehouse 1 stock for article AI-DEMO-20260519-021105 moved from -37 to -38 after save and returned to -37 after cancellation.

Evidence: raw/playwright/workflows/cancel-invoice-receipt-fr-20260519T234010Z.json and workflows/cancel-invoice-receipt.html.

Simplified Invoice FS Cancellation AJAX Calls

Verified end to end. Workflow run cancel-simplified-invoice-fs-20260519T234643Z created paid simplified invoice 999900012 / FS 9999/12, cancelled it from the FS view, and verified the final list state ANU / Canceled.

Action or endpointObserved purposeEvidence detail
payment&option=addAdds the immediate FS payment row.Request used tipoop=FS, modopagamento=NUM, customer 910, and amount 1.97.
payment&option=validateValidates the FS payment before final save.Validation returned valid:true and troco:0.
saveDocumentSaves the paid simplified invoice.Response returned 999900012 with OKDOC and opened the final FS view.
Sel2_Select_v2 with table=motivos_docsLoads cancellation reasons for the selector.The verified run selected reason id 1, Erro de faturacao.
deleteDocumentSubmits the FS cancellation.Payload used action=deleteDocument, num=999900012, tipoop=FS, and the serialized FS form after reason selection.
DT_List_Documentos&table=FactSimVerifies the FS row after cancellation.Search for 999900012 returned estado=ANU, desig_estado=Canceled, total 1.97, paid value 1.97, and pending value 0.00.
dt_list_recalc_stock_articles_lojasChecks stock reversal.Warehouse 1 stock for article AI-DEMO-20260519-021105 moved from -37 to -38 after save and returned to -37 after cancellation.

Evidence: raw/playwright/workflows/cancel-simplified-invoice-fs-20260519T234643Z.json and workflows/cancel-simplified-invoice.html.

Sales Invoice FT to Credit Note AJAX Calls

Verified end to end. Workflow run sales-invoice-to-credit-note-20260519T173701Z used source invoice 999901674 / FT 9999/1674 and created credit note 999900061 / NC 9999/61.

Action or endpointObserved purposeEvidence detail
POST /vendas/nc/createStarts the NC from the source FT view.Payload included copy=1, codterc_copy=910, num_copy=999901674, tipoop_copy=FT, and source date.
associar_documento&option=load_modalLoads the source invoice association modal.Request used source tipoop=FT, target tipoopori=NC, and num_copy=999901674.
associar_documento&option=listar_documentosPreselects eligible source invoices.Returned source FT 9999/1674 in the modal list.
associar_documento&option=listar_tabelaLoads creditable FT lines.Returned line 1, article AI-DEMO-20260519-021105, quantity 1, net 1.599, VAT 23.
associar_documento&option=save_linhasCopies selected source lines into the NC draft.The draft line kept ndocori=999901674, tipodocori=FT, and linhandocori=1.
Sel2_Select_v2&table=motivos_docsLoads NC reasons.Reason lookup with where[is_nc]=1 returned reason id 1, Erro de faturacao.
saveDocumentSaves the NC.Final view opened /vendas/nc/view/OTk5OTAwMDYx; NC list returned NC 9999/61, ABR / Open, total 1.97.
dt_list_recalc_stock_articles_lojasVerifies stock reversal.Warehouse 1 stock moved from 0 before FT to -1 after FT and back to 0 after NC.

Evidence: raw/playwright/workflows/sales-invoice-to-credit-note-20260519T173701Z.json and workflows/convert-sales-invoice-to-credit-note.html.

Sales Invoice FT to Receipt AJAX Calls

Verified end to end. Workflow run sales-invoice-to-receipt-20260519T174312Z used source invoice 999901675 / FT 9999/1675 and created receipt 999900246 / R 9999/246.

Action or endpointObserved purposeEvidence detail
POST /vendas/r/createStarts the R receipt from the source FT view.Payload included copy=1, relation_copy=, codterc_copy=910, num_copy=999901675, and tipoop_copy=FT.
loadTabDocumentoReciboBuilds the receipt document tab with source invoice context.Request included cliente=910, target tipoop=R, num_copy=999901675, and tipoop_copy=FT.
listaTabDocumentoReciboLists selected documents to pay.The Documents grid returned exactly source FT 9999/1675, total 1.97, value to pay 1.97, and estado=T.
payment&option=addAdds the receipt payment line.The verified run added [NUM] Numerario for 1.97 with inbox option [0] Caixa 0.
payment&option=validateValidates payment totals before final save.Validation returned valid totals and change 0.
saveDocumentReciboSaves the receipt.Response returned {"return":"999900246&=&OKDOC&=&&=&OKDOC&=&","print_documents":[],"final":"&=&OKDOC&=&"}.
DT_List_DocumentosVerifies receipt and source invoice states.The receipt list returned F / Closed. The source FT list returned LIQ / Finished, ValorPago=1.97, pending 0.00.

Evidence: raw/playwright/workflows/sales-invoice-to-receipt-20260519T174312Z.json and workflows/convert-sales-invoice-to-receipt.html.

Purchase / Expense Draft AJAX Calls

Verified draft save. Workflow run purchase-expense-draft-20260519T034251Z created CD draft 456 for supplier 100. The verified save response was OK:456, and the draft list returned the created row with total 1.51.

Action or endpointObserved purposeEvidence detail
dt_list_draftsLoads purchase draft documents.Called with compras=T, search[TipoOp]=CD, and typesaft=FR. After save it returned row Num: 456, supplier AI Demo Supplier 20260519T030323Z, and total 1.51.
Sel2_Select&table=fornResolves supplier selector rows.Lookup for term 100 returned supplier text and VAT 590303236.
NameEntidades&tabla=FornLoads supplier master data.Returned address, contacts, VAT, active flag, and accounting account 2211100100.
Sel2_Select&table=moradasfLoads supplier address rows.Called after supplier selection with term=100.
findNumNoFornChecks duplicate supplier document number.Payload used tabela=documcd, forn=100, and numnoforn=AI-CD-DRAFT-20260519T034251Z.
loadArtigoReducido&compras=TLoads reduced purchase article metadata.Returned article AI-DEMO-20260519-021105, cost 1.23, VAT 23, stock 1, and active flag T.
insertLinhaTabDocInserts the supplier document line.Payload included document table 45236, id_tipoop=CD, cliente=100, formapag=PP, isforn=T, and article quantity 1.
price_variation_articleChecks supplier/article price variation.Returned success:true, price:1.23, and zero variation for supplier 100.
create_document&option=calcular_totaisCalculates CD totals.Returned net 1.23, VAT 0.2829, total 1.51, and VAT table for rate 23.
saveRascunhoSaves the CD draft.GET request carried the serialized form, totals, table id 45236, and returned OK:456.
listaTabDocumentoReloads line-table data.After save, draft mode request used table 45267 and encoded draft number NDU2.
DT_List_DocumentosFLoads finalized supplier document list.Observed on the CD list route with table documcd, type CD, and supplier document columns. The verified workflow did not finalize a document.

Evidence: raw/playwright/workflows/purchase-expense-draft-20260519T034251Z.json and workflows/create-purchase-expense-draft.html.

Purchase / Expense Finalization AJAX Calls

Verified end to end. Workflow run purchase-expense-finalize-20260519T035328Z finalized draft 456 into CD document 999900053 / CD 9999/53, paid total 1.51, and increased article warehouse stock from 1 to 2.

Action or endpointObserved purposeEvidence detail
payment&option=validateChecks payment coverage before final save.First validation returned valid: NONE until payment was added; second validation returned valid: true.
payment&option=addAdds purchase payment line.Payload used id=45392, compras=T, entidade=100, modopagamento=NUM, tipoop=CD, and total=1.51.
saveDocumentFinalizes the CD draft.Payload included num=456, id=45392, estado=ABR, isedit=T, and israsc=1. Response: {"return":"999900053%&=&OKDOC&=&"}.
payment&option=get_paymentLoads the payment card on the finished CD view.Returned payment mode [NUM] Numerario, bank/cash account [CXC] Caixa Defeito - Caixa Colaborador Demo, date 19/05/2026, and value 1.51.
listaTabDocumentoLoads finished CD line data.View-mode line request used encoded number OTk5OTAwMDUz; line stock fields showed QtdStock: 2.
DT_List_DocumentosFVerifies the finalized CD in the document list.Search for 999900053 returned recordsFiltered: 1, CodEstado: LIQ, ValorPago: 1.51, and supplier reference AI-CD-DRAFT-20260519T034251Z.
dt_list_recalc_stock_articles_lojasVerifies article stock after the purchase.Warehouse 1 for article AI-DEMO-20260519-021105 returned QtdStock: 2.

Evidence: raw/playwright/workflows/purchase-expense-finalize-20260519T035328Z.json, raw/playwright/workflows/purchase-expense-finalize-20260519T035328Z-recovery.json, and workflows/finalize-purchase-expense.html.

Order to Supplier AJAX Calls

Verified end to end. Workflow run supplier-order-ef-20260519T040050Z created supplier order 999900111 / EF 9999/111 for supplier 100. The order remained open and increased supplier-order quantity without changing physical stock.

Action or endpointObserved purposeEvidence detail
loadArtigoReducido&compras=TLoads purchase article data for EF lines.Returned article AI-DEMO-20260519-021105, physical stock 2, VAT 23, and cost 1.23.
insertLinhaTabDocInserts supplier order line.Payload used table 45549, id_tipoop=EF, cliente=100, isforn=T, and quantity 1.
create_document&option=calcular_totaisCalculates EF totals.Verified total was 1.51.
saveDocumentSaves the supplier order.Payload included TipoOp=EF, NumNoForn=AI-EF-20260519T040050Z, dataentregaprev=19/05/2026, id=45549, isedit=F, and israsc=0. Response: {"return":"999900111%&=&OKDOC&=&"}.
listaTabDocumentoLoads EF line table.View-mode line request used encoded document number OTk5OTAwMTEx.
DT_List_DocumentosFVerifies the EF order list.Search for 999900111 returned recordsFiltered: 1, CodEstado=ABR, desig_estado=Open, ValorPago=0, and total 1.51.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock stayed 2; qtd_enc_forn changed to 1.

Evidence: raw/playwright/workflows/supplier-order-ef-20260519T040050Z.json and workflows/create-supplier-order.html.

Supplier Request for Quotation PEC AJAX Calls

Verified end to end. Workflow run supplier-request-quotation-pec-20260519T074730Z created supplier request for quotation 999900017 / PEC 9999/17 for supplier 100. The request remained open and increased supplier-order quantity without changing physical stock.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=DocumPECLoads and verifies PEC requests.Called with actualizacc=F, tipoop=PEC, recibo=F, and tipoterc=F. Search for 999900017 returned the created PEC row.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236, name, address, and payment-condition context.
findNumNoFornChecks duplicate supplier reference.Payload used tabela=DocumPEC, forn=100, and numnoforn=AI-PEC-20260519T074730Z.
loadArtigoReducido&compras=TLoads purchase article data for PEC lines.Returned article AI-DEMO-20260519-021105, physical stock 5, VAT 23, and unit cost 1.23.
insertLinhaTabDocInserts PEC line.Payload used temporary table 47912, id_tipoop=PEC, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 47912.
create_document&option=calcular_totaisCalculates PEC totals.Verified total was 1.51.
saveDocumentSaves the supplier request for quotation.Payload included TipoOp=PEC, NumNoForn=AI-PEC-20260519T074730Z, MovimentaStock=1, id=47912, isedit=F, and israsc=0. Response: {"return":"999900017%&=&OKDOC&=&"}.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock stayed 5; qtd_enc_forn changed from 1 to 2; qtd_enc_cliente stayed 4.

Evidence: raw/playwright/workflows/supplier-request-quotation-pec-20260519T074730Z.json and workflows/create-supplier-request-quotation-pec.html.

Supplier Debit Note NDF AJAX Calls

Verified end to end. Workflow run supplier-debit-note-ndf-20260519T075402Z created supplier debit note 999900005 / 9999/5 for supplier 100. The note remained open, had no payment row, and did not change physical stock or order quantities for the tested article.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=NDebFLoads and verifies supplier debit notes.Called with actualizacc=T, tipoop=NDF, recibo=F, and tipoterc=F. Search for 999900005 returned the created NDF row.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236, name, address, and payment-condition context.
findNumNoFornChecks duplicate supplier reference.Payload used tabela=NDebF, forn=100, and numnoforn=AI-NDF-20260519T075402Z.
loadArtigoReducido&compras=TLoads purchase article data for NDF lines.Returned article AI-DEMO-20260519-021105, physical stock 5, VAT 23, unit cost 1.23, and supplier-order quantity 2.
insertLinhaTabDocInserts NDF line.Payload used temporary table 47957, id_tipoop=NDF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 47957.
create_document&option=calcular_totaisCalculates NDF totals.Verified total was 1.51.
saveDocumentSaves the supplier debit note.Payload included TipoOp=NDF, CodTipoLanc=AccNDebFMerc, NumNoForn=AI-NDF-20260519T075402Z, MovimentaStock=1, id=47957, isedit=F, and israsc=0. Response: {"return":"999900005%&=&OKDOC&=&"}.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock stayed 5; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-debit-note-ndf-20260519T075402Z.json and workflows/create-supplier-debit-note-ndf.html.

Supplier Credit Note NCF AJAX Calls

Verified end to end. Workflow run supplier-credit-note-ncf-20260519T075930Z created supplier credit note 999900025 / NCF 9999/25 for supplier 100. The note remained open, had no payment row, and reduced warehouse stock for the tested article.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=NCredFLoads and verifies supplier credit notes.Called with actualizacc=T, tipoop=NCF, recibo=F, and tipoterc=F. Search for 999900025 returned the created NCF row.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236, name, address, and payment-condition context.
findNumNoFornChecks duplicate supplier reference.Payload used tabela=NCredF, forn=100, and numnoforn=AI-NCF-20260519T075930Z.
loadArtigoReducido&compras=TLoads purchase article data for NCF lines.Returned article AI-DEMO-20260519-021105, physical stock 5, VAT 23, unit cost 1.23, and supplier-order quantity 2.
insertLinhaTabDocInserts NCF line.Payload used temporary table 48047, id_tipoop=NCF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 48047.
create_document&option=calcular_totaisCalculates NCF totals.Verified total was 1.51.
saveDocumentSaves the supplier credit note.Payload included TipoOp=NCF, CodTipoLanc=AccNCredFMerc, NumNoForn=AI-NCF-20260519T075930Z, MovimentaStock=on, id=48047, isedit=F, and israsc=0. Response: {"return":"999900025%&=&OKDOC&=&"}.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock changed from 5 to 4; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-credit-note-ncf-20260519T075930Z.json and workflows/create-supplier-credit-note-ncf.html.

Supplier Return Note NVF AJAX Calls

Verified end to end. Workflow run supplier-return-note-nvf-20260519T080457Z created supplier return note 999900001 / NVF 9999/1 for supplier 100. The note remained open, had no payment row, returned blank validation fields, and reduced warehouse stock for the tested article.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=NDevolFLoads and verifies supplier return notes.Called with actualizacc=F, tipoop=NVF, recibo=F, and tipoterc=F. Search for 999900001 returned the created NVF row.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236, name, address, and payment-condition context.
findNumNoFornChecks duplicate supplier reference.Payload used tabela=NDevolF, forn=100, and numnoforn=AI-NVF-20260519T080457Z.
loadArtigoReducido&compras=TLoads purchase article data for NVF lines.Returned article AI-DEMO-20260519-021105, physical stock 4, VAT 23, unit cost 1.23, customer-order quantity 4, and supplier-order quantity 2.
insertLinhaTabDocInserts NVF line.Payload used temporary table 48087, id_tipoop=NVF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 48087.
create_document&option=calcular_totaisCalculates NVF totals.Verified total was 1.51.
saveDocumentSaves the supplier return note.Payload included TipoOp=NVF, NumNoForn=AI-NVF-20260519T080457Z, MovimentaStock=1, id=48087, isedit=F, and israsc=0. No CodTipoLanc was present. Response: {"return":"999900001%&=&OKDOC&=&"}.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock changed from 4 to 3; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-return-note-nvf-20260519T080457Z.json and workflows/create-supplier-return-note-nvf.html.

Supplier Invoice FAF AJAX Calls

Verified end to end. Workflow run supplier-invoice-faf-20260519T070810Z created supplier invoice 999900342 / FAF 9999/342 for supplier 100. The invoice remained open/unpaid and increased warehouse stock.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236, name, address, payment condition, and accounting context.
findNumNoFornChecks duplicate supplier invoice/reference number.Payload used tabela=FactF, forn=100, and numnoforn=AI-FAF-20260519T070810Z.
loadArtigoReducido&compras=TLoads purchase article data for FAF lines.Returned article AI-DEMO-20260519-021105, physical stock 1, VAT 23, and unit cost 1.23.
insertLinhaTabDocInserts supplier invoice line.Payload used temporary table 47633, id_tipoop=FAF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 47633.
create_document&option=calcular_totaisCalculates FAF totals.Verified total was 1.51.
saveDocumentSaves the supplier invoice.Payload included TipoOp=FAF, NumNoForn=AI-FAF-20260519T070810Z, MovimentaStock=1, id=47633, isedit=F, and israsc=0. Response: {"return":"999900342%&=&OKDOC&=&"}.
listaTabDocumentoLoads FAF line table.View-mode line request used encoded document number OTk5OTAwMzQy.
DT_List_DocumentosFVerifies the FAF invoice list.Search for 999900342 returned recordsFiltered: 1, CodEstado=ABR, desig_estado=Open, ValorPago=0, validation N/D, and total 1.51.
dt_list_recalc_stock_articles_lojasChecks article stock after supplier invoice save.Warehouse 1 physical stock changed from 1 to 2; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/supplier-invoice-faf-20260519T070810Z.json and workflows/create-supplier-invoice-faf.html.

Supplier Invoice / Receipt FRF AJAX Calls

Verified end to end. Workflow run supplier-invoice-receipt-frf-20260519T072511Z created supplier invoice/receipt 999900023 / FRF 9999/23 for supplier 100. The document was paid during creation and increased warehouse stock.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236 and name AI Demo Supplier 20260519T030323Z.
findNumNoFornChecks duplicate supplier invoice/reference number.Payload used tabela=FactRecF, forn=100, and numnoforn=AI-FRF-20260519T072511Z.
loadArtigoReducido&compras=TLoads purchase article data for FRF lines.Returned article AI-DEMO-20260519-021105, physical stock 2, VAT 23, and unit cost 1.23.
insertLinhaTabDocInserts supplier invoice/receipt line.Payload used temporary table 47729, id_tipoop=FRF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 47729.
create_document&option=calcular_totaisCalculates FRF totals.Verified total was 1.51.
payment&option=validateValidates payment coverage before save.Observed before and after the payment row was added; final payment total was 1.51 and troco=0.
payment&option=addAdds the immediate supplier payment row.Request used compras=T, entidade=100, modopagamento=NUM, modobase=N, total=1.51, edit=F, and tipoop=FRF.
saveDocumentSaves the supplier invoice/receipt.Payload included TipoOp=FRF, CodTipoLanc=AccVDinFMerc, NumNoForn=AI-FRF-20260519T072511Z, MovimentaStock=1, and id=47729. Response: {"return":"999900023%&=&OKDOC&=&"}.
payment&option=get_paymentLoads the saved payment card.Called with num=999900023, tipoop=FRF, compras=T, edit=T, and editable=T.
DT_List_DocumentosFVerifies the FRF list.Search for 999900023 returned recordsFiltered: 1, CodEstado=LIQ, desig_estado=Finished, ValorPago=1.51, validation N/D, and total 1.51.
dt_list_recalc_stock_articles_lojasChecks article stock after supplier invoice/receipt save.Warehouse 1 physical stock changed from 2 to 3; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/supplier-invoice-receipt-frf-20260519T072511Z.json and workflows/create-supplier-invoice-receipt-frf.html.

Supplier Simplified Invoice FSF AJAX Calls

Verified end to end. Workflow run supplier-simplified-invoice-fsf-20260519T073106Z created supplier document 999900002 / FSF 9999/2 for supplier 100. The document was paid during creation and increased warehouse stock.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236 and name AI Demo Supplier 20260519T030323Z.
findNumNoFornChecks duplicate supplier reference.Payload used tabela=FactSimF, forn=100, and numnoforn=AI-FSF-20260519T073106Z.
loadArtigoReducido&compras=TLoads purchase article data for FSF lines.Returned article AI-DEMO-20260519-021105, physical stock 3, VAT 23, and unit cost 1.23.
insertLinhaTabDocInserts FSF line.Payload used temporary table 47781, id_tipoop=FSF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 47781.
create_document&option=calcular_totaisCalculates FSF totals.Verified total was 1.51.
payment&option=validateValidates payment coverage before save.Final payment total was 1.51 and troco=0.
payment&option=addAdds the immediate supplier payment row.Request used compras=T, entidade=100, modopagamento=NUM, modobase=N, total=1.51, edit=F, and tipoop=FSF.
saveDocumentSaves the FSF.Payload included TipoOp=FSF, CodTipoLanc=AccVDinFMerc, NumNoForn=AI-FSF-20260519T073106Z, MovimentaStock=1, and id=47781. Response: {"return":"999900002%&=&OKDOC&=&"}.
payment&option=get_paymentLoads the saved payment card.Called with num=999900002, tipoop=FSF, compras=T, edit=T, and editable=T.
DT_List_DocumentosFVerifies the FSF list.Search for 999900002 returned recordsFiltered: 1, CodEstado=LIQ, desig_estado=Finished, ValorPago=1.51, validation N/D, and total 1.51.
dt_list_recalc_stock_articles_lojasChecks article stock after FSF save.Warehouse 1 physical stock changed from 3 to 4; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/supplier-simplified-invoice-fsf-20260519T073106Z.json and workflows/create-supplier-simplified-invoice-fsf.html.

Supplier Cash Sale VDF AJAX Calls

Verified end to end. Workflow run supplier-cash-sale-vdf-20260519T073648Z created supplier cash-sale document 999900001 / VDF 9999/1 for supplier 100. The document was paid during creation and increased warehouse stock.

Action or endpointObserved purposeEvidence detail
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236 and name AI Demo Supplier 20260519T030323Z.
findNumNoFornChecks duplicate supplier reference.Payload used tabela=VDinF, forn=100, and numnoforn=AI-VDF-20260519T073648Z.
loadArtigoReducido&compras=TLoads purchase article data for VDF lines.Returned article AI-DEMO-20260519-021105, physical stock 4, VAT 23, and unit cost 1.23.
insertLinhaTabDocInserts VDF line.Payload used temporary table 47824, id_tipoop=VDF, cliente=100, isforn=T, warehouse 1, and quantity 1.
price_variation_articleChecks supplier/article price variation.Called for article AI-DEMO-20260519-021105, line 1, supplier 100, and table 47824.
create_document&option=calcular_totaisCalculates VDF totals.Verified total was 1.51.
payment&option=validateValidates payment coverage before save.Final payment total was 1.51 and troco=0.
payment&option=addAdds the immediate supplier payment row.Request used compras=T, entidade=100, modopagamento=NUM, modobase=N, total=1.51, edit=F, and tipoop=VDF.
saveDocumentSaves the VDF.Payload included TipoOp=VDF, CodTipoLanc=AccVDinFMerc, NumNoForn=AI-VDF-20260519T073648Z, MovimentaStock=1, and id=47824. Response: {"return":"999900001%&=&OKDOC&=&"}.
payment&option=get_paymentLoads the saved payment card.Called with num=999900001, tipoop=VDF, compras=T, edit=T, and editable=T.
DT_List_DocumentosFVerifies the VDF list.Search for 999900001 returned recordsFiltered: 1, CodEstado=LIQ, desig_estado=Finished, ValorPago=1.51, validation N/D, and total 1.51.
dt_list_recalc_stock_articles_lojasChecks article stock after VDF save.Warehouse 1 physical stock changed from 4 to 5; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 1.

Evidence: raw/playwright/workflows/supplier-cash-sale-vdf-20260519T073648Z.json and workflows/create-supplier-cash-sale-vdf.html.

Supplier Payment Note RF AJAX Calls

Verified end to end. Workflow run supplier-payment-rf-20260519T071455Z created supplier payment note 999900074 / RF 9999/74 for supplier 100 and settled source invoice 999900342 / FAF 9999/342.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=RecibosFLists supplier payment notes.RF verification used recibo=T, actualizacc=T, tipoop=RF, and tipoterc=F. Search for 999900074 returned status F / Closed and total 1.51.
DT_List_DocumentosF&table=FactFChecks the source supplier invoice before and after payment.Before RF, source FAF 999900342 was ABR / Open with ValorPago=0. After RF, it was LIQ / Finished with ValorPago=1.51.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236 and name AI Demo Supplier 20260519T030323Z.
loadTabDocumentoReciboFInitializes the supplier receipt/payment temporary table.Request used supplier 100, date 19/05/2026, temp id 47645, tipoop=RF, debita=T, and credita=F.
listaTabDocumentoRecibo&estado=FLoads pending supplier documents.Returned source row FAF 9999/342, total 1.51, paid 0, pending 1.51, due date 2026-05-20.
changeEstadoReciboMoves a source document into the documents-to-pay table.POST used id 47645, style=ADV2, desconto=0.000000, apagar=0, and listado[]=1. Response: {"success":true}.
listaTabDocumentoRecibo&estado=TLoads selected supplier documents to pay.Selected row changed to state T with valorapagar=1.51.
payment&option=addAdds the RF payment row.Request used compras=T, entidade=100, modopagamento=NUM, modobase=N, total=1.51, edit=F, and tipoop=RF.
payment&option=validateValidates payment total before save.Verified payment total was 1.51 with troco=0 and can_save=true.
saveDocumentReciboSaves the supplier payment note.Payload included TipoOp=RF, CodTipoLanc=AccReciboF, and totAPagar=1.51. Response: 999900074&=&OKDOC&=&.
payment&option=get_paymentLoads saved payment details on the RF view.Called with num=999900074, tipoop=RF, compras=T, edit=T, and editable=T.

Evidence: raw/playwright/workflows/supplier-payment-rf-20260519T071455Z.json and workflows/create-supplier-payment-rf.html.

Supplier Receipt Chargeback REF AJAX Calls

Verified end to end. Workflow run supplier-receipt-chargeback-ref-20260519T081501Z created supplier receipt chargeback 999900005 / REF 9999/5 for supplier 100 and settled source credit note 999900025 / NCF 9999/25.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=recibosestfLists supplier receipt chargebacks.REF verification used recibo=T, actualizacc=T, tipoop=REF, and tipoterc=F. Search for 999900005 returned status F / Closed, validation N/D, and total 1.51.
DT_List_DocumentosF&table=NCredFChecks the source supplier credit note before and after chargeback.After REF, source NCF 999900025 was LIQ / Finished with ValorPago=1.51.
NameEntidades&tabla=FornLoads supplier master data.Supplier 100 populated VAT 590303236 and name AI Demo Supplier 20260519T030323Z.
loadTabDocumentoReciboFInitializes the supplier chargeback temporary table.Request used supplier 100, date 19/05/2026, temp id 48104, tipoop=REF, debita=F, and credita=T.
listaTabDocumentoRecibo&estado=FLoads pending supplier credit documents.Returned source row NCF 9999/25, total 1.51, paid 0, pending 1.51, due date 2026-05-20.
changeEstadoReciboMoves a source document into the documents-to-chargeback table.POST used id 48104, style=ADV2, desconto=0.000000, apagar=0, and listado[]=1. Response: {"success":true}.
listaTabDocumentoRecibo&estado=TLoads selected supplier documents.Selected row changed to state T with valorapagar=1.51.
payment&option=addAdds the REF payment row.Request used compras=T, entidade=100, modopagamento=NUM, modobase=N, total=1.51, edit=F, and tipoop=REF.
payment&option=validateValidates payment total before save.Verified payment total was 1.51 with troco=0 and can_save=true.
saveDocumentReciboSaves the supplier receipt chargeback.Payload included TipoOp=REF, CodTipoLanc=AccReciboEstF, CodTerc=100, id=48104, totAPagar=1.51, and isedit=F. Response: 999900005&=&OKDOC&=&.
payment&option=get_paymentLoads saved payment details on the REF view.Called with num=999900005, tipoop=REF, compras=T, edit=T, and editable=T.

Evidence: raw/playwright/workflows/supplier-receipt-chargeback-ref-20260519T081501Z.json and workflows/create-supplier-receipt-chargeback-ref.html.

Supplier Transportation Note GTF AJAX Calls

Verified end to end. Workflow run supplier-transport-note-gtf-20260519T082158Z created supplier transportation note 999900005 / GTF 9999/5 for supplier 100. The note remained open, had no payment row, and increased warehouse stock for the tested article.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=GTransFLoads and verifies supplier transportation notes.Called with actualizacc=F, tipoop=GTF, recibo=F, and tipoterc=F. Search for 999900005 returned status ABR / Open, validation N/D, and total 1.51.
listaTabDocumento&isforn=TLoads the temporary supplier document line table.Request used temp id 48185, type=C, tipoop=gtf, and create/view mode.
loadArtigoReducido&compras=TLoads purchase article data for GTF lines.Returned article AI-DEMO-20260519-021105, warehouse 1 stock 3, VAT 23, unit cost 1.23, customer-order quantity 4, and supplier-order quantity 2.
insertLinhaTabDocInserts the GTF line.Payload used temporary table 48185, id_tipoop=GTF, cliente=100, isforn=T, warehouse 1, and quantity 1.
create_document&option=calcular_totaisCalculates GTF totals.Verified total was 1.51.
saveDocumentSaves the supplier transportation note.Payload included TipoOp=GTF, NumNoForn=AI-GTF-20260519T082158Z, referencia=AI-GTF-REF-20260519T082158Z, MovimentaStock=1, stockneg=NAO USAR, id=48185, isedit=F, and israsc=0. No CodTipoLanc was present.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock changed from 3 to 4; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-transport-note-gtf-20260519T082158Z.json and workflows/create-supplier-transport-note-gtf.html.

Supplier Waybill GRF AJAX Calls

Verified end to end. Workflow run supplier-waybill-grf-20260519T082819Z created supplier waybill 999900035 / GRF 9999/35 for supplier 100. The waybill remained open, had no payment row, and increased warehouse stock for the tested article.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=GRemFLoads and verifies supplier waybills.Called with actualizacc=F, tipoop=GRF, recibo=F, and tipoterc=F. Search for 999900035 returned status ABR / Open, validation N/D, and total 1.51.
listaTabDocumento&isforn=TLoads the temporary supplier document line table.Request used temp id 48302, type=C, tipoop=grf, and create/view mode.
create_document&option=get_notas_entidadeLoads supplier notes.Called for supplier 100 with tipoentidade=F.
loadArtigoReducido&compras=TLoads purchase article data for GRF lines.Returned article AI-DEMO-20260519-021105, warehouse 1 stock 4, VAT 23, unit cost 1.23, customer-order quantity 4, and supplier-order quantity 2.
saveDocumentSaves the supplier waybill.Payload included TipoOp=GRF, NumNoForn=AI-GRF-20260519T082819Z, referencia=AI-GRF-REF-20260519T082819Z, MovimentaStock=1, stockneg=NAO USAR, id=48302, isedit=F, and israsc=0. No CodTipoLanc was present.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock changed from 4 to 5; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-waybill-grf-20260519T082819Z.json and workflows/create-supplier-waybill-grf.html.

Supplier Consignment Guide GCF AJAX Calls

Verified end to end. Workflow run supplier-consignment-guide-gcf-20260519T083536Z created supplier consignment guide 999900001 / GCF 9999/1 for supplier 100. The guide remained open, had no payment row, and increased warehouse stock for the tested article.

Action or endpointObserved purposeEvidence detail
DT_List_DocumentosF&table=GConsigFLoads and verifies supplier consignment guides.Called with actualizacc=F, tipoop=GCF, recibo=F, and tipoterc=F. Search for 999900001 returned status ABR / Open, validation N/D, and total 1.51.
listaTabDocumento&isforn=TLoads the temporary supplier document line table.Request used temp id 48353, type=C, tipoop=gcf, and create/view mode.
create_document&option=get_notas_entidadeLoads supplier notes.Called for supplier 100 with tipoentidade=F.
loadArtigoReducido&compras=TLoads purchase article data for GCF lines.Returned article AI-DEMO-20260519-021105, warehouse 1 stock 5, VAT 23, unit cost 1.23, customer-order quantity 4, and supplier-order quantity 2.
saveDocumentSaves the supplier consignment guide.Payload included TipoOp=GCF, NumNoForn=AI-GCF-20260519T083536Z, referencia=AI-GCF-REF-20260519T083536Z, delivery fields Carga* and Descarga*, MovimentaStock=1, stockneg=NAO USAR, id=48353, isedit=F, and israsc=0. No CodTipoLanc was present.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock changed from 5 to 6; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-consignment-guide-gcf-20260519T083536Z.json and workflows/create-supplier-consignment-guide-gcf.html.

Supplier Self-Billing AFT AJAX Calls

Verified end to end. Workflow run supplier-self-billing-aft-20260519T084109Z created self-billing invoice 999900001 / AFT 9999/1 for supplier 100. The invoice remained open, had no payment row, included accounting launch fields, and increased warehouse stock for the tested article.

Action or endpointObserved purposeEvidence detail
dt_list_draftsLoads AFT drafts.Called with compras=T, search[TipoOp]=AFT, and typesaft=FT.
DT_List_DocumentosF&table=documaftLoads and verifies self-billing invoices.Called with actualizacc=T, tipoop=AFT, recibo=F, and tipoterc=F. Search for 999900001 returned status ABR / Open, validation N/D, and total 1.51.
listaTabDocumento&isforn=TLoads the temporary supplier document line table.Request used temp id 48414, type=C, tipoop=aft, and create/view mode.
loadArtigoReducido&compras=TLoads purchase article data for AFT lines.Returned article AI-DEMO-20260519-021105, warehouse 1 stock 6, VAT 23, unit cost 1.23, customer-order quantity 4, and supplier-order quantity 2.
saveDocumentSaves the self-billing invoice.Payload included TipoOp=AFT, NumNoForn=AI-AFT-20260519T084109Z, data_lanc_contabilidade=19/05/2026, CodTipoLanc=AccFactFMerc, referencia=AI-AFT-REF-20260519T084109Z, MovimentaStock=1, stockneg=NAO USAR, id=48414, isedit=F, and israsc=0.
listaTabDocumentoImpCustosLoads import-cost/cost allocation rows on the saved document view.Called with saved view id 48455.
dt_list_recalc_stock_articles_lojasChecks article stock/order quantities.Warehouse 1 physical stock changed from 6 to 7; qtd_enc_cliente stayed 4; qtd_enc_forn stayed 2.

Evidence: raw/playwright/workflows/supplier-self-billing-aft-20260519T084109Z.json and workflows/create-supplier-self-billing-aft.html.

Purchase Integration AJAX Calls

Safe probe verified. Workflow run purchase-integrations-safe-probe-20260519T084624Z captured Hub4Data and Saphety list/filter behavior without clicking external import, transmit, integrate, or reject actions.

Action or endpointObserved purposeEvidence detail
hub4data&option=documentsLoads Hub4Data supplier documents for possible integration.Called with from_date=19/04/2026, to_date=19/05/2026, and integrated=0. Demo returned HTTP 500 with JSON message Ocorreu um erro interno no servidor..
Sel2_Select_v2&table=lojasInitializes the Hub4Data warehouse selector.Observed with warehouse values including 1, 2, 3, 4, 7, and 9.
Sel2_Select_v2&table=seriesdocInitializes the Hub4Data series selector.Observed with active document series and default term 9999.
saphetyinbound&option=dtLoads inbound Saphety records.Called with dataini=01/04/2026, datafim=19/05/2026, and listar=1. Demo returned HTTP 200 with {"draw":0,"recordsTotal":0,"recordsFiltered":0,"data":[]}.

Evidence: raw/playwright/workflows/purchase-integrations-safe-probe-20260519T084624Z.json and workflows/use-purchase-integrations.html.

Article Creation AJAX Calls

Verified end to end. The create article workflow generated and verified article AI-DEMO-20260519-021105. Evidence: raw/playwright/workflows/create-article-20260519T021105Z.json and workflows/create-article.html.

Action or endpointObserved purposeImportant fields
action=loadForm&form=artigo&id=novoartigoLoads the Create New Article modal HTML.Form identifiers and modal controls.
action=SearchIfExistCodArtigoChecks duplicate article code while the user fills Article ID.id1 contains the candidate article code. Existing code AI-DEMO-20260519-021105 returned T:AI Demo Article 20260519T021105Z in article-duplicate-validation-20260519T090211Z.
action=createNovoArtigoCreates the article record.CodArtigo, Designacao, tipoArtigo, Unidade, PrecoCusto, MargemLucro, PrecoVenda, PVP, CodIva, complementary article fields, tire fields.
action=dt_list_recalc_stock_articles_lojasLoads stock by warehouse for the article after save.artigo is the created code; returned rows include warehouse and zero stock quantities.
action=DT_Select_ArtigosIVALists and filters the Articles grid.Global search and columns[1][search][value] both found the created article.

Stock Movement AJAX Calls

Verified end to end. The movements list, create page, article-line insertion, save confirmation, movement list, and warehouse stock result were captured in stock-movement-20260519T022454Z. Warehouse-transfer and outgoing-recount variants were captured in stock-transfer-movement-20260519T085338Z and stock-exit-movement-20260519T085823Z.

Action or endpointObserved purposeEvidence detail
DT_Select_MovArtigosLoads the stock movement document list.After save, returned recordsTotal: 237 and movement 239 at the top of the list.
/stocks/movstock/movimentos/createDedicated stock movement creation page.Opened by clicking create movement from the movements list.
listaTabDocumentoMovimLoads movement article lines for the new movement id.Observed with id=44558 and loja=1; returned an empty line table before articles were added.
Sel2_SelectLoads the collaborator selector.Observed selector for table=empreg, id=CodEmpr, term 1, returning Demo.
SearchProductAutocomplete lookup for article search on the movement page.Returned the verified article code, description, selling price, and stock values.
loadArtigoReducidoLoads full reduced article metadata for movement lines.Returned unit, VAT, cost, stock, lot/serial flags, family/classification, and active status.
findArtigoCreateMovimChecks whether the article is already present in the draft movement.Returned false before line insertion.
insertLinhaDocMovAdds the article line to the draft movement.Posted movement id, article payload, and quantity 2; response "1".
saveMovimArtigosSaves the movement after Bootbox confirmation.Returned 239%&=&OKDOC&=& and redirected to /stocks/movstock/movimentos/view/MjM5.
dt_list_recalc_stock_articles_lojasVerifies article stock by warehouse.Warehouse 1 changed from QtdStock: 0 to QtdStock: 2.
saveMovimArtigos transfer variantSaves a transfer between two warehouses.Movement 243 used CodSTipoMov=10, LojaSaiu=1, LojaEntrou=2, and tipobase=T. Response included warning text plus OKDOC, then redirected to /stocks/movstock/movimentos/view/MjQz.
DT_Select_MovArtigos transfer verificationLoads the saved transfer in the movements list.Row 243 showed Tranferencia entre armazens, entrance warehouse [2] Armazem de Monos, exit warehouse [1] Armazem de Entradas, and status Open.
dt_list_recalc_stock_articles_lojas transfer verificationConfirms both warehouse sides of the transfer.Warehouse 1 changed from QtdStock: 7 to QtdStock: 6; warehouse 2 changed from QtdStock: 0 to QtdStock: 1.
saveMovimArtigos outgoing variantSaves an outgoing recount movement.Movement 244 used CodSTipoMov=SR, LojaEntrou=2, LojaSaiu=2, and tipobase=S. Response included warning text plus OKDOC, then redirected to /stocks/movstock/movimentos/view/MjQ0.
DT_Select_MovArtigos outgoing verificationLoads the saved outgoing movement in the movements list.Row 244 showed Saida p/ Recontagem, warehouse [2] Armazem de Monos, and status Open.
dt_list_recalc_stock_articles_lojas outgoing verificationConfirms the target warehouse stock reduction.Warehouse 2 changed from QtdStock: 1 to QtdStock: 0.
importar_artigos_movartCSV import action for movement article lines.Hidden import form posts movement id, movement type, entrance/exit warehouses, valuation, base type, and the required CSV file.

Stock Route Map AJAX Calls

Verified read-only. Authenticated route-map run stocks-route-map-20260520T105219Z opened all stock module routes and captured list/query endpoints without submitting save, new, delete, import, print, or final actions.

Action or endpointObserved purposeRoute context
DT_Select_ArtigosIVALoads and filters article master records./stocks/artigos
DT_Select_MovArtigosLoads stock movement documents with number, date, description, movement type, warehouses, and state./stocks/movstock/movimentos
DT_Select_RecontLoads recounting records with warehouse, collaborator, family/sub-family/brand/sector, and open/closed state./stocks/movstock/recontagens
DT_Select_NserieDocLoads historical serial-number rows by document, article, serial number, entity, and date./stocks/lotser/nserie
DT_Select_LotesLoads article lot rows with validity and cost fields./stocks/lotser/lotes
DT_Select with table=cabtabprecosLoads base-price management headers./stocks/gestprecos
DT_list_tabprecoartigosLoads article price-table rows for the price-table wizard./stocks/ferramentas/gesttabprecos
familias&option=dt_familiaLoads family, sub-family, and sub-sub-family support rows./stocks/apoio/familias
DT_MarcasArtigosLoads stock article brands./stocks/apoio/marcas
POST /stocks/apoio/marcasCreates an article-brand support-file row.Verified by stock-brands-crud-20260520T110516Z with multipart form fnewMarca, Designacao=AI Brand 20260520T110516Z, margem_lucro_minima=7, notes, blank image, and blank gfnewmarca.
deleteMarcaArtigosDeletes an article-brand support-file row.Verified with generated codmarca=63; the response returned {"succeeded":true} and the final ListaMarcas search returned No matching records found.
DT_Select with table=unidadesLoads stock units./stocks/apoio/unidades
POST /stocks/apoio/unidadesCreates a unit support-file row.Verified by stock-units-crud-20260520T110034Z with form fnewdireccion, gfnewunidad=, CodUnidade=Z00, and Designacao=AI Unit 20260520T110034Z.
deleteUnidadeDeletes a unit support-file row.Verified with codUnidade=Z00; the final ListaUnidades search returned No matching records found.
/api/v2/stocks/label-templatesLoads stock label-layout templates through the v2 API./stocks/apoio/etiquetas

Evidence: raw/playwright/stocks-route-map-20260520T105219Z.json and workflows/use-stock-route-map.html.

Tickets AJAX Calls

Verified with controlled creation. Ticket list, dashboard, and new-ticket form calls were captured in tickets-readonly-probe-20260519T090828Z. Ticket create/trash cleanup was verified in ticket-create-trash-20260519T131756Z, reply with file attachment in ticket-reply-attachment-20260519T133213Z, ticket note add/edit/delete in ticket-notes-20260519T132254Z, ticket task add/delete in ticket-tasks-20260519T133625Z, ticket task completion in ticket-task-completion-20260519T134310Z, ticket task-to-ticket conversion in ticket-task-to-ticket-20260519T134926Z, ticket spam marking in ticket-spam-20260519T135411Z, ticket joining in ticket-merge-20260519T135959Z, ticket forwarding validation in ticket-forward-20260519T140434Z, resend failure handling in ticket-resend-20260519T141001Z, task type support-file CRUD in ticket-task-types-crud-20260519T141538Z, priority support-file CRUD in ticket-priorities-crud-20260519T142035Z, status support-file CRUD in ticket-status-crud-20260519T142644Z, department support-file CRUD in ticket-departments-crud-20260519T143230Z, topic support-file CRUD in ticket-topics-crud-20260519T143724Z, SLA support-file CRUD in ticket-slas-crud-20260519T144235Z, filters support-file CRUD in ticket-filters-crud-20260519T153928Z, macro replies support-file CRUD in ticket-macro-replies-crud-20260519T152909Z, and detail priority/topic/status/owner updates in ticket-detail-updates-20260519T132757Z.

Action or endpointObserved purposeEvidence detail
tickets&option=loadTicketsTreeLoads ticket folder buttons and department/status tree.Returned Inbox 137, My tickets 15, Unassigned 112, and department/status counters.
ticketsLoads ticket list rows.POST response returned recordsTotal: 137 plus ticket number, department, status, assignee, SLA, priority, attachment count, and last-post metadata.
tickets&option=kanban_refreshLoads dashboard ticket cards by column.Observed with type=unsigned, type=doing, and type=done, filtered by assign_id=1.
tickets&option=MERGE_ticketsJoins selected ticket list rows.Verified with POST body list[]=188&list[]=189. Response returned {"success":true,"message":""}. Ticket 188 survived with both primary and secondary messages; ticket 189 returned the detail-page message The specified file was not found.
tickets&option=SPAM_ticketsMarks selected ticket list rows as spam.Verified with POST body list[]=187 after controlled creation of ticket 187. Response returned {"success":true}. The ticket detail remained accessible and was not automatically marked as trash; the SPAM support-file page still showed no rows for the fake recipient.
tickets&option=forward_ticketForwards the entire ticket to a destination email.Verified request shape with ticket_id=190, email_dst=aiticket-forward@example.invalid, and empty dst_name. Invalid test recipient returned {"success":false,"message":"Invalid Email"}.
tickets&option=forward_postForwards one ticket post/message to a destination email.Verified request shape with post_id=217, ticket_id=190, email_dst=aiticket-forward@example.invalid, and empty dst_name. Invalid test recipient returned {"success":false,"values":{"ticket_id":190}}.
tickets&option=resend_postRetries sending a failed ticket email post.Verified with failed post 219 on ticket 191. Response returned {"success":false,"smtp_sent":0,"smtp_date":"2026-05-19 15:10:23","smtp_error":"SMTP connect() failed.","message":"SMTP connect() failed."}.
DT_Select_tickets_tasks_typesLists Tickets support-file task types.Returned id, designation, active flag, registration/alteration metadata, and charge flag. Used before and after CRUD verification.
tickets&option=create_task_typeCreates a task type support row.Verified with serialized form id=, designation=AI tt 141538, and active=1. Response returned {"success":true,"id":10}.
tickets&option=load_task_typeLoads a task type into the edit modal.Verified with id=10. Response returned task_type with designation, active flag, dates, operator ids, and charge flag.
tickets&option=update_task_typeUpdates a task type support row.Verified with serialized form id=10, designation=AI tt edit 141538, and active=1. Response returned {"success":true,"affected_rows":1}.
tickets&option=delete_task_typeDeletes a task type support row.Verified with id=10. Response returned {"succeeded":true,"message":null,"params":{"affected_rows":1}}; final list no longer contained the edited designation.
DT_Select_tickets_prioritiesLists ticket priority support rows.Returned priority id, icon class, name, and active flag. Used to verify create and post-delete absence.
createUpdateTikPriorityCreates or updates a priority support row.Verified create with serialized form priority_id=, priority_name=AI pr 142035, priority_active=1, priority_style_fontweight=normal, and empty icon/color fields; response returned {"success":true,"id":5}. Verified update with priority_id=5 and priority_name=AI pr edit 142035; response returned {"success":true,"id":"5"}.
loadTikPriorityLoads a priority into the edit modal.Verified with id=5. Response returned name, active flag, style color/background/font weight, icon, icon index, and icon color.
deleteTikPriorityDeletes a priority support row.Verified with id=5. Response returned {"success":true}; final list no longer contained the edited name.
DT_Select_tickets_statusLists ticket status support rows.Returned status id, name, type, selectable flag, closed-can-reopen flag, ask-time flag, and active flag. Used to verify create and post-delete absence.
createUpdateTikStatusCreates or updates a status support row.Verified create with serialized form status_id=, status_name=AI st 142644, status_type=normal, status_active=1, status_can_chosen=1, status_closed_can_reopen=1, and ask_time=1; response returned {"success":true,"id":6}. Verified update with status_id=6 and status_name=AI st edit 142644; response returned {"success":true,"id":"6"}.
loadTikStatusLoads a status into the edit modal.Verified with id=6. Response returned top-level fields id, name, type, active, can_chosen, closed_can_reopen, and ask_time.
deleteTikStatusDeletes a status support row.Verified with id=6. Response returned {"success":true}; final list no longer contained the edited name.
DT_Select_tickets_departmentsLists ticket department support rows.Returned department id, name, email, active flag, and signature field. Used to verify create and post-delete absence.
createUpdateTikDepartamentoCreates or updates a department support row.Verified create with serialized form department_id=, department_name=AI dept 143230, empty email/SLA/tag/signature fields, department_status_reopen=1, and department_active=1; response returned {"success":true,"id":6}. Verified update with department_id=6 and department_name=AI dept edit 143230; response returned {"success":true,"id":"6"}.
deleteTikDepartmentDeletes a department support row.Verified with id=6. Response returned {"success":true}; final list no longer contained the edited name.
DT_Select_tickets_topicsLists ticket topic support rows.Returned topic id, name, active flag, public flag, SLA id/name, registration date, and tag format. Used to verify create and post-delete absence.
createUpdateTikTopicCreates or updates a topic support row.Verified create with serialized form topic_id=, topic_name=AI topic 143724, empty topic_sla_id, topic_tag_format=AI, topic_public=1, and topic_active=1; response returned {"success":true,"id":6}. Verified update with topic_id=6 and topic_name=AI topic edit 143724; response returned {"success":true,"id":"6"}.
loadTikTopicLoads a topic into the edit modal.Verified with id=6. Response returned top-level fields id, name, active, public, sla_id, and tag_format.
deleteTikTopicDeletes a topic support row.Verified with id=6. Response returned {"success":true}; final list no longer contained the edited name.
DT_Select_tickets_slasLists ticket SLA support rows.Returned SLA id, name, active flag, first-response minutes, answer minutes, resolution minutes, and registration/update dates. Used to derive the new id because create returned no id.
createUpdateTikSLACreates or updates an SLA support row.Verified create with serialized form sla_id=, sla_name=AI sla 144235, sla_period_1st_reply=5, sla_period_reply=10, sla_period_resolution=15, and sla_active=1; response returned {"success":true}. Verified update with sla_id=5, edited name, and minute limits 6, 11, and 16; response returned {"success":true}.
loadTikSLALoads an SLA into the edit modal.Verified with id=5. Response returned top-level fields id, name, active, period_1st_reply, period_reply, and period_resolution.
deleteTikSLADeletes an SLA support row.Verified with id=5. Response returned {"success":true}; final list no longer contained the edited name.
DT_Select_tickets_filtersLists ticket filter support rows.Returned filter id, name, execution order, active flag, target, stop-on-match flag, reject-ticket flag, disable-autoresponder flag, and support-file ids for email, status, priority, department, staff, SLA, and topic.
createUpdateTikFilterCreates or updates ticket filter support rows.Verified create with serialized form filter_id=, filter_name=AI filter 153928, filter_execorder=98, filter_target=email, filter_disable_autoresponder=1, and active rule subject contains AI-FILTER-153928; response returned {"success":true,"id":4}. Verified update with filter_id=4, edited name, execution order 99, and edited rule value; response returned {"success":true,"id":"4"}.
deleteTikFilterDeletes ticket filter support rows.Verified delete with id=4 returned {"success":true}; final DT_Select_tickets_filters no longer contained AI filter edit 153928. Validation showed filters require at least one rule and one action.
DT_Select_tickets_autoanswerLists ticket automatic responses.Returned automatic response id, name, collaborator id, collaborator name, and active flag. Used to verify create, update, and post-delete absence.
ticketsautoanswer / save_auto_answerCreates or updates ticket automatic responses.Verified create with serialized form id=-1, name=AI autoanswer 155118, and codempr=1; response returned {"succeeded":true,"message":{"autoanswer":{"modified":true,"id":5}}}. Verified update with id=5, edited name, and collaborator 1; response returned id 5.
ticketsautoanswer / delete_auto_answerDeletes ticket automatic responses.Verified delete with id=5 returned {"succeeded":true,"message":{"autoanswer":true}}; final list no longer contained the edited name.
DT_Select_tickets_macro_repliesLists reusable ticket macro replies.Returned id, name, rich-text body, department/topic scoping, active flag, reply type, and names for scoped department/topic.
createUpdateMacroReplyCreates or updates a ticket macro reply.Verified create with tik_macro_reply_name=AI macro 152909, HTML body, tik_macro_reply_active=1, empty department/topic fields, and tik_macro_reply_type=all; response returned {"success":true,"id":3}. Verified update returned {"success":true,"id":"3"}.
loadTikMacroReplyLoads a macro reply into the edit modal.Verified with id=3 and attachs=1. Response returned nested macro_reply with name, text, department/topic ids, active flag, reply type, and attachment list.
deleteTikMacroReplyDeletes a macro reply support row.Verified with id=3. Response returned {"success":true}; final list no longer contained the edited name.
tickets&option=postNewTicketCreates a ticket from the new-ticket form.Verified with multipart form data: email_id=2, source=other, customer 910, recipient aiticket@example.invalid, department 2, topic 1, status 1, priority 2, owner 1, send_mail=0, and send_autoresponse=0. Response returned {"success":true,"ticket_id":178}.
tickets&option=replyTicketPosts a reply from the ticket detail Reply tab and handles uploaded attachments.Verified with department=2, ticketID=181, HTML reply_content, empty signature, send_email=0, macro_ticket=0, empty status/assigned/priority update objects, empty system_attach, and text file field anexos[]. Response returned {"succeeded":true,"message":{"data":"true"}}; detail reload showed attachment id 192.
tickets&option=create_timeline_resolutionsAdds task rows to a ticket timeline.Verified with serialized form containing ticket_id=182, one tasks[1] row, duration 00:15, designation AI ticket task 20260519T133625Z, date 19/05/2026, time 12:00, assigned user 1, and rich text modal_tasks_body. Response returned {"success":true}; detail reload showed task id 170.
tickets&option=check_taskMarks a ticket timeline task complete from the completion modal.Verified with serialized form containing ticket_id=184, task_id=172, duration=15, time_type=m, empty task_type, and completion date/time 19/05/2026 14:40. Response returned {"success":{"success":true,"id":"172"}} plus task data with checked=1, checked_by_name=Demo, and task_duration=15; reload showed row row_172 as table-success with active value 1 and 15m.
tickets&option=task_newticketConverts a ticket timeline task into a standalone ticket and replaces the task control with a ticket link.Verified with id_task=173 and id_ticket=185. Response returned {"success":true,"ticket_id":186}; parent reload showed row row_173 linking to /tickets/tickets/view/MTg2, and converted ticket 186 opened with subject AI ticket conversion task 20260519T134926Z.
tickets&option=delete_resolution_taskDeletes a task row from the ticket timeline.Verified with id=170. Response returned {"success":true,"affected_rows":1}; final detail reload no longer contained the task marker.
tickets&option=noteTicketAdds a ticket note from the Note tab.Verified with department=2, ticketID=179, and HTML note_content. Response returned {"succeeded":true,"message":{"data":50}}.
tickets&option=load_tik_noteLoads an existing ticket note into the edit modal.Verified with id=50. Response returned note body, ticket id 179, poster Demo, and registration timestamps.
tickets&option=update_tik_noteSaves an edited ticket note body.Verified with serialized form id=50 and edited HTML body. Response returned {"success":true,"affected_rows":1}.
tickets&option=delete_tik_noteDeletes a ticket note.Verified with id=50. Response returned {"success":true,"affected_rows":1}; the next detail reload no longer contained the edited note marker.
tickets&option=UPDATE_ticketUpdates ticket detail fields and supports trash cleanup.Verified field updates on ticket 180: data[prio_id]=3 returned Alta, data[topic_id]=2 returned Manutenção Corretiva, data[status_id]=4 returned Espera, and data[assign_id]=2 returned owner Davidetete Batanete Roberto. Also verified trash action with data[is_trash]=1.
Sel2_SelectLoads ticket form defaults.Observed status Aberto from tik_status and collaborator Demo from empreg.
Sel2_Select_arraysLoads decorated Select2 options.Observed priority Normal with icon metadata from tik_priority.

Settings / Configuration AJAX Calls

Verified read-only. Enterprise Data, Parameters, Documents / Printing, E-Mail Templates, WebHooks, Extra Fields, and Validations calls were captured in settings-readonly-probe-20260519T091902Z. No save/edit/delete/import action was submitted.

Action or endpointObserved purposeEvidence detail
Sel2_Select_ZonasFiscaisLoads fiscal-zone selector values.Observed on Enterprise Data and Parameters while resolving Portuguese tax-zone values such as PT-MA.
Sel2_ContasLoads accounting account selectors.Observed in Parameters for exercise/account lookup fields.
bancos&option=sel2_contasbancLoads bank-account selector values.Observed default bank account value BCP#_#BCP-DO in Parameters.
Sel2_Select_v2Loads newer Select2 selectors.Observed across Parameters and related configuration selectors.
Sel2_artigosLoads article selector values.Observed on configuration screens that reference article-related settings.
dt_list_documentsLoads document type rows for Documents / Printing.Observed on /configuracoes/impressao.
dt_select_estadosLoads document status rows.Observed on the Documents / Printing Status tab.
dt_select_transestadosLoads document status-transition rows.Observed on Documents / Printing status-transition controls.
impressao&option=dt_impressao_obsLoads document print observation/recommendation rows.Observed on Documents / Printing recommendation/observation areas.
dt_webemailtemplatesLoads email template rows.Observed on E-Mail Templates language tabs.
webhooks&option=list_dtLoads webhook definitions.Observed rows included Hook, URL, masked Code key, Order, and Active columns.
DT_Select with table=ArtExtraGroupsLoads extra-field groups.Observed on Extra Fields with Code, Name, and Type columns.

Evidence: raw/playwright/workflows/settings-readonly-probe-20260519T091902Z.json and workflows/use-settings.html.

Aggregate AJAX Action Families From Route Crawl

Verified from 188-route crawl. The crawler captured AJAX/fetch/XHR calls while visiting authenticated routes. OfficeGest uses a mix of the general /ajaxserver endpoint and a smaller number of versioned API paths such as /api/v2/stocks/label-templates.

Action familyObserved countMeaning inferred from endpoint names
Sel2_Select_v2193Select2 dropdown lookup for entities, employees, document series, statuses, and other tables.
Sel2_Select108Older Select2 lookup pattern.
Sel2_Select_arrays92Select2 lookup returning multiple display/value columns or decorated values.
tickets54Ticket tree, ticket loading, ticket kanban refresh, task/resolution/timeline operations.
dt_list_drafts38DataTables draft document listings.
getEntidade25Entity detail lookup by type/id.
edi24Document status/list calls related to EDI/document communication.
DT_List_Documentos24Sales document DataTables listing.
DT_Select17Generic DataTables selector/listing calls.
Sel2_artigos16Article lookup for document lines and stock workflows.
mms15Maintenance-management support calls.
Sel2_Contas12Accounting account selector for exercise A2026.

Raw evidence: raw/playwright/route-crawl/results.json and raw/playwright/route-crawl/module-summary.tsv.