-- =============================================================================
-- Migración 001 — Plan de Cuentas Tributario, Configuración de Cuentas
--                 y Asociación con Balance
-- =============================================================================
-- Descripción:
--   Implementa las tablas y procedimientos necesarios para:
--     1. Importar y persistir el plan de cuentas tributario desde iContador.
--     2. Almacenar la configuración tributaria por cuenta (Base Imponible y CPT).
--     3. Definir los conceptos de Base Imponible para régimen SI y PPG (seed data).
--     4. Asociar las cuentas del balance importado con el plan de cuentas
--        tributario mediante FK explícita en REP_BALANCE_CUENTAS.
--
-- Objetos nuevos:
--   Tablas  : PLAN_CUENTA_TRIBUTARIO, CONF_CUENTA_TRIBUTARIO, CONF_CONCEPTO_BI
--   SPs     : sp_obt_plan_cuentas_tributario, sp_new_plan_cuenta_tributario,
--             sp_bor_plan_cuentas_tributario, sp_obt_conf_cuentas_tributario,
--             sp_act_conf_cuenta_tributario, sp_obt_conceptos_bi
--
-- Objetos modificados:
--   Tabla   : REP_BALANCE_CUENTAS — nueva columna ID_PCCUENTA + FK
--   SP      : sp_new_balance_cuentas — nuevo parámetro p_id_pccuenta (nullable)
--   SP      : sp_obt_plan_cuentas_tributario — incluye columna ID en SELECT
--
-- Idempotencia:
--   Seguro para ejecutar más de una vez. Usa IF NOT EXISTS, CREATE OR REPLACE
--   y ON CONFLICT DO NOTHING donde aplica.
-- =============================================================================

BEGIN;

-- ---------------------------------------------------------------------------
-- 1. SECUENCIAS
-- ---------------------------------------------------------------------------

CREATE SEQUENCE IF NOT EXISTS public."PLAN_CUENTA_TRIBUTARIO_ID_seq"
    AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;

CREATE SEQUENCE IF NOT EXISTS public."CONF_CUENTA_TRIBUTARIO_ID_seq"
    AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;

CREATE SEQUENCE IF NOT EXISTS public."CONF_CONCEPTO_BI_ID_seq"
    AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;


-- ---------------------------------------------------------------------------
-- 2. TABLA: PLAN_CUENTA_TRIBUTARIO
--    Almacena el plan de cuentas con clasificación tributaria importado desde
--    iContador. Una fila por (empresa, origen, cuenta de iContador).
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS public."PLAN_CUENTA_TRIBUTARIO" (
    "ID"                integer      NOT NULL DEFAULT nextval('"PLAN_CUENTA_TRIBUTARIO_ID_seq"'::regclass),
    "ID_EMPRESA"        integer      NOT NULL,
    "DB"                varchar(20)  NOT NULL,
    "ID_PCCUENTA"       integer      NOT NULL,
    "CODIGO_CUENTA"     varchar(30),
    "CUENTA_NOMBRE"     varchar(200),
    "TIPO_NOMBRE"       varchar(50),
    "VALOR_INTO"        char(1),
    "AJUSTE_TRIBUTARIO" char(1),
    "PASIVO_EXIGIBLE"   char(1),
    "DISMINUCION_RLI"   char(1),
    "AUMENTO_RLI"       char(1),
    "GENERAL"           jsonb        NOT NULL DEFAULT '{}'::jsonb,
    "UPDATED_AT"        timestamp    NOT NULL DEFAULT now(),
    CONSTRAINT "PLAN_CUENTA_TRIBUTARIO_pkey" PRIMARY KEY ("ID"),
    CONSTRAINT "uq_plan_cuenta" UNIQUE ("ID_EMPRESA", "DB", "ID_PCCUENTA")
);

ALTER SEQUENCE public."PLAN_CUENTA_TRIBUTARIO_ID_seq"
    OWNED BY public."PLAN_CUENTA_TRIBUTARIO"."ID";

