| Status | Meaning |
|---|---|
| Passed | Actual result matches expected result |
| Failed | Actual result does not match expected result |
| Needs Review | Result may be valid but requires business clarification |
| Not Run | SQL check has not been executed yet |
| Field | Value |
|---|---|
| Check ID | CHECK-001 |
| Related Requirement | REQ-001 |
| Related Test Case | TC-001 |
| Priority | Medium |
| Status | Passed |
Verify that active customers exist and can be used for positive test scenarios.
SELECT
customer_id,
first_name,
last_name,
email,
phone,
status
FROM customers
WHERE status = 'ACTIVE';
- Query returns customers with status
ACTIVE.
- Query returns active customers:
CUST-001,CUST-004,CUST-005.
Passed. Active customers are available for positive and regression test scenarios.
| Field | Value |
|---|---|
| Check ID | CHECK-002 |
| Related Requirement | REQ-003 |
| Related Test Case | TC-003 |
| Priority | High |
| Status | Passed |
Verify that active subscriptions are linked to customers and tariff plans.
SELECT
s.subscription_id,
c.customer_id,
c.email,
c.status AS customer_status,
t.tariff_id,
t.tariff_name,
t.monthly_fee,
t.status AS tariff_status,
s.status AS subscription_status
FROM subscriptions s
JOIN customers c
ON s.customer_id = c.customer_id
JOIN tariff_plans t
ON s.tariff_id = t.tariff_id
WHERE s.status = 'ACTIVE';
- Active subscriptions are linked to existing customers.
- Active subscriptions are linked to existing tariff plans.
- Active subscriptions use active tariff plans.
- Query returns active subscriptions:
SUB-001,SUB-004,SUB-005. - All returned subscriptions are linked to existing customers and active tariff plans.
Passed. Active subscription data is consistent.
| Field | Value |
|---|---|
| Check ID | CHECK-003 |
| Related Requirement | REQ-004 |
| Related Test Case | TC-006, TC-007, TC-017 |
| Priority | Critical |
| Status | Failed |
| Related Bug | BUG-001 |
Verify that invoices are not generated for SUSPENDED or CANCELLED subscriptions.
SELECT
i.invoice_id,
i.customer_id,
i.subscription_id,
s.status AS subscription_status,
i.amount,
i.status AS invoice_status,
i.invoice_date
FROM invoices i
JOIN subscriptions s
ON i.subscription_id = s.subscription_id
WHERE s.status IN ('SUSPENDED', 'CANCELLED');
- Query returns
0 rows.
- Query returns:
INV-003linked toSUB-002with statusSUSPENDED;INV-004linked toSUB-003with statusCANCELLED.
Failed. Invoices were created for subscriptions that should not be billable.
This is a defect candidate because requirement REQ-004 says that invoice cannot be generated for SUSPENDED or CANCELLED subscriptions.
| Field | Value |
|---|---|
| Check ID | CHECK-004 |
| Related Requirement | REQ-004 |
| Related Test Case | TC-005, TC-018 |
| Priority | Critical |
| Status | Passed |
Verify that invoice amount matches the monthly fee of the related tariff plan.
SELECT
i.invoice_id,
i.amount AS invoice_amount,
t.monthly_fee AS tariff_monthly_fee,
s.subscription_id,
t.tariff_name
FROM invoices i
JOIN subscriptions s
ON i.subscription_id = s.subscription_id
JOIN tariff_plans t
ON s.tariff_id = t.tariff_id
WHERE i.amount <> t.monthly_fee;
- Query returns
0 rows.
- Query returns
0 rows.
Passed. Invoice amounts match tariff monthly fees.
| Field | Value |
|---|---|
| Check ID | CHECK-005 |
| Related Requirement | REQ-005, REQ-009 |
| Related Test Case | TC-009 |
| Priority | Critical |
| Status | Failed |
| Related Bug | BUG-002 |
Verify that successful payment amount matches invoice amount.
SELECT
p.payment_id,
p.invoice_id,
p.amount AS payment_amount,
i.amount AS invoice_amount,
p.status AS payment_status,
i.status AS invoice_status
FROM payments p
JOIN invoices i
ON p.invoice_id = i.invoice_id
WHERE p.status = 'SUCCESS'
AND p.amount <> i.amount;
- Query returns
0 rows.
- Query returns payment
PAY-003. PAY-003has amount10000.- Related invoice
INV-005has amount12000. - Payment status is
SUCCESS.
Failed. Successful payment with incorrect amount exists in the system.
This is a defect candidate because requirement REQ-005 says that payment amount must match invoice amount.
| Field | Value |
|---|---|
| Check ID | CHECK-006 |
| Related Requirement | REQ-005 |
| Related Test Case | TC-008, TC-015 |
| Priority | Critical |
| Status | Failed |
| Related Bug | BUG-003 |
Verify that invoice status changes to PAID after successful full payment.
SELECT
i.invoice_id,
i.status AS invoice_status,
i.amount AS invoice_amount,
p.payment_id,
p.status AS payment_status,
p.amount AS payment_amount
FROM invoices i
JOIN payments p
ON i.invoice_id = p.invoice_id
WHERE i.status = 'UNPAID'
AND p.status = 'SUCCESS'
AND p.amount = i.amount;
- Query returns
0 rows.
- Query returns invoice
INV-001. - Invoice
INV-001has statusUNPAID. - Payment
PAY-001has statusSUCCESS. - Payment amount equals invoice amount.
Failed. Invoice status was not updated to PAID after successful full payment.
This is a critical billing defect candidate.
| Field | Value |
|---|---|
| Check ID | CHECK-007 |
| Related Requirement | REQ-009 |
| Related Test Case | TC-016 |
| Priority | Critical |
| Status | Passed |
Verify that every paid invoice has at least one successful payment.
SELECT
i.invoice_id,
i.status AS invoice_status,
i.amount AS invoice_amount
FROM invoices i
LEFT JOIN payments p
ON i.invoice_id = p.invoice_id
AND p.status = 'SUCCESS'
WHERE i.status = 'PAID'
AND p.payment_id IS NULL;
- Query returns
0 rows.
- Query returns
0 rows.
Passed. No paid invoice without successful payment was found.
| Field | Value |
|---|---|
| Check ID | CHECK-008 |
| Related Requirement | REQ-005 |
| Related Test Case | TC-010 |
| Priority | High |
| Status | Passed |
Verify that the system does not allow duplicate successful payments for the same invoice.
SELECT
invoice_id,
COUNT(*) AS successful_payment_count
FROM payments
WHERE status = 'SUCCESS'
GROUP BY invoice_id
HAVING COUNT(*) > 1;
- Query returns
0 rows.
- Query returns
0 rows.
Passed. No duplicate successful payments were found.
| Field | Value |
|---|---|
| Check ID | CHECK-009 |
| Related Requirement | REQ-003, REQ-004, REQ-005, REQ-009 |
| Related Test Case | TC-015 |
| Priority | Critical |
| Status | Failed |
| Related Bug | BUG-003 |
Verify full customer billing chain:
- customer;
- subscription;
- tariff plan;
- invoice;
- payment.
SELECT
c.customer_id,
c.email,
c.status AS customer_status,
s.subscription_id,
s.status AS subscription_status,
t.tariff_name,
t.monthly_fee,
i.invoice_id,
i.amount AS invoice_amount,
i.status AS invoice_status,
p.payment_id,
p.amount AS payment_amount,
p.status AS payment_status
FROM customers c
JOIN subscriptions s
ON c.customer_id = s.customer_id
JOIN tariff_plans t
ON s.tariff_id = t.tariff_id
LEFT JOIN invoices i
ON s.subscription_id = i.subscription_id
LEFT JOIN payments p
ON i.invoice_id = p.invoice_id
WHERE c.customer_id = 'CUST-001';
- Customer status is
ACTIVE. - Subscription status is
ACTIVE. - Invoice amount equals tariff monthly fee.
- Payment amount equals invoice amount.
- Payment status is
SUCCESS. - Invoice status is
PAIDafter successful payment.
- Customer status is
ACTIVE. - Subscription status is
ACTIVE. - Payment status is
SUCCESS. - Payment amount equals invoice amount.
- Invoice status remains
UNPAID.
Failed. Full billing flow is broken because invoice status is not updated after successful payment.
| Field | Value |
|---|---|
| Check ID | CHECK-010 |
| Related Requirement | REQ-006 |
| Related Test Case | TC-012 |
| Priority | High |
| Status | Passed |
Verify that additional services are activated only for active subscriptions.
SELECT
cs.customer_service_id,
cs.customer_id,
cs.subscription_id,
s.status AS subscription_status,
cs.service_id,
ads.service_name,
ads.status AS service_status,
cs.status AS customer_service_status
FROM customer_services cs
JOIN subscriptions s
ON cs.subscription_id = s.subscription_id
JOIN additional_services ads
ON cs.service_id = ads.service_id
WHERE s.status <> 'ACTIVE'
AND cs.status = 'ACTIVE';
- Query returns
0 rows.
- Query returns
0 rows.
Passed. No active additional service linked to non-active subscription was found.
| Field | Value |
|---|---|
| Check ID | CHECK-011 |
| Related Requirement | REQ-006 |
| Related Test Case | TC-013 |
| Priority | High |
| Status | Passed |
Verify that archived services cannot be activated.
SELECT
cs.customer_service_id,
cs.customer_id,
cs.subscription_id,
cs.service_id,
ads.service_name,
ads.status AS service_status,
cs.status AS customer_service_status
FROM customer_services cs
JOIN additional_services ads
ON cs.service_id = ads.service_id
WHERE ads.status = 'ARCHIVED'
AND cs.status = 'ACTIVE';
- Query returns
0 rows.
- Query returns
0 rows.
Passed. No active customer service linked to archived service was found.
| Field | Value |
|---|---|
| Check ID | CHECK-012 |
| Related Requirement | REQ-007 |
| Related Test Case | TC-014 |
| Priority | Medium |
| Status | Passed |
Verify support tickets and customer relationship.
SELECT
st.ticket_id,
st.subject,
st.status AS ticket_status,
c.customer_id,
c.email,
c.status AS customer_status
FROM support_tickets st
JOIN customers c
ON st.customer_id = c.customer_id;
- Support tickets are linked to existing customers.
- Query returns existing support tickets linked to valid customers.
Passed. Support ticket data is consistent.
| Field | Value |
|---|---|
| Check ID | CHECK-013 |
| Related Requirement | REQ-003 |
| Related Test Case | Not linked |
| Priority | Low |
| Status | Needs Review |
Identify customers who do not have any subscription.
This may be valid in some systems, but should be reviewed depending on business requirements.
SELECT
c.customer_id,
c.email,
c.status
FROM customers c
LEFT JOIN subscriptions s
ON c.customer_id = s.customer_id
WHERE s.subscription_id IS NULL;
- Depends on business rules.
- If every customer must have a subscription, query should return
0 rows. - If customers may exist without subscriptions, returned rows are acceptable.
- No unexpected issue identified in the current test data set.
Needs Review. Expected behavior should be clarified with BA if this rule becomes relevant.
| Field | Value |
|---|---|
| Check ID | CHECK-014 |
| Related Requirement | REQ-002, REQ-003 |
| Related Test Case | TC-004 |
| Priority | High |
| Status | Passed |
Verify that only active tariff plans can be assigned to customers.
SELECT
s.subscription_id,
s.customer_id,
s.tariff_id,
t.tariff_name,
t.status AS tariff_status,
s.status AS subscription_status
FROM subscriptions s
JOIN tariff_plans t
ON s.tariff_id = t.tariff_id
WHERE t.status = 'ARCHIVED';
- Query returns
0 rows.
- Query returns
0 rows.
Passed. No subscription linked to archived tariff plan was found.
| Field | Value |
|---|---|
| Check ID | CHECK-015 |
| Related Requirement | REQ-008 |
| Related Test Case | TC-018 |
| Priority | Critical |
| Status | Passed |
Verify that already paid invoices remain PAID after billing logic changes.
SELECT
i.invoice_id,
i.customer_id,
i.subscription_id,
i.amount,
i.status,
p.payment_id,
p.status AS payment_status
FROM invoices i
LEFT JOIN payments p
ON i.invoice_id = p.invoice_id
WHERE i.invoice_id = 'INV-002';
- Invoice
INV-002exists. - Invoice status is
PAID. - Successful payment exists.
- Payment remains linked to invoice.
- Invoice
INV-002exists. - Invoice status is
PAID. - Payment
PAY-002exists and has statusSUCCESS.
Passed. Paid invoice remained stable after regression check.
| Check ID | Issue | Related Bug |
|---|---|---|
| CHECK-003 | Invoices exist for suspended and cancelled subscriptions | BUG-001 |
| CHECK-005 | Successful payment amount does not match invoice amount | BUG-002 |
| CHECK-006 | Invoice remains unpaid after successful full payment | BUG-003 |
| CHECK-009 | Full billing flow shows incorrect invoice status after payment | BUG-003 |
| Check ID | Area |
|---|---|
| CHECK-001 | Active customers |
| CHECK-002 | Active subscriptions |
| CHECK-004 | Invoice amount vs tariff fee |
| CHECK-007 | Paid invoice has successful payment |
| CHECK-008 | No duplicate successful payments |
| CHECK-010 | Additional services for active subscriptions |
| CHECK-011 | Archived services are not active |
| CHECK-012 | Support tickets linked to customers |
| CHECK-014 | No archived tariff assigned |
| CHECK-015 | Paid invoice regression stability |
SQL validation found three main defect candidates:
- Invoices are generated for non-active subscriptions.
- Successful payment with incorrect amount exists in the system.
- Invoice status is not updated to
PAIDafter successful full payment.
These issues should be documented as Jira-style bug reports in:
07_Bug_Reports.md
The SQL checks also confirmed that several areas work correctly:
- active customer data;
- active subscription relationships;
- invoice amount and tariff fee consistency;
- paid invoice payment relationship;
- additional service activation rules;
- support ticket relationships.
- SQL checks marked as
Failedshould be linked to bug reports. - SQL checks marked as
Needs Reviewshould be clarified with BA. - SQL results can be used as evidence in Jira-style defect reports.
- These checks can be reused during regression testing.