ALTER TABLE public."PLAN_CUENTA_TRIBUTARIO" OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 3. TABLA: CONF_CUENTA_TRIBUTARIO
--    Configuración tributaria por cuenta: qué concepto de BI usa cada cuenta
--    en régimen SI y PPG, y qué categoría CPT le corresponde.
--    Una fila por (empresa, origen, código de cuenta).
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS public."CONF_CUENTA_TRIBUTARIO" (
    "ID"            integer      NOT NULL DEFAULT nextval('"CONF_CUENTA_TRIBUTARIO_ID_seq"'::regclass),
    "ID_EMPRESA"    integer      NOT NULL,
    "DB"            varchar(20)  NOT NULL,
    "CODIGO"        varchar(20)  NOT NULL,
    "NOMBRE_CUENTA" varchar(200),
    "CONFIGURACION" jsonb        NOT NULL DEFAULT '{}'::jsonb,
    "UPDATED_AT"    timestamp    NOT NULL DEFAULT now(),
    CONSTRAINT "CONF_CUENTA_TRIBUTARIO_pkey" PRIMARY KEY ("ID"),
    CONSTRAINT "uq_conf_cuenta" UNIQUE ("ID_EMPRESA", "DB", "CODIGO")
);

ALTER SEQUENCE public."CONF_CUENTA_TRIBUTARIO_ID_seq"
    OWNED BY public."CONF_CUENTA_TRIBUTARIO"."ID";

ALTER TABLE public."CONF_CUENTA_TRIBUTARIO" OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 4. TABLA: CONF_CONCEPTO_BI
--    Catálogo de conceptos de Base Imponible para régimen SI y PPG.
--    Datos fijos definidos por normativa SII (rellenados en sección 8).
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS public."CONF_CONCEPTO_BI" (
    "ID"          integer     NOT NULL DEFAULT nextval('"CONF_CONCEPTO_BI_ID_seq"'::regclass),
    "REGIMEN"     varchar(10) NOT NULL,
    "CODIGO"      varchar(20) NOT NULL,
    "DESCRIPCION" varchar(300) NOT NULL,
    "OPERACION"   char(1)     NOT NULL DEFAULT '+',
    CONSTRAINT "CONF_CONCEPTO_BI_pkey" PRIMARY KEY ("ID")
);

ALTER SEQUENCE public."CONF_CONCEPTO_BI_ID_seq"
    OWNED BY public."CONF_CONCEPTO_BI"."ID";

ALTER TABLE public."CONF_CONCEPTO_BI" OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 5. MODIFICACIÓN: REP_BALANCE_CUENTAS
--    Agrega columna ID_PCCUENTA como FK a PLAN_CUENTA_TRIBUTARIO(ID).
--    Permite cruzar datos del balance de 8 columnas con la clasificación
--    tributaria del plan importado.
-- ---------------------------------------------------------------------------

ALTER TABLE public."REP_BALANCE_CUENTAS"
    ADD COLUMN IF NOT EXISTS "ID_PCCUENTA" integer;

ALTER TABLE public."REP_BALANCE_CUENTAS"
    DROP CONSTRAINT IF EXISTS fk_rbc_plan_cuenta;

ALTER TABLE public."REP_BALANCE_CUENTAS"
    ADD CONSTRAINT fk_rbc_plan_cuenta
    FOREIGN KEY ("ID_PCCUENTA")
    REFERENCES public."PLAN_CUENTA_TRIBUTARIO"("ID")
    ON DELETE SET NULL;


-- ---------------------------------------------------------------------------
-- 6. SP: sp_obt_plan_cuentas_tributario
--    Lee el plan de cuentas importado para una empresa y origen.
--    Incluye columna ID (PK de PostgreSQL) para resolución de FK al guardar
--    balance: ID_PCCUENTA de iContador → ID local.
-- ---------------------------------------------------------------------------

DROP PROCEDURE IF EXISTS public.sp_obt_plan_cuentas_tributario(integer, character varying, refcursor);

CREATE PROCEDURE public.sp_obt_plan_cuentas_tributario(
    IN  p_id_empresa integer,
    IN  p_origen     character varying,
    INOUT cursor_plan refcursor DEFAULT 'cursor_plan'::refcursor
)
LANGUAGE plpgsql
AS $body$
BEGIN
    OPEN cursor_plan FOR
        SELECT
            "ID",
            "ID_PCCUENTA",
            "CODIGO_CUENTA",
            "CUENTA_NOMBRE",
            "TIPO_NOMBRE",
            "VALOR_INTO",
            "AJUSTE_TRIBUTARIO",
            "PASIVO_EXIGIBLE",
            "DISMINUCION_RLI",
            "AUMENTO_RLI",
            "GENERAL"
        FROM "PLAN_CUENTA_TRIBUTARIO"
        WHERE "ID_EMPRESA" = p_id_empresa
          AND "DB"         = p_origen
        ORDER BY "CODIGO_CUENTA";
END;
$body$;

ALTER PROCEDURE public.sp_obt_plan_cuentas_tributario(integer, character varying, refcursor)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 7. SP: sp_new_plan_cuenta_tributario
--    Inserta o actualiza una cuenta en el plan de cuentas tributario.
--    Usa UPSERT por (ID_EMPRESA, DB, ID_PCCUENTA).
-- ---------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE public.sp_new_plan_cuenta_tributario(
    IN p_id_empresa         integer,
    IN p_origen             character varying,
    IN p_id_pccuenta        integer,
    IN p_codigo_cuenta      character varying,
    IN p_cuenta_nombre      character varying,
    IN p_tipo_nombre        character varying,
    IN p_valor_into         character varying,
    IN p_ajuste_tributario  character varying,
    IN p_pasivo_exigible    character varying,
    IN p_disminucion_rli    character varying,
    IN p_aumento_rli        character varying,
    IN p_general            text
)
LANGUAGE plpgsql
AS $body$
BEGIN
    INSERT INTO "PLAN_CUENTA_TRIBUTARIO" (
        "ID_EMPRESA", "DB", "ID_PCCUENTA",
        "CODIGO_CUENTA", "CUENTA_NOMBRE", "TIPO_NOMBRE",
        "VALOR_INTO", "AJUSTE_TRIBUTARIO", "PASIVO_EXIGIBLE",
        "DISMINUCION_RLI", "AUMENTO_RLI",
        "GENERAL", "UPDATED_AT"
    ) VALUES (
        p_id_empresa, p_origen, p_id_pccuenta,
        p_codigo_cuenta, p_cuenta_nombre, p_tipo_nombre,
        NULLIF(p_valor_into, ''), NULLIF(p_ajuste_tributario, ''), NULLIF(p_pasivo_exigible, ''),
        NULLIF(p_disminucion_rli, ''), NULLIF(p_aumento_rli, ''),
        COALESCE(NULLIF(p_general, ''), '{}')::jsonb, NOW()
    )
    ON CONFLICT ("ID_EMPRESA", "DB", "ID_PCCUENTA")
    DO UPDATE SET
        "CODIGO_CUENTA"     = EXCLUDED."CODIGO_CUENTA",
        "CUENTA_NOMBRE"     = EXCLUDED."CUENTA_NOMBRE",
        "TIPO_NOMBRE"       = EXCLUDED."TIPO_NOMBRE",
        "VALOR_INTO"        = EXCLUDED."VALOR_INTO",
        "AJUSTE_TRIBUTARIO" = EXCLUDED."AJUSTE_TRIBUTARIO",
        "PASIVO_EXIGIBLE"   = EXCLUDED."PASIVO_EXIGIBLE",
        "DISMINUCION_RLI"   = EXCLUDED."DISMINUCION_RLI",
        "AUMENTO_RLI"       = EXCLUDED."AUMENTO_RLI",
        "GENERAL"           = EXCLUDED."GENERAL",
        "UPDATED_AT"        = NOW();
END;
$body$;

ALTER PROCEDURE public.sp_new_plan_cuenta_tributario(
    integer, character varying, integer, character varying, character varying,
    character varying, character varying, character varying, character varying,
    character varying, character varying, text)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 8. SP: sp_bor_plan_cuentas_tributario
--    Elimina todas las cuentas del plan para una empresa y origen.
--    Usado como paso previo a la re-importación (patrón borrar → insertar).
-- ---------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE public.sp_bor_plan_cuentas_tributario(
    IN p_id_empresa integer,
    IN p_origen     character varying
)
LANGUAGE plpgsql
AS $body$
BEGIN
    DELETE FROM "PLAN_CUENTA_TRIBUTARIO"
    WHERE "ID_EMPRESA" = p_id_empresa
      AND "DB"         = p_origen;
END;
$body$;

ALTER PROCEDURE public.sp_bor_plan_cuentas_tributario(integer, character varying)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 9. SP: sp_obt_conf_cuentas_tributario
--    Retorna todas las cuentas del plan importado con su configuración tributaria actual.
--    Construye el listado desde PLAN_CUENTA_TRIBUTARIO (plan completo importado desde
--    iContador) y hace LEFT JOIN con CONF_CUENTA_TRIBUTARIO.
--    Incluye todas las cuentas, tengan o no movimientos en balance.
-- ---------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE public.sp_obt_conf_cuentas_tributario(
    IN p_id_empresa  integer,
    IN p_origen      character varying,
    IN cursor_cuentas refcursor
)
LANGUAGE plpgsql
AS $body$
BEGIN
    OPEN cursor_cuentas FOR
        SELECT
            pct."CODIGO_CUENTA"                              AS "CODIGO",
            pct."CUENTA_NOMBRE"                              AS "NOMBRE_CUENTA",
            COALESCE(cct."CONFIGURACION", '{}'::jsonb)       AS "CONFIGURACION"
        FROM "PLAN_CUENTA_TRIBUTARIO" pct
        LEFT JOIN "CONF_CUENTA_TRIBUTARIO" cct
            ON  cct."CODIGO"     = pct."CODIGO_CUENTA"
            AND cct."ID_EMPRESA" = p_id_empresa
            AND cct."DB"         = p_origen
        WHERE pct."ID_EMPRESA" = p_id_empresa
          AND pct."DB"         = p_origen
        ORDER BY pct."CODIGO_CUENTA";
END;
$body$;

ALTER PROCEDURE public.sp_obt_conf_cuentas_tributario(integer, character varying, refcursor)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 10. SP: sp_act_conf_cuenta_tributario
--     Inserta o actualiza la configuración tributaria de una cuenta.
--     La configuración es un JSONB con estructura multi-régimen:
--       { "REGIMEN_SI": { "BASE_IMPONIBLE": {...}, "CPT": {...} },
--         "REGIMEN_PPG": { "BASE_IMPONIBLE": {...}, "CPT": {...} } }
-- ---------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE public.sp_act_conf_cuenta_tributario(
    IN p_id_empresa    integer,
    IN p_origen        character varying,
    IN p_codigo        character varying,
    IN p_nombre_cuenta character varying,
    IN p_configuracion text
)
LANGUAGE plpgsql
AS $body$
DECLARE
    v_incoming jsonb := p_configuracion::jsonb;
BEGIN
    -- En UPDATE: merge a nivel REGIMEN usando JSONB ||.
    -- Solo los nodos presentes en v_incoming sobreescriben los existentes;
    -- los ausentes se preservan del valor actual (ej.: pasar solo BASE_IMPONIBLE
    -- no toca CPT, y viceversa).
    INSERT INTO "CONF_CUENTA_TRIBUTARIO"
        ("ID_EMPRESA", "DB", "CODIGO", "NOMBRE_CUENTA", "CONFIGURACION", "UPDATED_AT")
    VALUES
        (p_id_empresa, p_origen, p_codigo, p_nombre_cuenta, v_incoming, NOW())
    ON CONFLICT ("ID_EMPRESA", "DB", "CODIGO")
    DO UPDATE SET
        "NOMBRE_CUENTA" = EXCLUDED."NOMBRE_CUENTA",
        "CONFIGURACION" = jsonb_build_object(
            'REGIMEN_SI',  COALESCE("CONF_CUENTA_TRIBUTARIO"."CONFIGURACION" -> 'REGIMEN_SI',  '{}') || COALESCE(EXCLUDED."CONFIGURACION" -> 'REGIMEN_SI',  '{}'),
            'REGIMEN_PPG', COALESCE("CONF_CUENTA_TRIBUTARIO"."CONFIGURACION" -> 'REGIMEN_PPG', '{}') || COALESCE(EXCLUDED."CONFIGURACION" -> 'REGIMEN_PPG', '{}')
        ),
        "UPDATED_AT"    = NOW();
END;
$body$;

ALTER PROCEDURE public.sp_act_conf_cuenta_tributario(
    integer, character varying, character varying, character varying, text)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 11. SP: sp_obt_conceptos_bi
--     Retorna los conceptos de Base Imponible para un régimen ('SI' o 'PPG').
-- ---------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE public.sp_obt_conceptos_bi(
    IN p_regimen       character varying,
    IN cursor_conceptos refcursor
)
LANGUAGE plpgsql
AS $body$
BEGIN
    OPEN cursor_conceptos FOR
        SELECT "ID", "CODIGO", "DESCRIPCION", "OPERACION"
        FROM "CONF_CONCEPTO_BI"
        WHERE "REGIMEN" = p_regimen
        ORDER BY "ID";
END;
$body$;

ALTER PROCEDURE public.sp_obt_conceptos_bi(character varying, refcursor)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 12. SP: sp_new_balance_cuentas (reemplazo)
--     Versión actualizada que recibe p_id_pccuenta (nullable) para guardar
--     la FK al PLAN_CUENTA_TRIBUTARIO al momento de importar el balance.
--     Requiere DROP de la versión anterior porque cambia la firma.
-- ---------------------------------------------------------------------------

-- Elimina la versión original sin p_id_pccuenta (si aún existe)
DROP PROCEDURE IF EXISTS public.sp_new_balance_cuentas(
    integer, integer, integer,
    character varying, character varying, character varying,
    numeric, numeric, numeric, numeric, numeric, numeric, numeric, numeric
);

CREATE OR REPLACE PROCEDURE public.sp_new_balance_cuentas(
    IN p_id_balance      integer,
    IN p_id_cuenta       integer,
    IN p_id_tipo_cuenta  integer,
    IN p_codigo          character varying,
    IN p_nombre_cuenta   character varying,
    IN p_nombre_tipo_cuenta character varying,
    IN p_debitos         numeric,
    IN p_creditos        numeric,
    IN p_deudor          numeric,
    IN p_acreedor        numeric,
    IN p_activo          numeric,
    IN p_pasivo          numeric,
    IN p_perdida         numeric,
    IN p_ganancia        numeric,
    IN p_id_pccuenta     integer DEFAULT NULL
)
LANGUAGE plpgsql
AS $body$
BEGIN
    INSERT INTO "REP_BALANCE_CUENTAS"
    ("ID_BALANCE", "ID_CUENTA", "ID_TIPO_CUENTA", "CODIGO", "NOMBRE_CUENTA",
     "TIPO_CUENTA", "DEBITOS", "CREDITOS", "DEUDOR", "ACREEDOR",
     "ACTIVO", "PASIVO", "PERDIDA", "GANANCIA", "ID_PCCUENTA")
    VALUES (p_id_balance, p_id_cuenta, p_id_tipo_cuenta, p_codigo,
            p_nombre_cuenta, p_nombre_tipo_cuenta,
            p_debitos, p_creditos, p_deudor, p_acreedor,
            p_activo, p_pasivo, p_perdida, p_ganancia, p_id_pccuenta);
END;
$body$;

ALTER PROCEDURE public.sp_new_balance_cuentas(
    integer, integer, integer,
    character varying, character varying, character varying,
    numeric, numeric, numeric, numeric, numeric, numeric, numeric, numeric, integer)
    OWNER TO my_postgres;


-- ---------------------------------------------------------------------------
-- 13. SEED DATA: CONF_CONCEPTO_BI
--     Conceptos de Base Imponible definidos por normativa SII.
--     Régimen SI  (Sistema Semi-Integrado) — Recuadro 12 del F22.
--     Régimen PPG (Pymes Propyme General)  — Recuadro 17 del F22.
--     ON CONFLICT DO NOTHING para que sea idempotente.
-- ---------------------------------------------------------------------------

INSERT INTO public."CONF_CONCEPTO_BI" ("REGIMEN", "CODIGO", "DESCRIPCION", "OPERACION") VALUES
-- Régimen SI
('SI',  '1657', 'Ingresos del giro',                          '+'),
('SI',  '1658', 'Rentas de fuente extranjera',                '+'),
('SI',  '1659', 'Rescate o enajenación de fondos mutuos',     '+'),
('SI',  '1660', 'Otros ingresos',                             '+'),
('SI',  '1661', 'Costo directo',                              '-'),
('SI',  '1662', 'Remuneraciones del ejercicio',               '-'),
('SI',  '1663', 'Depreciación financiera',                    '-'),
('SI',  '1664', 'Intereses financieros',                      '-'),
('SI',  '1665', 'Donaciones del ejercicio',                   '-'),
('SI',  '1666', 'Provisiones del ejercicio',                  '-'),
('SI',  '1668', 'Diferencias de cambio netas',                '-'),
('SI',  '1669', 'Arriendos de bienes raíces',                 '-'),
('SI',  '1670', 'Impuesto a la renta y diferido',             '-'),
('SI',  '1672', 'Otros gastos del ejercicio',                 '-'),
('SI',  '1675', 'Depreciación financiera (reversal ajuste)',  '+'),
('SI',  '1676', 'Provisiones no aceptadas tributariamente',   '+'),
('SI',  '1677', 'Donaciones no aceptadas tributariamente',    '+'),
('SI',  '1678', 'Gastos rechazados tributariamente',          '+'),
('SI',  '1679', 'Depreciación tributaria',                    '-'),
('SI',  '1680', 'Gastos diferidos tributariamente',           '-'),
('SI',  '1683', 'Crédito por gastos de capacitación',        '-'),
('SI',  '1684', 'Donaciones aceptadas tributariamente',       '-'),
('SI',  '1685', 'Rentas exentas e ingresos no renta',         '-'),
('SI',  '1686', 'Dividendos y retiros percibidos',            '-'),
('SI',  '1687', 'Donaciones al amparo de leyes especiales',   '-'),
('SI',  '1688', 'Otros gastos deducidos tributariamente',     '-'),
('SI',  '1689', 'Pérdidas tributarias de ejercicios anteriores', '-'),
-- Régimen PPG — fuente autoritativa: M_TRIBUTARIO_BASE_IMPONIBLE_PPG de iContador
('PPG', '1400', 'Ingresos percibidos',                        '+'),
('PPG', '1401', 'Rentas de fuente extranjera percibidas',     '+'),
('PPG', '1402', 'Intereses percibidos',                       '+'),
('PPG', '1403', 'Mayor valor percibido por rescate o enajenación de inversiones o bienes no depreciables', '+'),
('PPG', '1587', 'Ingresos percibidos o devengados por operaciones con empresas relacionadas del art. 14 letra A) LIR', '+'),
('PPG', '1588', 'Otros ingresos percibidos o devengados',     '+'),
('PPG', '1404', 'Ingreso diferido imputado en el ejercicio, debidamente incrementado y reajustado cuando corresponda', '+'),
('PPG', '1406', 'Gasto por saldo inicial de existencias o insumos del negocio en cambio de régimen, pagados', '-'),
('PPG', '1407', 'Gasto por saldo inicial de activos fijos depreciables en cambio de régimen, pagados', '-'),
('PPG', '1408', 'Gasto por pérdida tributaria en cambio de régimen', '-'),
('PPG', '1409', 'Existencias o insumos del negocio, pagados', '-'),
('PPG', '1411', 'Remuneraciones pagadas',                     '-'),
('PPG', '1412', 'Honorarios pagados',                         '-'),
('PPG', '1413', 'Adquisición de bienes del activo fijo, pagados', '-'),
('PPG', '1414', 'Servicios pagados',                          '-'),
('PPG', '1415', 'Arriendos pagados',                          '-'),
('PPG', '1416', 'Gastos por responsabilidad social, pagados', '-'),
('PPG', '1417', 'Gastos por inversión en investigación y desarrollo no certificados por CORFO', '-'),
('PPG', '1418', 'Gastos por inversión en investigación y desarrollo certificados por CORFO', '-'),
('PPG', '1419', 'Intereses y reajustes pagados por préstamos y otros', '-'),
('PPG', '1420', 'Amortización de intangibles, art. 22° transitorio bis, inc. 4°, 5° y 6° Ley N° 21.210', '-'),
('PPG', '1421', 'Partidas del art. 21 inciso 1° y 3° LIR pagados', '-'),
('PPG', '1422', 'Partidas del art. 21 inc. 1° no afectados con IU 40% y del inc. 2° LIR pagados', '-'),
('PPG', '1423', 'Pérdida en rescate o enajenación de inversiones o bienes no depreciables', '-'),
('PPG', '1424', 'Otros gastos deducibles de los ingresos',    '-'),
('PPG', '1425', 'Gastos que se deben agregar a la RLI según el art. 33 N° 1 LIR', '-'),
('PPG', '1426', 'Pérdidas tributarias de ejercicios anteriores', '-'),
('PPG', '1427', 'Créditos incobrables castigados en el ejercicio (reconocidos sobre ingresos devengados)', '-'),
('PPG', '1428', 'Gastos aceptados por donaciones',            '-'),
('PPG', '1429', 'Gastos de rentas de fuente extranjera, pagados', '-'),
('PPG', '1434', 'Dividendos o retiros percibidos afectos a IGC, que absorben la pérdida tributaria', '+'),
('PPG', '1435', 'Incremento por IDPC de los dividendos o retiros percibidos afectos a IGC, que absorben la pérdida tributaria', '-')
ON CONFLICT DO NOTHING;

COMMIT;
